Date: Tue, 24 Mar 2026 14:25:51 +0100
Subject: [PATCH 08/13] chore: use icons from library everywhere
---
.../blueprint-collection.tsx | 7 -
ui/src/design-system/components/card/card.tsx | 8 +-
.../components/checkbox/checkbox.tsx | 8 +-
.../components/dialog/dialog.tsx | 4 +-
.../components/icon/assets/checkmark.svg | 3 -
.../components/icon/assets/close.svg | 3 -
.../components/icon/assets/detections.svg | 3 -
.../components/icon/assets/download.svg | 3 -
.../components/icon/assets/filters.svg | 3 -
.../components/icon/assets/gallery-view.svg | 3 -
.../components/icon/assets/identifiers.svg | 3 -
.../components/icon/assets/info.svg | 3 -
.../components/icon/assets/members.svg | 3 -
.../components/icon/assets/photograph.svg | 3 -
.../components/icon/assets/play-button.svg | 4 -
.../components/icon/assets/radix/check.svg | 8 -
.../icon/assets/radix/circle-backslash.svg | 8 -
.../components/icon/assets/radix/clock.svg | 5 -
.../components/icon/assets/radix/cross.svg | 5 -
.../components/icon/assets/radix/error.svg | 5 -
.../icon/assets/radix/external-link.svg | 5 -
.../icon/assets/radix/heart-filled.svg | 5 -
.../components/icon/assets/radix/heart.svg | 5 -
.../components/icon/assets/radix/minus.svg | 5 -
.../components/icon/assets/radix/options.svg | 5 -
.../components/icon/assets/radix/pencil.svg | 5 -
.../components/icon/assets/radix/plus.svg | 5 -
.../icon/assets/radix/question-mark.svg | 8 -
.../components/icon/assets/radix/search.svg | 5 -
.../icon/assets/radix/toggle-down.svg | 5 -
.../icon/assets/radix/toggle-left.svg | 5 -
.../icon/assets/radix/toggle-right.svg | 5 -
.../components/icon/assets/radix/trash.svg | 5 -
.../components/icon/assets/radix/update.svg | 8 -
.../components/icon/assets/settings.svg | 3 -
.../components/icon/assets/shield-check.svg | 3 -
.../components/icon/assets/sort.svg | 3 -
.../components/icon/assets/table-view.svg | 3 -
.../components/icon/icon.module.scss | 40 ----
ui/src/design-system/components/icon/icon.tsx | 176 ------------------
.../image-carousel/image-carousel.tsx | 9 +-
.../assets/captures.svg} | 0
.../assets/deployments.svg | 0
.../assets/jobs.svg} | 0
.../assets/occurrences.svg | 0
.../assets/project.svg} | 0
.../{icon => navigation}/assets/sessions.svg | 0
.../assets/taxa.svg} | 0
.../navigation/navigation-bar-icon.tsx | 44 +++++
.../navigation/navigation-bar.module.scss | 12 ++
.../components/navigation/navigation-bar.tsx | 10 +-
.../components/popover/popover.tsx | 4 +-
.../components/status-info/status-info.tsx | 27 +++
.../components}/status-info/types.ts | 0
.../table/table-header/table-header.tsx | 5 +-
ui/src/design-system/components/tabs/tabs.tsx | 12 +-
.../components/toggle-group/toggle-group.tsx | 10 +-
.../wizard/status-bullet/status-bullet.tsx | 11 +-
.../components/wizard/wizard.tsx | 4 +-
ui/src/pages/auth/login.tsx | 9 +-
ui/src/pages/auth/sign-up.tsx | 9 +-
ui/src/pages/captures/captures.tsx | 6 +-
ui/src/pages/job-details/job-details.tsx | 4 +-
.../id-quick-actions/id-button.tsx | 5 -
.../pages/occurrences/occurrence-gallery.tsx | 15 +-
ui/src/pages/occurrences/occurrences.tsx | 7 +-
.../processing-services/connection-status.tsx | 6 +-
.../status-info/status-info.module.scss | 53 ------
.../status-info/status-info.tsx | 46 -----
.../project/storage/connection-status.tsx | 4 +-
.../status-info/status-info.module.scss | 53 ------
.../storage/status-info/status-info.tsx | 45 -----
.../project/storage/status-info/types.ts | 5 -
ui/src/pages/sessions/sessions.tsx | 6 +-
ui/src/pages/species/species.tsx | 6 +-
ui/src/utils/useNavItems.ts | 9 -
76 files changed, 138 insertions(+), 694 deletions(-)
delete mode 100644 ui/src/design-system/components/icon/assets/checkmark.svg
delete mode 100644 ui/src/design-system/components/icon/assets/close.svg
delete mode 100755 ui/src/design-system/components/icon/assets/detections.svg
delete mode 100755 ui/src/design-system/components/icon/assets/download.svg
delete mode 100755 ui/src/design-system/components/icon/assets/filters.svg
delete mode 100755 ui/src/design-system/components/icon/assets/gallery-view.svg
delete mode 100755 ui/src/design-system/components/icon/assets/identifiers.svg
delete mode 100755 ui/src/design-system/components/icon/assets/info.svg
delete mode 100755 ui/src/design-system/components/icon/assets/members.svg
delete mode 100644 ui/src/design-system/components/icon/assets/photograph.svg
delete mode 100755 ui/src/design-system/components/icon/assets/play-button.svg
delete mode 100644 ui/src/design-system/components/icon/assets/radix/check.svg
delete mode 100644 ui/src/design-system/components/icon/assets/radix/circle-backslash.svg
delete mode 100644 ui/src/design-system/components/icon/assets/radix/clock.svg
delete mode 100644 ui/src/design-system/components/icon/assets/radix/cross.svg
delete mode 100644 ui/src/design-system/components/icon/assets/radix/error.svg
delete mode 100644 ui/src/design-system/components/icon/assets/radix/external-link.svg
delete mode 100755 ui/src/design-system/components/icon/assets/radix/heart-filled.svg
delete mode 100755 ui/src/design-system/components/icon/assets/radix/heart.svg
delete mode 100644 ui/src/design-system/components/icon/assets/radix/minus.svg
delete mode 100755 ui/src/design-system/components/icon/assets/radix/options.svg
delete mode 100644 ui/src/design-system/components/icon/assets/radix/pencil.svg
delete mode 100644 ui/src/design-system/components/icon/assets/radix/plus.svg
delete mode 100644 ui/src/design-system/components/icon/assets/radix/question-mark.svg
delete mode 100644 ui/src/design-system/components/icon/assets/radix/search.svg
delete mode 100755 ui/src/design-system/components/icon/assets/radix/toggle-down.svg
delete mode 100755 ui/src/design-system/components/icon/assets/radix/toggle-left.svg
delete mode 100755 ui/src/design-system/components/icon/assets/radix/toggle-right.svg
delete mode 100644 ui/src/design-system/components/icon/assets/radix/trash.svg
delete mode 100644 ui/src/design-system/components/icon/assets/radix/update.svg
delete mode 100644 ui/src/design-system/components/icon/assets/settings.svg
delete mode 100644 ui/src/design-system/components/icon/assets/shield-check.svg
delete mode 100755 ui/src/design-system/components/icon/assets/sort.svg
delete mode 100755 ui/src/design-system/components/icon/assets/table-view.svg
delete mode 100644 ui/src/design-system/components/icon/icon.module.scss
delete mode 100644 ui/src/design-system/components/icon/icon.tsx
rename ui/src/design-system/components/{icon/assets/images.svg => navigation/assets/captures.svg} (100%)
rename ui/src/design-system/components/{icon => navigation}/assets/deployments.svg (100%)
rename ui/src/design-system/components/{icon/assets/batch-id.svg => navigation/assets/jobs.svg} (100%)
rename ui/src/design-system/components/{icon => navigation}/assets/occurrences.svg (100%)
rename ui/src/design-system/components/{icon/assets/overview.svg => navigation/assets/project.svg} (100%)
rename ui/src/design-system/components/{icon => navigation}/assets/sessions.svg (100%)
rename ui/src/design-system/components/{icon/assets/species.svg => navigation/assets/taxa.svg} (100%)
create mode 100644 ui/src/design-system/components/navigation/navigation-bar-icon.tsx
create mode 100644 ui/src/design-system/components/status-info/status-info.tsx
rename ui/src/{pages/project/processing-services => design-system/components}/status-info/types.ts (100%)
delete mode 100644 ui/src/pages/project/processing-services/status-info/status-info.module.scss
delete mode 100644 ui/src/pages/project/processing-services/status-info/status-info.tsx
delete mode 100644 ui/src/pages/project/storage/status-info/status-info.module.scss
delete mode 100644 ui/src/pages/project/storage/status-info/status-info.tsx
delete mode 100644 ui/src/pages/project/storage/status-info/types.ts
diff --git a/ui/src/components/blueprint-collection/blueprint-collection.tsx b/ui/src/components/blueprint-collection/blueprint-collection.tsx
index 6825a10f5..fee6b85a3 100644
--- a/ui/src/components/blueprint-collection/blueprint-collection.tsx
+++ b/ui/src/components/blueprint-collection/blueprint-collection.tsx
@@ -1,6 +1,5 @@
import classNames from 'classnames'
import { LicenseInfo } from 'components/license-info/license-info'
-import { Icon, IconType } from 'design-system/components/icon/icon'
import { BasicTooltip } from 'design-system/components/tooltip/basic-tooltip'
import { EyeIcon } from 'lucide-react'
import { buttonVariants } from 'nova-ui-kit'
@@ -54,12 +53,6 @@ export const BlueprintItem = ({
return (
- {item.countLabel?.length ? (
-
-
- {item.countLabel}
-
- ) : null}
{item.timeLabel}
diff --git a/ui/src/design-system/components/card/card.tsx b/ui/src/design-system/components/card/card.tsx
index 86e34d860..beb962646 100644
--- a/ui/src/design-system/components/card/card.tsx
+++ b/ui/src/design-system/components/card/card.tsx
@@ -1,8 +1,8 @@
import classNames from 'classnames'
+import { ImageIcon } from 'lucide-react'
import { ReactNode } from 'react'
import { Link } from 'react-router-dom'
import { Badge } from '../badge/badge'
-import { Icon, IconTheme, IconType } from '../icon/icon'
import styles from './card.module.scss'
export enum CardSize {
@@ -49,11 +49,7 @@ export const Card = ({
)
) : (
-
+
)}
diff --git a/ui/src/design-system/components/checkbox/checkbox.tsx b/ui/src/design-system/components/checkbox/checkbox.tsx
index e6e2098e5..4d8ca6961 100644
--- a/ui/src/design-system/components/checkbox/checkbox.tsx
+++ b/ui/src/design-system/components/checkbox/checkbox.tsx
@@ -1,6 +1,6 @@
import * as _Checkbox from '@radix-ui/react-checkbox'
import classNames from 'classnames'
-import { Icon, IconTheme, IconType } from 'design-system/components/icon/icon'
+import { CheckIcon, MinusIcon } from 'lucide-react'
import styles from './checkbox.module.scss'
export enum CheckboxTheme {
@@ -38,11 +38,9 @@ export const Checkbox = ({
onCheckedChange={onCheckedChange}
>
<_Checkbox.Indicator className={styles.checkboxIndicator}>
- {checked === true && (
-
- )}
+ {checked === true &&
}
{checked === 'indeterminate' && (
-
+
)}
diff --git a/ui/src/design-system/components/dialog/dialog.tsx b/ui/src/design-system/components/dialog/dialog.tsx
index 242b39e8e..1866e11fb 100644
--- a/ui/src/design-system/components/dialog/dialog.tsx
+++ b/ui/src/design-system/components/dialog/dialog.tsx
@@ -1,8 +1,8 @@
import * as Dialog from '@radix-ui/react-dialog'
import classNames from 'classnames'
import { ErrorState } from 'components/error-state/error-state'
+import { XIcon } from 'lucide-react'
import { ReactNode } from 'react'
-import { Icon, IconType } from '../icon/icon'
import { LoadingSpinner } from '../loading-spinner/loading-spinner'
import styles from './dialog.module.scss'
@@ -69,7 +69,7 @@ const Content = ({
)}
-
+
diff --git a/ui/src/design-system/components/icon/assets/checkmark.svg b/ui/src/design-system/components/icon/assets/checkmark.svg
deleted file mode 100644
index cfdb25e8e..000000000
--- a/ui/src/design-system/components/icon/assets/checkmark.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/close.svg b/ui/src/design-system/components/icon/assets/close.svg
deleted file mode 100644
index 8bbe2ad67..000000000
--- a/ui/src/design-system/components/icon/assets/close.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/detections.svg b/ui/src/design-system/components/icon/assets/detections.svg
deleted file mode 100755
index 591666953..000000000
--- a/ui/src/design-system/components/icon/assets/detections.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/download.svg b/ui/src/design-system/components/icon/assets/download.svg
deleted file mode 100755
index e39d17627..000000000
--- a/ui/src/design-system/components/icon/assets/download.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/filters.svg b/ui/src/design-system/components/icon/assets/filters.svg
deleted file mode 100755
index 1bb12dafb..000000000
--- a/ui/src/design-system/components/icon/assets/filters.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/gallery-view.svg b/ui/src/design-system/components/icon/assets/gallery-view.svg
deleted file mode 100755
index 2fe7fadb5..000000000
--- a/ui/src/design-system/components/icon/assets/gallery-view.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/identifiers.svg b/ui/src/design-system/components/icon/assets/identifiers.svg
deleted file mode 100755
index c5a244f61..000000000
--- a/ui/src/design-system/components/icon/assets/identifiers.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/info.svg b/ui/src/design-system/components/icon/assets/info.svg
deleted file mode 100755
index e75fb86a6..000000000
--- a/ui/src/design-system/components/icon/assets/info.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/members.svg b/ui/src/design-system/components/icon/assets/members.svg
deleted file mode 100755
index 93d50e20d..000000000
--- a/ui/src/design-system/components/icon/assets/members.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/photograph.svg b/ui/src/design-system/components/icon/assets/photograph.svg
deleted file mode 100644
index a06208b2e..000000000
--- a/ui/src/design-system/components/icon/assets/photograph.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/play-button.svg b/ui/src/design-system/components/icon/assets/play-button.svg
deleted file mode 100755
index 01f105e94..000000000
--- a/ui/src/design-system/components/icon/assets/play-button.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/check.svg b/ui/src/design-system/components/icon/assets/radix/check.svg
deleted file mode 100644
index 476a3baa1..000000000
--- a/ui/src/design-system/components/icon/assets/radix/check.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/circle-backslash.svg b/ui/src/design-system/components/icon/assets/radix/circle-backslash.svg
deleted file mode 100644
index 40c4dd539..000000000
--- a/ui/src/design-system/components/icon/assets/radix/circle-backslash.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/clock.svg b/ui/src/design-system/components/icon/assets/radix/clock.svg
deleted file mode 100644
index 9009039a1..000000000
--- a/ui/src/design-system/components/icon/assets/radix/clock.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/cross.svg b/ui/src/design-system/components/icon/assets/radix/cross.svg
deleted file mode 100644
index 07601dd80..000000000
--- a/ui/src/design-system/components/icon/assets/radix/cross.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/error.svg b/ui/src/design-system/components/icon/assets/radix/error.svg
deleted file mode 100644
index cfa5e8b17..000000000
--- a/ui/src/design-system/components/icon/assets/radix/error.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/external-link.svg b/ui/src/design-system/components/icon/assets/radix/external-link.svg
deleted file mode 100644
index f09326097..000000000
--- a/ui/src/design-system/components/icon/assets/radix/external-link.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/heart-filled.svg b/ui/src/design-system/components/icon/assets/radix/heart-filled.svg
deleted file mode 100755
index a92ac8091..000000000
--- a/ui/src/design-system/components/icon/assets/radix/heart-filled.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/heart.svg b/ui/src/design-system/components/icon/assets/radix/heart.svg
deleted file mode 100755
index 5a2a4b76f..000000000
--- a/ui/src/design-system/components/icon/assets/radix/heart.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/minus.svg b/ui/src/design-system/components/icon/assets/radix/minus.svg
deleted file mode 100644
index 7256b1a55..000000000
--- a/ui/src/design-system/components/icon/assets/radix/minus.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
\ No newline at end of file
diff --git a/ui/src/design-system/components/icon/assets/radix/options.svg b/ui/src/design-system/components/icon/assets/radix/options.svg
deleted file mode 100755
index 4e0e53997..000000000
--- a/ui/src/design-system/components/icon/assets/radix/options.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/pencil.svg b/ui/src/design-system/components/icon/assets/radix/pencil.svg
deleted file mode 100644
index 1c0d5270f..000000000
--- a/ui/src/design-system/components/icon/assets/radix/pencil.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/plus.svg b/ui/src/design-system/components/icon/assets/radix/plus.svg
deleted file mode 100644
index 583c01355..000000000
--- a/ui/src/design-system/components/icon/assets/radix/plus.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/question-mark.svg b/ui/src/design-system/components/icon/assets/radix/question-mark.svg
deleted file mode 100644
index 577aae534..000000000
--- a/ui/src/design-system/components/icon/assets/radix/question-mark.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/search.svg b/ui/src/design-system/components/icon/assets/radix/search.svg
deleted file mode 100644
index ce7cb3552..000000000
--- a/ui/src/design-system/components/icon/assets/radix/search.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/toggle-down.svg b/ui/src/design-system/components/icon/assets/radix/toggle-down.svg
deleted file mode 100755
index 4aee7beef..000000000
--- a/ui/src/design-system/components/icon/assets/radix/toggle-down.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
\ No newline at end of file
diff --git a/ui/src/design-system/components/icon/assets/radix/toggle-left.svg b/ui/src/design-system/components/icon/assets/radix/toggle-left.svg
deleted file mode 100755
index de0d7a9d5..000000000
--- a/ui/src/design-system/components/icon/assets/radix/toggle-left.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/toggle-right.svg b/ui/src/design-system/components/icon/assets/radix/toggle-right.svg
deleted file mode 100755
index f62a1ee75..000000000
--- a/ui/src/design-system/components/icon/assets/radix/toggle-right.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/trash.svg b/ui/src/design-system/components/icon/assets/radix/trash.svg
deleted file mode 100644
index 3d130eaa2..000000000
--- a/ui/src/design-system/components/icon/assets/radix/trash.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/radix/update.svg b/ui/src/design-system/components/icon/assets/radix/update.svg
deleted file mode 100644
index b529b2b08..000000000
--- a/ui/src/design-system/components/icon/assets/radix/update.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/settings.svg b/ui/src/design-system/components/icon/assets/settings.svg
deleted file mode 100644
index cfc89e360..000000000
--- a/ui/src/design-system/components/icon/assets/settings.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/shield-check.svg b/ui/src/design-system/components/icon/assets/shield-check.svg
deleted file mode 100644
index 12076711c..000000000
--- a/ui/src/design-system/components/icon/assets/shield-check.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/sort.svg b/ui/src/design-system/components/icon/assets/sort.svg
deleted file mode 100755
index e10dcb12e..000000000
--- a/ui/src/design-system/components/icon/assets/sort.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/assets/table-view.svg b/ui/src/design-system/components/icon/assets/table-view.svg
deleted file mode 100755
index b74fcce49..000000000
--- a/ui/src/design-system/components/icon/assets/table-view.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/ui/src/design-system/components/icon/icon.module.scss b/ui/src/design-system/components/icon/icon.module.scss
deleted file mode 100644
index a10a7d27f..000000000
--- a/ui/src/design-system/components/icon/icon.module.scss
+++ /dev/null
@@ -1,40 +0,0 @@
-@import 'src/design-system/variables/colors.scss';
-@import 'src/design-system/variables/typography.scss';
-
-.wrapper {
- display: inline-flex;
- align-items: center;
- justify-content: center;
- transition: transform 400ms ease;
-
- &.light {
- color: $color-generic-white;
- }
-
- &.dark {
- color: $color-neutral-700;
- }
-
- &.neutral {
- color: $color-neutral-300;
- }
-
- &.primary {
- color: $color-primary-1-600;
- }
-
- &.success {
- color: $color-success-700;
- }
-
- &.error {
- color: $color-destructive-600;
- }
-
- &.fixedSized {
- > * {
- width: 100%;
- height: 100%;
- }
- }
-}
diff --git a/ui/src/design-system/components/icon/icon.tsx b/ui/src/design-system/components/icon/icon.tsx
deleted file mode 100644
index 6a6c12548..000000000
--- a/ui/src/design-system/components/icon/icon.tsx
+++ /dev/null
@@ -1,176 +0,0 @@
-import classNames from 'classnames'
-import { FunctionComponent } from 'react'
-import BatchId from './assets/batch-id.svg?react'
-import Checkmark from './assets/checkmark.svg?react'
-import Close from './assets/close.svg?react'
-import Deployments from './assets/deployments.svg?react'
-import Detections from './assets/detections.svg?react'
-import Download from './assets/download.svg?react'
-import Filters from './assets/filters.svg?react'
-import GalleryView from './assets/gallery-view.svg?react'
-import Images from './assets/images.svg?react'
-import Info from './assets/info.svg?react'
-import Members from './assets/members.svg?react'
-import Occurrences from './assets/occurrences.svg?react'
-import Overview from './assets/overview.svg?react'
-import Photograph from './assets/photograph.svg?react'
-import PlayButton from './assets/play-button.svg?react'
-import RadixCheck from './assets/radix/check.svg?react'
-import CircleBackslash from './assets/radix/circle-backslash.svg?react'
-import RadixClock from './assets/radix/clock.svg?react'
-import Cross from './assets/radix/cross.svg?react'
-import Error from './assets/radix/error.svg?react'
-import ExternalLink from './assets/radix/external-link.svg?react'
-import HeartFilled from './assets/radix/heart-filled.svg?react'
-import Heart from './assets/radix/heart.svg?react'
-import RadixMinus from './assets/radix/minus.svg?react'
-import Options from './assets/radix/options.svg?react'
-import Pencil from './assets/radix/pencil.svg?react'
-import Plus from './assets/radix/plus.svg?react'
-import RadixQuestionMark from './assets/radix/question-mark.svg?react'
-import RadixSearch from './assets/radix/search.svg?react'
-import ToggleDown from './assets/radix/toggle-down.svg?react'
-import ToggleLeft from './assets/radix/toggle-left.svg?react'
-import ToggleRight from './assets/radix/toggle-right.svg?react'
-import RadixTrash from './assets/radix/trash.svg?react'
-import RadixUpdate from './assets/radix/update.svg?react'
-import Sessions from './assets/sessions.svg?react'
-import Settings from './assets/settings.svg?react'
-import ShieldCheck from './assets/shield-check.svg?react'
-import Sort from './assets/sort.svg?react'
-import Species from './assets/species.svg?react'
-import TableView from './assets/table-view.svg?react'
-import styles from './icon.module.scss'
-
-export enum IconType {
- BatchId = 'batch-id',
- Checkmark = 'checkmark',
- CircleBackslash = 'circle-backslash',
- Close = 'close',
- Cross = 'cross',
- Deployments = 'deployments',
- Detections = 'detections',
- Download = 'download',
- Error = 'error',
- ExternalLink = 'external-link',
- Filters = 'filters',
- GalleryView = 'gallery-view',
- Heart = 'heart',
- HeartFilled = 'heart-filled',
- Images = 'images',
- Info = 'info',
- Members = 'members',
- Occurrences = 'occurrences',
- Options = 'options',
- Overview = 'overview',
- Pencil = 'pencil',
- Photograph = 'photograph',
- PlayButton = 'play-button',
- Plus = 'plus',
- RadixCheck = 'radix-check',
- RadixClock = 'radix-clock',
- RadixMinus = 'radix-minus',
- RadixQuestionMark = 'radix-question-mark',
- RadixSearch = 'radix-search',
- RadixTrash = 'radix-trash',
- RadixUpdate = 'radix-update',
- Sessions = 'sessions',
- Settings = 'settings',
- ShieldCheck = 'shield-check',
- Sort = 'sort',
- Species = 'species',
- TableView = 'table-view',
- ToggleDown = 'toggle-down',
- ToggleLeft = 'toggle-left',
- ToggleRight = 'toggle-right',
-}
-
-export enum IconTheme {
- Light = 'light',
- Neutral = 'neutral',
- Dark = 'dark',
- Primary = 'primary',
- Success = 'success',
- Error = 'error',
-}
-
-const COMPONENT_MAP: { [key in IconType]: FunctionComponent } = {
- [IconType.BatchId]: BatchId,
- [IconType.Checkmark]: Checkmark,
- [IconType.CircleBackslash]: CircleBackslash,
- [IconType.Close]: Close,
- [IconType.Cross]: Cross,
- [IconType.Deployments]: Deployments,
- [IconType.Detections]: Detections,
- [IconType.Download]: Download,
- [IconType.Error]: Error,
- [IconType.ExternalLink]: ExternalLink,
- [IconType.Filters]: Filters,
- [IconType.GalleryView]: GalleryView,
- [IconType.Heart]: Heart,
- [IconType.HeartFilled]: HeartFilled,
- [IconType.Images]: Images,
- [IconType.Info]: Info,
- [IconType.Members]: Members,
- [IconType.Occurrences]: Occurrences,
- [IconType.Options]: Options,
- [IconType.Overview]: Overview,
- [IconType.Pencil]: Pencil,
- [IconType.Photograph]: Photograph,
- [IconType.PlayButton]: PlayButton,
- [IconType.Plus]: Plus,
- [IconType.RadixCheck]: RadixCheck,
- [IconType.RadixClock]: RadixClock,
- [IconType.RadixMinus]: RadixMinus,
- [IconType.RadixQuestionMark]: RadixQuestionMark,
- [IconType.RadixSearch]: RadixSearch,
- [IconType.RadixTrash]: RadixTrash,
- [IconType.RadixUpdate]: RadixUpdate,
- [IconType.Sessions]: Sessions,
- [IconType.Settings]: Settings,
- [IconType.ShieldCheck]: ShieldCheck,
- [IconType.Sort]: Sort,
- [IconType.Species]: Species,
- [IconType.TableView]: TableView,
- [IconType.ToggleDown]: ToggleDown,
- [IconType.ToggleLeft]: ToggleLeft,
- [IconType.ToggleRight]: ToggleRight,
-}
-
-interface IconProps {
- size?: number
- theme?: IconTheme
- transform?: string
- type: IconType
-}
-
-export const Icon = ({
- size,
- theme = IconTheme.Dark,
- transform,
- type,
-}: IconProps) => {
- const Component = COMPONENT_MAP[type]
- const fixedSized = size !== undefined
-
- return (
-
-
-
- )
-}
diff --git a/ui/src/design-system/components/image-carousel/image-carousel.tsx b/ui/src/design-system/components/image-carousel/image-carousel.tsx
index e6a9b1e9c..6b7ecdd44 100644
--- a/ui/src/design-system/components/image-carousel/image-carousel.tsx
+++ b/ui/src/design-system/components/image-carousel/image-carousel.tsx
@@ -1,7 +1,6 @@
import classNames from 'classnames'
import { LicenseInfo } from 'components/license-info/license-info'
-import { Icon, IconTheme, IconType } from 'design-system/components/icon/icon'
-import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react'
+import { ChevronLeftIcon, ChevronRightIcon, ImageIcon } from 'lucide-react'
import { Button } from 'nova-ui-kit'
import { ReactNode, useEffect, useRef, useState } from 'react'
import { Link } from 'react-router-dom'
@@ -92,11 +91,7 @@ const BasicImageCarousel = ({
{image ? (
) : (
-
+
)}
diff --git a/ui/src/design-system/components/icon/assets/images.svg b/ui/src/design-system/components/navigation/assets/captures.svg
similarity index 100%
rename from ui/src/design-system/components/icon/assets/images.svg
rename to ui/src/design-system/components/navigation/assets/captures.svg
diff --git a/ui/src/design-system/components/icon/assets/deployments.svg b/ui/src/design-system/components/navigation/assets/deployments.svg
similarity index 100%
rename from ui/src/design-system/components/icon/assets/deployments.svg
rename to ui/src/design-system/components/navigation/assets/deployments.svg
diff --git a/ui/src/design-system/components/icon/assets/batch-id.svg b/ui/src/design-system/components/navigation/assets/jobs.svg
similarity index 100%
rename from ui/src/design-system/components/icon/assets/batch-id.svg
rename to ui/src/design-system/components/navigation/assets/jobs.svg
diff --git a/ui/src/design-system/components/icon/assets/occurrences.svg b/ui/src/design-system/components/navigation/assets/occurrences.svg
similarity index 100%
rename from ui/src/design-system/components/icon/assets/occurrences.svg
rename to ui/src/design-system/components/navigation/assets/occurrences.svg
diff --git a/ui/src/design-system/components/icon/assets/overview.svg b/ui/src/design-system/components/navigation/assets/project.svg
similarity index 100%
rename from ui/src/design-system/components/icon/assets/overview.svg
rename to ui/src/design-system/components/navigation/assets/project.svg
diff --git a/ui/src/design-system/components/icon/assets/sessions.svg b/ui/src/design-system/components/navigation/assets/sessions.svg
similarity index 100%
rename from ui/src/design-system/components/icon/assets/sessions.svg
rename to ui/src/design-system/components/navigation/assets/sessions.svg
diff --git a/ui/src/design-system/components/icon/assets/species.svg b/ui/src/design-system/components/navigation/assets/taxa.svg
similarity index 100%
rename from ui/src/design-system/components/icon/assets/species.svg
rename to ui/src/design-system/components/navigation/assets/taxa.svg
diff --git a/ui/src/design-system/components/navigation/navigation-bar-icon.tsx b/ui/src/design-system/components/navigation/navigation-bar-icon.tsx
new file mode 100644
index 000000000..a73ac9306
--- /dev/null
+++ b/ui/src/design-system/components/navigation/navigation-bar-icon.tsx
@@ -0,0 +1,44 @@
+import classNames from 'classnames'
+import { FunctionComponent } from 'react'
+import Captures from './assets/captures.svg?react'
+import Deployments from './assets/deployments.svg?react'
+import Jobs from './assets/jobs.svg?react'
+import Occurrences from './assets/occurrences.svg?react'
+import Project from './assets/project.svg?react'
+import Sessions from './assets/sessions.svg?react'
+import Taxa from './assets/taxa.svg?react'
+import styles from './navigation-bar.module.scss'
+
+const ICON_MAP: { [id: string]: FunctionComponent } = {
+ captures: Captures,
+ deployments: Deployments,
+ jobs: Jobs,
+ occurrences: Occurrences,
+ project: Project,
+ sessions: Sessions,
+ species: Taxa,
+}
+
+export const NavigationBarIcon = ({
+ isActive,
+ id,
+}: {
+ isActive?: boolean
+ id: string
+}) => {
+ const Icon = ICON_MAP[id]
+
+ if (!Icon) {
+ return null
+ }
+
+ return (
+
+
+
+ )
+}
diff --git a/ui/src/design-system/components/navigation/navigation-bar.module.scss b/ui/src/design-system/components/navigation/navigation-bar.module.scss
index 0449f03bd..84e0cbedc 100644
--- a/ui/src/design-system/components/navigation/navigation-bar.module.scss
+++ b/ui/src/design-system/components/navigation/navigation-bar.module.scss
@@ -84,6 +84,18 @@
transition: left 400ms ease, width 200ms ease;
}
+.icon {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ transition: transform 400ms ease;
+ color: $color-primary-1-600;
+
+ &.active {
+ color: $color-success-700;
+ }
+}
+
@media only screen and (max-width: $small-screen-breakpoint) {
.topContent {
margin-bottom: 0;
diff --git a/ui/src/design-system/components/navigation/navigation-bar.tsx b/ui/src/design-system/components/navigation/navigation-bar.tsx
index c0d13acdb..7b64ca25f 100644
--- a/ui/src/design-system/components/navigation/navigation-bar.tsx
+++ b/ui/src/design-system/components/navigation/navigation-bar.tsx
@@ -1,13 +1,12 @@
import classNames from 'classnames'
import { useEffect, useState } from 'react'
-import { Icon, IconTheme, IconType } from '../icon/icon'
+import { NavigationBarIcon } from './navigation-bar-icon'
import styles from './navigation-bar.module.scss'
interface NavigationBarProps {
activeItemId: string
items: {
count?: number
- icon?: IconType
id: string
path?: string
title: string
@@ -59,12 +58,7 @@ export const NavigationBar = ({
}}
>
- {item.icon && (
-
- )}
+
{item.count !== undefined && (
{item.count.toLocaleString()}
diff --git a/ui/src/design-system/components/popover/popover.tsx b/ui/src/design-system/components/popover/popover.tsx
index 2192afe36..f906397ba 100644
--- a/ui/src/design-system/components/popover/popover.tsx
+++ b/ui/src/design-system/components/popover/popover.tsx
@@ -1,7 +1,7 @@
import * as Popover from '@radix-ui/react-popover'
import classNames from 'classnames'
+import { XIcon } from 'lucide-react'
import { ReactNode } from 'react'
-import { Icon, IconType } from '../icon/icon'
import styles from './popover.module.scss'
const Root = ({
@@ -65,7 +65,7 @@ const Content = ({
className={styles.popoverClose}
aria-label={ariaCloselabel}
>
-
+
)}
diff --git a/ui/src/design-system/components/status-info/status-info.tsx b/ui/src/design-system/components/status-info/status-info.tsx
new file mode 100644
index 000000000..d39610640
--- /dev/null
+++ b/ui/src/design-system/components/status-info/status-info.tsx
@@ -0,0 +1,27 @@
+import { BasicTooltip } from 'design-system/components/tooltip/basic-tooltip'
+import { CircleCheckIcon, CircleQuestionMark, Loader2Icon } from 'lucide-react'
+import { Status } from './types'
+
+export const StatusInfo = ({
+ status,
+ tooltip,
+}: {
+ status: Status
+ tooltip?: string
+}) => (
+
+
+
+)
+
+const StatusIcon = ({ status }: { status: Status }) => {
+ if (status === Status.Connected) {
+ return
+ }
+
+ if (status === Status.NotConnected) {
+ return
+ }
+
+ return
+}
diff --git a/ui/src/pages/project/processing-services/status-info/types.ts b/ui/src/design-system/components/status-info/types.ts
similarity index 100%
rename from ui/src/pages/project/processing-services/status-info/types.ts
rename to ui/src/design-system/components/status-info/types.ts
diff --git a/ui/src/design-system/components/table/table-header/table-header.tsx b/ui/src/design-system/components/table/table-header/table-header.tsx
index 7540df7ee..b9556703e 100644
--- a/ui/src/design-system/components/table/table-header/table-header.tsx
+++ b/ui/src/design-system/components/table/table-header/table-header.tsx
@@ -1,7 +1,6 @@
import classNames from 'classnames'
-import { Icon, IconTheme, IconType } from 'design-system/components/icon/icon'
import { BasicTooltip } from 'design-system/components/tooltip/basic-tooltip'
-import { InfoIcon } from 'lucide-react'
+import { ArrowDownIcon, InfoIcon } from 'lucide-react'
import { TableColumn, TableSortSettings } from '../types'
import styles from './table-header.module.scss'
@@ -112,7 +111,7 @@ const SortableTableHeader = ({
sortActive && sortSettings?.order === 'asc',
})}
>
-
+
) : null}
diff --git a/ui/src/design-system/components/tabs/tabs.tsx b/ui/src/design-system/components/tabs/tabs.tsx
index a174f85df..d8b3f971d 100644
--- a/ui/src/design-system/components/tabs/tabs.tsx
+++ b/ui/src/design-system/components/tabs/tabs.tsx
@@ -1,6 +1,5 @@
import * as Tabs from '@radix-ui/react-tabs'
import { ReactNode } from 'react'
-import { Icon, IconType } from '../icon/icon'
import styles from './tabs.module.scss'
const Root = ({
@@ -37,17 +36,8 @@ const List = ({
)
-const Trigger = ({
- value,
- label,
- icon,
-}: {
- value: string
- label: string
- icon?: IconType
-}) => (
+const Trigger = ({ value, label }: { value: string; label: string }) => (
- {icon && }
{label}
)
diff --git a/ui/src/design-system/components/toggle-group/toggle-group.tsx b/ui/src/design-system/components/toggle-group/toggle-group.tsx
index 932dd5da3..28efe9027 100644
--- a/ui/src/design-system/components/toggle-group/toggle-group.tsx
+++ b/ui/src/design-system/components/toggle-group/toggle-group.tsx
@@ -1,12 +1,13 @@
import * as _ToggleGroup from '@radix-ui/react-toggle-group'
import classNames from 'classnames'
-import { Icon, IconTheme, IconType } from '../icon/icon'
import { BasicTooltip } from '../tooltip/basic-tooltip'
import styles from './toggle-group.module.scss'
interface ToggleGroupProps {
items: {
- icon: IconType
+ Icon: React.ComponentType<{
+ className?: string
+ }>
value: string
label: string
}[]
@@ -38,9 +39,8 @@ export const ToggleGroup = ({
[styles.last]: index === items.length - 1,
})}
>
-
diff --git a/ui/src/design-system/components/wizard/status-bullet/status-bullet.tsx b/ui/src/design-system/components/wizard/status-bullet/status-bullet.tsx
index 9fb65f3c3..e442280f7 100644
--- a/ui/src/design-system/components/wizard/status-bullet/status-bullet.tsx
+++ b/ui/src/design-system/components/wizard/status-bullet/status-bullet.tsx
@@ -1,5 +1,4 @@
import classNames from 'classnames'
-import { Icon, IconTheme, IconType } from 'design-system/components/icon/icon'
import styles from './status-bullet.module.scss'
export enum StatusBulletTheme {
@@ -9,15 +8,17 @@ export enum StatusBulletTheme {
}
interface StatusBulletProps {
- icon?: IconType
- value?: number
+ Icon?: React.ComponentType<{
+ className?: string
+ }>
theme?: StatusBulletTheme
+ value?: number
}
export const StatusBullet = ({
- icon,
theme = StatusBulletTheme.Default,
value,
+ Icon,
}: StatusBulletProps) => (
- {icon ? : null}
+ {Icon ? : null}
{value ? {value} : null}
)
diff --git a/ui/src/design-system/components/wizard/wizard.tsx b/ui/src/design-system/components/wizard/wizard.tsx
index 5cc99ed79..ae7ec310d 100644
--- a/ui/src/design-system/components/wizard/wizard.tsx
+++ b/ui/src/design-system/components/wizard/wizard.tsx
@@ -1,7 +1,7 @@
import * as Accordion from '@radix-ui/react-accordion'
import classNames from 'classnames'
+import { ChevronDownIcon } from 'lucide-react'
import { ReactNode, forwardRef } from 'react'
-import { Icon, IconType } from '../icon/icon'
import styles from './wizard.module.scss'
const Root = ({
@@ -64,7 +64,7 @@ const Trigger = forwardRef<
{title}
{showToggle && (
-
+
)}
diff --git a/ui/src/pages/auth/login.tsx b/ui/src/pages/auth/login.tsx
index 352639a72..3710f2d10 100644
--- a/ui/src/pages/auth/login.tsx
+++ b/ui/src/pages/auth/login.tsx
@@ -2,8 +2,7 @@ import classNames from 'classnames'
import { FormField } from 'components/form/form-field'
import { FormConfig } from 'components/form/types'
import { useLogin } from 'data-services/hooks/auth/useLogin'
-import { Icon, IconTheme, IconType } from 'design-system/components/icon/icon'
-import { Loader2Icon } from 'lucide-react'
+import { ExternalLinkIcon, Loader2Icon } from 'lucide-react'
import { Button, buttonVariants } from 'nova-ui-kit'
import { useForm } from 'react-hook-form'
import { Link, useLocation, useNavigate } from 'react-router-dom'
@@ -95,11 +94,7 @@ export const Login = () => {
className={buttonVariants({ size: 'small', variant: 'outline' })}
>
Get in touch
-
+
diff --git a/ui/src/pages/auth/sign-up.tsx b/ui/src/pages/auth/sign-up.tsx
index b7e558f2a..41462d070 100644
--- a/ui/src/pages/auth/sign-up.tsx
+++ b/ui/src/pages/auth/sign-up.tsx
@@ -2,8 +2,7 @@ import classNames from 'classnames'
import { FormField } from 'components/form/form-field'
import { FormConfig } from 'components/form/types'
import { useSignUp } from 'data-services/hooks/auth/useSignUp'
-import { Icon, IconTheme, IconType } from 'design-system/components/icon/icon'
-import { Loader2Icon } from 'lucide-react'
+import { CheckIcon, Loader2Icon } from 'lucide-react'
import { Button, buttonVariants } from 'nova-ui-kit'
import { useState } from 'react'
import { useForm } from 'react-hook-form'
@@ -91,11 +90,7 @@ export const SignUp = () => {
{isSuccess ? (
<>
-
+
{translate(STRING.MESSAGE_SIGNED_UP)}
>
) : (
diff --git a/ui/src/pages/captures/captures.tsx b/ui/src/pages/captures/captures.tsx
index 474af8e69..cef7983f7 100644
--- a/ui/src/pages/captures/captures.tsx
+++ b/ui/src/pages/captures/captures.tsx
@@ -1,7 +1,6 @@
import { FilterControl } from 'components/filtering/filter-control'
import { FilterSection } from 'components/filtering/filter-section'
import { useCaptures } from 'data-services/hooks/captures/useCaptures'
-import { IconType } from 'design-system/components/icon/icon'
import { PageFooter } from 'design-system/components/page-footer/page-footer'
import { PageHeader } from 'design-system/components/page-header/page-header'
import { PaginationBar } from 'design-system/components/pagination-bar/pagination-bar'
@@ -9,6 +8,7 @@ import { SortControl } from 'design-system/components/sort-control'
import { ColumnSettings } from 'design-system/components/table/column-settings/column-settings'
import { Table } from 'design-system/components/table/table/table'
import { ToggleGroup } from 'design-system/components/toggle-group/toggle-group'
+import { Grid2X2Icon, TableIcon } from 'lucide-react'
import { useState } from 'react'
import { useParams } from 'react-router-dom'
import { DOCS_LINKS } from 'utils/constants'
@@ -78,12 +78,12 @@ export const Captures = () => {
{
value: 'table',
label: translate(STRING.TAB_ITEM_TABLE),
- icon: IconType.TableView,
+ Icon: TableIcon,
},
{
value: 'gallery',
label: translate(STRING.TAB_ITEM_GALLERY),
- icon: IconType.GalleryView,
+ Icon: Grid2X2Icon,
},
]}
value={selectedView}
diff --git a/ui/src/pages/job-details/job-details.tsx b/ui/src/pages/job-details/job-details.tsx
index 962c44807..ab42681a9 100644
--- a/ui/src/pages/job-details/job-details.tsx
+++ b/ui/src/pages/job-details/job-details.tsx
@@ -4,7 +4,6 @@ import { Export } from 'data-services/models/export'
import { JobStatusType } from 'data-services/models/job'
import { JobDetails as Job } from 'data-services/models/job-details'
import * as Dialog from 'design-system/components/dialog/dialog'
-import { IconType } from 'design-system/components/icon/icon'
import { InputContent, InputValue } from 'design-system/components/input/input'
import { StatusBar } from 'design-system/components/status/status-bar'
import {
@@ -12,6 +11,7 @@ import {
StatusBulletTheme,
} from 'design-system/components/wizard/status-bullet/status-bullet'
import * as Wizard from 'design-system/components/wizard/wizard'
+import { CheckIcon } from 'lucide-react'
import { CodeBlock } from 'nova-ui-kit'
import { useState } from 'react'
import { useParams } from 'react-router-dom'
@@ -199,7 +199,7 @@ const JobStages = ({ job }: { job: Job }) => {
{stage.status.type === JobStatusType.Success ? (
) : (
diff --git a/ui/src/pages/occurrence-details/id-quick-actions/id-button.tsx b/ui/src/pages/occurrence-details/id-quick-actions/id-button.tsx
index 29ac210f9..ade068028 100644
--- a/ui/src/pages/occurrence-details/id-quick-actions/id-button.tsx
+++ b/ui/src/pages/occurrence-details/id-quick-actions/id-button.tsx
@@ -1,7 +1,6 @@
import classNames from 'classnames'
import { IdentificationFieldValues } from 'data-services/hooks/identifications/types'
import { useCreateIdentifications } from 'data-services/hooks/identifications/useCreateIdentifications'
-import { IconType } from 'design-system/components/icon/icon'
import { BasicTooltip } from 'design-system/components/tooltip/basic-tooltip'
import { AlertCircleIcon, CheckIcon, Loader2Icon } from 'lucide-react'
import { Button } from 'nova-ui-kit'
@@ -38,11 +37,7 @@ export const IdButton = ({