From 324d30219a9f2900e063ac17e6bfe3c3acb8d1a2 Mon Sep 17 00:00:00 2001
From: Adam Setch
Date: Sat, 12 Oct 2024 17:03:23 -0400
Subject: [PATCH 01/48] refactor: adopt primer ui components
Signed-off-by: Adam Setch
---
package.json | 1 +
pnpm-lock.yaml | 1031 ++++++++++++++++-
src/renderer/App.tsx | 108 +-
.../components/AccountNotifications.tsx | 19 +-
src/renderer/components/NotificationRow.tsx | 5 +-
.../components/RepositoryNotifications.tsx | 13 +-
.../components/icons/AuthMethodIcon.test.tsx | 32 -
.../components/icons/AuthMethodIcon.tsx | 19 -
.../components/icons/AvatarIcon.test.tsx | 72 --
src/renderer/components/icons/AvatarIcon.tsx | 38 -
.../components/icons/PlatformIcon.test.tsx | 23 -
.../components/icons/PlatformIcon.tsx | 20 -
.../AuthMethodIcon.test.tsx.snap | 304 -----
.../__snapshots__/AvatarIcon.test.tsx.snap | 493 --------
.../__snapshots__/PlatformIcon.test.tsx.snap | 203 ----
.../notification/NotificationFooter.tsx | 12 +-
.../notification/NotificationHeader.tsx | 10 +-
.../components/settings/SettingsFooter.tsx | 39 +-
src/renderer/routes/Accounts.tsx | 188 +--
src/renderer/utils/icons.ts | 28 +
20 files changed, 1219 insertions(+), 1439 deletions(-)
delete mode 100644 src/renderer/components/icons/AuthMethodIcon.test.tsx
delete mode 100644 src/renderer/components/icons/AuthMethodIcon.tsx
delete mode 100644 src/renderer/components/icons/AvatarIcon.test.tsx
delete mode 100644 src/renderer/components/icons/AvatarIcon.tsx
delete mode 100644 src/renderer/components/icons/PlatformIcon.test.tsx
delete mode 100644 src/renderer/components/icons/PlatformIcon.tsx
delete mode 100644 src/renderer/components/icons/__snapshots__/AuthMethodIcon.test.tsx.snap
delete mode 100644 src/renderer/components/icons/__snapshots__/AvatarIcon.test.tsx.snap
delete mode 100644 src/renderer/components/icons/__snapshots__/PlatformIcon.test.tsx.snap
diff --git a/package.json b/package.json
index 5f88da9a8..d744aa809 100644
--- a/package.json
+++ b/package.json
@@ -140,6 +140,7 @@
"@discordapp/twemoji": "15.1.0",
"@electron/notarize": "2.5.0",
"@primer/octicons-react": "19.11.0",
+ "@primer/react": "36.27.0",
"@testing-library/react": "16.0.1",
"@types/jest": "29.5.13",
"@types/node": "20.16.11",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ac5916f3b..6aaad7a39 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -45,6 +45,9 @@ importers:
'@primer/octicons-react':
specifier: 19.11.0
version: 19.11.0(react@18.3.1)
+ '@primer/react':
+ specifier: 36.27.0
+ version: 36.27.0(@types/react-dom@18.2.22)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.2.0)(react@18.3.1))
'@testing-library/react':
specifier: 16.0.1
version: 16.0.1(@testing-library/dom@10.0.0)(@types/react-dom@18.2.22)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -195,6 +198,10 @@ packages:
resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-annotate-as-pure@7.25.7':
+ resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-compilation-targets@7.23.6':
resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==}
engines: {node: '>=6.9.0'}
@@ -237,10 +244,18 @@ packages:
resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-string-parser@7.25.7':
+ resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-validator-identifier@7.22.20':
resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-validator-identifier@7.25.7':
+ resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-validator-option@7.23.5':
resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
engines: {node: '>=6.9.0'}
@@ -347,6 +362,10 @@ packages:
resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==}
engines: {node: '>=6.9.0'}
+ '@babel/types@7.25.8':
+ resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==}
+ engines: {node: '>=6.9.0'}
+
'@bcoe/v8-coverage@0.2.3':
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
@@ -463,9 +482,36 @@ packages:
resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==}
engines: {node: '>=16.4'}
+ '@emotion/is-prop-valid@1.3.1':
+ resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==}
+
+ '@emotion/memoize@0.9.0':
+ resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==}
+
+ '@emotion/stylis@0.8.5':
+ resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==}
+
+ '@emotion/unitless@0.7.5':
+ resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==}
+
'@gar/promisify@1.1.3':
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
+ '@github/combobox-nav@2.3.1':
+ resolution: {integrity: sha512-gwxPzLw8XKecy1nP63i9lOBritS3bWmxl02UX6G0TwMQZbMem1BCS1tEZgYd3mkrkiDrUMWaX+DbFCuDFo3K+A==}
+
+ '@github/markdown-toolbar-element@2.2.3':
+ resolution: {integrity: sha512-AlquKGee+IWiAMYVB0xyHFZRMnu4n3X4HTvJHu79GiVJ1ojTukCWyxMlF5NMsecoLcBKsuBhx3QPv2vkE/zQ0A==}
+
+ '@github/paste-markdown@1.5.3':
+ resolution: {integrity: sha512-PzZ1b3PaqBzYqbT4fwKEhiORf38h2OcGp2+JdXNNM7inZ7egaSmfmhyNkQILpqWfS0AYtRS3CDq6z03eZ8yOMQ==}
+
+ '@github/relative-time-element@4.4.3':
+ resolution: {integrity: sha512-EVKokqx9/DdUAZ2l9WVyY51EtRCO2gQWWMvsRIn7r4glJ91q9CXcnILVHZVCpfD52ucXUhUvtYsAjNJ4qP4uIg==}
+
+ '@github/tab-container-element@4.8.2':
+ resolution: {integrity: sha512-WkaM4mfs8x7dXRWEaDb5deC0OhH6sGQ5cw8i/sVw25gikl4f8C7mHj0kihL5k3eKIIqmGT1Fdswdoi+9ZLDpRA==}
+
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -568,6 +614,12 @@ packages:
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+ '@lit-labs/react@1.2.1':
+ resolution: {integrity: sha512-DiZdJYFU0tBbdQkfwwRSwYyI/mcWkg3sWesKRsHUd4G+NekTmmeq9fzsurvcKTNVa0comNljwtg4Hvi1ds3V+A==}
+
+ '@lit-labs/ssr-dom-shim@1.2.1':
+ resolution: {integrity: sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==}
+
'@malept/cross-spawn-promise@1.1.1':
resolution: {integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==}
engines: {node: '>= 10'}
@@ -601,16 +653,46 @@ packages:
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
deprecated: This functionality has been moved to @npmcli/fs
+ '@oddbird/popover-polyfill@0.3.8':
+ resolution: {integrity: sha512-+aK7EHL3VggfsWGVqUwvtli2+kP5OWyseAsrefhzR2XWoi2oALUCeoDn63i5WS3ZOmLiXHRNBwHPeta8w+aM1g==}
+
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
+ '@primer/behaviors@1.7.2':
+ resolution: {integrity: sha512-I5dGgtzV9n1ZX3J1KHkLVWjvEbzanstaXFTDr/+tdn4E2GAA/NUHfTLMq6i5+Pt4P/p/paLI50EgExElENzCYQ==}
+
+ '@primer/live-region-element@0.7.1':
+ resolution: {integrity: sha512-9uQCeBCb3wefz3kJNSo+PECc7T7TNB3k22JUdHY08Zlv9bd1rtsQgpazM5umcbZQrACzGbgufAfdbhGUBXI3jA==}
+
'@primer/octicons-react@19.11.0':
resolution: {integrity: sha512-8PpCz7cpYY2GCGnJ/G9UARh9PH4C290l31YjriQHZ+WsagE37ntKXhFwq+s4OWoRqZ7fA7HeU81zGDFHQi0VKg==}
engines: {node: '>=8'}
peerDependencies:
react: '>=16.3'
+ '@primer/primitives@7.17.1':
+ resolution: {integrity: sha512-SiPzEb+up1nDpV2NGwNiY8m6sGnF3OUqRb0has5s6T40vq6Li/g3cYVgl+oolEa4DUoNygEPs09jwJt24f/3zg==}
+
+ '@primer/react@36.27.0':
+ resolution: {integrity: sha512-dVyp0f9zbbQYQZ6ztfMET43vVaWhvSz+qWirBzpRjDxvCk8vCQsvWrVGUU/PR0kAxxDHf6hqeLG7vcDL229NLA==}
+ engines: {node: '>=12', npm: '>=7'}
+ peerDependencies:
+ '@types/react': ^18.0.0
+ '@types/react-dom': ^18.0.0
+ '@types/styled-components': ^5.1.11
+ react: ^18.0.0
+ react-dom: ^18.0.0
+ styled-components: 5.x
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+ '@types/styled-components':
+ optional: true
+
'@remix-run/router@1.20.0':
resolution: {integrity: sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==}
engines: {node: '>=14.0.0'}
@@ -632,6 +714,51 @@ packages:
'@sinonjs/fake-timers@10.3.0':
resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
+ '@styled-system/background@5.1.2':
+ resolution: {integrity: sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==}
+
+ '@styled-system/border@5.1.5':
+ resolution: {integrity: sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==}
+
+ '@styled-system/color@5.1.2':
+ resolution: {integrity: sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==}
+
+ '@styled-system/core@5.1.2':
+ resolution: {integrity: sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==}
+
+ '@styled-system/css@5.1.5':
+ resolution: {integrity: sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==}
+
+ '@styled-system/flexbox@5.1.2':
+ resolution: {integrity: sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==}
+
+ '@styled-system/grid@5.1.2':
+ resolution: {integrity: sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==}
+
+ '@styled-system/layout@5.1.2':
+ resolution: {integrity: sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==}
+
+ '@styled-system/position@5.1.2':
+ resolution: {integrity: sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==}
+
+ '@styled-system/props@5.1.5':
+ resolution: {integrity: sha512-FXhbzq2KueZpGaHxaDm8dowIEWqIMcgsKs6tBl6Y6S0njG9vC8dBMI6WSLDnzMoSqIX3nSKHmOmpzpoihdDewg==}
+
+ '@styled-system/shadow@5.1.2':
+ resolution: {integrity: sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==}
+
+ '@styled-system/space@5.1.2':
+ resolution: {integrity: sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==}
+
+ '@styled-system/theme-get@5.1.2':
+ resolution: {integrity: sha512-afAYdRqrKfNIbVgmn/2Qet1HabxmpRnzhFwttbGr6F/mJ4RDS/Cmn+KHwHvNXangQsWw/5TfjpWV+rgcqqIcJQ==}
+
+ '@styled-system/typography@5.1.2':
+ resolution: {integrity: sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==}
+
+ '@styled-system/variant@5.1.5':
+ resolution: {integrity: sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==}
+
'@szmarczak/http-timer@4.0.6':
resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
engines: {node: '>=10'}
@@ -708,6 +835,9 @@ packages:
'@types/graceful-fs@4.1.9':
resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
+ '@types/hast@2.3.10':
+ resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
+
'@types/history@4.7.11':
resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==}
@@ -738,6 +868,9 @@ packages:
'@types/keyv@3.1.4':
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
+ '@types/mdast@3.0.15':
+ resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
+
'@types/ms@0.7.34':
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
@@ -756,6 +889,9 @@ packages:
'@types/react-dom@18.2.22':
resolution: {integrity: sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==}
+ '@types/react-is@18.3.0':
+ resolution: {integrity: sha512-KZJpHUkAdzyKj/kUHJDc6N7KyidftICufJfOFpiG6haL/BDQNQt5i4n1XDUL/nDZAtGLHDSWRYpLzKTAKSvX6w==}
+
'@types/react-router-dom@5.3.3':
resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==}
@@ -771,9 +907,21 @@ packages:
'@types/stack-utils@2.0.3':
resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
+ '@types/styled-system@5.1.22':
+ resolution: {integrity: sha512-NbRp37zWcrf/+Qf2NumdyZfhSx1dzJ50zgfKvnezYJx1HTRUMVYY8jtWvK1eoIAa6F5sXwHLhE8oXNu15ThBAA==}
+
+ '@types/styled-system__css@5.0.21':
+ resolution: {integrity: sha512-8S1lPbUbrE8U/2btqjh9X6pK9//kQdbQDe9z3vQl4SWtxtqoAVnrFZE6Xs+IHM7NMZ1uC68XrF9nLdzRHm3VyA==}
+
+ '@types/styled-system__theme-get@5.0.4':
+ resolution: {integrity: sha512-dbzwxQ+8x6Bo3EKZMo9M3Knzo77ukwoC/isKW+GAuF5TenXlPkvgzx4t4+Lp0+fKs2M4owSef0KO3gtGW3Hpkw==}
+
'@types/tough-cookie@4.0.5':
resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
+ '@types/unist@2.0.11':
+ resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
+
'@types/verror@1.10.10':
resolution: {integrity: sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==}
@@ -1066,6 +1214,11 @@ packages:
resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ babel-plugin-styled-components@2.1.4:
+ resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==}
+ peerDependencies:
+ styled-components: '>= 2'
+
babel-preset-current-node-syntax@1.0.1:
resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
peerDependencies:
@@ -1077,6 +1230,9 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
+ bail@2.0.2:
+ resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -1182,6 +1338,9 @@ packages:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
+ camelize@1.0.1:
+ resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==}
+
caniuse-api@3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
@@ -1200,6 +1359,9 @@ packages:
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
engines: {node: '>=10'}
+ character-entities@2.0.2:
+ resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
@@ -1260,6 +1422,10 @@ packages:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
engines: {node: '>=0.8'}
+ clsx@1.2.1:
+ resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==}
+ engines: {node: '>=6'}
+
clsx@2.0.0:
resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
engines: {node: '>=6'}
@@ -1292,6 +1458,9 @@ packages:
resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
hasBin: true
+ color2k@2.0.3:
+ resolution: {integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==}
+
colord@2.9.3:
resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
@@ -1302,6 +1471,9 @@ packages:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
commander@10.0.1:
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
engines: {node: '>=14'}
@@ -1398,6 +1570,10 @@ packages:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
+ css-color-keywords@1.0.0:
+ resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==}
+ engines: {node: '>=4'}
+
css-declaration-sorter@7.2.0:
resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==}
engines: {node: ^14 || ^16 || >=18}
@@ -1447,6 +1623,9 @@ packages:
css-select@5.1.0:
resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+ css-to-react-native@3.2.0:
+ resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==}
+
css-tree@2.2.1:
resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
@@ -1518,6 +1697,9 @@ packages:
decimal.js@10.4.3:
resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
+ decode-named-character-reference@1.0.2:
+ resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
+
decompress-response@6.0.0:
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'}
@@ -1582,6 +1764,10 @@ packages:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'}
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
dir-compare@3.3.0:
resolution: {integrity: sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==}
@@ -1817,6 +2003,9 @@ packages:
exponential-backoff@3.1.1:
resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==}
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
extract-zip@2.0.1:
resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
engines: {node: '>= 10.17.0'}
@@ -1871,6 +2060,9 @@ packages:
resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
hasBin: true
+ focus-visible@5.2.1:
+ resolution: {integrity: sha512-8Bx950VD1bWTQJEH/AM6SpEk+SU55aVnp4Ujhuuxy3eMEBCRwBnTBnVXr9YAPvZL3/CNjCa8u4IWfNmEO53whA==}
+
follow-redirects@1.15.6:
resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
engines: {node: '>=4.0'}
@@ -1925,6 +2117,9 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+ fzy.js@0.4.1:
+ resolution: {integrity: sha512-4sPVXf+9oGhzg2tYzgWe4hgAY0wEbkqeuKVEgdnqX8S8VcLosQsDjb0jV+f5uoQlf8INWId1w0IGoufAoik1TA==}
+
gauge@4.0.4:
resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
@@ -2048,10 +2243,19 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
+ hast-util-whitespace@2.0.1:
+ resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
+
he@1.2.0:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
+ history@5.3.0:
+ resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==}
+
+ hoist-non-react-statics@3.3.2:
+ resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
+
hosted-git-info@4.1.0:
resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
engines: {node: '>=10'}
@@ -2167,6 +2371,9 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ inline-style-parser@0.1.1:
+ resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
+
interpret@3.1.1:
resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==}
engines: {node: '>=10.13.0'}
@@ -2182,6 +2389,10 @@ packages:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
+ is-buffer@2.0.5:
+ resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
+ engines: {node: '>=4'}
+
is-ci@3.0.1:
resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
hasBin: true
@@ -2216,6 +2427,10 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+
is-plain-object@2.0.4:
resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
engines: {node: '>=0.10.0'}
@@ -2502,6 +2717,10 @@ packages:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
+ kleur@4.1.5:
+ resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
+ engines: {node: '>=6'}
+
lazy-val@1.0.5:
resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==}
@@ -2548,9 +2767,15 @@ packages:
lodash.flatten@4.4.0:
resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==}
+ lodash.isempty@4.4.0:
+ resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==}
+
lodash.isequal@4.5.0:
resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+ lodash.isobject@3.0.2:
+ resolution: {integrity: sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==}
+
lodash.isplainobject@4.0.6:
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
@@ -2622,6 +2847,18 @@ packages:
resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==}
engines: {node: '>=10'}
+ mdast-util-definitions@5.1.2:
+ resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
+
+ mdast-util-from-markdown@1.3.1:
+ resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
+
+ mdast-util-to-hast@12.3.0:
+ resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==}
+
+ mdast-util-to-string@3.2.0:
+ resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
+
mdn-data@2.0.28:
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
@@ -2640,6 +2877,69 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
+ micromark-core-commonmark@1.1.0:
+ resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==}
+
+ micromark-factory-destination@1.1.0:
+ resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==}
+
+ micromark-factory-label@1.1.0:
+ resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==}
+
+ micromark-factory-space@1.1.0:
+ resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
+
+ micromark-factory-title@1.1.0:
+ resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==}
+
+ micromark-factory-whitespace@1.1.0:
+ resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==}
+
+ micromark-util-character@1.2.0:
+ resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
+
+ micromark-util-chunked@1.1.0:
+ resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
+
+ micromark-util-classify-character@1.1.0:
+ resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==}
+
+ micromark-util-combine-extensions@1.1.0:
+ resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==}
+
+ micromark-util-decode-numeric-character-reference@1.1.0:
+ resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==}
+
+ micromark-util-decode-string@1.1.0:
+ resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==}
+
+ micromark-util-encode@1.1.0:
+ resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
+
+ micromark-util-html-tag-name@1.2.0:
+ resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
+
+ micromark-util-normalize-identifier@1.1.0:
+ resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==}
+
+ micromark-util-resolve-all@1.1.0:
+ resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==}
+
+ micromark-util-sanitize-uri@1.2.0:
+ resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==}
+
+ micromark-util-subtokenize@1.1.0:
+ resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
+
+ micromark-util-symbol@1.1.0:
+ resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
+
+ micromark-util-types@1.1.0:
+ resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
+
+ micromark@3.2.0:
+ resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
+
micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
@@ -2734,6 +3034,10 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ mri@1.2.0:
+ resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+ engines: {node: '>=4'}
+
ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
@@ -3223,10 +3527,16 @@ packages:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
+ prop-types@15.8.1:
+ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+
propagate@2.0.1:
resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==}
engines: {node: '>= 8'}
+ property-information@6.5.0:
+ resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
+
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
@@ -3267,12 +3577,30 @@ packages:
final-form: ^4.20.4
react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-intersection-observer@9.13.1:
+ resolution: {integrity: sha512-tSzDaTy0qwNPLJHg8XZhlyHTgGW6drFKTtvjdL+p6um12rcnp8Z5XstE+QNBJ7c64n5o0Lj4ilUleA41bmDoMw==}
+ peerDependencies:
+ react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+
+ react-is@16.13.1:
+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+
react-is@17.0.2:
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
react-is@18.2.0:
resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
+ react-markdown@8.0.7:
+ resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==}
+ peerDependencies:
+ '@types/react': '>=16'
+ react: '>=16'
+
react-router-dom@6.27.0:
resolution: {integrity: sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==}
engines: {node: '>=14.0.0'}
@@ -3326,6 +3654,12 @@ packages:
resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
engines: {node: '>= 0.10'}
+ remark-parse@10.0.2:
+ resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==}
+
+ remark-rehype@10.1.0:
+ resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
+
renderkid@3.0.0:
resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==}
@@ -3402,6 +3736,10 @@ packages:
rxjs@7.8.1:
resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
+ sade@1.8.1:
+ resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
+ engines: {node: '>=6'}
+
safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
@@ -3463,6 +3801,9 @@ packages:
resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
engines: {node: '>=8'}
+ shallowequal@1.1.0:
+ resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
+
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -3530,6 +3871,9 @@ packages:
resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
engines: {node: '>= 8'}
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
@@ -3586,6 +3930,20 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
+ style-to-object@0.4.4:
+ resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==}
+
+ styled-components@5.3.11:
+ resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ react: '>= 16.8.0'
+ react-dom: '>= 16.8.0'
+ react-is: '>= 16.8.0'
+
+ styled-system@5.1.5:
+ resolution: {integrity: sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==}
+
stylehacks@7.0.4:
resolution: {integrity: sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
@@ -3713,6 +4071,12 @@ packages:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
+ trough@2.2.0:
+ resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
+
truncate-utf8-bytes@1.0.2:
resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==}
@@ -3791,6 +4155,9 @@ packages:
resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
engines: {node: '>=18'}
+ unified@10.1.2:
+ resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
+
unique-filename@2.0.1:
resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
@@ -3799,6 +4166,24 @@ packages:
resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ unist-util-generated@2.0.1:
+ resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
+
+ unist-util-is@5.2.1:
+ resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
+
+ unist-util-position@4.0.4:
+ resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==}
+
+ unist-util-stringify-position@3.0.3:
+ resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
+
+ unist-util-visit-parents@5.1.3:
+ resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+
+ unist-util-visit@4.1.2:
+ resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+
universalify@0.1.2:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
@@ -3835,6 +4220,11 @@ packages:
utila@0.4.0:
resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==}
+ uvu@0.5.6:
+ resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
@@ -3846,6 +4236,12 @@ packages:
resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==}
engines: {node: '>=0.6.0'}
+ vfile-message@3.1.4:
+ resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
+
+ vfile@5.3.7:
+ resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
+
w3c-xmlserializer@4.0.0:
resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
engines: {node: '>=14'}
@@ -4030,10 +4426,10 @@ snapshots:
'@babel/helpers': 7.24.1
'@babel/parser': 7.24.1
'@babel/template': 7.24.0
- '@babel/traverse': 7.24.1
+ '@babel/traverse': 7.24.1(supports-color@5.5.0)
'@babel/types': 7.24.0
convert-source-map: 2.0.0
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
@@ -4047,6 +4443,10 @@ snapshots:
'@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2
+ '@babel/helper-annotate-as-pure@7.25.7':
+ dependencies:
+ '@babel/types': 7.25.8
+
'@babel/helper-compilation-targets@7.23.6':
dependencies:
'@babel/compat-data': 7.24.1
@@ -4091,14 +4491,18 @@ snapshots:
'@babel/helper-string-parser@7.24.1': {}
+ '@babel/helper-string-parser@7.25.7': {}
+
'@babel/helper-validator-identifier@7.22.20': {}
+ '@babel/helper-validator-identifier@7.25.7': {}
+
'@babel/helper-validator-option@7.23.5': {}
'@babel/helpers@7.24.1':
dependencies:
'@babel/template': 7.24.0
- '@babel/traverse': 7.24.1
+ '@babel/traverse': 7.24.1(supports-color@5.5.0)
'@babel/types': 7.24.0
transitivePeerDependencies:
- supports-color
@@ -4194,7 +4598,7 @@ snapshots:
'@babel/parser': 7.24.1
'@babel/types': 7.24.0
- '@babel/traverse@7.24.1':
+ '@babel/traverse@7.24.1(supports-color@5.5.0)':
dependencies:
'@babel/code-frame': 7.24.2
'@babel/generator': 7.24.1
@@ -4204,7 +4608,7 @@ snapshots:
'@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.24.1
'@babel/types': 7.24.0
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
globals: 11.12.0
transitivePeerDependencies:
- supports-color
@@ -4215,6 +4619,12 @@ snapshots:
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
+ '@babel/types@7.25.8':
+ dependencies:
+ '@babel/helper-string-parser': 7.25.7
+ '@babel/helper-validator-identifier': 7.25.7
+ to-fast-properties: 2.0.0
+
'@bcoe/v8-coverage@0.2.3': {}
'@biomejs/biome@1.9.3':
@@ -4278,7 +4688,7 @@ snapshots:
'@electron/get@2.0.3':
dependencies:
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
env-paths: 2.2.1
fs-extra: 8.1.0
got: 11.8.6
@@ -4292,7 +4702,7 @@ snapshots:
'@electron/notarize@2.2.1':
dependencies:
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
fs-extra: 9.1.0
promise-retry: 2.0.1
transitivePeerDependencies:
@@ -4300,7 +4710,7 @@ snapshots:
'@electron/notarize@2.5.0':
dependencies:
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
fs-extra: 9.1.0
promise-retry: 2.0.1
transitivePeerDependencies:
@@ -4309,7 +4719,7 @@ snapshots:
'@electron/osx-sign@1.0.5':
dependencies:
compare-version: 0.1.2
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
fs-extra: 10.1.0
isbinaryfile: 4.0.10
minimist: 1.2.8
@@ -4320,7 +4730,7 @@ snapshots:
'@electron/osx-sign@1.3.1':
dependencies:
compare-version: 0.1.2
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
fs-extra: 10.1.0
isbinaryfile: 4.0.10
minimist: 1.2.8
@@ -4332,7 +4742,7 @@ snapshots:
dependencies:
'@malept/cross-spawn-promise': 2.0.0
chalk: 4.1.2
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
detect-libc: 2.0.3
fs-extra: 10.1.0
got: 11.8.6
@@ -4356,7 +4766,7 @@ snapshots:
dependencies:
'@electron/asar': 3.2.9
'@malept/cross-spawn-promise': 1.1.1
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
dir-compare: 3.3.0
fs-extra: 9.1.0
minimatch: 3.1.2
@@ -4368,7 +4778,7 @@ snapshots:
dependencies:
'@electron/asar': 3.2.9
'@malept/cross-spawn-promise': 2.0.0
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
dir-compare: 4.2.0
fs-extra: 11.2.0
minimatch: 9.0.5
@@ -4376,8 +4786,28 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@emotion/is-prop-valid@1.3.1':
+ dependencies:
+ '@emotion/memoize': 0.9.0
+
+ '@emotion/memoize@0.9.0': {}
+
+ '@emotion/stylis@0.8.5': {}
+
+ '@emotion/unitless@0.7.5': {}
+
'@gar/promisify@1.1.3': {}
+ '@github/combobox-nav@2.3.1': {}
+
+ '@github/markdown-toolbar-element@2.2.3': {}
+
+ '@github/paste-markdown@1.5.3': {}
+
+ '@github/relative-time-element@4.4.3': {}
+
+ '@github/tab-container-element@4.8.2': {}
+
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
@@ -4586,6 +5016,10 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.4.15
+ '@lit-labs/react@1.2.1': {}
+
+ '@lit-labs/ssr-dom-shim@1.2.1': {}
+
'@malept/cross-spawn-promise@1.1.1':
dependencies:
cross-spawn: 7.0.3
@@ -4596,7 +5030,7 @@ snapshots:
'@malept/flatpak-bundler@0.4.0':
dependencies:
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
fs-extra: 9.1.0
lodash: 4.17.21
tmp-promise: 3.0.3
@@ -4625,13 +5059,64 @@ snapshots:
mkdirp: 1.0.4
rimraf: 3.0.2
+ '@oddbird/popover-polyfill@0.3.8': {}
+
'@pkgjs/parseargs@0.11.0':
optional: true
+ '@primer/behaviors@1.7.2': {}
+
+ '@primer/live-region-element@0.7.1':
+ dependencies:
+ '@lit-labs/ssr-dom-shim': 1.2.1
+
'@primer/octicons-react@19.11.0(react@18.3.1)':
dependencies:
react: 18.3.1
+ '@primer/primitives@7.17.1': {}
+
+ '@primer/react@36.27.0(@types/react-dom@18.2.22)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@5.3.11(@babel/core@7.24.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.2.0)(react@18.3.1))':
+ dependencies:
+ '@github/combobox-nav': 2.3.1
+ '@github/markdown-toolbar-element': 2.2.3
+ '@github/paste-markdown': 1.5.3
+ '@github/relative-time-element': 4.4.3
+ '@github/tab-container-element': 4.8.2
+ '@lit-labs/react': 1.2.1
+ '@oddbird/popover-polyfill': 0.3.8
+ '@primer/behaviors': 1.7.2
+ '@primer/live-region-element': 0.7.1
+ '@primer/octicons-react': 19.11.0(react@18.3.1)
+ '@primer/primitives': 7.17.1
+ '@styled-system/css': 5.1.5
+ '@styled-system/props': 5.1.5
+ '@styled-system/theme-get': 5.1.2
+ '@types/react-is': 18.3.0
+ '@types/styled-system': 5.1.22
+ '@types/styled-system__css': 5.0.21
+ '@types/styled-system__theme-get': 5.0.4
+ clsx: 1.2.1
+ color2k: 2.0.3
+ deepmerge: 4.3.1
+ focus-visible: 5.2.1
+ fzy.js: 0.4.1
+ history: 5.3.0
+ lodash.isempty: 4.4.0
+ lodash.isobject: 3.0.2
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-intersection-observer: 9.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react-is: 18.2.0
+ react-markdown: 8.0.7(@types/react@18.3.11)(react@18.3.1)
+ styled-components: 5.3.11(@babel/core@7.24.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.2.0)(react@18.3.1)
+ styled-system: 5.1.5
+ optionalDependencies:
+ '@types/react': 18.3.11
+ '@types/react-dom': 18.2.22
+ transitivePeerDependencies:
+ - supports-color
+
'@remix-run/router@1.20.0': {}
'@sinclair/typebox@0.27.8': {}
@@ -4648,6 +5133,65 @@ snapshots:
dependencies:
'@sinonjs/commons': 3.0.1
+ '@styled-system/background@5.1.2':
+ dependencies:
+ '@styled-system/core': 5.1.2
+
+ '@styled-system/border@5.1.5':
+ dependencies:
+ '@styled-system/core': 5.1.2
+
+ '@styled-system/color@5.1.2':
+ dependencies:
+ '@styled-system/core': 5.1.2
+
+ '@styled-system/core@5.1.2':
+ dependencies:
+ object-assign: 4.1.1
+
+ '@styled-system/css@5.1.5': {}
+
+ '@styled-system/flexbox@5.1.2':
+ dependencies:
+ '@styled-system/core': 5.1.2
+
+ '@styled-system/grid@5.1.2':
+ dependencies:
+ '@styled-system/core': 5.1.2
+
+ '@styled-system/layout@5.1.2':
+ dependencies:
+ '@styled-system/core': 5.1.2
+
+ '@styled-system/position@5.1.2':
+ dependencies:
+ '@styled-system/core': 5.1.2
+
+ '@styled-system/props@5.1.5':
+ dependencies:
+ styled-system: 5.1.5
+
+ '@styled-system/shadow@5.1.2':
+ dependencies:
+ '@styled-system/core': 5.1.2
+
+ '@styled-system/space@5.1.2':
+ dependencies:
+ '@styled-system/core': 5.1.2
+
+ '@styled-system/theme-get@5.1.2':
+ dependencies:
+ '@styled-system/core': 5.1.2
+
+ '@styled-system/typography@5.1.2':
+ dependencies:
+ '@styled-system/core': 5.1.2
+
+ '@styled-system/variant@5.1.5':
+ dependencies:
+ '@styled-system/core': 5.1.2
+ '@styled-system/css': 5.1.5
+
'@szmarczak/http-timer@4.0.6':
dependencies:
defer-to-connect: 2.0.1
@@ -4731,6 +5275,10 @@ snapshots:
dependencies:
'@types/node': 20.16.11
+ '@types/hast@2.3.10':
+ dependencies:
+ '@types/unist': 2.0.11
+
'@types/history@4.7.11': {}
'@types/html-minifier-terser@6.1.0': {}
@@ -4764,6 +5312,10 @@ snapshots:
dependencies:
'@types/node': 20.16.11
+ '@types/mdast@3.0.15':
+ dependencies:
+ '@types/unist': 2.0.11
+
'@types/ms@0.7.34': {}
'@types/node@20.16.11':
@@ -4785,6 +5337,10 @@ snapshots:
'@types/react': 18.3.11
optional: true
+ '@types/react-is@18.3.0':
+ dependencies:
+ '@types/react': 18.3.11
+
'@types/react-router-dom@5.3.3':
dependencies:
'@types/history': 4.7.11
@@ -4807,8 +5363,20 @@ snapshots:
'@types/stack-utils@2.0.3': {}
+ '@types/styled-system@5.1.22':
+ dependencies:
+ csstype: 3.1.3
+
+ '@types/styled-system__css@5.0.21':
+ dependencies:
+ csstype: 3.1.3
+
+ '@types/styled-system__theme-get@5.0.4': {}
+
'@types/tough-cookie@4.0.5': {}
+ '@types/unist@2.0.11': {}
+
'@types/verror@1.10.10':
optional: true
@@ -4939,13 +5507,13 @@ snapshots:
agent-base@6.0.2:
dependencies:
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
agent-base@7.1.1:
dependencies:
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@@ -5029,7 +5597,7 @@ snapshots:
builder-util: 24.13.1
builder-util-runtime: 9.2.4
chromium-pickle-js: 0.2.0
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
dmg-builder: 25.1.7(electron-builder-squirrel-windows@24.13.3)
ejs: 3.1.10
electron-builder-squirrel-windows: 24.13.3(dmg-builder@25.1.7)
@@ -5065,7 +5633,7 @@ snapshots:
builder-util-runtime: 9.2.10
chromium-pickle-js: 0.2.0
config-file-ts: 0.2.8-rc1
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
dmg-builder: 25.1.7(electron-builder-squirrel-windows@24.13.3)
dotenv: 16.4.5
dotenv-expand: 11.0.6
@@ -5209,6 +5777,17 @@ snapshots:
'@types/babel__core': 7.20.5
'@types/babel__traverse': 7.20.5
+ babel-plugin-styled-components@2.1.4(@babel/core@7.24.3)(styled-components@5.3.11(@babel/core@7.24.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.2.0)(react@18.3.1)):
+ dependencies:
+ '@babel/helper-annotate-as-pure': 7.25.7
+ '@babel/helper-module-imports': 7.24.3
+ '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.3)
+ lodash: 4.17.21
+ picomatch: 2.3.1
+ styled-components: 5.3.11(@babel/core@7.24.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.2.0)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@babel/core'
+
babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.3):
dependencies:
'@babel/core': 7.24.3
@@ -5231,6 +5810,8 @@ snapshots:
babel-plugin-jest-hoist: 29.6.3
babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.3)
+ bail@2.0.2: {}
+
balanced-match@1.0.2: {}
base64-js@1.5.1: {}
@@ -5295,14 +5876,14 @@ snapshots:
builder-util-runtime@9.2.10:
dependencies:
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
sax: 1.3.0
transitivePeerDependencies:
- supports-color
builder-util-runtime@9.2.4:
dependencies:
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
sax: 1.3.0
transitivePeerDependencies:
- supports-color
@@ -5316,7 +5897,7 @@ snapshots:
builder-util-runtime: 9.2.4
chalk: 4.1.2
cross-spawn: 7.0.3
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
fs-extra: 10.1.0
http-proxy-agent: 5.0.0
https-proxy-agent: 5.0.1
@@ -5337,7 +5918,7 @@ snapshots:
builder-util-runtime: 9.2.10
chalk: 4.1.2
cross-spawn: 7.0.3
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
fs-extra: 10.1.0
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.5
@@ -5397,6 +5978,8 @@ snapshots:
camelcase@6.3.0: {}
+ camelize@1.0.1: {}
+
caniuse-api@3.0.0:
dependencies:
browserslist: 4.23.3
@@ -5419,6 +6002,8 @@ snapshots:
char-regex@1.0.2: {}
+ character-entities@2.0.2: {}
+
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
@@ -5481,6 +6066,8 @@ snapshots:
clone@1.0.4: {}
+ clsx@1.2.1: {}
+
clsx@2.0.0: {}
clsx@2.1.1: {}
@@ -5503,6 +6090,8 @@ snapshots:
color-support@1.1.3: {}
+ color2k@2.0.3: {}
+
colord@2.9.3: {}
colorette@2.0.20: {}
@@ -5511,6 +6100,8 @@ snapshots:
dependencies:
delayed-stream: 1.0.0
+ comma-separated-tokens@2.0.3: {}
+
commander@10.0.1: {}
commander@2.20.3: {}
@@ -5617,6 +6208,8 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
+ css-color-keywords@1.0.0: {}
+
css-declaration-sorter@7.2.0(postcss@8.4.47):
dependencies:
postcss: 8.4.47
@@ -5660,6 +6253,12 @@ snapshots:
domutils: 3.1.0
nth-check: 2.1.1
+ css-to-react-native@3.2.0:
+ dependencies:
+ camelize: 1.0.1
+ css-color-keywords: 1.0.0
+ postcss-value-parser: 4.2.0
+
css-tree@2.2.1:
dependencies:
mdn-data: 2.0.28
@@ -5740,12 +6339,18 @@ snapshots:
date-fns@4.1.0: {}
- debug@4.3.4:
+ debug@4.3.4(supports-color@5.5.0):
dependencies:
ms: 2.1.2
+ optionalDependencies:
+ supports-color: 5.5.0
decimal.js@10.4.3: {}
+ decode-named-character-reference@1.0.2:
+ dependencies:
+ character-entities: 2.0.2
+
decompress-response@6.0.0:
dependencies:
mimic-response: 3.1.0
@@ -5793,6 +6398,8 @@ snapshots:
diff@4.0.2: {}
+ diff@5.2.0: {}
+
dir-compare@3.3.0:
dependencies:
buffer-equal: 1.0.1
@@ -6087,9 +6694,11 @@ snapshots:
exponential-backoff@3.1.1: {}
+ extend@3.0.2: {}
+
extract-zip@2.0.1:
dependencies:
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
get-stream: 5.2.0
yauzl: 2.10.0
optionalDependencies:
@@ -6147,6 +6756,8 @@ snapshots:
flat@5.0.2: {}
+ focus-visible@5.2.1: {}
+
follow-redirects@1.15.6: {}
foreground-child@3.1.1:
@@ -6200,6 +6811,8 @@ snapshots:
function-bind@1.1.2: {}
+ fzy.js@0.4.1: {}
+
gauge@4.0.4:
dependencies:
aproba: 2.0.0
@@ -6356,8 +6969,18 @@ snapshots:
dependencies:
function-bind: 1.1.2
+ hast-util-whitespace@2.0.1: {}
+
he@1.2.0: {}
+ history@5.3.0:
+ dependencies:
+ '@babel/runtime': 7.24.1
+
+ hoist-non-react-statics@3.3.2:
+ dependencies:
+ react-is: 16.13.1
+
hosted-git-info@4.1.0:
dependencies:
lru-cache: 6.0.0
@@ -6401,14 +7024,14 @@ snapshots:
dependencies:
'@tootallnate/once': 2.0.0
agent-base: 6.0.2
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
http-proxy-agent@7.0.2:
dependencies:
agent-base: 7.1.1
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@@ -6420,14 +7043,14 @@ snapshots:
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.2
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
https-proxy-agent@7.0.5:
dependencies:
agent-base: 7.1.1
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@@ -6480,6 +7103,8 @@ snapshots:
inherits@2.0.4: {}
+ inline-style-parser@0.1.1: {}
+
interpret@3.1.1: {}
ip-address@9.0.5:
@@ -6493,6 +7118,8 @@ snapshots:
dependencies:
binary-extensions: 2.3.0
+ is-buffer@2.0.5: {}
+
is-ci@3.0.1:
dependencies:
ci-info: 3.9.0
@@ -6517,6 +7144,8 @@ snapshots:
is-number@7.0.0: {}
+ is-plain-obj@4.1.0: {}
+
is-plain-object@2.0.4:
dependencies:
isobject: 3.0.1
@@ -6569,7 +7198,7 @@ snapshots:
istanbul-lib-source-maps@4.0.1:
dependencies:
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
istanbul-lib-coverage: 3.2.2
source-map: 0.6.1
transitivePeerDependencies:
@@ -7015,6 +7644,8 @@ snapshots:
kleur@3.0.3: {}
+ kleur@4.1.5: {}
+
lazy-val@1.0.5: {}
lazystream@1.0.1:
@@ -7045,8 +7676,12 @@ snapshots:
lodash.flatten@4.4.0: {}
+ lodash.isempty@4.4.0: {}
+
lodash.isequal@4.5.0: {}
+ lodash.isobject@3.0.2: {}
+
lodash.isplainobject@4.0.6: {}
lodash.memoize@4.1.2: {}
@@ -7125,6 +7760,44 @@ snapshots:
escape-string-regexp: 4.0.0
optional: true
+ mdast-util-definitions@5.1.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ unist-util-visit: 4.1.2
+
+ mdast-util-from-markdown@1.3.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ decode-named-character-reference: 1.0.2
+ mdast-util-to-string: 3.2.0
+ micromark: 3.2.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-decode-string: 1.1.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ unist-util-stringify-position: 3.0.3
+ uvu: 0.5.6
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-to-hast@12.3.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ mdast-util-definitions: 5.1.2
+ micromark-util-sanitize-uri: 1.2.0
+ trim-lines: 3.0.1
+ unist-util-generated: 2.0.1
+ unist-util-position: 4.0.4
+ unist-util-visit: 4.1.2
+
+ mdast-util-to-string@3.2.0:
+ dependencies:
+ '@types/mdast': 3.0.15
+
mdn-data@2.0.28: {}
mdn-data@2.0.30: {}
@@ -7138,6 +7811,139 @@ snapshots:
merge2@1.4.1: {}
+ micromark-core-commonmark@1.1.0:
+ dependencies:
+ decode-named-character-reference: 1.0.2
+ micromark-factory-destination: 1.1.0
+ micromark-factory-label: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-factory-title: 1.1.0
+ micromark-factory-whitespace: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-classify-character: 1.1.0
+ micromark-util-html-tag-name: 1.2.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-subtokenize: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-factory-destination@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-label@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-factory-space@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-title@1.1.0:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-whitespace@1.1.0:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-util-character@1.2.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-util-chunked@1.1.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-classify-character@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-util-combine-extensions@1.1.0:
+ dependencies:
+ micromark-util-chunked: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-util-decode-numeric-character-reference@1.1.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-decode-string@1.1.0:
+ dependencies:
+ decode-named-character-reference: 1.0.2
+ micromark-util-character: 1.2.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-encode@1.1.0: {}
+
+ micromark-util-html-tag-name@1.2.0: {}
+
+ micromark-util-normalize-identifier@1.1.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-resolve-all@1.1.0:
+ dependencies:
+ micromark-util-types: 1.1.0
+
+ micromark-util-sanitize-uri@1.2.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-encode: 1.1.0
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-subtokenize@1.1.0:
+ dependencies:
+ micromark-util-chunked: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-util-symbol@1.1.0: {}
+
+ micromark-util-types@1.1.0: {}
+
+ micromark@3.2.0:
+ dependencies:
+ '@types/debug': 4.1.12
+ debug: 4.3.4(supports-color@5.5.0)
+ decode-named-character-reference: 1.0.2
+ micromark-core-commonmark: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-combine-extensions: 1.1.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-encode: 1.1.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-sanitize-uri: 1.2.0
+ micromark-util-subtokenize: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+ transitivePeerDependencies:
+ - supports-color
+
micromatch@4.0.5:
dependencies:
braces: 3.0.2
@@ -7220,6 +8026,8 @@ snapshots:
mkdirp@1.0.4: {}
+ mri@1.2.0: {}
+
ms@2.1.2: {}
mz@2.7.0:
@@ -7243,7 +8051,7 @@ snapshots:
nock@13.5.5:
dependencies:
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
json-stringify-safe: 5.0.1
propagate: 2.0.1
transitivePeerDependencies:
@@ -7685,8 +8493,16 @@ snapshots:
kleur: 3.0.3
sisteransi: 1.0.5
+ prop-types@15.8.1:
+ dependencies:
+ loose-envify: 1.4.0
+ object-assign: 4.1.1
+ react-is: 16.13.1
+
propagate@2.0.1: {}
+ property-information@6.5.0: {}
+
proxy-from-env@1.1.0: {}
psl@1.9.0: {}
@@ -7722,10 +8538,40 @@ snapshots:
final-form: 4.20.10
react: 18.3.1
+ react-intersection-observer@9.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ react-dom: 18.3.1(react@18.3.1)
+
+ react-is@16.13.1: {}
+
react-is@17.0.2: {}
react-is@18.2.0: {}
+ react-markdown@8.0.7(@types/react@18.3.11)(react@18.3.1):
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/prop-types': 15.7.12
+ '@types/react': 18.3.11
+ '@types/unist': 2.0.11
+ comma-separated-tokens: 2.0.3
+ hast-util-whitespace: 2.0.1
+ prop-types: 15.8.1
+ property-information: 6.5.0
+ react: 18.3.1
+ react-is: 18.2.0
+ remark-parse: 10.0.2
+ remark-rehype: 10.1.0
+ space-separated-tokens: 2.0.2
+ style-to-object: 0.4.4
+ unified: 10.1.2
+ unist-util-visit: 4.1.2
+ vfile: 5.3.7
+ transitivePeerDependencies:
+ - supports-color
+
react-router-dom@6.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@remix-run/router': 1.20.0
@@ -7744,7 +8590,7 @@ snapshots:
read-binary-file-arch@1.0.6:
dependencies:
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@@ -7793,6 +8639,21 @@ snapshots:
relateurl@0.2.7: {}
+ remark-parse@10.0.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-from-markdown: 1.3.1
+ unified: 10.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-rehype@10.1.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ mdast-util-to-hast: 12.3.0
+ unified: 10.1.2
+
renderkid@3.0.0:
dependencies:
css-select: 4.3.0
@@ -7869,6 +8730,10 @@ snapshots:
dependencies:
tslib: 2.6.2
+ sade@1.8.1:
+ dependencies:
+ mri: 1.2.0
+
safe-buffer@5.1.2: {}
safe-buffer@5.2.1: {}
@@ -7928,6 +8793,8 @@ snapshots:
dependencies:
kind-of: 6.0.3
+ shallowequal@1.1.0: {}
+
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
@@ -7962,7 +8829,7 @@ snapshots:
socks-proxy-agent@7.0.0:
dependencies:
agent-base: 6.0.2
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
socks: 2.8.3
transitivePeerDependencies:
- supports-color
@@ -7988,6 +8855,8 @@ snapshots:
source-map@0.7.4: {}
+ space-separated-tokens@2.0.2: {}
+
sprintf-js@1.0.3: {}
sprintf-js@1.1.3: {}
@@ -8041,6 +8910,44 @@ snapshots:
strip-json-comments@3.1.1: {}
+ style-to-object@0.4.4:
+ dependencies:
+ inline-style-parser: 0.1.1
+
+ styled-components@5.3.11(@babel/core@7.24.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.2.0)(react@18.3.1):
+ dependencies:
+ '@babel/helper-module-imports': 7.24.3
+ '@babel/traverse': 7.24.1(supports-color@5.5.0)
+ '@emotion/is-prop-valid': 1.3.1
+ '@emotion/stylis': 0.8.5
+ '@emotion/unitless': 0.7.5
+ babel-plugin-styled-components: 2.1.4(@babel/core@7.24.3)(styled-components@5.3.11(@babel/core@7.24.3)(react-dom@18.3.1(react@18.3.1))(react-is@18.2.0)(react@18.3.1))
+ css-to-react-native: 3.2.0
+ hoist-non-react-statics: 3.3.2
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-is: 18.2.0
+ shallowequal: 1.1.0
+ supports-color: 5.5.0
+ transitivePeerDependencies:
+ - '@babel/core'
+
+ styled-system@5.1.5:
+ dependencies:
+ '@styled-system/background': 5.1.2
+ '@styled-system/border': 5.1.5
+ '@styled-system/color': 5.1.2
+ '@styled-system/core': 5.1.2
+ '@styled-system/flexbox': 5.1.2
+ '@styled-system/grid': 5.1.2
+ '@styled-system/layout': 5.1.2
+ '@styled-system/position': 5.1.2
+ '@styled-system/shadow': 5.1.2
+ '@styled-system/space': 5.1.2
+ '@styled-system/typography': 5.1.2
+ '@styled-system/variant': 5.1.5
+ object-assign: 4.1.1
+
stylehacks@7.0.4(postcss@8.4.47):
dependencies:
browserslist: 4.23.3
@@ -8059,7 +8966,7 @@ snapshots:
sumchecker@3.0.1:
dependencies:
- debug: 4.3.4
+ debug: 4.3.4(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@@ -8201,6 +9108,10 @@ snapshots:
tree-kill@1.2.2: {}
+ trim-lines@3.0.1: {}
+
+ trough@2.2.0: {}
+
truncate-utf8-bytes@1.0.2:
dependencies:
utf8-byte-length: 1.0.4
@@ -8269,6 +9180,16 @@ snapshots:
unicorn-magic@0.1.0: {}
+ unified@10.1.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ bail: 2.0.2
+ extend: 3.0.2
+ is-buffer: 2.0.5
+ is-plain-obj: 4.1.0
+ trough: 2.2.0
+ vfile: 5.3.7
+
unique-filename@2.0.1:
dependencies:
unique-slug: 3.0.0
@@ -8277,6 +9198,31 @@ snapshots:
dependencies:
imurmurhash: 0.1.4
+ unist-util-generated@2.0.1: {}
+
+ unist-util-is@5.2.1:
+ dependencies:
+ '@types/unist': 2.0.11
+
+ unist-util-position@4.0.4:
+ dependencies:
+ '@types/unist': 2.0.11
+
+ unist-util-stringify-position@3.0.3:
+ dependencies:
+ '@types/unist': 2.0.11
+
+ unist-util-visit-parents@5.1.3:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+
+ unist-util-visit@4.1.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+ unist-util-visit-parents: 5.1.3
+
universalify@0.1.2: {}
universalify@0.2.0: {}
@@ -8310,6 +9256,13 @@ snapshots:
utila@0.4.0: {}
+ uvu@0.5.6:
+ dependencies:
+ dequal: 2.0.3
+ diff: 5.2.0
+ kleur: 4.1.5
+ sade: 1.8.1
+
v8-compile-cache-lib@3.0.1: {}
v8-to-istanbul@9.2.0:
@@ -8325,6 +9278,18 @@ snapshots:
extsprintf: 1.4.1
optional: true
+ vfile-message@3.1.4:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-stringify-position: 3.0.3
+
+ vfile@5.3.7:
+ dependencies:
+ '@types/unist': 2.0.11
+ is-buffer: 2.0.5
+ unist-util-stringify-position: 3.0.3
+ vfile-message: 3.1.4
+
w3c-xmlserializer@4.0.0:
dependencies:
xml-name-validator: 4.0.0
diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx
index 86a47b86d..9ff1066bb 100644
--- a/src/renderer/App.tsx
+++ b/src/renderer/App.tsx
@@ -16,6 +16,8 @@ import { LoginWithOAuthAppRoute } from './routes/LoginWithOAuthApp';
import { LoginWithPersonalAccessTokenRoute } from './routes/LoginWithPersonalAccessToken';
import { NotificationsRoute } from './routes/Notifications';
import { SettingsRoute } from './routes/Settings';
+
+import { BaseStyles, ThemeProvider } from '@primer/react';
import './App.css';
function RequireAuth({ children }) {
@@ -31,56 +33,60 @@ function RequireAuth({ children }) {
export const App = () => {
return (
-
-
-
-
-
-
-
-
-
- }
- />
-
-
-
- }
- />
-
-
-
- }
- />
-
-
-
- }
- />
- } />
- }
- />
- }
- />
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+ }
+ />
+
+
+
+ }
+ />
+
+
+
+ }
+ />
+
+
+
+ }
+ />
+ } />
+ }
+ />
+ }
+ />
+
+
+
+
+
+
);
};
diff --git a/src/renderer/components/AccountNotifications.tsx b/src/renderer/components/AccountNotifications.tsx
index cc9f6bdce..8010a013c 100644
--- a/src/renderer/components/AccountNotifications.tsx
+++ b/src/renderer/components/AccountNotifications.tsx
@@ -1,8 +1,5 @@
-import {
- FeedPersonIcon,
- GitPullRequestIcon,
- IssueOpenedIcon,
-} from '@primer/octicons-react';
+import { GitPullRequestIcon, IssueOpenedIcon } from '@primer/octicons-react';
+import { Avatar } from '@primer/react';
import { type FC, type MouseEvent, useContext, useMemo, useState } from 'react';
import { AppContext } from '../context/App';
import { type Account, type GitifyError, Opacity, Size } from '../types';
@@ -20,8 +17,6 @@ import { NotificationRow } from './NotificationRow';
import { Oops } from './Oops';
import { RepositoryNotifications } from './RepositoryNotifications';
import { InteractionButton } from './buttons/InteractionButton';
-import { AvatarIcon } from './icons/AvatarIcon';
-import { PlatformIcon } from './icons/PlatformIcon';
interface IAccountNotifications {
account: Account;
@@ -92,19 +87,17 @@ export const AccountNotifications: FC = (
openAccountProfile(account);
}}
>
-
-
+
- @{account.user.login}
+ @{account.user.login}
-
= ({
className={cn('mr-3 flex items-center justify-center', iconColor)}
title={notificationType}
>
-
diff --git a/src/renderer/components/RepositoryNotifications.tsx b/src/renderer/components/RepositoryNotifications.tsx
index f48d64377..fb62d3acc 100644
--- a/src/renderer/components/RepositoryNotifications.tsx
+++ b/src/renderer/components/RepositoryNotifications.tsx
@@ -1,4 +1,5 @@
-import { CheckIcon, MarkGithubIcon, ReadIcon } from '@primer/octicons-react';
+import { CheckIcon, ReadIcon } from '@primer/octicons-react';
+import { Avatar } from '@primer/react';
import { type FC, type MouseEvent, useContext, useState } from 'react';
import { AppContext } from '../context/App';
import { Opacity, Size } from '../types';
@@ -12,7 +13,6 @@ import { openRepository } from '../utils/links';
import { HoverGroup } from './HoverGroup';
import { NotificationRow } from './NotificationRow';
import { InteractionButton } from './buttons/InteractionButton';
-import { AvatarIcon } from './icons/AvatarIcon';
interface IRepositoryNotifications {
repoNotifications: Notification[];
@@ -50,18 +50,13 @@ export const RepositoryNotifications: FC = ({
>
-
+
) => {
diff --git a/src/renderer/components/icons/AuthMethodIcon.test.tsx b/src/renderer/components/icons/AuthMethodIcon.test.tsx
deleted file mode 100644
index 8496de2b2..000000000
--- a/src/renderer/components/icons/AuthMethodIcon.test.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import { render } from '@testing-library/react';
-import { Size } from '../../types';
-import { AuthMethodIcon, type IAuthMethodIcon } from './AuthMethodIcon';
-
-describe('renderer/components/icons/AuthMethodIcon.tsx', () => {
- it('should render GitHub App icon', () => {
- const props: IAuthMethodIcon = {
- type: 'GitHub App',
- size: Size.MEDIUM,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-
- it('should render Personal Access Token icon', () => {
- const props: IAuthMethodIcon = {
- type: 'Personal Access Token',
- size: Size.MEDIUM,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-
- it('should render OAuth App icon', () => {
- const props: IAuthMethodIcon = {
- type: 'OAuth App',
- size: Size.MEDIUM,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-});
diff --git a/src/renderer/components/icons/AuthMethodIcon.tsx b/src/renderer/components/icons/AuthMethodIcon.tsx
deleted file mode 100644
index 90251bd79..000000000
--- a/src/renderer/components/icons/AuthMethodIcon.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { AppsIcon, KeyIcon, PersonIcon } from '@primer/octicons-react';
-import type { FC } from 'react';
-import type { Size } from '../../types';
-import type { AuthMethod } from '../../utils/auth/types';
-
-export interface IAuthMethodIcon {
- type: AuthMethod;
- size: Size;
-}
-
-export const AuthMethodIcon: FC = (props: IAuthMethodIcon) => {
- return (
-
- {props.type === 'GitHub App' && }
- {props.type === 'Personal Access Token' && }
- {props.type === 'OAuth App' && }
-
- );
-};
diff --git a/src/renderer/components/icons/AvatarIcon.test.tsx b/src/renderer/components/icons/AvatarIcon.test.tsx
deleted file mode 100644
index 99859a98f..000000000
--- a/src/renderer/components/icons/AvatarIcon.test.tsx
+++ /dev/null
@@ -1,72 +0,0 @@
-import { MarkGithubIcon } from '@primer/octicons-react';
-import { render } from '@testing-library/react';
-import { Size } from '../../types';
-import { AvatarIcon, type IAvatarIcon } from './AvatarIcon';
-
-describe('renderer/components/icons/AvatarIcon.tsx', () => {
- it('should render extra small avatar', () => {
- const props: IAvatarIcon = {
- defaultIcon: MarkGithubIcon,
- title: 'test',
- url: 'https://avatars.githubusercontent.com/u/583231?v=4',
- size: Size.XSMALL,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-
- it('should render small avatar', () => {
- const props: IAvatarIcon = {
- defaultIcon: MarkGithubIcon,
- title: 'test',
- url: 'https://avatars.githubusercontent.com/u/583231?v=4',
- size: Size.SMALL,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-
- it('should render medium avatar', () => {
- const props: IAvatarIcon = {
- defaultIcon: MarkGithubIcon,
- title: 'test',
- url: 'https://avatars.githubusercontent.com/u/583231?v=4',
- size: Size.MEDIUM,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-
- it('should render default extra small icon when no url', () => {
- const props: IAvatarIcon = {
- defaultIcon: MarkGithubIcon,
- title: 'test',
- url: null,
- size: Size.XSMALL,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-
- it('should render default small icon when no url', () => {
- const props: IAvatarIcon = {
- defaultIcon: MarkGithubIcon,
- title: 'test',
- url: null,
- size: Size.SMALL,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-
- it('should render default medium icon when no url', () => {
- const props: IAvatarIcon = {
- defaultIcon: MarkGithubIcon,
- title: 'test',
- url: null,
- size: Size.MEDIUM,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-});
diff --git a/src/renderer/components/icons/AvatarIcon.tsx b/src/renderer/components/icons/AvatarIcon.tsx
deleted file mode 100644
index 7db4f4856..000000000
--- a/src/renderer/components/icons/AvatarIcon.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import type { Icon } from '@primer/octicons-react';
-import type { FC } from 'react';
-import { Size } from '../../types';
-import { cn } from '../../utils/cn';
-
-export interface IAvatarIcon {
- title: string;
- url: string | null;
- size: Size.XSMALL | Size.SMALL | Size.MEDIUM;
- defaultIcon: Icon;
-}
-
-export const AvatarIcon: FC = (props: IAvatarIcon) => {
- if (props.url) {
- return (
-
- );
- }
-
- const defaultIconSize =
- props.size === Size.XSMALL ? 16 : props.size === Size.SMALL ? 20 : 24;
-
- return (
-
- );
-};
diff --git a/src/renderer/components/icons/PlatformIcon.test.tsx b/src/renderer/components/icons/PlatformIcon.test.tsx
deleted file mode 100644
index fd9dc425e..000000000
--- a/src/renderer/components/icons/PlatformIcon.test.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { render } from '@testing-library/react';
-import { Size } from '../../types';
-import { type IPlatformIcon, PlatformIcon } from './PlatformIcon';
-
-describe('renderer/components/icons/PlatformIcon.tsx', () => {
- it('should render GitHub Cloud icon', () => {
- const props: IPlatformIcon = {
- type: 'GitHub Cloud',
- size: Size.MEDIUM,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-
- it('should render GitHub Enterprise Service icon', () => {
- const props: IPlatformIcon = {
- type: 'GitHub Enterprise Server',
- size: Size.MEDIUM,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-});
diff --git a/src/renderer/components/icons/PlatformIcon.tsx b/src/renderer/components/icons/PlatformIcon.tsx
deleted file mode 100644
index 7fb50501c..000000000
--- a/src/renderer/components/icons/PlatformIcon.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import { MarkGithubIcon, ServerIcon } from '@primer/octicons-react';
-import type { FC } from 'react';
-import type { Size } from '../../types';
-import type { PlatformType } from '../../utils/auth/types';
-
-export interface IPlatformIcon {
- type: PlatformType;
- size: Size;
-}
-
-export const PlatformIcon: FC = (props: IPlatformIcon) => {
- return (
-
- {props.type === 'GitHub Cloud' && }
- {props.type === 'GitHub Enterprise Server' && (
-
- )}
-
- );
-};
diff --git a/src/renderer/components/icons/__snapshots__/AuthMethodIcon.test.tsx.snap b/src/renderer/components/icons/__snapshots__/AuthMethodIcon.test.tsx.snap
deleted file mode 100644
index caa2602a9..000000000
--- a/src/renderer/components/icons/__snapshots__/AuthMethodIcon.test.tsx.snap
+++ /dev/null
@@ -1,304 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`renderer/components/icons/AuthMethodIcon.tsx should render GitHub App icon 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
- ,
- "container": ,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
-
-exports[`renderer/components/icons/AuthMethodIcon.tsx should render OAuth App icon 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
- ,
- "container": ,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
-
-exports[`renderer/components/icons/AuthMethodIcon.tsx should render Personal Access Token icon 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
- ,
- "container": ,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
diff --git a/src/renderer/components/icons/__snapshots__/AvatarIcon.test.tsx.snap b/src/renderer/components/icons/__snapshots__/AvatarIcon.test.tsx.snap
deleted file mode 100644
index e7880e375..000000000
--- a/src/renderer/components/icons/__snapshots__/AvatarIcon.test.tsx.snap
+++ /dev/null
@@ -1,493 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`renderer/components/icons/AvatarIcon.tsx should render default extra small icon when no url 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
- ,
- "container": ,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
-
-exports[`renderer/components/icons/AvatarIcon.tsx should render default medium icon when no url 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
- ,
- "container": ,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
-
-exports[`renderer/components/icons/AvatarIcon.tsx should render default small icon when no url 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
- ,
- "container": ,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
-
-exports[`renderer/components/icons/AvatarIcon.tsx should render extra small avatar 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
-

-
- ,
- "container":
-

-
,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
-
-exports[`renderer/components/icons/AvatarIcon.tsx should render medium avatar 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
-

-
- ,
- "container":
-

-
,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
-
-exports[`renderer/components/icons/AvatarIcon.tsx should render small avatar 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
-

-
- ,
- "container":
-

-
,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
diff --git a/src/renderer/components/icons/__snapshots__/PlatformIcon.test.tsx.snap b/src/renderer/components/icons/__snapshots__/PlatformIcon.test.tsx.snap
deleted file mode 100644
index ac1fdbb19..000000000
--- a/src/renderer/components/icons/__snapshots__/PlatformIcon.test.tsx.snap
+++ /dev/null
@@ -1,203 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`renderer/components/icons/PlatformIcon.tsx should render GitHub Cloud icon 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
- ,
- "container": ,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
-
-exports[`renderer/components/icons/PlatformIcon.tsx should render GitHub Enterprise Service icon 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
- ,
- "container": ,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
diff --git a/src/renderer/components/notification/NotificationFooter.tsx b/src/renderer/components/notification/NotificationFooter.tsx
index ae075d473..40bcf12da 100644
--- a/src/renderer/components/notification/NotificationFooter.tsx
+++ b/src/renderer/components/notification/NotificationFooter.tsx
@@ -1,4 +1,5 @@
import { FeedPersonIcon, MarkGithubIcon } from '@primer/octicons-react';
+import { Avatar } from '@primer/react';
import type { FC, MouseEvent } from 'react';
import { IconColor, Opacity, Size } from '../../types';
import type { Notification } from '../../typesGitHub';
@@ -6,7 +7,6 @@ import { cn } from '../../utils/cn';
import { formatNotificationUpdatedAt } from '../../utils/helpers';
import { openUserProfile } from '../../utils/links';
import { formatReason } from '../../utils/reason';
-import { AvatarIcon } from '../icons/AvatarIcon';
import { Pills } from './Pills';
interface INotificationFooter {
@@ -39,13 +39,13 @@ export const NotificationFooter: FC = ({
event.stopPropagation();
openUserProfile(notification.subject.user);
}}
- className="flex-shrink-0"
+ className="flex-shrink-0 pl-1"
>
-
) : (
diff --git a/src/renderer/components/notification/NotificationHeader.tsx b/src/renderer/components/notification/NotificationHeader.tsx
index a4c9dd1ff..5b19af54d 100644
--- a/src/renderer/components/notification/NotificationHeader.tsx
+++ b/src/renderer/components/notification/NotificationHeader.tsx
@@ -1,11 +1,10 @@
-import { MarkGithubIcon } from '@primer/octicons-react';
+import { Avatar } from '@primer/react';
import { type FC, type MouseEvent, useContext } from 'react';
import { AppContext } from '../../context/App';
import { Opacity, Size } from '../../types';
import type { Notification } from '../../typesGitHub';
import { cn } from '../../utils/cn';
import { openRepository } from '../../utils/links';
-import { AvatarIcon } from '../icons/AvatarIcon';
interface INotificationHeader {
notification: Notification;
@@ -30,12 +29,7 @@ export const NotificationHeader: FC = ({
)}
>
-
+
{
-
+
+ {
+ navigate('/accounts');
+ }}
+ />
+
-
+
+ {
+ quitApp();
+ }}
+ />
+
);
diff --git a/src/renderer/routes/Accounts.tsx b/src/renderer/routes/Accounts.tsx
index e906ce1a9..0fe093762 100644
--- a/src/renderer/routes/Accounts.tsx
+++ b/src/renderer/routes/Accounts.tsx
@@ -1,5 +1,4 @@
import {
- FeedPersonIcon,
KeyIcon,
MarkGithubIcon,
PersonIcon,
@@ -10,19 +9,18 @@ import {
SyncIcon,
} from '@primer/octicons-react';
+import { Avatar, Button, Tooltip } from '@primer/react';
import log from 'electron-log';
import { type FC, useCallback, useContext } from 'react';
import { useNavigate } from 'react-router-dom';
import { Header } from '../components/Header';
-import { AuthMethodIcon } from '../components/icons/AuthMethodIcon';
-import { AvatarIcon } from '../components/icons/AvatarIcon';
-import { PlatformIcon } from '../components/icons/PlatformIcon';
import { AppContext } from '../context/App';
import { BUTTON_CLASS_NAME } from '../styles/gitify';
import { type Account, IconColor, Size } from '../types';
import { getAccountUUID, refreshAccount } from '../utils/auth/utils';
import { cn } from '../utils/cn';
import { updateTrayIcon, updateTrayTitle } from '../utils/comms';
+import { getAuthMethodIcon, getPlatformIcon } from '../utils/icons';
import {
openAccountProfile,
openDeveloperSettings,
@@ -72,111 +70,115 @@ export const AccountsRoute: FC = () => {
- {auth.accounts.map((account, i) => (
-
-
+ {auth.accounts.map((account, i) => {
+ const authMethodIcon = getAuthMethodIcon(account.method);
+ const platformIcon = getPlatformIcon(account.platform);
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
-
-
-
- ))}
+ );
+ })}
diff --git a/src/renderer/utils/icons.ts b/src/renderer/utils/icons.ts
index f6ae990bd..8641f913e 100644
--- a/src/renderer/utils/icons.ts
+++ b/src/renderer/utils/icons.ts
@@ -1,5 +1,6 @@
import {
AlertIcon,
+ AppsIcon,
CheckIcon,
CommentDiscussionIcon,
CommentIcon,
@@ -16,10 +17,14 @@ import {
IssueDraftIcon,
IssueOpenedIcon,
IssueReopenedIcon,
+ KeyIcon,
MailIcon,
+ MarkGithubIcon,
type OcticonProps,
+ PersonIcon,
QuestionIcon,
RocketIcon,
+ ServerIcon,
SkipIcon,
StopIcon,
TagIcon,
@@ -28,6 +33,7 @@ import {
import type { FC } from 'react';
import { IconColor, type PullRequestApprovalIcon } from '../types';
import type { GitifyPullRequestReview, Subject } from '../typesGitHub';
+import type { AuthMethod, PlatformType } from './auth/types';
export function getNotificationTypeIcon(subject: Subject): FC
{
switch (subject.type) {
@@ -152,3 +158,25 @@ export function getPullRequestReviewIcon(
return null;
}
}
+
+export function getAuthMethodIcon(method: AuthMethod): FC | null {
+ switch (method) {
+ case 'GitHub App':
+ return AppsIcon;
+ case 'OAuth App':
+ return PersonIcon;
+ default:
+ return KeyIcon;
+ }
+}
+
+export function getPlatformIcon(
+ platform: PlatformType,
+): FC | null {
+ switch (platform) {
+ case 'GitHub Enterprise Server':
+ return ServerIcon;
+ default:
+ return MarkGithubIcon;
+ }
+}
From a4b8cf485e6e2a2ec9fa2c71a8a8e128e49dec71 Mon Sep 17 00:00:00 2001
From: Adam Setch
Date: Sat, 12 Oct 2024 17:21:37 -0400
Subject: [PATCH 02/48] refactor: adopt primer ui components
Signed-off-by: Adam Setch
---
.../settings/AppearanceSettings.tsx | 22 ++++++++--
src/renderer/context/App.tsx | 5 ---
src/renderer/utils/theme.test.ts | 42 -------------------
src/renderer/utils/theme.ts | 36 ----------------
4 files changed, 19 insertions(+), 86 deletions(-)
delete mode 100644 src/renderer/utils/theme.test.ts
delete mode 100644 src/renderer/utils/theme.ts
diff --git a/src/renderer/components/settings/AppearanceSettings.tsx b/src/renderer/components/settings/AppearanceSettings.tsx
index 1014776b4..e06b43352 100644
--- a/src/renderer/components/settings/AppearanceSettings.tsx
+++ b/src/renderer/components/settings/AppearanceSettings.tsx
@@ -7,12 +7,13 @@ import {
PaintbrushIcon,
TagIcon,
} from '@primer/octicons-react';
+import { useTheme } from '@primer/react';
+import type { ColorModeWithAuto } from '@primer/react/lib/ThemeProvider';
import { ipcRenderer, webFrame } from 'electron';
import { type FC, useContext, useEffect, useState } from 'react';
import { AppContext } from '../../context/App';
import { Size, Theme } from '../../types';
import { hasMultipleAccounts } from '../../utils/auth/utils';
-import { setTheme } from '../../utils/theme';
import { zoomLevelToPercentage, zoomPercentageToLevel } from '../../utils/zoom';
import { Button } from '../buttons/Button';
import { Checkbox } from '../fields/Checkbox';
@@ -23,6 +24,7 @@ let timeout: NodeJS.Timeout;
const DELAY = 200;
export const AppearanceSettings: FC = () => {
+ const { setColorMode } = useTheme();
const { auth, settings, updateSetting } = useContext(AppContext);
const [zoomPercentage, setZoomPercentage] = useState(
zoomLevelToPercentage(webFrame.getZoomLevel()),
@@ -31,10 +33,10 @@ export const AppearanceSettings: FC = () => {
useEffect(() => {
ipcRenderer.on('gitify:update-theme', (_, updatedTheme: Theme) => {
if (settings.theme === Theme.SYSTEM) {
- setTheme(updatedTheme);
+ setColorMode(updatedTheme === 'DARK' ? 'night' : 'day');
}
});
- }, [settings.theme]);
+ }, [settings.theme, setColorMode]);
window.addEventListener('resize', () => {
// clear the timeout
@@ -60,6 +62,20 @@ export const AppearanceSettings: FC = () => {
{ label: 'Dark', value: Theme.DARK },
]}
onChange={(evt) => {
+ let mode: ColorModeWithAuto;
+ switch (evt.target.value) {
+ case Theme.LIGHT:
+ mode = 'day';
+ break;
+ case Theme.DARK:
+ mode = 'night';
+ break;
+ default:
+ mode = 'auto';
+ break;
+ }
+
+ setColorMode(mode);
updateSetting('theme', evt.target.value as Theme);
}}
/>
diff --git a/src/renderer/context/App.tsx b/src/renderer/context/App.tsx
index 3322430fb..ee9d56103 100644
--- a/src/renderer/context/App.tsx
+++ b/src/renderer/context/App.tsx
@@ -45,7 +45,6 @@ import {
import { Constants } from '../utils/constants';
import { getNotificationCount } from '../utils/notifications';
import { clearState, loadState, saveState } from '../utils/storage';
-import { setTheme } from '../utils/theme';
import { zoomPercentageToLevel } from '../utils/zoom';
export const defaultAuth: AuthState = {
@@ -138,10 +137,6 @@ export const AppProvider = ({ children }: { children: ReactNode }) => {
restoreSettings();
}, []);
- useEffect(() => {
- setTheme(settings.theme);
- }, [settings.theme]);
-
// biome-ignore lint/correctness/useExhaustiveDependencies: We only want fetchNotifications to be called for account changes
useEffect(() => {
fetchNotifications({ auth, settings });
diff --git a/src/renderer/utils/theme.test.ts b/src/renderer/utils/theme.test.ts
deleted file mode 100644
index 441a7131f..000000000
--- a/src/renderer/utils/theme.test.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { Theme } from '../types';
-import { getTheme, setTheme } from './theme';
-
-describe('renderer/utils/theme.ts', () => {
- const htmlElement = document.createElement('html');
-
- beforeEach(() => {
- document.querySelector = jest.fn(() => htmlElement);
- });
-
- it('should change to light mode', () => {
- setTheme(Theme.LIGHT);
- expect(getTheme()).toBe(Theme.LIGHT);
- });
-
- it('should change to dark mode', () => {
- setTheme(Theme.DARK);
- expect(getTheme()).toBe(Theme.DARK);
- });
-
- it("should use the system's mode - light", () => {
- Object.defineProperty(window, 'matchMedia', {
- writable: true,
- value: jest.fn().mockImplementation((_query) => ({
- matches: false,
- })),
- });
- setTheme();
- expect(getTheme()).toBe(Theme.LIGHT);
- });
-
- it("should use the system's mode - dark", () => {
- Object.defineProperty(window, 'matchMedia', {
- writable: true,
- value: jest.fn().mockImplementation((_query) => ({
- matches: true,
- })),
- });
- setTheme();
- expect(getTheme()).toBe(Theme.DARK);
- });
-});
diff --git a/src/renderer/utils/theme.ts b/src/renderer/utils/theme.ts
deleted file mode 100644
index 25a261f0d..000000000
--- a/src/renderer/utils/theme.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { Theme } from '../types';
-
-export function getTheme(): Theme {
- if (document.querySelector('html').classList.contains('dark')) {
- return Theme.DARK;
- }
-
- return Theme.LIGHT;
-}
-
-export function setLightMode() {
- document.querySelector('html').classList.remove('dark');
-}
-
-export function setDarkMode() {
- document.querySelector('html').classList.add('dark');
-}
-
-export function setTheme(mode?: Theme) {
- switch (mode) {
- case Theme.LIGHT:
- setLightMode();
- break;
-
- case Theme.DARK:
- setDarkMode();
- break;
-
- default:
- if (window.matchMedia?.('(prefers-color-scheme: dark)').matches) {
- setDarkMode();
- } else {
- setLightMode();
- }
- }
-}
From e3b930646aa783a04c799ddab8e32215e2b31200 Mon Sep 17 00:00:00 2001
From: Adam Setch
Date: Sat, 12 Oct 2024 18:45:06 -0400
Subject: [PATCH 03/48] refactor: adopt primer ui components
Signed-off-by: Adam Setch
---
.../components/AccountNotifications.tsx | 27 ++--
.../components/RepositoryNotifications.tsx | 38 +++--
.../components/settings/SettingsFooter.tsx | 28 ++--
src/renderer/routes/Accounts.tsx | 133 ++++++++----------
4 files changed, 109 insertions(+), 117 deletions(-)
diff --git a/src/renderer/components/AccountNotifications.tsx b/src/renderer/components/AccountNotifications.tsx
index 8010a013c..07c0ff645 100644
--- a/src/renderer/components/AccountNotifications.tsx
+++ b/src/renderer/components/AccountNotifications.tsx
@@ -1,5 +1,5 @@
import { GitPullRequestIcon, IssueOpenedIcon } from '@primer/octicons-react';
-import { Avatar } from '@primer/react';
+import { Avatar, Button, Stack, Text, Tooltip } from '@primer/react';
import { type FC, type MouseEvent, useContext, useMemo, useState } from 'react';
import { AppContext } from '../context/App';
import { type Account, type GitifyError, Opacity, Size } from '../types';
@@ -69,7 +69,7 @@ export const AccountNotifications: FC = (
{showAccountHeader && (
= (
)}
onClick={toggleAccountNotifications}
>
-
-
+
@{account.user.login}
+
+
+
= ({
return (
<>
-
-
) => {
- // Don't trigger onClick of parent element.
- event.stopPropagation();
- openRepository(repoNotifications[0].repository);
- }}
- >
- {repoName}
-
+
+ ) => {
+ // Don't trigger onClick of parent element.
+ event.stopPropagation();
+ openRepository(repoNotifications[0].repository);
+ }}
+ >
+
+
+ {repoName}
+
+
+
{!animateExit && (
diff --git a/src/renderer/components/settings/SettingsFooter.tsx b/src/renderer/components/settings/SettingsFooter.tsx
index d0684448b..7cc9b69f5 100644
--- a/src/renderer/components/settings/SettingsFooter.tsx
+++ b/src/renderer/components/settings/SettingsFooter.tsx
@@ -1,5 +1,5 @@
import { PersonIcon, XCircleIcon } from '@primer/octicons-react';
-import { IconButton, Tooltip } from '@primer/react';
+import { Button, IconButton, Stack, Tooltip } from '@primer/react';
import { type FC, useEffect, useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { getAppVersion, quitApp } from '../../utils/comms';
@@ -21,18 +21,16 @@ export const SettingsFooter: FC = () => {
}, []);
return (
-
-
openGitifyReleaseNotes(appVersion)}
- >
-
- Gitify {appVersion}
-
-
-
+
+
+
+ openGitifyReleaseNotes(appVersion)}>
+ Gitify {appVersion}
+
+
+
+
+
{
/>
-
+
{
}}
/>
-
+
);
};
diff --git a/src/renderer/routes/Accounts.tsx b/src/renderer/routes/Accounts.tsx
index 0fe093762..39d25e6ae 100644
--- a/src/renderer/routes/Accounts.tsx
+++ b/src/renderer/routes/Accounts.tsx
@@ -9,16 +9,23 @@ import {
SyncIcon,
} from '@primer/octicons-react';
-import { Avatar, Button, Tooltip } from '@primer/react';
+import {
+ Avatar,
+ Button,
+ CircleOcticon,
+ IconButton,
+ Stack,
+ Text,
+ Tooltip,
+} from '@primer/react';
import log from 'electron-log';
import { type FC, useCallback, useContext } from 'react';
import { useNavigate } from 'react-router-dom';
import { Header } from '../components/Header';
import { AppContext } from '../context/App';
import { BUTTON_CLASS_NAME } from '../styles/gitify';
-import { type Account, IconColor, Size } from '../types';
+import { type Account, Size } from '../types';
import { getAccountUUID, refreshAccount } from '../utils/auth/utils';
-import { cn } from '../utils/cn';
import { updateTrayIcon, updateTrayTitle } from '../utils/comms';
import { getAuthMethodIcon, getPlatformIcon } from '../utils/icons';
import {
@@ -79,103 +86,75 @@ export const AccountsRoute: FC = () => {
key={getAccountUUID(account)}
className="mb-4 flex items-center justify-between rounded-md bg-gray-100 p-2 dark:bg-gray-sidebar"
>
-
-
-
openAccountProfile(account)}
- >
-
- @{account.user.login}
-
+
+ openAccountProfile(account)}>
+
- ({account.user?.name})
-
-
-
-
-
+
+ @{account.user.login}
+
+ ({account.user?.name})
+
+
+
+
+
+
+
openHost(account.hostname)}
>
{account.hostname}
-
-
-
+
+
openDeveloperSettings(account)}
>
{account.method}
-
-
-
-
-
-
-
+
+
+ setAsPrimaryAccount(account)}
- hidden={i === 0}
- >
-
-
-
+ {
await refreshAccount(account);
navigate('/accounts', { replace: true });
}}
- >
-
-
-
+ logoutAccount(account)}
- >
-
-
-
+ />
+
);
})}
From 5f929a3c2f3b9b29bc99c40bdd41d156808d197a Mon Sep 17 00:00:00 2001
From: Adam Setch
Date: Sun, 13 Oct 2024 11:01:02 -0400
Subject: [PATCH 04/48] refactor: adopt primer ui components
Signed-off-by: Adam Setch
---
.../components/AccountNotifications.tsx | 20 +--
src/renderer/components/AllRead.tsx | 1 +
src/renderer/components/EmojiText.tsx | 1 +
src/renderer/components/Header.tsx | 48 ++++---
src/renderer/components/HoverGroup.tsx | 8 +-
src/renderer/components/Loading.tsx | 4 +-
src/renderer/components/NotificationRow.tsx | 20 ++-
src/renderer/components/Oops.tsx | 1 +
.../components/RepositoryNotifications.tsx | 8 +-
src/renderer/components/Sidebar.tsx | 127 ++++++++++-------
.../components/buttons/InteractionButton.tsx | 18 +--
src/renderer/components/icons/LogoIcon.tsx | 1 +
.../notification/NotificationFooter.tsx | 22 ++-
.../notification/NotificationHeader.tsx | 4 +-
.../components/notification/Pills.tsx | 8 +-
.../settings/AppearanceSettings.tsx | 6 +-
src/renderer/components/settings/Legend.tsx | 3 +-
.../settings/NotificationSettings.tsx | 4 +-
.../components/settings/SettingsFooter.tsx | 11 +-
.../components/settings/SystemSettings.tsx | 4 +-
src/renderer/context/App.tsx | 1 +
src/renderer/routes/Accounts.tsx | 133 ++++++++----------
src/renderer/routes/Filters.tsx | 28 ++--
src/renderer/routes/Login.tsx | 82 ++++++-----
src/renderer/routes/LoginWithOAuthApp.tsx | 4 +-
.../routes/LoginWithPersonalAccessToken.tsx | 4 +-
src/renderer/routes/Notifications.tsx | 1 +
src/renderer/routes/Settings.tsx | 50 ++++---
src/renderer/styles/gitify.ts | 2 -
29 files changed, 341 insertions(+), 283 deletions(-)
delete mode 100644 src/renderer/styles/gitify.ts
diff --git a/src/renderer/components/AccountNotifications.tsx b/src/renderer/components/AccountNotifications.tsx
index 07c0ff645..15ad9b3ea 100644
--- a/src/renderer/components/AccountNotifications.tsx
+++ b/src/renderer/components/AccountNotifications.tsx
@@ -1,8 +1,10 @@
+import { type FC, type MouseEvent, useContext, useMemo, useState } from 'react';
+
import { GitPullRequestIcon, IssueOpenedIcon } from '@primer/octicons-react';
import { Avatar, Button, Stack, Text, Tooltip } from '@primer/react';
-import { type FC, type MouseEvent, useContext, useMemo, useState } from 'react';
+
import { AppContext } from '../context/App';
-import { type Account, type GitifyError, Opacity, Size } from '../types';
+import { type Account, type GitifyError, Size } from '../types';
import type { Notification } from '../typesGitHub';
import { cn } from '../utils/cn';
import { getChevronDetails } from '../utils/helpers';
@@ -69,15 +71,14 @@ export const AccountNotifications: FC = (
{showAccountHeader && (
-
+
= (
gap={'condensed'}
align={'center'}
>
-
+
@{account.user.login}
+
= (
openGitHubIssues(account.hostname);
}}
/>
+
= (
openGitHubPulls(account.hostname);
}}
/>
+
= (props: IHeader) => {
const { fetchNotifications } = useContext(AppContext);
return (
-
-
{
- navigate(-1);
- if (props.fetchOnBack) {
- fetchNotifications();
- }
- }}
- >
-
+
+ {
+ navigate(-1);
+ if (props.fetchOnBack) {
+ fetchNotifications();
+ }
+ }}
/>
-
-
-
-
+
+
+
+ {props.children}
+
+
+
);
};
diff --git a/src/renderer/components/HoverGroup.tsx b/src/renderer/components/HoverGroup.tsx
index 0d238d381..da5536ae5 100644
--- a/src/renderer/components/HoverGroup.tsx
+++ b/src/renderer/components/HoverGroup.tsx
@@ -1,13 +1,17 @@
import type { FC, ReactNode } from 'react';
+import { Stack } from '@primer/react';
+
interface IHoverGroup {
children: ReactNode;
}
export const HoverGroup: FC = ({ children }: IHoverGroup) => {
return (
-
- {children}
+
+
+ {children}
+
);
};
diff --git a/src/renderer/components/Loading.tsx b/src/renderer/components/Loading.tsx
index e008c7fa1..882f085be 100644
--- a/src/renderer/components/Loading.tsx
+++ b/src/renderer/components/Loading.tsx
@@ -1,5 +1,7 @@
-import NProgress from 'nprogress';
import { type FC, useContext, useEffect } from 'react';
+
+import NProgress from 'nprogress';
+
import { AppContext } from '../context/App';
export const Loading: FC = () => {
diff --git a/src/renderer/components/NotificationRow.tsx b/src/renderer/components/NotificationRow.tsx
index 71a1401b6..b99f70b0e 100644
--- a/src/renderer/components/NotificationRow.tsx
+++ b/src/renderer/components/NotificationRow.tsx
@@ -1,5 +1,3 @@
-import { BellSlashIcon, CheckIcon, ReadIcon } from '@primer/octicons-react';
-import { CircleOcticon } from '@primer/react';
import {
type FC,
type MouseEvent,
@@ -7,6 +5,10 @@ import {
useContext,
useState,
} from 'react';
+
+import { BellSlashIcon, CheckIcon, ReadIcon } from '@primer/octicons-react';
+import { Octicon, Tooltip } from '@primer/react';
+
import { AppContext } from '../context/App';
import { Opacity, Size } from '../types';
import type { Notification } from '../typesGitHub';
@@ -85,8 +87,6 @@ export const NotificationRow: FC
= ({
const notificationTitle =
`${notification.subject.title} ${notificationNumber}`.trim();
- const groupByDate = settings.groupBy === 'DATE';
-
return (
= ({
(isRead || showAsRead) && Opacity.READ,
)}
>
-
-
+
+
+
+
= ({
return (
<>
= ({
gap={'condensed'}
align={'center'}
>
-
+
{repoName}
diff --git a/src/renderer/components/Sidebar.tsx b/src/renderer/components/Sidebar.tsx
index bf28a0b30..7e19c8d6d 100644
--- a/src/renderer/components/Sidebar.tsx
+++ b/src/renderer/components/Sidebar.tsx
@@ -1,3 +1,6 @@
+import { type FC, useContext, useMemo } from 'react';
+import { useLocation, useNavigate } from 'react-router-dom';
+
import {
BellIcon,
FilterIcon,
@@ -7,8 +10,8 @@ import {
SyncIcon,
XCircleIcon,
} from '@primer/octicons-react';
-import { type FC, useContext, useMemo } from 'react';
-import { useLocation, useNavigate } from 'react-router-dom';
+
+import { Button, IconButton, Stack } from '@primer/react';
import { AppContext } from '../context/App';
import { Size } from '../types';
import { quitApp } from '../utils/comms';
@@ -20,7 +23,6 @@ import {
openGitHubPulls,
} from '../utils/links';
import { getNotificationCount } from '../utils/notifications';
-import { SidebarButton } from './buttons/SidebarButton';
import { LogoIcon } from './icons/LogoIcon';
export const Sidebar: FC = () => {
@@ -72,74 +74,101 @@ export const Sidebar: FC = () => {
return (
-
-
navigate('/', { replace: true })}
+
+
-
-
-
- openGitHubNotifications(primaryAccountHostname)}
- />
-
- openGitHubIssues(primaryAccountHostname)}
- />
-
- openGitHubPulls(primaryAccountHostname)}
- />
+ navigate('/', { replace: true })}
+ >
+
+
+
+ 0 ? 'primary' : 'invisible'}
+ count={isLoggedIn ? notificationsCount : null}
+ onClick={() => openGitHubNotifications(primaryAccountHostname)}
+ />
+
+ {/* TODO - explore https://primer.style/components/selectpanel/react/alpha/ for a better UI for filters */}
+ 0 ? 'primary' : 'invisible'}
+ count={filterCount}
+ onClick={() => toggleFilters()}
+ />
+
+ openGitHubIssues(primaryAccountHostname)}
+ />
+ openGitHubPulls(primaryAccountHostname)}
+ />
+
-
+
{isLoggedIn && (
<>
- refreshNotifications()}
/>
- toggleFilters()}
- />
-
- toggleSettings()}
/>
>
)}
{!isLoggedIn && (
- quitApp()}
/>
)}
-
+
);
};
diff --git a/src/renderer/components/buttons/InteractionButton.tsx b/src/renderer/components/buttons/InteractionButton.tsx
index 94bd9745b..63f979527 100644
--- a/src/renderer/components/buttons/InteractionButton.tsx
+++ b/src/renderer/components/buttons/InteractionButton.tsx
@@ -1,5 +1,8 @@
-import type { Icon } from '@primer/octicons-react';
import type { FC, MouseEvent } from 'react';
+
+import type { Icon } from '@primer/octicons-react';
+import { IconButton } from '@primer/react';
+
import type { Size } from '../../types';
export interface IInteractionButton {
@@ -13,13 +16,12 @@ export const InteractionButton: FC
= (
props: IInteractionButton,
) => {
return (
-
-
-
+ />
);
};
diff --git a/src/renderer/components/icons/LogoIcon.tsx b/src/renderer/components/icons/LogoIcon.tsx
index 0024278ce..301c6d6d4 100644
--- a/src/renderer/components/icons/LogoIcon.tsx
+++ b/src/renderer/components/icons/LogoIcon.tsx
@@ -1,4 +1,5 @@
import type { FC } from 'react';
+
import { Size } from '../../types';
import { cn } from '../../utils/cn';
diff --git a/src/renderer/components/notification/NotificationFooter.tsx b/src/renderer/components/notification/NotificationFooter.tsx
index 40bcf12da..9dc1eec84 100644
--- a/src/renderer/components/notification/NotificationFooter.tsx
+++ b/src/renderer/components/notification/NotificationFooter.tsx
@@ -1,6 +1,8 @@
+import type { FC, MouseEvent } from 'react';
+
import { FeedPersonIcon, MarkGithubIcon } from '@primer/octicons-react';
import { Avatar } from '@primer/react';
-import type { FC, MouseEvent } from 'react';
+
import { IconColor, Opacity, Size } from '../../types';
import type { Notification } from '../../typesGitHub';
import { cn } from '../../utils/cn';
@@ -31,23 +33,17 @@ export const NotificationFooter: FC = ({
)}
>
{notification.subject.user ? (
- ) => {
// Don't trigger onClick of parent element.
event.stopPropagation();
openUserProfile(notification.subject.user);
}}
- className="flex-shrink-0 pl-1"
- >
-
-
+ />
) : (
{notification.subject.type === 'RepositoryDependabotAlertsThread' ||
diff --git a/src/renderer/components/notification/NotificationHeader.tsx b/src/renderer/components/notification/NotificationHeader.tsx
index 5b19af54d..0f43b0c10 100644
--- a/src/renderer/components/notification/NotificationHeader.tsx
+++ b/src/renderer/components/notification/NotificationHeader.tsx
@@ -1,5 +1,7 @@
-import { Avatar } from '@primer/react';
import { type FC, type MouseEvent, useContext } from 'react';
+
+import { Avatar } from '@primer/react';
+
import { AppContext } from '../../context/App';
import { Opacity, Size } from '../../types';
import type { Notification } from '../../typesGitHub';
diff --git a/src/renderer/components/notification/Pills.tsx b/src/renderer/components/notification/Pills.tsx
index 5b6f877da..1cebe4750 100644
--- a/src/renderer/components/notification/Pills.tsx
+++ b/src/renderer/components/notification/Pills.tsx
@@ -1,16 +1,16 @@
+import { type FC, useContext } from 'react';
+
import {
CommentIcon,
IssueClosedIcon,
MilestoneIcon,
TagIcon,
} from '@primer/octicons-react';
-import { type FC, useContext } from 'react';
+
+import { AppContext } from '../../context/App';
import { IconColor } from '../../types';
import type { Notification } from '../../typesGitHub';
-
import { getPullRequestReviewIcon } from '../../utils/icons';
-
-import { AppContext } from '../../context/App';
import { PillButton } from '../buttons/PillButton';
interface IPills {
diff --git a/src/renderer/components/settings/AppearanceSettings.tsx b/src/renderer/components/settings/AppearanceSettings.tsx
index e06b43352..d9256f057 100644
--- a/src/renderer/components/settings/AppearanceSettings.tsx
+++ b/src/renderer/components/settings/AppearanceSettings.tsx
@@ -1,3 +1,6 @@
+import { ipcRenderer, webFrame } from 'electron';
+import { type FC, useContext, useEffect, useState } from 'react';
+
import {
CheckIcon,
CommentIcon,
@@ -9,8 +12,7 @@ import {
} from '@primer/octicons-react';
import { useTheme } from '@primer/react';
import type { ColorModeWithAuto } from '@primer/react/lib/ThemeProvider';
-import { ipcRenderer, webFrame } from 'electron';
-import { type FC, useContext, useEffect, useState } from 'react';
+
import { AppContext } from '../../context/App';
import { Size, Theme } from '../../types';
import { hasMultipleAccounts } from '../../utils/auth/utils';
diff --git a/src/renderer/components/settings/Legend.tsx b/src/renderer/components/settings/Legend.tsx
index b3eecc494..788b4f88b 100644
--- a/src/renderer/components/settings/Legend.tsx
+++ b/src/renderer/components/settings/Legend.tsx
@@ -1,6 +1,7 @@
-import type { Icon } from '@primer/octicons-react';
import type { FC } from 'react';
+import type { Icon } from '@primer/octicons-react';
+
interface ILegend {
icon: Icon;
children: string;
diff --git a/src/renderer/components/settings/NotificationSettings.tsx b/src/renderer/components/settings/NotificationSettings.tsx
index 6c8afc152..a4d62dcc3 100644
--- a/src/renderer/components/settings/NotificationSettings.tsx
+++ b/src/renderer/components/settings/NotificationSettings.tsx
@@ -1,5 +1,7 @@
-import { BellIcon } from '@primer/octicons-react';
import { type FC, type MouseEvent, useContext } from 'react';
+
+import { BellIcon } from '@primer/octicons-react';
+
import { AppContext } from '../../context/App';
import { GroupBy } from '../../types';
import { openGitHubParticipatingDocs } from '../../utils/links';
diff --git a/src/renderer/components/settings/SettingsFooter.tsx b/src/renderer/components/settings/SettingsFooter.tsx
index 7cc9b69f5..5ac3f2f57 100644
--- a/src/renderer/components/settings/SettingsFooter.tsx
+++ b/src/renderer/components/settings/SettingsFooter.tsx
@@ -1,7 +1,9 @@
-import { PersonIcon, XCircleIcon } from '@primer/octicons-react';
-import { Button, IconButton, Stack, Tooltip } from '@primer/react';
import { type FC, useEffect, useState } from 'react';
import { useNavigate } from 'react-router-dom';
+
+import { PersonIcon, XCircleIcon } from '@primer/octicons-react';
+import { Button, IconButton, Stack, Tooltip } from '@primer/react';
+
import { getAppVersion, quitApp } from '../../utils/comms';
import { openGitifyReleaseNotes } from '../../utils/links';
@@ -33,8 +35,8 @@ export const SettingsFooter: FC = () => {
{
navigate('/accounts');
}}
@@ -43,8 +45,9 @@ export const SettingsFooter: FC = () => {
{
quitApp();
}}
diff --git a/src/renderer/components/settings/SystemSettings.tsx b/src/renderer/components/settings/SystemSettings.tsx
index 9a6750558..1dfa5b541 100644
--- a/src/renderer/components/settings/SystemSettings.tsx
+++ b/src/renderer/components/settings/SystemSettings.tsx
@@ -1,5 +1,7 @@
-import { DeviceDesktopIcon } from '@primer/octicons-react';
import { type FC, useContext } from 'react';
+
+import { DeviceDesktopIcon } from '@primer/octicons-react';
+
import { AppContext } from '../../context/App';
import { OpenPreference } from '../../types';
import { Constants } from '../../utils/constants';
diff --git a/src/renderer/context/App.tsx b/src/renderer/context/App.tsx
index ee9d56103..cee55cfed 100644
--- a/src/renderer/context/App.tsx
+++ b/src/renderer/context/App.tsx
@@ -7,6 +7,7 @@ import {
useMemo,
useState,
} from 'react';
+
import { useInterval } from '../hooks/useInterval';
import { useNotifications } from '../hooks/useNotifications';
import {
diff --git a/src/renderer/routes/Accounts.tsx b/src/renderer/routes/Accounts.tsx
index 39d25e6ae..5d402c5d4 100644
--- a/src/renderer/routes/Accounts.tsx
+++ b/src/renderer/routes/Accounts.tsx
@@ -1,29 +1,30 @@
+import log from 'electron-log';
+import { type FC, useCallback, useContext } from 'react';
+import { useNavigate } from 'react-router-dom';
+
import {
+ ChevronUpIcon,
KeyIcon,
MarkGithubIcon,
PersonIcon,
- PlusIcon,
SignOutIcon,
StarFillIcon,
StarIcon,
SyncIcon,
} from '@primer/octicons-react';
-
import {
+ ActionList,
+ ActionMenu,
Avatar,
Button,
- CircleOcticon,
IconButton,
Stack,
Text,
Tooltip,
} from '@primer/react';
-import log from 'electron-log';
-import { type FC, useCallback, useContext } from 'react';
-import { useNavigate } from 'react-router-dom';
+
import { Header } from '../components/Header';
import { AppContext } from '../context/App';
-import { BUTTON_CLASS_NAME } from '../styles/gitify';
import { type Account, Size } from '../types';
import { getAccountUUID, refreshAccount } from '../utils/auth/utils';
import { updateTrayIcon, updateTrayTitle } from '../utils/comms';
@@ -78,58 +79,52 @@ export const AccountsRoute: FC = () => {
{auth.accounts.map((account, i) => {
- const authMethodIcon = getAuthMethodIcon(account.method);
- const platformIcon = getPlatformIcon(account.platform);
+ const AuthMethodIcon = getAuthMethodIcon(account.method);
+ const PlatformIcon = getPlatformIcon(account.platform);
return (
-
-
+
+
openAccountProfile(account)}>
-
+
@{account.user.login}
-
- ({account.user?.name})
-
+ ({account.user?.name})
-
-
- openHost(account.hostname)}
+
+
+ openHost(account.hostname)}
>
+
+
+
{account.hostname}
-
+
-
- openDeveloperSettings(account)}
+
+ openDeveloperSettings(account)}
>
+
+
+
{account.method}
-
+
-
+
{
-
-
Add new account
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Add new account
+
+
+
+
+ loginWithGitHub()}>
+
+
+
+ Login with GitHub
+
+
+ loginWithPersonalAccessToken()}>
+
+
+
+ Login with Personal Access Token
+
+
+ loginWithOAuthApp()}>
+
+
+
+ Login with OAuth App{' '}
+
+
+
+
);
diff --git a/src/renderer/routes/Filters.tsx b/src/renderer/routes/Filters.tsx
index fe07e33c5..3d85d4f79 100644
--- a/src/renderer/routes/Filters.tsx
+++ b/src/renderer/routes/Filters.tsx
@@ -1,16 +1,17 @@
+import { type FC, useContext } from 'react';
+
import {
FeedPersonIcon,
FilterIcon,
FilterRemoveIcon,
NoteIcon,
} from '@primer/octicons-react';
-import { type FC, useContext } from 'react';
+import { Button, Tooltip } from '@primer/react';
+
import { Header } from '../components/Header';
import { Checkbox } from '../components/fields/Checkbox';
import { Legend } from '../components/settings/Legend';
import { AppContext } from '../context/App';
-import { BUTTON_CLASS_NAME } from '../styles/gitify';
-import { Size } from '../types';
import type { Reason } from '../typesGitHub';
import { FORMATTED_REASONS, formatReason } from '../utils/reason';
@@ -87,22 +88,15 @@ export const FiltersRoute: FC = () => {
-
-
-
+
+ clearFilters()}
>
-
Clear filters
-
-
+
+
);
diff --git a/src/renderer/routes/Login.tsx b/src/renderer/routes/Login.tsx
index 2a661eb67..1feaebdcb 100644
--- a/src/renderer/routes/Login.tsx
+++ b/src/renderer/routes/Login.tsx
@@ -1,8 +1,10 @@
-import { KeyIcon, MarkGithubIcon, PersonIcon } from '@primer/octicons-react';
import log from 'electron-log';
import { type FC, useCallback, useContext, useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
-import { Button } from '../components/buttons/Button';
+
+import { KeyIcon, MarkGithubIcon, PersonIcon } from '@primer/octicons-react';
+import { Button, Heading, Stack, Text } from '@primer/react';
+
import { LogoIcon } from '../components/icons/LogoIcon';
import { AppContext } from '../context/App';
import { Size } from '../types';
@@ -19,50 +21,60 @@ export const LoginRoute: FC = () => {
}
}, [isLoggedIn]);
- const loginUser = useCallback(async () => {
+ const loginUser = useCallback(() => {
try {
- await loginWithGitHubApp();
+ loginWithGitHubApp();
} catch (err) {
log.error('Auth: failed to login with GitHub', err);
}
}, [loginWithGitHubApp]);
return (
-
+
-
- GitHub Notifications
on your menu bar.
-
+
+
+ GitHub Notifications
+
+
+ on your menu bar
+
+
+
+
+ Login with
- Login with
+ loginUser()}
+ >
+ GitHub
+
- loginUser()}
- >
- GitHub
-
+ navigate('/login-personal-access-token')}
+ >
+ Personal Access Token
+
- navigate('/login-personal-access-token')}
- >
- Personal Access Token
-
- navigate('/login-oauth-app')}
- >
- OAuth App
-
-
+ navigate('/login-oauth-app')}
+ >
+ OAuth App
+
+
+
);
};
diff --git a/src/renderer/routes/LoginWithOAuthApp.tsx b/src/renderer/routes/LoginWithOAuthApp.tsx
index de44218d2..338ff966f 100644
--- a/src/renderer/routes/LoginWithOAuthApp.tsx
+++ b/src/renderer/routes/LoginWithOAuthApp.tsx
@@ -1,8 +1,10 @@
-import { BookIcon, PersonIcon, SignInIcon } from '@primer/octicons-react';
import log from 'electron-log';
import { type FC, useCallback, useContext } from 'react';
import { Form, type FormRenderProps } from 'react-final-form';
import { useNavigate } from 'react-router-dom';
+
+import { BookIcon, PersonIcon, SignInIcon } from '@primer/octicons-react';
+
import { Header } from '../components/Header';
import { Button } from '../components/buttons/Button';
import { FieldInput } from '../components/fields/FieldInput';
diff --git a/src/renderer/routes/LoginWithPersonalAccessToken.tsx b/src/renderer/routes/LoginWithPersonalAccessToken.tsx
index cebc284fd..cb0bb4421 100644
--- a/src/renderer/routes/LoginWithPersonalAccessToken.tsx
+++ b/src/renderer/routes/LoginWithPersonalAccessToken.tsx
@@ -1,8 +1,10 @@
-import { BookIcon, KeyIcon, SignInIcon } from '@primer/octicons-react';
import log from 'electron-log';
import { type FC, useCallback, useContext, useState } from 'react';
import { Form, type FormRenderProps } from 'react-final-form';
import { useNavigate } from 'react-router-dom';
+
+import { BookIcon, KeyIcon, SignInIcon } from '@primer/octicons-react';
+
import { Header } from '../components/Header';
import { Button } from '../components/buttons/Button';
import { FieldInput } from '../components/fields/FieldInput';
diff --git a/src/renderer/routes/Notifications.tsx b/src/renderer/routes/Notifications.tsx
index ab129c700..1c8208410 100644
--- a/src/renderer/routes/Notifications.tsx
+++ b/src/renderer/routes/Notifications.tsx
@@ -1,4 +1,5 @@
import { type FC, useContext, useMemo } from 'react';
+
import { AccountNotifications } from '../components/AccountNotifications';
import { AllRead } from '../components/AllRead';
import { Oops } from '../components/Oops';
diff --git a/src/renderer/routes/Settings.tsx b/src/renderer/routes/Settings.tsx
index 2ee168061..978855fc5 100644
--- a/src/renderer/routes/Settings.tsx
+++ b/src/renderer/routes/Settings.tsx
@@ -1,5 +1,8 @@
-import { GearIcon } from '@primer/octicons-react';
import { type FC, useContext } from 'react';
+
+import { GearIcon } from '@primer/octicons-react';
+import { Button } from '@primer/react';
+
import { Header } from '../components/Header';
import { AppearanceSettings } from '../components/settings/AppearanceSettings';
import { NotificationSettings } from '../components/settings/NotificationSettings';
@@ -11,28 +14,31 @@ export const SettingsRoute: FC = () => {
const { resetSettings } = useContext(AppContext);
return (
-
-
+ <>
+
+
-
-
-
-
-
{
- confirm('Are you sure you want to reset all settings?') &&
- resetSettings();
- }}
- className="text-sm hover:underline mb-4 hover:cursor-pointer"
- >
- Restore settings to their defaults
-
-
+
+
+
+
+
+
{
+ confirm(
+ 'Please confirm that you want to reset all settings to the Gitify defaults?',
+ ) && resetSettings();
+ }}
+ >
+ Reset settings
+
+
-
-
+
+
+ >
);
};
diff --git a/src/renderer/styles/gitify.ts b/src/renderer/styles/gitify.ts
deleted file mode 100644
index d6a2e6d47..000000000
--- a/src/renderer/styles/gitify.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export const BUTTON_CLASS_NAME =
- 'hover:text-gray-500 py-1 px-2 my-1 mx-2 focus:outline-none';
From 5084f8eb662630aa555b8370392450208723e60f Mon Sep 17 00:00:00 2001
From: Adam Setch
Date: Sun, 13 Oct 2024 12:04:41 -0400
Subject: [PATCH 05/48] refactor: adopt primer ui components
Signed-off-by: Adam Setch
---
.../components/AccountNotifications.tsx | 37 ++--
src/renderer/components/Header.tsx | 8 +-
src/renderer/components/HoverGroup.tsx | 2 +-
src/renderer/components/NotificationRow.tsx | 26 +--
.../components/RepositoryNotifications.tsx | 39 ++--
src/renderer/components/Sidebar.tsx | 42 ++--
.../components/buttons/Button.test.tsx | 46 -----
src/renderer/components/buttons/Button.tsx | 76 --------
.../buttons/InteractionButton.test.tsx | 20 --
.../components/buttons/InteractionButton.tsx | 27 ---
.../__snapshots__/Button.test.tsx.snap | 181 ------------------
.../InteractionButton.test.tsx.snap | 106 ----------
.../settings/AppearanceSettings.tsx | 77 ++++----
.../components/settings/SettingsFooter.tsx | 4 +-
src/renderer/routes/Accounts.tsx | 15 +-
src/renderer/routes/Login.tsx | 8 +-
src/renderer/routes/LoginWithOAuthApp.tsx | 87 +++++----
.../routes/LoginWithPersonalAccessToken.tsx | 79 ++++----
src/renderer/routes/Settings.tsx | 32 ++--
19 files changed, 240 insertions(+), 672 deletions(-)
delete mode 100644 src/renderer/components/buttons/Button.test.tsx
delete mode 100644 src/renderer/components/buttons/Button.tsx
delete mode 100644 src/renderer/components/buttons/InteractionButton.test.tsx
delete mode 100644 src/renderer/components/buttons/InteractionButton.tsx
delete mode 100644 src/renderer/components/buttons/__snapshots__/Button.test.tsx.snap
delete mode 100644 src/renderer/components/buttons/__snapshots__/InteractionButton.test.tsx.snap
diff --git a/src/renderer/components/AccountNotifications.tsx b/src/renderer/components/AccountNotifications.tsx
index 15ad9b3ea..779973131 100644
--- a/src/renderer/components/AccountNotifications.tsx
+++ b/src/renderer/components/AccountNotifications.tsx
@@ -1,7 +1,14 @@
import { type FC, type MouseEvent, useContext, useMemo, useState } from 'react';
import { GitPullRequestIcon, IssueOpenedIcon } from '@primer/octicons-react';
-import { Avatar, Button, Stack, Text, Tooltip } from '@primer/react';
+import {
+ Avatar,
+ Button,
+ IconButton,
+ Stack,
+ Text,
+ Tooltip,
+} from '@primer/react';
import { AppContext } from '../context/App';
import { type Account, type GitifyError, Size } from '../types';
@@ -18,7 +25,6 @@ import { HoverGroup } from './HoverGroup';
import { NotificationRow } from './NotificationRow';
import { Oops } from './Oops';
import { RepositoryNotifications } from './RepositoryNotifications';
-import { InteractionButton } from './buttons/InteractionButton';
interface IAccountNotifications {
account: Account;
@@ -89,11 +95,7 @@ export const AccountNotifications: FC = (
openAccountProfile(account);
}}
>
-
+
@{account.user.login}
@@ -101,10 +103,11 @@ export const AccountNotifications: FC = (
- ) => {
// Don't trigger onClick of parent element.
event.stopPropagation();
@@ -112,10 +115,11 @@ export const AccountNotifications: FC = (
}}
/>
- ) => {
// Don't trigger onClick of parent element.
event.stopPropagation();
@@ -123,10 +127,11 @@ export const AccountNotifications: FC = (
}}
/>
-
diff --git a/src/renderer/components/Header.tsx b/src/renderer/components/Header.tsx
index 9040a9fa5..f12a18471 100644
--- a/src/renderer/components/Header.tsx
+++ b/src/renderer/components/Header.tsx
@@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom';
import { ArrowLeftIcon, type Icon } from '@primer/octicons-react';
-import { CircleOcticon, Heading, IconButton, Stack } from '@primer/react';
+import { Heading, IconButton, Octicon, Stack } from '@primer/react';
import { AppContext } from '../context/App';
import { Size } from '../types';
@@ -20,7 +20,7 @@ export const Header: FC = (props: IHeader) => {
return (
-
+
= (props: IHeader) => {
}}
/>
-
-
+
+
= ({ children }: IHoverGroup) => {
return (
-
+
{children}
diff --git a/src/renderer/components/NotificationRow.tsx b/src/renderer/components/NotificationRow.tsx
index b99f70b0e..b19dd21ba 100644
--- a/src/renderer/components/NotificationRow.tsx
+++ b/src/renderer/components/NotificationRow.tsx
@@ -7,7 +7,7 @@ import {
} from 'react';
import { BellSlashIcon, CheckIcon, ReadIcon } from '@primer/octicons-react';
-import { Octicon, Tooltip } from '@primer/react';
+import { IconButton, Octicon, Tooltip } from '@primer/react';
import { AppContext } from '../context/App';
import { Opacity, Size } from '../types';
@@ -23,7 +23,6 @@ import {
} from '../utils/icons';
import { openNotification } from '../utils/links';
import { HoverGroup } from './HoverGroup';
-import { InteractionButton } from './buttons/InteractionButton';
import { NotificationFooter } from './notification/NotificationFooter';
import { NotificationHeader } from './notification/NotificationHeader';
@@ -132,10 +131,11 @@ export const NotificationRow: FC = ({
{!animateExit && (
{isMarkAsDoneFeatureSupported(notification.account) && (
- {
setAnimateExit(!settings.delayNotificationState);
setShowAsRead(settings.delayNotificationState);
@@ -143,20 +143,24 @@ export const NotificationRow: FC = ({
}}
/>
)}
- {
setAnimateExit(!settings.delayNotificationState);
setShowAsRead(settings.delayNotificationState);
markNotificationsAsRead([notification]);
}}
/>
-
diff --git a/src/renderer/components/RepositoryNotifications.tsx b/src/renderer/components/RepositoryNotifications.tsx
index d9b547321..7e70ae640 100644
--- a/src/renderer/components/RepositoryNotifications.tsx
+++ b/src/renderer/components/RepositoryNotifications.tsx
@@ -1,7 +1,14 @@
import { type FC, type MouseEvent, useContext, useState } from 'react';
import { CheckIcon, ReadIcon } from '@primer/octicons-react';
-import { Avatar, Button, Stack, Text, Tooltip } from '@primer/react';
+import {
+ Avatar,
+ Button,
+ IconButton,
+ Stack,
+ Text,
+ Tooltip,
+} from '@primer/react';
import { AppContext } from '../context/App';
import { Opacity, Size } from '../types';
@@ -14,7 +21,6 @@ import {
import { openRepository } from '../utils/links';
import { HoverGroup } from './HoverGroup';
import { NotificationRow } from './NotificationRow';
-import { InteractionButton } from './buttons/InteractionButton';
interface IRepositoryNotifications {
repoNotifications: Notification[];
@@ -69,11 +75,7 @@ export const RepositoryNotifications: FC = ({
openRepository(repoNotifications[0].repository);
}}
>
-
+
{repoName}
@@ -84,10 +86,11 @@ export const RepositoryNotifications: FC = ({
{!animateExit && (
{isMarkAsDoneFeatureSupported(repoNotifications[0].account) && (
- ) => {
// Don't trigger onClick of parent element.
event.stopPropagation();
@@ -97,10 +100,12 @@ export const RepositoryNotifications: FC = ({
}}
/>
)}
- ) => {
// Don't trigger onClick of parent element.
event.stopPropagation();
@@ -109,10 +114,12 @@ export const RepositoryNotifications: FC = ({
markNotificationsAsRead(repoNotifications);
}}
/>
-
diff --git a/src/renderer/components/Sidebar.tsx b/src/renderer/components/Sidebar.tsx
index 7e19c8d6d..5a9a586ec 100644
--- a/src/renderer/components/Sidebar.tsx
+++ b/src/renderer/components/Sidebar.tsx
@@ -76,14 +76,14 @@ export const Sidebar: FC = () => {
navigate('/', { replace: true })}
>
@@ -93,21 +93,23 @@ export const Sidebar: FC = () => {
0 ? 'primary' : 'invisible'}
count={isLoggedIn ? notificationsCount : null}
onClick={() => openGitHubNotifications(primaryAccountHostname)}
/>
{/* TODO - explore https://primer.style/components/selectpanel/react/alpha/ for a better UI for filters */}
- 0 ? 'primary' : 'invisible'}
- count={filterCount}
- onClick={() => toggleFilters()}
- />
+ {isLoggedIn && (
+ 0 ? 'primary' : 'invisible'}
+ count={filterCount}
+ onClick={() => toggleFilters()}
+ />
+ )}
{
{isLoggedIn && (
<>
@@ -150,7 +152,7 @@ export const Sidebar: FC = () => {
toggleSettings()}
diff --git a/src/renderer/components/buttons/Button.test.tsx b/src/renderer/components/buttons/Button.test.tsx
deleted file mode 100644
index cd6db0f87..000000000
--- a/src/renderer/components/buttons/Button.test.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import { MarkGithubIcon } from '@primer/octicons-react';
-import { fireEvent, render, screen } from '@testing-library/react';
-import type { Link } from '../../types';
-import * as comms from '../../utils/comms';
-import { Button, type IButton } from './Button';
-
-describe('renderer/components/buttons/Button.tsx', () => {
- const openExternalLinkMock = jest
- .spyOn(comms, 'openExternalLink')
- .mockImplementation();
-
- const props: IButton = {
- label: 'button',
- };
-
- afterEach(() => {
- jest.clearAllMocks();
- });
-
- it('should render without icon', () => {
- const tree = render(Button);
- expect(tree).toMatchSnapshot();
- });
-
- it('should render with icon', () => {
- const tree = render(
-
- Button
- ,
- );
- expect(tree).toMatchSnapshot();
- });
-
- it('should render with url', () => {
- render(
-
- Button
- ,
- );
-
- const buttonElement = screen.getByLabelText('button');
-
- fireEvent.click(buttonElement);
- expect(openExternalLinkMock).toHaveBeenCalledTimes(1);
- });
-});
diff --git a/src/renderer/components/buttons/Button.tsx b/src/renderer/components/buttons/Button.tsx
deleted file mode 100644
index 0b7e0054a..000000000
--- a/src/renderer/components/buttons/Button.tsx
+++ /dev/null
@@ -1,76 +0,0 @@
-import type { Icon } from '@primer/octicons-react';
-import { type VariantProps, cva } from 'class-variance-authority';
-import { type ButtonHTMLAttributes, forwardRef } from 'react';
-import { type Link, Size } from '../../types';
-import { cn } from '../../utils/cn';
-import { openExternalLink } from '../../utils/comms';
-
-const buttonVariants = cva(
- 'ring-offset-background focus-visible:ring-ring inline-flex w-fit items-center justify-center whitespace-nowrap rounded text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',
- {
- variants: {
- variant: {
- default: 'bg-gray-300 dark:text-black hover:opacity-90',
- destructive: 'bg-red-600 text-white hover:opacity-90',
- outline:
- 'border-zinc-300 hover:text-inherit dark:hover:text-white border bg-transparent hover:bg-zinc-100 dark:hover:bg-zinc-600',
- ghost: 'hover:bg-zinc-100 dark:hover:bg-zinc-600 dark:hover:text-white',
- link: 'underline-offset-2 hover:underline',
- },
- size: {
- default: 'min-w-20 h-10 px-4 py-1',
- inline: 'h-5 rounded-md px-2 py-1',
- xs: 'h-7 rounded-md px-2 py-1',
- sm: 'h-9 rounded-md px-2 py-1',
- lg: 'h-11 rounded-md px-8',
- icon: 'h-10 w-10',
- },
- },
- defaultVariants: {
- variant: 'default',
- size: 'default',
- },
- },
-);
-
-export interface IButton
- extends ButtonHTMLAttributes,
- VariantProps {
- icon?: { icon: Icon; size?: Size };
- url?: Link;
- onClick?: () => void;
- label: string;
-}
-
-const Button = forwardRef(
- ({ className, variant, size, label, url, onClick, ...props }, ref) => {
- return (
- {
- if (url) {
- return openExternalLink(url);
- }
-
- if (onClick) {
- return onClick();
- }
- }}
- {...props}
- >
- {props.icon && (
-
- )}
- {props.children}
-
- );
- },
-);
-Button.displayName = 'Button';
-
-export { Button, buttonVariants };
diff --git a/src/renderer/components/buttons/InteractionButton.test.tsx b/src/renderer/components/buttons/InteractionButton.test.tsx
deleted file mode 100644
index 1acc4a087..000000000
--- a/src/renderer/components/buttons/InteractionButton.test.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import { MarkGithubIcon } from '@primer/octicons-react';
-import { render } from '@testing-library/react';
-import { Size } from '../../types';
-import {
- type IInteractionButton,
- InteractionButton,
-} from './InteractionButton';
-
-describe('renderer/components/buttons/InteractionButton.tsx', () => {
- it('should render', () => {
- const props: IInteractionButton = {
- title: 'Mock Interaction Button',
- icon: MarkGithubIcon,
- size: Size.SMALL,
- onClick: () => () => {},
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-});
diff --git a/src/renderer/components/buttons/InteractionButton.tsx b/src/renderer/components/buttons/InteractionButton.tsx
deleted file mode 100644
index 63f979527..000000000
--- a/src/renderer/components/buttons/InteractionButton.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import type { FC, MouseEvent } from 'react';
-
-import type { Icon } from '@primer/octicons-react';
-import { IconButton } from '@primer/react';
-
-import type { Size } from '../../types';
-
-export interface IInteractionButton {
- title: string;
- icon: Icon;
- size: Size;
- onClick: (event?: MouseEvent) => void;
-}
-
-export const InteractionButton: FC = (
- props: IInteractionButton,
-) => {
- return (
-
- );
-};
diff --git a/src/renderer/components/buttons/__snapshots__/Button.test.tsx.snap b/src/renderer/components/buttons/__snapshots__/Button.test.tsx.snap
deleted file mode 100644
index bce89d3cb..000000000
--- a/src/renderer/components/buttons/__snapshots__/Button.test.tsx.snap
+++ /dev/null
@@ -1,181 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`renderer/components/buttons/Button.tsx should render with icon 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
- ,
- "container": ,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
-
-exports[`renderer/components/buttons/Button.tsx should render without icon 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
-
- Button
-
-
- ,
- "container":
-
- Button
-
-
,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
diff --git a/src/renderer/components/buttons/__snapshots__/InteractionButton.test.tsx.snap b/src/renderer/components/buttons/__snapshots__/InteractionButton.test.tsx.snap
deleted file mode 100644
index 15c211d38..000000000
--- a/src/renderer/components/buttons/__snapshots__/InteractionButton.test.tsx.snap
+++ /dev/null
@@ -1,106 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`renderer/components/buttons/InteractionButton.tsx should render 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
- ,
- "container": ,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
diff --git a/src/renderer/components/settings/AppearanceSettings.tsx b/src/renderer/components/settings/AppearanceSettings.tsx
index d9256f057..9e1dc1c1e 100644
--- a/src/renderer/components/settings/AppearanceSettings.tsx
+++ b/src/renderer/components/settings/AppearanceSettings.tsx
@@ -4,20 +4,22 @@ import { type FC, useContext, useEffect, useState } from 'react';
import {
CheckIcon,
CommentIcon,
+ DashIcon,
GitPullRequestIcon,
IssueClosedIcon,
MilestoneIcon,
PaintbrushIcon,
+ PlusIcon,
TagIcon,
+ XCircleIcon,
} from '@primer/octicons-react';
-import { useTheme } from '@primer/react';
+import { Button, ButtonGroup, IconButton, useTheme } from '@primer/react';
import type { ColorModeWithAuto } from '@primer/react/lib/ThemeProvider';
import { AppContext } from '../../context/App';
import { Size, Theme } from '../../types';
import { hasMultipleAccounts } from '../../utils/auth/utils';
import { zoomLevelToPercentage, zoomPercentageToLevel } from '../../utils/zoom';
-import { Button } from '../buttons/Button';
import { Checkbox } from '../fields/Checkbox';
import { RadioGroup } from '../fields/RadioGroup';
import { Legend } from './Legend';
@@ -54,6 +56,7 @@ export const AppearanceSettings: FC = () => {
return (
}
/>
+
{
}
/>
+
{
}
/>
+
{
return (
-
+
openGitifyReleaseNotes(appVersion)}>
Gitify {appVersion}
@@ -32,7 +32,7 @@ export const SettingsFooter: FC = () => {
-
+
{
key={getAccountUUID(account)}
className="mb-4 flex items-center justify-between rounded-md bg-gray-100 p-2 dark:bg-gray-sidebar"
>
-
+
openAccountProfile(account)}>
@{account.user.login}
@@ -126,7 +126,8 @@ export const AccountsRoute: FC = () => {
-
+
+
{
- Add new account
+ Add new account
diff --git a/src/renderer/routes/Login.tsx b/src/renderer/routes/Login.tsx
index 1feaebdcb..ba925042c 100644
--- a/src/renderer/routes/Login.tsx
+++ b/src/renderer/routes/Login.tsx
@@ -30,10 +30,10 @@ export const LoginRoute: FC = () => {
}, [loginWithGitHubApp]);
return (
-
+
-
+
{
-
+
Login with
loginUser()}
>
GitHub
diff --git a/src/renderer/routes/LoginWithOAuthApp.tsx b/src/renderer/routes/LoginWithOAuthApp.tsx
index 338ff966f..f8ec49e69 100644
--- a/src/renderer/routes/LoginWithOAuthApp.tsx
+++ b/src/renderer/routes/LoginWithOAuthApp.tsx
@@ -4,18 +4,12 @@ import { Form, type FormRenderProps } from 'react-final-form';
import { useNavigate } from 'react-router-dom';
import { BookIcon, PersonIcon, SignInIcon } from '@primer/octicons-react';
+import { Button, Stack, Text, Tooltip } from '@primer/react';
import { Header } from '../components/Header';
-import { Button } from '../components/buttons/Button';
import { FieldInput } from '../components/fields/FieldInput';
import { AppContext } from '../context/App';
-import {
- type ClientID,
- type ClientSecret,
- type Hostname,
- Size,
- type Token,
-} from '../types';
+import type { ClientID, ClientSecret, Hostname, Token } from '../types';
import type { LoginOAuthAppOptions } from '../utils/auth/types';
import {
getNewOAuthAppURL,
@@ -23,6 +17,7 @@ import {
isValidHostname,
isValidToken,
} from '../utils/auth/utils';
+import { openExternalLink } from '../utils/comms';
import { Constants } from '../utils/constants';
interface IValues {
@@ -76,19 +71,24 @@ export const LoginWithOAuthAppRoute: FC = () => {
label="Hostname"
placeholder="github.company.com"
helpText={
-
-
- Create new OAuth App
-
- on GitHub then paste your
- client id and client secret below.
-
+
+
+
+ openExternalLink(getNewOAuthAppURL(values.hostname))
+ }
+ >
+ Create new OAuth App
+
+ on GitHub then paste your
+
+
+ client id and client secret below.
+
+
}
/>
@@ -100,29 +100,28 @@ export const LoginWithOAuthAppRoute: FC = () => {
placeholder="ABC123DEF456"
/>
-
-
- Docs
-
-
-
- Login
-
-
+
+
+ openExternalLink(Constants.GITHUB_DOCS.OAUTH_URL)}
+ >
+ Docs
+
+
+
+
+
+ Login
+
+
+
);
};
diff --git a/src/renderer/routes/LoginWithPersonalAccessToken.tsx b/src/renderer/routes/LoginWithPersonalAccessToken.tsx
index cb0bb4421..a7e2da8a3 100644
--- a/src/renderer/routes/LoginWithPersonalAccessToken.tsx
+++ b/src/renderer/routes/LoginWithPersonalAccessToken.tsx
@@ -4,18 +4,19 @@ import { Form, type FormRenderProps } from 'react-final-form';
import { useNavigate } from 'react-router-dom';
import { BookIcon, KeyIcon, SignInIcon } from '@primer/octicons-react';
+import { Button, Stack, Text, Tooltip } from '@primer/react';
import { Header } from '../components/Header';
-import { Button } from '../components/buttons/Button';
import { FieldInput } from '../components/fields/FieldInput';
import { AppContext } from '../context/App';
-import { type Hostname, Size, type Token } from '../types';
+import type { Hostname, Token } from '../types';
import type { LoginPersonalAccessTokenOptions } from '../utils/auth/types';
import {
getNewTokenURL,
isValidHostname,
isValidToken,
} from '../utils/auth/utils';
+import { openExternalLink } from '../utils/comms';
import { Constants } from '../utils/constants';
interface IValues {
@@ -61,63 +62,61 @@ export const LoginWithPersonalAccessTokenRoute: FC = () => {
label="Hostname"
placeholder="github.company.com"
helpText={
-
-
+
+
Change only if you are using GitHub Enterprise Server.
-
-
+
+
+ openExternalLink(getNewTokenURL(values.hostname))
+ }
>
Generate a PAT
-
- on GitHub then paste your{' '}
- token below.
-
-
-
+ on GitHub then paste your token below.
+
+
The required scopes will be automatically selected for you.
-
-
+
+
}
/>
-
-
{!isValidToken && (
This token could not be validated with {values.hostname}.
)}
-
-
-
- Docs
-
-
- Login
-
-
+
+
+ openExternalLink(Constants.GITHUB_DOCS.PAT_URL)}
+ >
+ Docs
+
+
+
+
+
+ Login
+
+
+
);
};
diff --git a/src/renderer/routes/Settings.tsx b/src/renderer/routes/Settings.tsx
index 978855fc5..25b2f4154 100644
--- a/src/renderer/routes/Settings.tsx
+++ b/src/renderer/routes/Settings.tsx
@@ -1,7 +1,7 @@
import { type FC, useContext } from 'react';
import { GearIcon } from '@primer/octicons-react';
-import { Button } from '@primer/react';
+import { Button, Stack } from '@primer/react';
import { Header } from '../components/Header';
import { AppearanceSettings } from '../components/settings/AppearanceSettings';
@@ -20,21 +20,23 @@ export const SettingsRoute: FC = () => {
Settings
-
-
-
-
+
+
+
+
+
- {
- confirm(
- 'Please confirm that you want to reset all settings to the Gitify defaults?',
- ) && resetSettings();
- }}
- >
- Reset settings
-
+ {
+ confirm(
+ 'Please confirm that you want to reset all settings to the Gitify defaults?',
+ ) && resetSettings();
+ }}
+ >
+ Reset settings
+
+
From 5dac73c58d1cb70d818fd1f8be02b59ae62b54ff Mon Sep 17 00:00:00 2001
From: Adam Setch
Date: Sun, 13 Oct 2024 12:20:53 -0400
Subject: [PATCH 06/48] refactor: adopt primer ui components
Signed-off-by: Adam Setch
---
package.json | 1 -
pnpm-lock.yaml | 16 --------
.../components/buttons/SidebarButton.test.tsx | 37 ------------------
.../components/buttons/SidebarButton.tsx | 38 -------------------
.../routes/LoginWithPersonalAccessToken.tsx | 7 ++--
5 files changed, 4 insertions(+), 95 deletions(-)
delete mode 100644 src/renderer/components/buttons/SidebarButton.test.tsx
delete mode 100644 src/renderer/components/buttons/SidebarButton.tsx
diff --git a/package.json b/package.json
index d744aa809..e1916851a 100644
--- a/package.json
+++ b/package.json
@@ -149,7 +149,6 @@
"@types/react-router-dom": "5.3.3",
"autoprefixer": "10.4.20",
"axios": "1.7.7",
- "class-variance-authority": "0.7.0",
"clsx": "2.1.1",
"concurrently": "9.0.1",
"copy-webpack-plugin": "12.0.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 6aaad7a39..656856df0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -72,9 +72,6 @@ importers:
axios:
specifier: 1.7.7
version: 1.7.7
- class-variance-authority:
- specifier: 0.7.0
- version: 0.7.0
clsx:
specifier: 2.1.1
version: 2.1.1
@@ -1384,9 +1381,6 @@ packages:
cjs-module-lexer@1.2.3:
resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==}
- class-variance-authority@0.7.0:
- resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==}
-
clean-css@5.3.3:
resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==}
engines: {node: '>= 10.0'}
@@ -1426,10 +1420,6 @@ packages:
resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==}
engines: {node: '>=6'}
- clsx@2.0.0:
- resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
- engines: {node: '>=6'}
-
clsx@2.1.1:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
@@ -6026,10 +6016,6 @@ snapshots:
cjs-module-lexer@1.2.3: {}
- class-variance-authority@0.7.0:
- dependencies:
- clsx: 2.0.0
-
clean-css@5.3.3:
dependencies:
source-map: 0.6.1
@@ -6068,8 +6054,6 @@ snapshots:
clsx@1.2.1: {}
- clsx@2.0.0: {}
-
clsx@2.1.1: {}
co@4.6.0: {}
diff --git a/src/renderer/components/buttons/SidebarButton.test.tsx b/src/renderer/components/buttons/SidebarButton.test.tsx
deleted file mode 100644
index e3c0f68f0..000000000
--- a/src/renderer/components/buttons/SidebarButton.test.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import { MarkGithubIcon } from '@primer/octicons-react';
-import { render } from '@testing-library/react';
-import { Size } from '../../types';
-import { type ISidebarButton, SidebarButton } from './SidebarButton';
-
-describe('renderer/components/buttons/SidebarButton.tsx', () => {
- it('should render with metric', () => {
- const props: ISidebarButton = {
- title: 'Mock Sidebar Button',
- metric: 1,
- icon: MarkGithubIcon,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-
- it('should render without metric', () => {
- const props: ISidebarButton = {
- title: 'Mock Sidebar Button',
- metric: 0,
- icon: MarkGithubIcon,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-
- it('should render - with specific size', () => {
- const props: ISidebarButton = {
- title: 'Mock Sidebar Button',
- metric: 0,
- icon: MarkGithubIcon,
- size: Size.MEDIUM,
- };
- const tree = render();
- expect(tree).toMatchSnapshot();
- });
-});
diff --git a/src/renderer/components/buttons/SidebarButton.tsx b/src/renderer/components/buttons/SidebarButton.tsx
deleted file mode 100644
index ea9c11398..000000000
--- a/src/renderer/components/buttons/SidebarButton.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import type { Icon } from '@primer/octicons-react';
-import type { FC } from 'react';
-import { IconColor, Size } from '../../types';
-import { cn } from '../../utils/cn';
-
-export interface ISidebarButton {
- title: string;
- metric?: number;
- icon: Icon;
- onClick?: () => void;
- size?: Size;
- loading?: boolean;
- disabled?: boolean;
-}
-
-export const SidebarButton: FC = (props: ISidebarButton) => {
- const hasMetric = props?.metric > 0;
-
- return (
- props.onClick()}
- title={props.title}
- disabled={props.disabled}
- >
-
- {hasMetric && props.metric}
-
- );
-};
diff --git a/src/renderer/routes/LoginWithPersonalAccessToken.tsx b/src/renderer/routes/LoginWithPersonalAccessToken.tsx
index a7e2da8a3..24c1acc31 100644
--- a/src/renderer/routes/LoginWithPersonalAccessToken.tsx
+++ b/src/renderer/routes/LoginWithPersonalAccessToken.tsx
@@ -4,7 +4,7 @@ import { Form, type FormRenderProps } from 'react-final-form';
import { useNavigate } from 'react-router-dom';
import { BookIcon, KeyIcon, SignInIcon } from '@primer/octicons-react';
-import { Button, Stack, Text, Tooltip } from '@primer/react';
+import { Box, Button, Stack, Text, Tooltip } from '@primer/react';
import { Header } from '../components/Header';
import { FieldInput } from '../components/fields/FieldInput';
@@ -56,7 +56,7 @@ export const LoginWithPersonalAccessTokenRoute: FC = () => {
const { handleSubmit, submitting, pristine, values } = formProps;
return (
-
+
);
};
From 9a48cd2c183b74e40a3c3767186cb7f9018e1946 Mon Sep 17 00:00:00 2001
From: Adam Setch
Date: Sun, 13 Oct 2024 13:10:16 -0400
Subject: [PATCH 07/48] refactor: adopt primer ui components
Signed-off-by: Adam Setch
---
src/renderer/components/Sidebar.tsx | 25 +-
.../__snapshots__/SidebarButton.test.tsx.snap | 318 ------------------
src/renderer/components/icons/LogoIcon.tsx | 2 +-
3 files changed, 13 insertions(+), 332 deletions(-)
delete mode 100644 src/renderer/components/buttons/__snapshots__/SidebarButton.test.tsx.snap
diff --git a/src/renderer/components/Sidebar.tsx b/src/renderer/components/Sidebar.tsx
index 5a9a586ec..f47f1128e 100644
--- a/src/renderer/components/Sidebar.tsx
+++ b/src/renderer/components/Sidebar.tsx
@@ -11,9 +11,8 @@ import {
XCircleIcon,
} from '@primer/octicons-react';
-import { Button, IconButton, Stack } from '@primer/react';
+import { IconButton, Stack } from '@primer/react';
import { AppContext } from '../context/App';
-import { Size } from '../types';
import { quitApp } from '../utils/comms';
import { Constants } from '../utils/constants';
import { getFilterCount } from '../utils/helpers';
@@ -81,32 +80,32 @@ export const Sidebar: FC = () => {
gap="condensed"
padding="normal"
>
- navigate('/', { replace: true })}
- >
-
-
+ />
- 0 ? 'primary' : 'invisible'}
- count={isLoggedIn ? notificationsCount : null}
+ tooltipDirection="e"
onClick={() => openGitHubNotifications(primaryAccountHostname)}
/>
{/* TODO - explore https://primer.style/components/selectpanel/react/alpha/ for a better UI for filters */}
{isLoggedIn && (
- 0 ? 'primary' : 'invisible'}
- count={filterCount}
+ tooltipDirection="e"
onClick={() => toggleFilters()}
/>
)}
diff --git a/src/renderer/components/buttons/__snapshots__/SidebarButton.test.tsx.snap b/src/renderer/components/buttons/__snapshots__/SidebarButton.test.tsx.snap
deleted file mode 100644
index 841b510a7..000000000
--- a/src/renderer/components/buttons/__snapshots__/SidebarButton.test.tsx.snap
+++ /dev/null
@@ -1,318 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`renderer/components/buttons/SidebarButton.tsx should render - with specific size 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
-
-
- ,
- "container":
-
-
,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
-
-exports[`renderer/components/buttons/SidebarButton.tsx should render with metric 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
-
-
- ,
- "container":
-
-
,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
-
-exports[`renderer/components/buttons/SidebarButton.tsx should render without metric 1`] = `
-{
- "asFragment": [Function],
- "baseElement":
-
-
-
- ,
- "container":
-
-
,
- "debug": [Function],
- "findAllByAltText": [Function],
- "findAllByDisplayValue": [Function],
- "findAllByLabelText": [Function],
- "findAllByPlaceholderText": [Function],
- "findAllByRole": [Function],
- "findAllByTestId": [Function],
- "findAllByText": [Function],
- "findAllByTitle": [Function],
- "findByAltText": [Function],
- "findByDisplayValue": [Function],
- "findByLabelText": [Function],
- "findByPlaceholderText": [Function],
- "findByRole": [Function],
- "findByTestId": [Function],
- "findByText": [Function],
- "findByTitle": [Function],
- "getAllByAltText": [Function],
- "getAllByDisplayValue": [Function],
- "getAllByLabelText": [Function],
- "getAllByPlaceholderText": [Function],
- "getAllByRole": [Function],
- "getAllByTestId": [Function],
- "getAllByText": [Function],
- "getAllByTitle": [Function],
- "getByAltText": [Function],
- "getByDisplayValue": [Function],
- "getByLabelText": [Function],
- "getByPlaceholderText": [Function],
- "getByRole": [Function],
- "getByTestId": [Function],
- "getByText": [Function],
- "getByTitle": [Function],
- "queryAllByAltText": [Function],
- "queryAllByDisplayValue": [Function],
- "queryAllByLabelText": [Function],
- "queryAllByPlaceholderText": [Function],
- "queryAllByRole": [Function],
- "queryAllByTestId": [Function],
- "queryAllByText": [Function],
- "queryAllByTitle": [Function],
- "queryByAltText": [Function],
- "queryByDisplayValue": [Function],
- "queryByLabelText": [Function],
- "queryByPlaceholderText": [Function],
- "queryByRole": [Function],
- "queryByTestId": [Function],
- "queryByText": [Function],
- "queryByTitle": [Function],
- "rerender": [Function],
- "unmount": [Function],
-}
-`;
diff --git a/src/renderer/components/icons/LogoIcon.tsx b/src/renderer/components/icons/LogoIcon.tsx
index 301c6d6d4..f080b0b2c 100644
--- a/src/renderer/components/icons/LogoIcon.tsx
+++ b/src/renderer/components/icons/LogoIcon.tsx
@@ -18,7 +18,7 @@ const DARK_GRADIENT_END = '#555B6E';
export const LogoIcon: FC = ({
isDark,
onClick,
- size = Size.MEDIUM,
+ size = Size.SMALL,
...props
}: ILogoIcon) => (
+ ,
+ "container":
+
+
+
+
+
+
+

+
+ @
+ octocat
+
+
+
+
+
+ 0
+
+
+ (
+ 0
+ )
+
+
+
+
+
+
+
+ My Issues
+
+
+ My Pull Requests
+
+
+ No notifications for account
+
+
+
-
-
-
- @
- octocat
+
+

+
+ @
+ octocat
+
+
-
+
+
+ 2
+
+
+ (
+ 2
+ )
+
+
+
-
+
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+ My Pull Requests
+
+
+
+
+
+
+
+ Hide account notifications
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
+
-
-
-
+
+
+
+
+
+ Mark as read
+
+
+
+
+
+
+
+ Unsubscribe from thread
+
+
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
- @
- octocat
+
+

+
+ @
+ octocat
+
+
-
-
-
+
+
+ 2
+
+
+ (
+ 2
+ )
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+ My Issues
+
+
+
+
+
+
+
+ My Pull Requests
+
+
+
+
+
+
+
+ Hide account notifications
+
+
+
+
+
+ Repository Notifications
+
+
+
-
- gitify-app/notifications-test
+
+
+
+
+

+
+ gitify-app/notifications-test
+
+
+
+
+
+ 2
+
+
+ (
+ 2
+ )
+
+
+
+
+
+
+
+
+
+
+
+ Mark repository as done
+
+
+
+
+
+
+
+ Mark repository as read
+
+
+
+
+
+
+
+ Hide repository notifications
+
+
+
+
+
+ NotificationRow
+
+
+ NotificationRow
+
+
+