diff --git a/libs/angular/src/scss/bwicons/fonts/bwi-font.svg b/libs/angular/src/scss/bwicons/fonts/bwi-font.svg
index cbbc8e04a37..e518a332b64 100644
--- a/libs/angular/src/scss/bwicons/fonts/bwi-font.svg
+++ b/libs/angular/src/scss/bwicons/fonts/bwi-font.svg
@@ -1,128 +1,345 @@
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/libs/angular/src/scss/bwicons/fonts/bwi-font.ttf b/libs/angular/src/scss/bwicons/fonts/bwi-font.ttf
index 0d0c408c53a..55831e91e35 100644
Binary files a/libs/angular/src/scss/bwicons/fonts/bwi-font.ttf and b/libs/angular/src/scss/bwicons/fonts/bwi-font.ttf differ
diff --git a/libs/angular/src/scss/bwicons/fonts/bwi-font.woff b/libs/angular/src/scss/bwicons/fonts/bwi-font.woff
index 0d9f0a549dc..cacc71d799c 100644
Binary files a/libs/angular/src/scss/bwicons/fonts/bwi-font.woff and b/libs/angular/src/scss/bwicons/fonts/bwi-font.woff differ
diff --git a/libs/angular/src/scss/bwicons/fonts/bwi-font.woff2 b/libs/angular/src/scss/bwicons/fonts/bwi-font.woff2
index 75c7ba9b430..c81f276f422 100644
Binary files a/libs/angular/src/scss/bwicons/fonts/bwi-font.woff2 and b/libs/angular/src/scss/bwicons/fonts/bwi-font.woff2 differ
diff --git a/libs/angular/src/scss/bwicons/styles/style.scss b/libs/angular/src/scss/bwicons/styles/style.scss
index 93f5856e3df..935c112a81c 100644
--- a/libs/angular/src/scss/bwicons/styles/style.scss
+++ b/libs/angular/src/scss/bwicons/styles/style.scss
@@ -101,108 +101,122 @@ $icomoon-font-path: "~@bitwarden/angular/src/scss/bwicons/fonts/" !default;
// For new icons - add their glyph name and value to the map below
// Also add to `libs/components/src/shared/icon.ts`
+// Auto-generated from Figma icons (111 icons)
$icons: (
- "angle-down": "\e900",
- "angle-left": "\e901",
- "angle-right": "\e902",
- "angle-up": "\e903",
- "bell": "\e904",
- "billing": "\e905",
- "bitcoin": "\e906",
- "browser-alt": "\e907",
- "browser": "\e908",
- "brush": "\e909",
- "bug": "\e90a",
- "business": "\e90b",
- "camera": "\e90c",
- "check-circle": "\e90e",
- "check": "\e90f",
- "cli": "\e910",
- "clock": "\e911",
- "close": "\e912",
- "cog-f": "\e913",
- "cog": "\e914",
- "collection": "\e915",
- "collection-shared": "\e916",
- "clone": "\e917",
- "dashboard": "\e9bf",
- "dollar": "\e919",
- "down-solid": "\e91a",
- "download": "\e91b",
- "drag-and-drop": "\e91c",
- "ellipsis-h": "\e91d",
- "ellipsis-v": "\e91e",
- "envelope": "\e91f",
- "error": "\e920",
- "exclamation-triangle": "\e921",
- "external-link": "\e922",
- "eye-slash": "\e923",
- "eye": "\e924",
- "family": "\e925",
- "file-text": "\e926",
- "file": "\e927",
- "files": "\e928",
- "filter": "\e929",
- "folder": "\e92a",
- "generate": "\e92b",
- "globe": "\e92c",
- "hashtag": "\e92d",
- "id-card": "\e92e",
- "info-circle": "\e92f",
- "import": "\e930",
- "key": "\e931",
- "list-alt": "\e933",
- "list": "\e934",
- "lock-encrypted": "\e935",
- "lock-f": "\e936",
- "lock": "\e937",
- "shield": "\e938",
- "minus-circle": "\e939",
- "mobile": "\e93a",
- "msp": "\e93b",
- "sticky-note": "\e93c",
- "numbered-list": "\e93d",
- "paperclip": "\e93e",
- "passkey": "\e93f",
- "pencil-square": "\e940",
- "pencil": "\e941",
- "plus-circle": "\e942",
- "plus": "\e943",
- "popout": "\e944",
- "premium": "\e90d",
- "provider": "\e945",
- "puzzle": "\e946",
- "question-circle": "\e947",
- "refresh": "\e948",
- "search": "\e949",
- "send": "\e94a",
- "share": "\e94b",
- "sign-in": "\e94c",
- "sign-out": "\e94d",
- "sliders": "\e94e",
- "spinner": "\e94f",
- "star-f": "\e950",
- "star": "\e951",
- "tag": "\e952",
- "trash": "\e953",
- "undo": "\e954",
- "universal-access": "\e955",
- "unlock": "\e956",
- "up-down-btn": "\e957",
- "up-solid": "\e958",
- "user-monitor": "\e959",
- "user": "\e95a",
- "users": "\e95b",
- "vault": "\e95c",
- "wireless": "\e95d",
- "wrench": "\e95e",
- "paypal": "\e95f",
- "credit-card": "\e9a2",
- "desktop": "\e9a3",
- "archive": "\e9c1",
- "unarchive": "\e918",
+ "angle-down": "\f16f",
+ "angle-left": "\f16e",
+ "angle-right": "\f16d",
+ "angle-up": "\f16c",
+ "archive": "\f16b",
+ "arrow-down": "\f16a",
+ "arrow-filled-left": "\f169",
+ "arrow-filled-right": "\f168",
+ "arrow-left": "\f167",
+ "arrow-right": "\f166",
+ "arrow-up": "\f165",
+ "autofill": "\f164",
+ "bell": "\f163",
+ "billing": "\f162",
+ "bitcoin": "\f161",
+ "browser": "\f160",
+ "brush": "\f15f",
+ "bug": "\f15e",
+ "business": "\f15d",
+ "camera": "\f15c",
+ "check": "\f15a",
+ "check-circle": "\f15b",
+ "circle": "\f159",
+ "clear": "\f158",
+ "cli": "\f157",
+ "clock": "\f156",
+ "clone": "\f155",
+ "close": "\f154",
+ "cog": "\f152",
+ "cog-f": "\f153",
+ "collection": "\f150",
+ "collection-shared": "\f151",
+ "credit-card": "\f14f",
+ "dashboard": "\f14e",
+ "desktop": "\f14d",
+ "dollar": "\f14c",
+ "down-solid": "\f14b",
+ "download": "\f14a",
+ "drag-and-drop": "\f149",
+ "ellipsis-h": "\f148",
+ "ellipsis-v": "\f147",
+ "envelope": "\f146",
+ "error": "\f145",
+ "exclamation-triangle": "\f144",
+ "external-link": "\f143",
+ "eye": "\f141",
+ "eye-slash": "\f142",
+ "family": "\f140",
+ "file": "\f13e",
+ "file-text": "\f13f",
+ "files": "\f13d",
+ "filter": "\f13b",
+ "filter-1": "\f13c",
+ "folder": "\f13a",
+ "generate": "\f139",
+ "globe": "\f138",
+ "hashtag": "\f137",
+ "id-card": "\f136",
+ "import": "\f135",
+ "info-circle": "\f134",
+ "key": "\f133",
+ "list": "\f131",
+ "list-alt": "\f132",
+ "lock": "\f12e",
+ "lock-encrypted": "\f130",
+ "lock-f": "\f12f",
+ "minus-circle": "\f12d",
+ "mobile": "\f12c",
+ "msp": "\f12b",
+ "numbered-list": "\f12a",
+ "paperclip": "\f129",
+ "passkey": "\f128",
+ "paypal": "\f127",
+ "pencil": "\f125",
+ "pencil-square": "\f126",
+ "plus": "\f123",
+ "plus-circle": "\f124",
+ "popout": "\f122",
+ "premium": "\f121",
+ "provider": "\f120",
+ "puzzle": "\f11f",
+ "question-circle": "\f11e",
+ "redo": "\f11d",
+ "refresh": "\f11c",
+ "search": "\f11b",
+ "send": "\f11a",
+ "share": "\f119",
+ "shield": "\f118",
+ "sign-in": "\f117",
+ "sign-out": "\f116",
+ "sliders": "\f115",
+ "spinner": "\f114",
+ "sso": "\f113",
+ "star": "\f111",
+ "star-f": "\f112",
+ "sticky-note": "\f110",
+ "subtract": "\f10f",
+ "tag": "\f10e",
+ "trash": "\f10d",
+ "unarchive": "\f10c",
+ "undo": "\f10b",
+ "universal-access": "\f10a",
+ "unlock": "\f109",
+ "up-down-btn": "\f108",
+ "up-solid": "\f107",
+ "user": "\f105",
+ "user-monitor": "\f106",
+ "users": "\f104",
+ "vault": "\f103",
+ "wireless": "\f102",
+ "wrench": "\f101",
);
+// Generate BWI classes from icon map
@each $name, $glyph in $icons {
.bwi-#{$name}:before {
content: $glyph;
diff --git a/libs/assets/src/material-icons/accessibility.svg b/libs/assets/src/material-icons/accessibility.svg
new file mode 100644
index 00000000000..3370fe824f9
--- /dev/null
+++ b/libs/assets/src/material-icons/accessibility.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/add-circle.svg b/libs/assets/src/material-icons/add-circle.svg
new file mode 100644
index 00000000000..4abc85094f0
--- /dev/null
+++ b/libs/assets/src/material-icons/add-circle.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/add.svg b/libs/assets/src/material-icons/add.svg
new file mode 100644
index 00000000000..9a21fbba03e
--- /dev/null
+++ b/libs/assets/src/material-icons/add.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/angle-down.svg b/libs/assets/src/material-icons/angle-down.svg
new file mode 100644
index 00000000000..93958e83484
--- /dev/null
+++ b/libs/assets/src/material-icons/angle-down.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/angle-left.svg b/libs/assets/src/material-icons/angle-left.svg
new file mode 100644
index 00000000000..f2d2a36b074
--- /dev/null
+++ b/libs/assets/src/material-icons/angle-left.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/angle-right.svg b/libs/assets/src/material-icons/angle-right.svg
new file mode 100644
index 00000000000..a0a7d6692ac
--- /dev/null
+++ b/libs/assets/src/material-icons/angle-right.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/angle-up-down.svg b/libs/assets/src/material-icons/angle-up-down.svg
new file mode 100644
index 00000000000..f210276d41d
--- /dev/null
+++ b/libs/assets/src/material-icons/angle-up-down.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/angle-up.svg b/libs/assets/src/material-icons/angle-up.svg
new file mode 100644
index 00000000000..ef5ef77b381
--- /dev/null
+++ b/libs/assets/src/material-icons/angle-up.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/archive.svg b/libs/assets/src/material-icons/archive.svg
new file mode 100644
index 00000000000..90c4bc0f765
--- /dev/null
+++ b/libs/assets/src/material-icons/archive.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/arrow-down.svg b/libs/assets/src/material-icons/arrow-down.svg
new file mode 100644
index 00000000000..ed547504fa8
--- /dev/null
+++ b/libs/assets/src/material-icons/arrow-down.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/arrow-filled-down.svg b/libs/assets/src/material-icons/arrow-filled-down.svg
new file mode 100644
index 00000000000..3b591b3c71f
--- /dev/null
+++ b/libs/assets/src/material-icons/arrow-filled-down.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/arrow-filled-left.svg b/libs/assets/src/material-icons/arrow-filled-left.svg
new file mode 100644
index 00000000000..969ad3cdb3e
--- /dev/null
+++ b/libs/assets/src/material-icons/arrow-filled-left.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/arrow-filled-right.svg b/libs/assets/src/material-icons/arrow-filled-right.svg
new file mode 100644
index 00000000000..494cb64b67d
--- /dev/null
+++ b/libs/assets/src/material-icons/arrow-filled-right.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/arrow-filled-up.svg b/libs/assets/src/material-icons/arrow-filled-up.svg
new file mode 100644
index 00000000000..a005cd42245
--- /dev/null
+++ b/libs/assets/src/material-icons/arrow-filled-up.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/arrow-left.svg b/libs/assets/src/material-icons/arrow-left.svg
new file mode 100644
index 00000000000..ef11e1816c7
--- /dev/null
+++ b/libs/assets/src/material-icons/arrow-left.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/arrow-right.svg b/libs/assets/src/material-icons/arrow-right.svg
new file mode 100644
index 00000000000..a1723f3fffe
--- /dev/null
+++ b/libs/assets/src/material-icons/arrow-right.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/arrow-up.svg b/libs/assets/src/material-icons/arrow-up.svg
new file mode 100644
index 00000000000..d858904d1b4
--- /dev/null
+++ b/libs/assets/src/material-icons/arrow-up.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/attach.svg b/libs/assets/src/material-icons/attach.svg
new file mode 100644
index 00000000000..0dff6454448
--- /dev/null
+++ b/libs/assets/src/material-icons/attach.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/autofill.svg b/libs/assets/src/material-icons/autofill.svg
new file mode 100644
index 00000000000..95dbd374818
--- /dev/null
+++ b/libs/assets/src/material-icons/autofill.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/bitcoin.svg b/libs/assets/src/material-icons/bitcoin.svg
new file mode 100644
index 00000000000..0e150626313
--- /dev/null
+++ b/libs/assets/src/material-icons/bitcoin.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/bitwarden-shield.svg b/libs/assets/src/material-icons/bitwarden-shield.svg
new file mode 100644
index 00000000000..9c94477a47a
--- /dev/null
+++ b/libs/assets/src/material-icons/bitwarden-shield.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/browser.svg b/libs/assets/src/material-icons/browser.svg
new file mode 100644
index 00000000000..893ec39845a
--- /dev/null
+++ b/libs/assets/src/material-icons/browser.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/bug.svg b/libs/assets/src/material-icons/bug.svg
new file mode 100644
index 00000000000..7005ff0ef21
--- /dev/null
+++ b/libs/assets/src/material-icons/bug.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/business.svg b/libs/assets/src/material-icons/business.svg
new file mode 100644
index 00000000000..297093cb639
--- /dev/null
+++ b/libs/assets/src/material-icons/business.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/camera.svg b/libs/assets/src/material-icons/camera.svg
new file mode 100644
index 00000000000..0883118c9bd
--- /dev/null
+++ b/libs/assets/src/material-icons/camera.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/check-circle.svg b/libs/assets/src/material-icons/check-circle.svg
new file mode 100644
index 00000000000..cec116015a6
--- /dev/null
+++ b/libs/assets/src/material-icons/check-circle.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/check.svg b/libs/assets/src/material-icons/check.svg
new file mode 100644
index 00000000000..49a90bee829
--- /dev/null
+++ b/libs/assets/src/material-icons/check.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/circle.svg b/libs/assets/src/material-icons/circle.svg
new file mode 100644
index 00000000000..f6bc2012ab8
--- /dev/null
+++ b/libs/assets/src/material-icons/circle.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/clear.svg b/libs/assets/src/material-icons/clear.svg
new file mode 100644
index 00000000000..194668d826e
--- /dev/null
+++ b/libs/assets/src/material-icons/clear.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/clock.svg b/libs/assets/src/material-icons/clock.svg
new file mode 100644
index 00000000000..015dc703d87
--- /dev/null
+++ b/libs/assets/src/material-icons/clock.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/close.svg b/libs/assets/src/material-icons/close.svg
new file mode 100644
index 00000000000..d992c58cc0f
--- /dev/null
+++ b/libs/assets/src/material-icons/close.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/collection.svg b/libs/assets/src/material-icons/collection.svg
new file mode 100644
index 00000000000..5331fb05846
--- /dev/null
+++ b/libs/assets/src/material-icons/collection.svg
@@ -0,0 +1,8 @@
+
diff --git a/libs/assets/src/material-icons/copy.svg b/libs/assets/src/material-icons/copy.svg
new file mode 100644
index 00000000000..0ac3436c3b6
--- /dev/null
+++ b/libs/assets/src/material-icons/copy.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/credit-card.svg b/libs/assets/src/material-icons/credit-card.svg
new file mode 100644
index 00000000000..e3346155b6f
--- /dev/null
+++ b/libs/assets/src/material-icons/credit-card.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/dashboard.svg b/libs/assets/src/material-icons/dashboard.svg
new file mode 100644
index 00000000000..d4473a0b929
--- /dev/null
+++ b/libs/assets/src/material-icons/dashboard.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/delete.svg b/libs/assets/src/material-icons/delete.svg
new file mode 100644
index 00000000000..aa56663893d
--- /dev/null
+++ b/libs/assets/src/material-icons/delete.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/desktop-user.svg b/libs/assets/src/material-icons/desktop-user.svg
new file mode 100644
index 00000000000..b1cd28e4630
--- /dev/null
+++ b/libs/assets/src/material-icons/desktop-user.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/desktop.svg b/libs/assets/src/material-icons/desktop.svg
new file mode 100644
index 00000000000..d0abf7ec0b8
--- /dev/null
+++ b/libs/assets/src/material-icons/desktop.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/diamond.svg b/libs/assets/src/material-icons/diamond.svg
new file mode 100644
index 00000000000..dd6a5a4ae04
--- /dev/null
+++ b/libs/assets/src/material-icons/diamond.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/dollar.svg b/libs/assets/src/material-icons/dollar.svg
new file mode 100644
index 00000000000..84783223baa
--- /dev/null
+++ b/libs/assets/src/material-icons/dollar.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/download.svg b/libs/assets/src/material-icons/download.svg
new file mode 100644
index 00000000000..e95f8e5ac23
--- /dev/null
+++ b/libs/assets/src/material-icons/download.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/drag.svg b/libs/assets/src/material-icons/drag.svg
new file mode 100644
index 00000000000..fc2177b6c0a
--- /dev/null
+++ b/libs/assets/src/material-icons/drag.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/duplicate.svg b/libs/assets/src/material-icons/duplicate.svg
new file mode 100644
index 00000000000..ab3b19ed2b8
--- /dev/null
+++ b/libs/assets/src/material-icons/duplicate.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/edit-alt.svg b/libs/assets/src/material-icons/edit-alt.svg
new file mode 100644
index 00000000000..e7a71bfbef7
--- /dev/null
+++ b/libs/assets/src/material-icons/edit-alt.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/edit.svg b/libs/assets/src/material-icons/edit.svg
new file mode 100644
index 00000000000..86a808cdd4c
--- /dev/null
+++ b/libs/assets/src/material-icons/edit.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/encrypted.svg b/libs/assets/src/material-icons/encrypted.svg
new file mode 100644
index 00000000000..88c1c9830ac
--- /dev/null
+++ b/libs/assets/src/material-icons/encrypted.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/error.svg b/libs/assets/src/material-icons/error.svg
new file mode 100644
index 00000000000..a97cfacfbcf
--- /dev/null
+++ b/libs/assets/src/material-icons/error.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/extension.svg b/libs/assets/src/material-icons/extension.svg
new file mode 100644
index 00000000000..f7e5572a478
--- /dev/null
+++ b/libs/assets/src/material-icons/extension.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/external-link.svg b/libs/assets/src/material-icons/external-link.svg
new file mode 100644
index 00000000000..c2c293281aa
--- /dev/null
+++ b/libs/assets/src/material-icons/external-link.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/family.svg b/libs/assets/src/material-icons/family.svg
new file mode 100644
index 00000000000..5bab36b8560
--- /dev/null
+++ b/libs/assets/src/material-icons/family.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/file-text.svg b/libs/assets/src/material-icons/file-text.svg
new file mode 100644
index 00000000000..4a29b8282d3
--- /dev/null
+++ b/libs/assets/src/material-icons/file-text.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/file.svg b/libs/assets/src/material-icons/file.svg
new file mode 100644
index 00000000000..d1649cbbe0c
--- /dev/null
+++ b/libs/assets/src/material-icons/file.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/filter-1.svg b/libs/assets/src/material-icons/filter-1.svg
new file mode 100644
index 00000000000..3d8ba25c7da
--- /dev/null
+++ b/libs/assets/src/material-icons/filter-1.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/filter.svg b/libs/assets/src/material-icons/filter.svg
new file mode 100644
index 00000000000..3ac33167ad9
--- /dev/null
+++ b/libs/assets/src/material-icons/filter.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/folder.svg b/libs/assets/src/material-icons/folder.svg
new file mode 100644
index 00000000000..0b20f1901e8
--- /dev/null
+++ b/libs/assets/src/material-icons/folder.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/generate.svg b/libs/assets/src/material-icons/generate.svg
new file mode 100644
index 00000000000..2866e56a93e
--- /dev/null
+++ b/libs/assets/src/material-icons/generate.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/groups.svg b/libs/assets/src/material-icons/groups.svg
new file mode 100644
index 00000000000..a0db3f535da
--- /dev/null
+++ b/libs/assets/src/material-icons/groups.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/handshake.svg b/libs/assets/src/material-icons/handshake.svg
new file mode 100644
index 00000000000..d18138f5388
--- /dev/null
+++ b/libs/assets/src/material-icons/handshake.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/hashtag.svg b/libs/assets/src/material-icons/hashtag.svg
new file mode 100644
index 00000000000..2d09f4505e8
--- /dev/null
+++ b/libs/assets/src/material-icons/hashtag.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/help.svg b/libs/assets/src/material-icons/help.svg
new file mode 100644
index 00000000000..ceff7b27c12
--- /dev/null
+++ b/libs/assets/src/material-icons/help.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/identity.svg b/libs/assets/src/material-icons/identity.svg
new file mode 100644
index 00000000000..5ce3b5abc85
--- /dev/null
+++ b/libs/assets/src/material-icons/identity.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/info.svg b/libs/assets/src/material-icons/info.svg
new file mode 100644
index 00000000000..7a5aed0afff
--- /dev/null
+++ b/libs/assets/src/material-icons/info.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/key.svg b/libs/assets/src/material-icons/key.svg
new file mode 100644
index 00000000000..7acacab594e
--- /dev/null
+++ b/libs/assets/src/material-icons/key.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/list-alt.svg b/libs/assets/src/material-icons/list-alt.svg
new file mode 100644
index 00000000000..0150d79d06a
--- /dev/null
+++ b/libs/assets/src/material-icons/list-alt.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/list.svg b/libs/assets/src/material-icons/list.svg
new file mode 100644
index 00000000000..14ec34a3a22
--- /dev/null
+++ b/libs/assets/src/material-icons/list.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/loading.svg b/libs/assets/src/material-icons/loading.svg
new file mode 100644
index 00000000000..e8545c4678c
--- /dev/null
+++ b/libs/assets/src/material-icons/loading.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/lock-filled.svg b/libs/assets/src/material-icons/lock-filled.svg
new file mode 100644
index 00000000000..e37e39cdb12
--- /dev/null
+++ b/libs/assets/src/material-icons/lock-filled.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/lock.svg b/libs/assets/src/material-icons/lock.svg
new file mode 100644
index 00000000000..a6b597a72f5
--- /dev/null
+++ b/libs/assets/src/material-icons/lock.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/login.svg b/libs/assets/src/material-icons/login.svg
new file mode 100644
index 00000000000..c44ec683d09
--- /dev/null
+++ b/libs/assets/src/material-icons/login.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/mail.svg b/libs/assets/src/material-icons/mail.svg
new file mode 100644
index 00000000000..7432d4c49a9
--- /dev/null
+++ b/libs/assets/src/material-icons/mail.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/mobile.svg b/libs/assets/src/material-icons/mobile.svg
new file mode 100644
index 00000000000..b0d817844b3
--- /dev/null
+++ b/libs/assets/src/material-icons/mobile.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/more-horizontal.svg b/libs/assets/src/material-icons/more-horizontal.svg
new file mode 100644
index 00000000000..7117de27b31
--- /dev/null
+++ b/libs/assets/src/material-icons/more-horizontal.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/more-vertical.svg b/libs/assets/src/material-icons/more-vertical.svg
new file mode 100644
index 00000000000..a18d47db8b6
--- /dev/null
+++ b/libs/assets/src/material-icons/more-vertical.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/msp.svg b/libs/assets/src/material-icons/msp.svg
new file mode 100644
index 00000000000..02de164dd95
--- /dev/null
+++ b/libs/assets/src/material-icons/msp.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/new-window.svg b/libs/assets/src/material-icons/new-window.svg
new file mode 100644
index 00000000000..24fbb7b3e28
--- /dev/null
+++ b/libs/assets/src/material-icons/new-window.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/note.svg b/libs/assets/src/material-icons/note.svg
new file mode 100644
index 00000000000..8e9888b4cf4
--- /dev/null
+++ b/libs/assets/src/material-icons/note.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/notifications.svg b/libs/assets/src/material-icons/notifications.svg
new file mode 100644
index 00000000000..5e696fe89e3
--- /dev/null
+++ b/libs/assets/src/material-icons/notifications.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/numbered-list.svg b/libs/assets/src/material-icons/numbered-list.svg
new file mode 100644
index 00000000000..371603c376a
--- /dev/null
+++ b/libs/assets/src/material-icons/numbered-list.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/palette.svg b/libs/assets/src/material-icons/palette.svg
new file mode 100644
index 00000000000..3e5c835b42f
--- /dev/null
+++ b/libs/assets/src/material-icons/palette.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/passkey.svg b/libs/assets/src/material-icons/passkey.svg
new file mode 100644
index 00000000000..174a9028321
--- /dev/null
+++ b/libs/assets/src/material-icons/passkey.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/paypal.svg b/libs/assets/src/material-icons/paypal.svg
new file mode 100644
index 00000000000..ce0f046b3bd
--- /dev/null
+++ b/libs/assets/src/material-icons/paypal.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/receipt.svg b/libs/assets/src/material-icons/receipt.svg
new file mode 100644
index 00000000000..54a7bfc5225
--- /dev/null
+++ b/libs/assets/src/material-icons/receipt.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/redo.svg b/libs/assets/src/material-icons/redo.svg
new file mode 100644
index 00000000000..860b0af8607
--- /dev/null
+++ b/libs/assets/src/material-icons/redo.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/refresh.svg b/libs/assets/src/material-icons/refresh.svg
new file mode 100644
index 00000000000..e15058b5e20
--- /dev/null
+++ b/libs/assets/src/material-icons/refresh.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/search.svg b/libs/assets/src/material-icons/search.svg
new file mode 100644
index 00000000000..cf8cd6bfb5f
--- /dev/null
+++ b/libs/assets/src/material-icons/search.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/send.svg b/libs/assets/src/material-icons/send.svg
new file mode 100644
index 00000000000..ba721199691
--- /dev/null
+++ b/libs/assets/src/material-icons/send.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/settings-1.svg b/libs/assets/src/material-icons/settings-1.svg
new file mode 100644
index 00000000000..9c420d9555f
--- /dev/null
+++ b/libs/assets/src/material-icons/settings-1.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/settings.svg b/libs/assets/src/material-icons/settings.svg
new file mode 100644
index 00000000000..ee61c853bce
--- /dev/null
+++ b/libs/assets/src/material-icons/settings.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/share.svg b/libs/assets/src/material-icons/share.svg
new file mode 100644
index 00000000000..a74824a33d1
--- /dev/null
+++ b/libs/assets/src/material-icons/share.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/sign-in.svg b/libs/assets/src/material-icons/sign-in.svg
new file mode 100644
index 00000000000..030ebfe330f
--- /dev/null
+++ b/libs/assets/src/material-icons/sign-in.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/sign-out.svg b/libs/assets/src/material-icons/sign-out.svg
new file mode 100644
index 00000000000..049037a3076
--- /dev/null
+++ b/libs/assets/src/material-icons/sign-out.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/sliders.svg b/libs/assets/src/material-icons/sliders.svg
new file mode 100644
index 00000000000..1df625e33e5
--- /dev/null
+++ b/libs/assets/src/material-icons/sliders.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/sso.svg b/libs/assets/src/material-icons/sso.svg
new file mode 100644
index 00000000000..b9f99030381
--- /dev/null
+++ b/libs/assets/src/material-icons/sso.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/star-filled.svg b/libs/assets/src/material-icons/star-filled.svg
new file mode 100644
index 00000000000..376458be756
--- /dev/null
+++ b/libs/assets/src/material-icons/star-filled.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/star.svg b/libs/assets/src/material-icons/star.svg
new file mode 100644
index 00000000000..e683e75a2ec
--- /dev/null
+++ b/libs/assets/src/material-icons/star.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/subtract-circle.svg b/libs/assets/src/material-icons/subtract-circle.svg
new file mode 100644
index 00000000000..86de165743c
--- /dev/null
+++ b/libs/assets/src/material-icons/subtract-circle.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/subtract.svg b/libs/assets/src/material-icons/subtract.svg
new file mode 100644
index 00000000000..c8fc8de5e43
--- /dev/null
+++ b/libs/assets/src/material-icons/subtract.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/tag.svg b/libs/assets/src/material-icons/tag.svg
new file mode 100644
index 00000000000..dd690330892
--- /dev/null
+++ b/libs/assets/src/material-icons/tag.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/terminal.svg b/libs/assets/src/material-icons/terminal.svg
new file mode 100644
index 00000000000..285dce8de80
--- /dev/null
+++ b/libs/assets/src/material-icons/terminal.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/unarchive.svg b/libs/assets/src/material-icons/unarchive.svg
new file mode 100644
index 00000000000..80a0d301494
--- /dev/null
+++ b/libs/assets/src/material-icons/unarchive.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/undo.svg b/libs/assets/src/material-icons/undo.svg
new file mode 100644
index 00000000000..e7faeec0336
--- /dev/null
+++ b/libs/assets/src/material-icons/undo.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/unlock.svg b/libs/assets/src/material-icons/unlock.svg
new file mode 100644
index 00000000000..f987888c604
--- /dev/null
+++ b/libs/assets/src/material-icons/unlock.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/upload.svg b/libs/assets/src/material-icons/upload.svg
new file mode 100644
index 00000000000..d9abb893c7c
--- /dev/null
+++ b/libs/assets/src/material-icons/upload.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/user.svg b/libs/assets/src/material-icons/user.svg
new file mode 100644
index 00000000000..b34d7956ef8
--- /dev/null
+++ b/libs/assets/src/material-icons/user.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/vault.svg b/libs/assets/src/material-icons/vault.svg
new file mode 100644
index 00000000000..9d52f824094
--- /dev/null
+++ b/libs/assets/src/material-icons/vault.svg
@@ -0,0 +1,4 @@
+
diff --git a/libs/assets/src/material-icons/visibility-off.svg b/libs/assets/src/material-icons/visibility-off.svg
new file mode 100644
index 00000000000..c7914c22b13
--- /dev/null
+++ b/libs/assets/src/material-icons/visibility-off.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/visibility.svg b/libs/assets/src/material-icons/visibility.svg
new file mode 100644
index 00000000000..6634fbe9a5d
--- /dev/null
+++ b/libs/assets/src/material-icons/visibility.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/warning.svg b/libs/assets/src/material-icons/warning.svg
new file mode 100644
index 00000000000..c2a5b8893f0
--- /dev/null
+++ b/libs/assets/src/material-icons/warning.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/wireless.svg b/libs/assets/src/material-icons/wireless.svg
new file mode 100644
index 00000000000..bcb0d3ac18b
--- /dev/null
+++ b/libs/assets/src/material-icons/wireless.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/assets/src/material-icons/wrench.svg b/libs/assets/src/material-icons/wrench.svg
new file mode 100644
index 00000000000..f7f106c3ba4
--- /dev/null
+++ b/libs/assets/src/material-icons/wrench.svg
@@ -0,0 +1,3 @@
+
diff --git a/libs/components/src/stories/icons/icon-data.ts b/libs/components/src/stories/icons/icon-data.ts
index 802e23fa3d6..5ed5dec3fc8 100644
--- a/libs/components/src/stories/icons/icon-data.ts
+++ b/libs/components/src/stories/icons/icon-data.ts
@@ -2,416 +2,437 @@ const statusIndicators = [
{
id: "bwi-check",
usage:
- "confirmation action (Example: 'confirm member'), successful confirmation (toast or callout), or shows currently selected option in a menu. Use with success color variable if applicable.",
+ 'Indicates a user action has been successful. Can also indicate a "selected" state in menus and other patterns where a user can select from multiple elements. Often used with success color variables.',
},
{
id: "bwi-error",
usage:
- "error; used in form field error states and error toasts, banners, and callouts. Do not use as a close or clear icon. Use with danger color variable.",
+ "Indicates a user action has been unsuccessful. Differently from the warning icon, error indicates that the user cannot proceed with their intended action due to a violated rule or system issue until that state has been resolved. Often used with error color variables.",
},
{
id: "bwi-exclamation-triangle",
usage:
- "warning; used in warning callouts, banners, and toasts. Use with warning color variable.",
+ "Indicates that a user action might lead to a problem or that there's elevated risk if the user proceeds. Does not necessarily block the user from continuing. Often used with warning color variables.",
},
{
id: "bwi-info-circle",
- usage: "information; used in info callouts, banners, and toasts. Use with info color variable.",
+ usage:
+ "Indicates that the associated content is informational, rather than actionable. Can be used as an interactive affordance, displaying a tooltip.",
},
{
id: "bwi-question-circle",
- usage: "link to help documentation or hover tooltip",
+ usage:
+ "Indicates a piece of data or content that is a question. Can be used as an interactive affordance, linking to help documentation.",
},
{
id: "bwi-spinner",
- usage: "loading",
+ usage:
+ "Indicates that the action is loading. Should only be used in nested components that require their own component-level loading state such as buttons.",
},
];
const bitwardenObjects = [
{
id: "bwi-business",
- usage: "organization or vault for Free, Teams or Enterprise",
+ usage:
+ "Indicates actions or elements that are related to organizations, Teams plan, Enterprise plan.",
},
{
id: "bwi-collection",
- usage: "collection",
+ usage: "Indicates a collection.",
},
{
id: "bwi-collection-shared",
- usage: "collection",
+ usage: "Indicates a collection.",
},
{
id: "bwi-credit-card",
- usage: "card item type",
+ usage: "Indicates a credit card item type.",
},
{
id: "bwi-dashboard",
- usage: "access-intelligence dashboard view",
+ usage: "Indicates access intelligence or reports.",
},
{
id: "bwi-family",
- usage: "family vault or organization",
+ usage:
+ "Indicates actions or elements that are related to a family vault, organization, or family plans.",
},
{
id: "bwi-folder",
- usage: "folder",
+ usage: "Indicates a folder.",
},
{
id: "bwi-globe",
- usage: "login item type",
+ usage: "Indicates a login item type.",
},
{
id: "bwi-id-card",
- usage: "identity item type",
+ usage: "Indicates an identity item type.",
},
{
id: "bwi-premium",
- usage: "upgrade to premium",
+ usage: "Relates to premium plans or actions.",
},
{
id: "bwi-send",
- usage: "send action or feature",
+ usage:
+ 'Indicates the Send feature. Can also be used to indicate a "send" action. Do not use this variation in navigation on mobile or extension. Prefer specific navigation icons.',
},
{
id: "bwi-sticky-note",
- usage: "secure note item type",
+ usage: "Indicates a secure note item type.",
},
{
id: "bwi-users",
- usage: "user group",
+ usage:
+ "Indicates a group in the context of organizations. Can also indicate multiple users in a more general context.",
},
{
id: "bwi-vault",
- usage: "general vault",
+ usage:
+ "Indicates the vault. Do not use this variation in bottom navigation on mobile or extension. Prefer specific navigation icons.",
},
];
const actions = [
{
id: "bwi-archive",
- usage: "-",
+ usage:
+ "Moves selected items to the Archive. Can also be used to indicate the Archive page or feature in navigation.",
},
{
id: "bwi-check-circle",
- usage: "check if password has been exposed",
+ usage:
+ 'As an action, indicates the "check if password has been exposed" action. Can also be used as an alternative to the "check" icon to indicate a success status.',
},
{
id: "bwi-clone",
- usage: "copy to clipboard action",
+ usage: "Copies data to the clipboard.",
},
{
id: "bwi-close",
- usage: "close action",
+ usage:
+ 'Close or dismiss action. Can be used as an affordance to close windows, modals, and drawers. Should not be confused with the "clear" icon which is used to clear content or selections from an input.',
},
{
id: "bwi-cog",
- usage: "settings",
+ usage:
+ 'Opens settings or options for a related field or page. In a toggle application like an icon button, use the default state to indicate "off" or "closed".',
},
{
id: "bwi-cog-f",
- usage: "settings",
+ usage:
+ 'Closes settings or options for a related field or page. In a toggle application like an icon button, use the filled state to indicate "on" or "open".',
},
{
id: "bwi-download",
- usage: "download or ",
+ usage: "Downloads the associated file or data.",
},
{
id: "bwi-envelope",
- usage: "action related to emailing a user",
+ usage: "Related to email or sending a message.",
},
{
id: "bwi-external-link",
- usage: "open in new window or popout",
+ usage: "Opens a link in a new window or popout.",
},
{
id: "bwi-eye",
- usage: "show icon for password fields",
+ usage:
+ 'Turns visibility on. In a toggle affordance the default state should be displayed when the data visibility is currently "off" or "not visible".',
},
{
id: "bwi-eye-slash",
- usage: "hide icon for password fields",
+ usage:
+ 'Turns visibility off. In a toggle affordance, the "off" state should be displayed when the data is currently visible.',
},
{
id: "bwi-files",
- usage: "clone action / duplicate an item",
+ usage: "Clone action/duplicate an item",
},
{
id: "bwi-generate",
- usage: "generate action in edit item forms",
+ usage: "Opens the password or username generator.",
},
{
id: "bwi-import",
- usage: "import a file",
+ usage: "Import or upload a file.",
},
{
id: "bwi-lock",
- usage: "lock vault action",
+ usage: 'Unlock action. Use the lock icon to indicate a "locked" state.',
},
{
id: "bwi-lock-encrypted",
- usage: "-",
+ usage: "",
},
{
id: "bwi-lock-f",
- usage: "-",
+ usage:
+ 'Lock vault action. Can also be used to indicate that the status of an element or content is in a "locked" state. Prefer the outline lock icon for most cases.',
},
{
id: "bwi-minus-circle",
- usage: "remove action",
+ usage:
+ "Remove, subtract, or delete action. This outlined version should primarily be placed in a component with a transparent background, such as a link or tertiary button. If using in a filled or outline button or FAB, prefer the standard subtract button.",
},
{
id: "bwi-pencil-square",
- usage: "edit action",
+ usage: "Edit action.",
},
{
id: "bwi-popout",
- usage: "popout action",
+ usage: "Opens a page in a new window—similar to a pop out action.",
},
{
id: "bwi-plus",
- usage: "new or add option in contained buttons/links",
+ usage:
+ "New, add, or increase action. This version with no outline should be used in most cases.",
},
{
id: "bwi-plus-circle",
- usage: "new or add option in text buttons/links",
+ usage:
+ "New, add, or increase action. This outlined version should primarily be placed in a component with a transparent background, such as a link or tertiary button. If using in a filled or outline button or FAB, prefer the standard add button.",
},
{
id: "bwi-refresh",
- usage: '"re"-action; such as refresh or regenerate',
+ usage: "Refresh action. Reloads selected screen or element.",
},
{
id: "bwi-search",
- usage: "search action",
+ usage: "Search action",
},
{
id: "bwi-share",
- usage: "-",
+ usage: "Share action. Typically opens a share sheet or menu with share options.",
},
{
id: "bwi-sign-in",
- usage: "sign-in action",
+ usage: "Login or sign-in action.",
},
{
id: "bwi-sign-out",
- usage: "sign-out action",
+ usage: "Logout or sign-out action.",
},
{
id: "bwi-star",
- usage: "favorite action",
+ usage:
+ 'Favorite action. Use the outline version of this icon to indicate the unselected or "not favorited" state.',
},
{
id: "bwi-star-f",
- usage: "favorited / unfavorite action",
+ usage:
+ 'Unfavorite action. Use the filled version of this icon to indicate the selected or "favorited" state.',
},
{
id: "bwi-trash",
- usage: "delete action or trash area",
+ usage: "Delete action. Can also be used to indicate a trash folder or area.",
},
{
id: "bwi-unarchive",
- usage: "remove item from archive",
+ usage: "Unarchive action. Removes an item from the archive.",
},
{
id: "bwi-undo",
- usage: "restore action",
+ usage: "Undo or restore action.",
},
{
id: "bwi-unlock",
- usage: "unlocked",
+ usage: 'Lock action. Use the unlock icon to indicate an "unlocked" state.',
},
];
const directionalMenuIndicators = [
{
id: "bwi-angle-down",
- usage: "closed dropdown or open expandable section",
+ usage: "If used in collapse/expand section, indicates collapsed state.",
},
{
id: "bwi-angle-left",
- usage: "-",
+ usage: "In iOS, indicates the back action.",
},
{
id: "bwi-angle-right",
- usage: "closed expandable section",
+ usage:
+ 'In mobile, indicates a "push" or that selecting an item will open push the view to a new screen.',
},
{
id: "bwi-angle-up",
- usage: "open dropdown",
+ usage: "If used in collapse/expand section, indicates expanded state.",
},
{
id: "bwi-down-solid",
- usage: "table sort order",
+ usage: "Expanded selection. Click to collapse the associated section.",
},
{
id: "bwi-drag-and-drop",
- usage: "drag and drop handle",
+ usage: "Drag and drop handle",
},
{
id: "bwi-ellipsis-h",
- usage: "more options menu horizontal; used in mobile list items",
+ usage:
+ "More options. Use the horizontal version for menus that effect individual items, content, or data.",
},
{
id: "bwi-ellipsis-v",
- usage: "more options menu vertical; used primarily in tables",
+ usage:
+ "More options. Use the vertical version for menus that effect groups of items, content, or data, or full pages.",
},
{
id: "bwi-filter",
- usage: "Product switcher",
+ usage: "Switch to grid view.",
},
{
id: "bwi-list",
- usage: "toggle list/grid view",
+ usage: "Switch to list view.",
},
{
id: "bwi-list-alt",
- usage: "view item action in extension",
+ usage: "",
},
{
id: "bwi-numbered-list",
- usage: "toggle numbered list view",
+ usage: "Switch to numbered list view.",
},
{
id: "bwi-up-down-btn",
- usage: "table sort order",
+ usage:
+ "In tables, indicates a sortable column. When this icon is present, the associated column is not the sorting column. When clicked, replace the up-down icon with an arrow-down or arrow-up depending on whether the column is sorted in ascending or descending order.",
},
{
id: "bwi-up-solid",
- usage: "table sort order",
+ usage: "",
},
];
const miscObjects = [
{
id: "bwi-bell",
- usage: "-",
+ usage: "Indicates a notification or message.",
},
{
id: "bwi-billing",
- usage: "billing options",
+ usage: "Relates to payment and billing.",
},
{
id: "bwi-browser",
- usage: "web browser",
- },
- {
- id: "bwi-browser-alt",
- usage: "web browser",
+ usage: "Indicates a web browser or browser window.",
},
{
id: "bwi-brush",
- usage: "-",
+ usage: "Indicates appearance settings.",
},
{
id: "bwi-bug",
- usage: "test or debug action",
+ usage: "Indicates a test or debug action.",
},
{
id: "bwi-camera",
- usage: "actions related to camera use",
+ usage: "Used for actions related to camera use, like scanning a QR code.",
},
{
id: "bwi-cli",
- usage: "cli client or code",
+ usage: "Relates to cli client or code.",
},
{
id: "bwi-clock",
- usage: "use for time based actions or views",
+ usage: "Used for time-based actions or views.",
},
{
id: "bwi-desktop",
- usage: "desktop client",
+ usage: "Indicates the desktop client.",
},
{
id: "bwi-dollar",
- usage: "account credit",
+ usage: "Used for account credit.",
},
{
id: "bwi-file",
- usage: "file related objects or actions",
+ usage: "File-related objects or actions. Can also indicate a file send.",
},
{
id: "bwi-file-text",
- usage: "text related objects or actions",
+ usage: "Text related objects or actions. Can also indicate a text send.",
},
{
id: "bwi-hashtag",
- usage: "link to specific id",
+ usage: "Link to specific ID.",
},
{
id: "bwi-key",
- usage: "key or password related objects or actions",
+ usage: "Key or password related objects or actions.",
},
{
id: "bwi-mobile",
- usage: "mobile client",
+ usage: "Indicates the mobile clients.",
},
{
id: "bwi-msp",
- usage: "-",
+ usage: "Indicates an MSP.",
},
{
id: "bwi-paperclip",
- usage: "attachments",
+ usage: "Indicates an attachment or an attach action.",
},
{
id: "bwi-passkey",
- usage: "passkey",
+ usage: "Indicates a passkey.",
},
{
id: "bwi-pencil",
- usage: "editing",
+ usage: "Edit action.",
},
{
id: "bwi-provider",
- usage: "relates to provider or provider portal",
+ usage: "Can be used to indicate an item or action related to a provider.",
},
{
id: "bwi-puzzle",
- usage: "-",
+ usage: "Indicates the browser extension client.",
},
{
id: "bwi-shield",
- usage: "-",
+ usage: "Indicates the Bitwarden brand or Bitwarden-branded elements.",
},
{
id: "bwi-sliders",
- usage: "reporting or filtering",
+ usage: "Adjust or refine options.",
},
{
id: "bwi-tag",
- usage: "labels",
+ usage: "Indicates a label or a tag affordance.",
},
{
id: "bwi-universal-access",
- usage: "use for accessibility related actions",
+ usage: "Indicates accessbility-related settings and actions.",
},
{
id: "bwi-user",
- usage: "relates to current user or organization member",
+ usage: "Relates to current user or organization member.",
},
{
id: "bwi-user-monitor",
- usage: "-",
+ usage: "Indicates a user of the desktop client or web app.",
},
{
id: "bwi-wireless",
- usage: "-",
+ usage: "Used to indicate wifi or wireless status.",
},
{
id: "bwi-wrench",
- usage: "tools or additional configuration options",
+ usage: "Used to indicate tools.",
},
];
const platformsAndLogos = [
{
id: "bwi-bitcoin",
- usage: "crypto",
+ usage: "Indicates Bitcoin and cryptocurrency.",
},
{
id: "bwi-paypal",
- usage: "PayPal",
+ usage: "Indicates PayPal.",
},
];
diff --git a/package-lock.json b/package-lock.json
index 568e8d30d96..3ce3e43d1e4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -29,7 +29,6 @@
"@emotion/css": "11.13.5",
"@koa/multer": "4.0.0",
"@koa/router": "14.0.0",
- "@material-design-icons/svg": "0.14.15",
"@microsoft/signalr": "8.0.7",
"@microsoft/signalr-protocol-msgpack": "8.0.7",
"@ng-select/ng-select": "20.7.0",
@@ -146,6 +145,7 @@
"eslint-plugin-rxjs-angular": "2.0.1",
"eslint-plugin-storybook": "9.1.16",
"eslint-plugin-tailwindcss": "3.18.0",
+ "fantasticon": "3.0.0",
"html-loader": "5.1.0",
"html-webpack-injector": "1.1.4",
"html-webpack-plugin": "5.6.5",
@@ -170,6 +170,7 @@
"sass-loader": "16.0.6",
"storybook": "9.1.16",
"style-loader": "4.0.0",
+ "svgo": "4.0.0",
"tailwindcss": "3.4.17",
"ts-jest": "29.4.5",
"ts-loader": "9.5.4",
@@ -8407,12 +8408,6 @@
"node": ">=10"
}
},
- "node_modules/@material-design-icons/svg": {
- "version": "0.14.15",
- "resolved": "https://registry.npmjs.org/@material-design-icons/svg/-/svg-0.14.15.tgz",
- "integrity": "sha512-6nbjwGwyJnphwQUscJAYqw1Tk6+W8KvsgOAeyVgzIFXVsHfgX5XyplTUcZ29wbcTUysMMyCUi1LYpmFKA/e61g==",
- "license": "Apache-2.0"
- },
"node_modules/@mdx-js/react": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz",
@@ -16229,6 +16224,13 @@
"node": ">=8"
}
},
+ "node_modules/aproba": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz",
+ "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/archy": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
@@ -16236,6 +16238,36 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/are-we-there-yet": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
+ "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
+ "deprecated": "This package is no longer supported.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/are-we-there-yet/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/arg": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
@@ -17120,6 +17152,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
"node_modules/bl": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
@@ -17402,6 +17444,34 @@
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"license": "MIT"
},
+ "node_modules/bufferstreams": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-3.0.0.tgz",
+ "integrity": "sha512-Qg0ggJUWJq90vtg4lDsGN9CDWvzBMQxhiEkSOD/sJfYt6BLect3eV1/S6K7SCSKJ34n60rf6U5eUPmQENVE4UA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "^3.4.0"
+ },
+ "engines": {
+ "node": ">=8.12.0"
+ }
+ },
+ "node_modules/bufferstreams/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/bufferutil": {
"version": "4.0.9",
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz",
@@ -17944,6 +18014,16 @@
"credit-card-type": "^10.0.2"
}
},
+ "node_modules/case": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz",
+ "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==",
+ "dev": true,
+ "license": "(MIT OR GPL-3.0-or-later)",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/case-sensitive-paths-webpack-plugin": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
@@ -18221,6 +18301,23 @@
"node": ">=6"
}
},
+ "node_modules/cli-color": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz",
+ "integrity": "sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.64",
+ "es6-iterator": "^2.0.3",
+ "memoizee": "^0.4.15",
+ "timers-ext": "^0.1.7"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/cli-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
@@ -18890,6 +18987,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/content-disposition": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz",
@@ -19300,12 +19404,13 @@
}
},
"node_modules/css-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
+ "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "mdn-data": "2.0.30",
+ "mdn-data": "2.12.2",
"source-map-js": "^1.0.1"
},
"engines": {
@@ -19478,6 +19583,13 @@
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"license": "MIT"
},
+ "node_modules/cubic2quad": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/cubic2quad/-/cubic2quad-1.2.1.tgz",
+ "integrity": "sha512-wT5Y7mO8abrV16gnssKdmIhIbA9wSkeMzhh27jAguKrV82i24wER0vL5TGhUJ9dbJNDcigoRZ0IAHFEEEI4THQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/cwd": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz",
@@ -19492,6 +19604,20 @@
"node": ">=0.8"
}
},
+ "node_modules/d": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
+ "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "es5-ext": "^0.10.64",
+ "type": "^2.7.2"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
"node_modules/data-urls": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
@@ -21119,6 +21245,23 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/es5-ext": {
+ "version": "0.10.64",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
+ "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "ISC",
+ "dependencies": {
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.3",
+ "esniff": "^2.0.1",
+ "next-tick": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/es6-error": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
@@ -21126,6 +21269,18 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
"node_modules/es6-shim": {
"version": "0.35.8",
"resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.8.tgz",
@@ -21133,6 +21288,33 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/es6-symbol": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
+ "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "^1.0.2",
+ "ext": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/es6-weak-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
+ "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.46",
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.1"
+ }
+ },
"node_modules/esbuild": {
"version": "0.25.9",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz",
@@ -21681,6 +21863,22 @@
"node": "*"
}
},
+ "node_modules/esniff": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
+ "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.62",
+ "event-emitter": "^0.3.5",
+ "type": "^2.7.2"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/espree": {
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
@@ -21784,6 +21982,17 @@
"node": ">= 0.6"
}
},
+ "node_modules/event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
"node_modules/event-stream": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz",
@@ -22032,6 +22241,16 @@
"node": ">= 0.8"
}
},
+ "node_modules/ext": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
+ "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "type": "^2.7.2"
+ }
+ },
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -22122,6 +22341,119 @@
"node": ">=10.13.0"
}
},
+ "node_modules/fantasticon": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/fantasticon/-/fantasticon-3.0.0.tgz",
+ "integrity": "sha512-PylulixZA8I0SeiUKtuyOhwrz/ojZTSA1KXddipvEyQXCVrpPMTnSXzaE9nXXK7nCjJWFkqoBAQ1aBdaxMltrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "case": "^1.6.3",
+ "cli-color": "^2.0.4",
+ "commander": "^12.0.0",
+ "glob": "^10.3.12",
+ "handlebars": "^4.7.8",
+ "slugify": "^1.6.6",
+ "svg2ttf": "^6.0.3",
+ "svgicons2svgfont": "^12.0.0",
+ "ttf2eot": "^3.1.0",
+ "ttf2woff": "^3.0.0",
+ "ttf2woff2": "^5.0.0"
+ },
+ "bin": {
+ "fantasticon": "bin/fantasticon"
+ },
+ "engines": {
+ "node": ">= 16.0.0"
+ }
+ },
+ "node_modules/fantasticon/node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/fantasticon/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/fantasticon/node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/fantasticon/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/fantasticon/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/fantasticon/node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -22297,6 +22629,13 @@
"node": ">=16.0.0"
}
},
+ "node_modules/file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/filelist": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
@@ -23046,6 +23385,34 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/gauge": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
+ "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
+ "deprecated": "This package is no longer supported.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.3",
+ "console-control-strings": "^1.1.0",
+ "has-unicode": "^2.0.1",
+ "signal-exit": "^3.0.7",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.5"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/gauge/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -23510,6 +23877,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/hasha": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz",
@@ -28758,6 +29132,16 @@
"yallist": "^3.0.2"
}
},
+ "node_modules/lru-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
+ "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es5-ext": "~0.10.2"
+ }
+ },
"node_modules/lunr": {
"version": "2.3.9",
"resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
@@ -29206,9 +29590,10 @@
}
},
"node_modules/mdn-data": {
- "version": "2.0.30",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
+ "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
+ "dev": true,
"license": "CC0-1.0"
},
"node_modules/media-typer": {
@@ -29232,6 +29617,26 @@
"node": ">= 4.0.0"
}
},
+ "node_modules/memoizee": {
+ "version": "0.4.17",
+ "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz",
+ "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "^1.0.2",
+ "es5-ext": "^0.10.64",
+ "es6-weak-map": "^2.0.3",
+ "event-emitter": "^0.3.5",
+ "is-promise": "^2.2.2",
+ "lru-queue": "^0.1.0",
+ "next-tick": "^1.1.0",
+ "timers-ext": "^0.1.7"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
"node_modules/merge-descriptors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
@@ -29268,6 +29673,13 @@
"node": ">= 0.6"
}
},
+ "node_modules/microbuffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/microbuffer/-/microbuffer-1.0.0.tgz",
+ "integrity": "sha512-O/SUXauVN4x6RaEJFqSPcXNtLFL+QzJHKZlyDVYFwcDDRVca3Fa/37QXXC+4zAGGa4YhHrHxKXuuHvLDIQECtA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/micromark": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
@@ -30510,6 +30922,13 @@
"thenify-all": "^1.0.0"
}
},
+ "node_modules/nan": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.24.0.tgz",
+ "integrity": "sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/nano-spawn": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-1.0.2.tgz",
@@ -30611,6 +31030,13 @@
"node": ">= 10"
}
},
+ "node_modules/next-tick": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
+ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/ngx-toastr": {
"version": "19.1.0",
"resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-19.1.0.tgz",
@@ -31741,6 +32167,23 @@
"node": ">=8"
}
},
+ "node_modules/npmlog": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
+ "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
+ "deprecated": "This package is no longer supported.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "are-we-there-yet": "^3.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^4.0.3",
+ "set-blocking": "^2.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
"node_modules/nth-check": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
@@ -34360,6 +34803,59 @@
"postcss": "^8.4.31"
}
},
+ "node_modules/postcss-svgo/node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/postcss-svgo/node_modules/css-tree": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/postcss-svgo/node_modules/mdn-data": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/postcss-svgo/node_modules/svgo": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
+ "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
+ "license": "MIT",
+ "dependencies": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^2.3.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "svgo": "bin/svgo"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
+ }
+ },
"node_modules/postcss-unique-selectors": {
"version": "6.0.4",
"resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz",
@@ -37051,6 +37547,16 @@
"node": ">=8"
}
},
+ "node_modules/slugify": {
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz",
+ "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/smart-buffer": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
@@ -38039,25 +38545,128 @@
"dev": true,
"license": "BSD-2-Clause"
},
- "node_modules/svgo": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
- "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
+ "node_modules/svg-pathdata": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
+ "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/svg2ttf": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/svg2ttf/-/svg2ttf-6.0.3.tgz",
+ "integrity": "sha512-CgqMyZrbOPpc+WqH7aga4JWkDPso23EgypLsbQ6gN3uoPWwwiLjXvzgrwGADBExvCRJrWFzAeK1bSoSpE7ixSQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@trysound/sax": "0.2.0",
- "commander": "^7.2.0",
- "css-select": "^5.1.0",
- "css-tree": "^2.3.1",
- "css-what": "^6.1.0",
- "csso": "^5.0.5",
- "picocolors": "^1.0.0"
+ "@xmldom/xmldom": "^0.7.2",
+ "argparse": "^2.0.1",
+ "cubic2quad": "^1.2.1",
+ "lodash": "^4.17.10",
+ "microbuffer": "^1.0.0",
+ "svgpath": "^2.1.5"
},
"bin": {
- "svgo": "bin/svgo"
+ "svg2ttf": "svg2ttf.js"
+ }
+ },
+ "node_modules/svg2ttf/node_modules/@xmldom/xmldom": {
+ "version": "0.7.13",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz",
+ "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==",
+ "deprecated": "this version is no longer supported, please update to at least 0.8.*",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/svgicons2svgfont": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/svgicons2svgfont/-/svgicons2svgfont-12.0.0.tgz",
+ "integrity": "sha512-fjyDkhiG0M1TPBtZzD12QV3yDcG2fUgiqHPOCYzf7hHE40Hl3GhnE6P1njsJCCByhwM7MiufyDW3L7IOR5dg9w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^9.3.0",
+ "glob": "^8.0.3",
+ "sax": "^1.2.4",
+ "svg-pathdata": "^6.0.3"
+ },
+ "bin": {
+ "svgicons2svgfont": "bin/svgicons2svgfont.js"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">=16.15.0"
+ }
+ },
+ "node_modules/svgicons2svgfont/node_modules/commander": {
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+ "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || >=14"
+ }
+ },
+ "node_modules/svgicons2svgfont/node_modules/glob": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/svgicons2svgfont/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/svgo": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz",
+ "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^11.1.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^3.0.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.1.1",
+ "sax": "^1.4.1"
+ },
+ "bin": {
+ "svgo": "bin/svgo.js"
+ },
+ "engines": {
+ "node": ">=16"
},
"funding": {
"type": "opencollective",
@@ -38065,12 +38674,23 @@
}
},
"node_modules/svgo/node_modules/commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">= 10"
+ "node": ">=16"
+ }
+ },
+ "node_modules/svgpath": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/svgpath/-/svgpath-2.6.0.tgz",
+ "integrity": "sha512-OIWR6bKzXvdXYyO4DK/UWa1VA1JeKq8E+0ug2DG98Y/vOmMpfZNj+TIG988HjfYSqtcy/hFOtZq/n/j5GSESNg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/fontello/svg2ttf?sponsor=1"
}
},
"node_modules/symbol-tree": {
@@ -38663,6 +39283,20 @@
"integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
"license": "MIT"
},
+ "node_modules/timers-ext": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz",
+ "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "es5-ext": "^0.10.64",
+ "next-tick": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
"node_modules/tiny-async-pool": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz",
@@ -39221,6 +39855,142 @@
"dev": true,
"license": "0BSD"
},
+ "node_modules/ttf2eot": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ttf2eot/-/ttf2eot-3.1.0.tgz",
+ "integrity": "sha512-aHTbcYosNHVqb2Qtt9Xfta77ae/5y0VfdwNLUS6sGBeGr22cX2JDMo/i5h3uuOf+FAD3akYOr17+fYd5NK8aXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "ttf2eot": "ttf2eot.js"
+ }
+ },
+ "node_modules/ttf2woff": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ttf2woff/-/ttf2woff-3.0.0.tgz",
+ "integrity": "sha512-OvmFcj70PhmAsVQKfC15XoKH55cRWuaRzvr2fpTNhTNer6JBpG8n6vOhRrIgxMjcikyYt88xqYXMMVapJ4Rjvg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1",
+ "pako": "^1.0.0"
+ },
+ "bin": {
+ "ttf2woff": "ttf2woff.js"
+ }
+ },
+ "node_modules/ttf2woff2": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ttf2woff2/-/ttf2woff2-5.0.0.tgz",
+ "integrity": "sha512-FplhShJd3rT8JGa8N04YWQuP7xRvwr9AIq+9/z5O/5ubqNiCADshKl8v51zJDFkhDVcYpdUqUpm7T4M53Z2JoQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "bindings": "^1.5.0",
+ "bufferstreams": "^3.0.0",
+ "nan": "^2.14.2",
+ "node-gyp": "^9.0.0"
+ },
+ "bin": {
+ "ttf2woff2": "bin/ttf2woff2.js"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/ttf2woff2/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/ttf2woff2/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/ttf2woff2/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ttf2woff2/node_modules/node-gyp": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz",
+ "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "env-paths": "^2.2.0",
+ "exponential-backoff": "^3.1.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^10.0.3",
+ "nopt": "^6.0.0",
+ "npmlog": "^6.0.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
+ "which": "^2.0.2"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
+ },
+ "engines": {
+ "node": "^12.13 || ^14.13 || >=16"
+ }
+ },
+ "node_modules/ttf2woff2/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/tuf-js": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz",
@@ -39542,6 +40312,13 @@
"node": "*"
}
},
+ "node_modules/type": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
+ "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -41738,6 +42515,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/wide-align": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
"node_modules/wildcard": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
diff --git a/package.json b/package.json
index 4666b11aae4..ce41b5444b1 100644
--- a/package.json
+++ b/package.json
@@ -31,9 +31,7 @@
"build-storybook:ci": "ng run components:build-storybook --webpack-stats-json",
"test-stories": "test-storybook --url http://localhost:6006",
"test-stories:watch": "test-stories --watch",
- "icons:install": "npm install @material-design-icons/svg",
- "icons:extract": "ts-node scripts/material-icons/extract-material-svgs.ts",
- "icons:setup": "npm run icons:install && npm run icons:extract"
+ "icons:build": "ts-node scripts/material-icons/build-with-bwi-names.ts"
},
"workspaces": [
"apps/*",
@@ -110,6 +108,7 @@
"eslint-plugin-rxjs-angular": "2.0.1",
"eslint-plugin-storybook": "9.1.16",
"eslint-plugin-tailwindcss": "3.18.0",
+ "fantasticon": "3.0.0",
"html-loader": "5.1.0",
"html-webpack-injector": "1.1.4",
"html-webpack-plugin": "5.6.5",
@@ -134,6 +133,7 @@
"sass-loader": "16.0.6",
"storybook": "9.1.16",
"style-loader": "4.0.0",
+ "svgo": "4.0.0",
"tailwindcss": "3.4.17",
"ts-jest": "29.4.5",
"ts-loader": "9.5.4",
@@ -166,7 +166,6 @@
"@emotion/css": "11.13.5",
"@koa/multer": "4.0.0",
"@koa/router": "14.0.0",
- "@material-design-icons/svg": "0.14.15",
"@microsoft/signalr": "8.0.7",
"@microsoft/signalr-protocol-msgpack": "8.0.7",
"@ng-select/ng-select": "20.7.0",
diff --git a/scripts/material-icons/NEXT-STEPS.md b/scripts/material-icons/NEXT-STEPS.md
deleted file mode 100644
index d5be4a8661c..00000000000
--- a/scripts/material-icons/NEXT-STEPS.md
+++ /dev/null
@@ -1,269 +0,0 @@
-# Material Icons Migration - Next Steps
-
-## ✅ What's Been Completed
-
-1. ✅ **Installed Material Icons package** - `@material-design-icons/svg` v0.14.15
-2. ✅ **Created icon mapping** - 95 BWI icons mapped to Material Icons equivalents
-3. ✅ **Extracted SVG files** - All 95 icons successfully extracted and renamed
-4. ✅ **NPM scripts added** - Convenient commands for future updates
-
-## 📦 What You Have Now
-
-- **95 SVG files** in `.material-icons-staging/` directory
-- Each file is named with BWI convention (e.g., `bwi-close.svg`, `bwi-lock.svg`)
-- Files are ready to be converted into a font
-
-## 🎯 Next Steps (Manual - You Need to Do This)
-
-### Step 1: Generate Icon Font
-
-You need to convert the 95 SVG files into a font file. Choose one option:
-
-#### **Option A: IcoMoon (Recommended - Web-based, Free)**
-
-1. Open https://icomoon.io/app in your browser
-2. Click **"Import Icons"** button (top left)
-3. Select **all 95 SVG files** from:
- ```
- /Users/bryancunningham/Desktop/Code/clients/.material-icons-staging/
- ```
-4. After import, click **"Select All"** to select all imported icons
-5. Click **"Generate Font"** button (bottom right)
-6. Click ⚙️ icon for preferences:
- - **Font Name:** `bwi-font`
- - **Class Prefix:** `bwi-`
- - Leave other settings as default
-7. Click **"Download"** button
-8. Extract the downloaded ZIP file
-
-#### **Option B: Fantasticon (Command-line, Automated)**
-
-```bash
-# Install fantasticon globally
-npm install -g fantasticon
-
-# Generate font (run from project root)
-fantasticon .material-icons-staging \
- --output-dir libs/angular/src/scss/bwicons/fonts \
- --font-types woff2,woff,ttf,svg \
- --name bwi-font \
- --prefix bwi- \
- --normalize
-
-# Skip to Step 3 (Testing)
-```
-
-### Step 2: Replace Font Files
-
-After generating the font (via IcoMoon or Fantasticon):
-
-1. **Backup current font files** (optional but recommended):
-
- ```bash
- cp -r libs/angular/src/scss/bwicons/fonts libs/angular/src/scss/bwicons/fonts.backup
- ```
-
-2. **Copy new font files** from the downloaded package to:
-
- ```
- libs/angular/src/scss/bwicons/fonts/
- ```
-
- You need these 4 files:
- - `bwi-font.svg`
- - `bwi-font.ttf`
- - `bwi-font.woff`
- - `bwi-font.woff2`
-
-3. **Verify files are in place**:
- ```bash
- ls -lh libs/angular/src/scss/bwicons/fonts/
- ```
-
-### Step 3: Test the Changes
-
-1. **Build the project**:
-
- ```bash
- npm run build
- ```
-
-2. **Start development server**:
-
- ```bash
- npm start
- ```
-
-3. **Visual inspection**:
- - Open the app in your browser
- - Check various pages with icons
- - Verify icons display correctly
- - Test icon buttons (click, hover states)
-
-4. **Test in Storybook**:
-
- ```bash
- npm run storybook
- ```
-
- - Navigate to Component Library → Icon
- - Check that all icons render properly
-
-5. **Test across all apps**:
- - **Web app** - Main application
- - **Browser extension** - All popup pages
- - **Desktop app** - All windows
-
-### Step 4: Commit the Changes
-
-Once everything looks good:
-
-```bash
-# Stage the new font files
-git add libs/angular/src/scss/bwicons/fonts/
-
-# Stage the mapping and scripts
-git add scripts/material-icons/
-git add package.json
-
-# Commit
-git commit -m "Replace BWI font with Material Design icons
-
-- Add Material Icons package (@material-design-icons/svg)
-- Create BWI → Material Icons mapping (95 icons)
-- Generate new BWI font using Material Design glyphs
-- All existing code continues to work (zero code changes)
-- Icons now follow Material Design guidelines
-
-🤖 Generated with Claude Code"
-```
-
-## 🔄 Rollback Instructions
-
-If anything goes wrong, you can instantly rollback:
-
-```bash
-# Restore original font files
-git checkout HEAD -- libs/angular/src/scss/bwicons/fonts/
-
-# Rebuild
-npm run build
-```
-
-## 📝 Icon Mappings Reference
-
-Here are some notable mappings from your Figma design:
-
-### Status Indicators
-
-- `bwi-check` → `check`
-- `bwi-error` → `error`
-- `bwi-info-circle` → `info`
-- `bwi-spinner` → `sync`
-- `bwi-exclamation-triangle` → `warning`
-
-### Common Actions
-
-- `bwi-plus` → `add`
-- `bwi-pencil` → `edit`
-- `bwi-trash` → `delete`
-- `bwi-close` → `close`
-- `bwi-search` → `search`
-
-### Bitwarden Objects
-
-- `bwi-vault` → `inventory_2`
-- `bwi-lock` → `lock`
-- `bwi-key` → `vpn_key`
-- `bwi-folder` → `folder`
-- `bwi-collection` → `folder_shared`
-
-### Navigation
-
-- `bwi-angle-down` → `keyboard_arrow_down`
-- `bwi-angle-up` → `keyboard_arrow_up`
-- `bwi-ellipsis-h` → `more_horiz`
-- `bwi-ellipsis-v` → `more_vert`
-
-**Full mapping:** See [scripts/material-icons/icon-mapping.ts](./icon-mapping.ts)
-
-## 🎯 What This Achieves
-
-✅ **Zero code changes** - All 1000+ usages of `bwi-*` classes continue to work
-✅ **Material Design** - Modern, consistent icon design
-✅ **Easy rollback** - Just revert 4 font files if needed
-✅ **Future-proof** - Can easily update icons by regenerating font
-✅ **No breaking changes** - Fully backward compatible
-
-## 📚 Documentation
-
-- **Mapping configuration:** [scripts/material-icons/icon-mapping.ts](./icon-mapping.ts)
-- **Extraction script:** [scripts/material-icons/extract-material-svgs.ts](./extract-material-svgs.ts)
-- **Full README:** [scripts/material-icons/README.md](./README.md)
-- **Extracted files:** `.material-icons-staging/` (95 SVG files)
-
-## 🐛 Troubleshooting
-
-### Icons not displaying after font replacement
-
-**Issue:** Icons show as squares or don't render
-
-**Solution:**
-
-1. Clear browser cache (Cmd+Shift+R / Ctrl+Shift+R)
-2. Verify font files are correct:
- ```bash
- ls -lh libs/angular/src/scss/bwicons/fonts/
- ```
-3. Check browser console for font loading errors
-4. Rebuild project: `npm run build`
-
-### Font generation warnings in IcoMoon
-
-**Issue:** IcoMoon shows warnings about icon complexity
-
-**Solution:**
-
-- Click "Ignore" or "Simplify" - Material Icons are optimized
-- Warnings are usually safe to ignore for outline icons
-
-### Icons have wrong size/alignment
-
-**Issue:** Icons appear too large/small or misaligned
-
-**Solution:**
-
-- Regenerate font with "Normalize" option enabled in IcoMoon
-- Or use Fantasticon with `--normalize` flag
-
-## 📞 Need Help?
-
-- **Material Icons Gallery:** https://fonts.google.com/icons
-- **IcoMoon Documentation:** https://icomoon.io/docs.html
-- **Figma Design File:** https://www.figma.com/design/Zt3YSeb6E6lebAffrNLa0h/Tailwind-Component-Library
-
-## ⚡ Quick Commands Reference
-
-```bash
-# Reinstall Material Icons (if needed)
-npm run icons:install
-
-# Re-extract SVG files (if mapping changes)
-npm run icons:extract
-
-# Complete setup from scratch
-npm run icons:setup
-
-# Build project
-npm run build
-
-# Run Storybook
-npm run storybook
-
-# Rollback font files
-git checkout HEAD -- libs/angular/src/scss/bwicons/fonts/
-```
-
----
-
-**Ready to proceed?** Follow Step 1 above to generate your font! 🚀
diff --git a/scripts/material-icons/README.md b/scripts/material-icons/README.md
deleted file mode 100644
index 3671bca8822..00000000000
--- a/scripts/material-icons/README.md
+++ /dev/null
@@ -1,277 +0,0 @@
-# Material Icons Migration - Zero Code Changes
-
-This directory contains scripts and configuration for migrating Bitwarden's BWI icon font to use Material Design icon glyphs while maintaining 100% backward compatibility.
-
-## Overview
-
-**Goal:** Replace all BWI icon glyphs with Material Design equivalents **without changing any code**.
-
-**Result:** All existing code using `bwi-close`, `bwi-lock`, etc. will continue to work exactly the same, but will render Material Design icons instead.
-
-## Quick Start
-
-```bash
-# Step 1: Install Material Icons package
-npm run icons:install
-
-# Step 2: Extract and prepare SVG files
-npm run icons:extract
-
-# Step 3: Generate new font (see instructions below)
-
-# Step 4: Replace font files and test
-```
-
-## Detailed Steps
-
-### Step 1: Install Material Icons
-
-```bash
-npm run icons:install
-```
-
-This installs `@material-design-icons/svg` package which contains all Material Design icons as individual SVG files.
-
-### Step 2: Extract Icon SVGs
-
-```bash
-npm run icons:extract
-```
-
-This script:
-
-- Reads the icon mapping from [`icon-mapping.ts`](./icon-mapping.ts)
-- Finds each Material Icon SVG file (outlined variant)
-- Renames them to match BWI names (e.g., `close.svg` → `bwi-close.svg`)
-- Copies them to `.material-icons-staging/` directory
-
-**Output:**
-
-- `.material-icons-staging/` - Contains 80+ renamed SVG files
-- `.material-icons-staging/extraction-report.json` - Details about what was extracted
-- `.material-icons-staging/INSTRUCTIONS.md` - Next steps
-
-### Step 3: Generate Icon Font
-
-Now you need to convert the SVG files into a font. You have three options:
-
-#### Option A: IcoMoon (Recommended - Web-based)
-
-1. Go to https://icomoon.io/app
-2. Click "Import Icons" button (top left)
-3. Select all SVG files from `.material-icons-staging/`
-4. Select all imported icons (click "Select All")
-5. Click "Generate Font" button (bottom right)
-6. In font preferences:
- - **Font Name:** `bwi-font`
- - **Class Prefix:** `bwi-`
- - Keep other settings as default
-7. Click "Download"
-8. Extract the downloaded ZIP file
-9. Copy these files from `fonts/` folder to `libs/angular/src/scss/bwicons/fonts/`:
- - `bwi-font.svg`
- - `bwi-font.ttf`
- - `bwi-font.woff`
- - `bwi-font.woff2`
-
-#### Option B: Fontello (Web-based)
-
-1. Go to https://fontello.com
-2. Drag and drop all SVG files from `.material-icons-staging/`
-3. Customize settings:
- - Font Name: `bwi-font`
- - CSS Prefix: `bwi-`
-4. Download font package
-5. Copy font files to `libs/angular/src/scss/bwicons/fonts/`
-
-#### Option C: Fantasticon (Command-line)
-
-```bash
-# Install fantasticon globally
-npm install -g fantasticon
-
-# Generate font
-fantasticon .material-icons-staging \
- --output-dir libs/angular/src/scss/bwicons/fonts \
- --font-types woff2,woff,ttf,svg \
- --name bwi-font \
- --prefix bwi- \
- --normalize
-```
-
-### Step 4: Test the Changes
-
-After replacing the font files:
-
-```bash
-# Build the project
-npm run build
-
-# Start development server
-npm start
-
-# Test in each app:
-# - Browser extension
-# - Desktop app
-# - Web app
-```
-
-**What to test:**
-
-- ✅ All icons render correctly
-- ✅ Icons maintain proper sizing
-- ✅ Icons work in all components (buttons, menus, lists, etc.)
-- ✅ No console errors
-- ✅ Icons work across all themes (light/dark)
-
-### Step 5: Rollback (if needed)
-
-If anything goes wrong, you can instantly rollback:
-
-```bash
-git checkout HEAD -- libs/angular/src/scss/bwicons/fonts/
-```
-
-This restores the original BWI font files.
-
-## Icon Mapping
-
-The complete mapping is defined in [`icon-mapping.ts`](./icon-mapping.ts):
-
-```typescript
-export const BWI_TO_MATERIAL_MAPPING = {
- "bwi-close": "close",
- "bwi-lock": "lock",
- "bwi-unlock": "lock_open",
- "bwi-check": "check",
- // ... 80+ more mappings
-};
-```
-
-### Icon Categories
-
-1. **Status Indicators** - check, error, info, warning, etc.
-2. **Bitwarden Objects** - vault, collection, folder, credit-card, etc.
-3. **Actions** - add, edit, delete, download, share, etc.
-4. **Arrows & Menus** - angle-down, angle-up, ellipsis-h, etc.
-5. **Miscellaneous** - browser, desktop, mobile, key, etc.
-6. **3rd Party** - bitcoin, paypal, etc.
-
-### New Icons
-
-The mapping also identifies **new Material Icons** that don't have BWI equivalents:
-
-- `autofill` - New icon for autofill feature
-- `clear` - Differentiated from error icon
-- `redo` - Paired with undo
-- `arrow-down`, `arrow-up`, `arrow-left`, `arrow-right` - Directional arrows
-- `diamond` - Premium plans indicator
-- `sso` - Single sign-on
-- And more...
-
-These can be added to the component library separately.
-
-## What Gets Changed?
-
-### ✅ What Changes
-
-- **Font files** in `libs/angular/src/scss/bwicons/fonts/`
-- **Visual appearance** of icons (now Material Design)
-
-### ❌ What Stays The Same
-
-- **All HTML/template files** - No changes needed
-- **All TypeScript files** - No changes needed
-- **All class names** - Still use `bwi-close`, `bwi-lock`, etc.
-- **All component code** - Works exactly as before
-- **Icon button usage** - Still `bitIconButton="bwi-close"`
-
-## File Structure
-
-```
-scripts/material-icons/
-├── README.md # This file
-├── icon-mapping.ts # BWI → Material mappings (80+ icons)
-├── extract-material-svgs.ts # Extraction script
-└── .material-icons-staging/ # Generated during extraction
- ├── bwi-close.svg
- ├── bwi-lock.svg
- ├── ... (80+ SVG files)
- ├── extraction-report.json
- └── INSTRUCTIONS.md
-```
-
-## Troubleshooting
-
-### Problem: Material Icons package not found
-
-**Solution:**
-
-```bash
-npm run icons:install
-```
-
-### Problem: Some icons missing after extraction
-
-**Check:**
-
-1. Look at `.material-icons-staging/extraction-report.json`
-2. Failed icons will be listed with reasons
-3. Most common issue: Material Icon name doesn't exist
-4. Fix the mapping in `icon-mapping.ts` and re-run extraction
-
-### Problem: Icons not displaying after font replacement
-
-**Check:**
-
-1. Font files are in correct location: `libs/angular/src/scss/bwicons/fonts/`
-2. Font file names are correct: `bwi-font.svg`, `bwi-font.ttf`, etc.
-3. Clear browser cache and rebuild
-4. Check browser console for font loading errors
-
-### Problem: Icons have wrong size/alignment
-
-**Solution:**
-
-- This usually happens if font generation settings were incorrect
-- Regenerate font with proper settings (see Step 3)
-- Ensure "Normalize" option is enabled in font generator
-
-## Notes from Figma Design
-
-The following icons have special notes from the design team:
-
-- **bwi-collection-shared** - Should be removed, use `bwi-collection` instead
-- **bwi-down-solid / bwi-up-solid** - Replace with new arrow icons in tables
-- **bwi-provider** - Replace SSO usage with new `sso` icon
-- **bwi-filter** - Consider using more standard filter icon in browser extension
-- **bwi-brush** - Needs artwork update to palette icon
-
-See `ICON_NOTES` in [`icon-mapping.ts`](./icon-mapping.ts) for complete list.
-
-## Benefits
-
-✅ **Zero code changes** - All 1000+ icon usages continue to work
-✅ **Instant rollback** - Just revert 4 font files
-✅ **Material Design consistency** - Modern, recognizable icons
-✅ **No breaking changes** - Fully backward compatible
-✅ **Easy testing** - Deploy and test without code migration
-✅ **Future-proof** - Can gradually add new Material Icons
-
-## Next Steps
-
-After successfully replacing the font:
-
-1. **Test thoroughly** across all apps and components
-2. **Get design team approval** on icon appearance
-3. **Consider new icons** - Add new Material Icons identified in mapping
-4. **Clean up** - Remove deprecated icons like `bwi-collection-shared`
-5. **Update documentation** - Note that BWI now uses Material Design glyphs
-
-## Support
-
-Questions? Check:
-
-- [Material Icons Gallery](https://fonts.google.com/icons)
-- [Figma Design File](https://www.figma.com/design/Zt3YSeb6E6lebAffrNLa0h/Tailwind-Component-Library)
-- [IcoMoon Documentation](https://icomoon.io/docs.html)
diff --git a/scripts/material-icons/build-with-bwi-names.ts b/scripts/material-icons/build-with-bwi-names.ts
new file mode 100644
index 00000000000..07a693f066b
--- /dev/null
+++ b/scripts/material-icons/build-with-bwi-names.ts
@@ -0,0 +1,170 @@
+#!/usr/bin/env ts-node
+
+/**
+ * Builds icon font with BWI names by temporarily renaming files
+ * This eliminates the need for SCSS aliases
+ */
+
+import { execSync } from "child_process";
+import * as fs from "fs";
+import * as path from "path";
+
+const ICONS_DIR = path.join(__dirname, "../../libs/assets/src/material-icons");
+const SCSS_PATH = path.join(__dirname, "../../libs/angular/src/scss/bwicons/styles/style.scss");
+
+// Mapping from Figma icon names to BWI icon names (without bwi- prefix)
+// Each Figma icon can map to one or more BWI names
+const FIGMA_TO_BWI: Record = {
+ // Status Indicators
+ help: "question-circle",
+ info: "info-circle",
+ loading: "spinner",
+ "star-filled": "star-f",
+
+ // Actions
+ add: "plus",
+ "add-circle": "plus-circle",
+ copy: "clone",
+ edit: "pencil-square",
+ "edit-alt": "pencil",
+ duplicate: "files",
+ upload: "import",
+ mail: "envelope",
+ "new-window": "popout",
+ settings: "cog",
+ "settings-1": "cog-f",
+ "subtract-circle": "minus-circle",
+ visibility: "eye",
+ "visibility-off": "eye-slash",
+ delete: "trash",
+
+ // Navigation & Menu
+ "angle-up-down": "up-down-btn",
+ "arrow-filled-down": "down-solid",
+ "arrow-filled-up": "up-solid",
+ drag: "drag-and-drop",
+ grid: "filter",
+ "more-horizontal": "ellipsis-h",
+ "more-vertical": "ellipsis-v",
+ warning: "exclamation-triangle",
+
+ // Bitwarden Objects
+ collection: ["collection", "collection-shared"],
+ groups: "users",
+ identity: "id-card",
+ login: "globe",
+ note: "sticky-note",
+ attach: "paperclip",
+
+ // Devices & Platforms
+ "desktop-user": "user-monitor",
+
+ // Misc
+ diamond: "premium",
+ accessibility: "universal-access",
+ "bitwarden-shield": "shield",
+ notifications: "bell",
+ palette: "brush",
+ receipt: "billing",
+ extension: "puzzle",
+ handshake: "provider",
+ encrypted: "lock-encrypted",
+ "lock-filled": "lock-f",
+ terminal: "cli",
+};
+
+interface RenameOperation {
+ from: string;
+ to: string;
+}
+
+function buildIconFont(): void {
+ const renameOps: RenameOperation[] = [];
+
+ try {
+ // Step 1: Rename Figma icons to BWI names
+ for (const [figmaName, bwiName] of Object.entries(FIGMA_TO_BWI)) {
+ const fromPath = path.join(ICONS_DIR, `${figmaName}.svg`);
+
+ // Handle both string and array values
+ const bwiNames = Array.isArray(bwiName) ? bwiName : [bwiName];
+
+ for (const targetName of bwiNames) {
+ const toPath = path.join(ICONS_DIR, `${targetName}.svg`);
+
+ if (fs.existsSync(fromPath)) {
+ // For first target, move the file; for subsequent targets, copy it
+ if (targetName === bwiNames[0]) {
+ fs.renameSync(fromPath, toPath);
+ } else {
+ fs.copyFileSync(path.join(ICONS_DIR, `${bwiNames[0]}.svg`), toPath);
+ }
+ renameOps.push({ from: fromPath, to: toPath });
+ }
+ }
+ }
+
+ // Step 2: Generate icon font
+ execSync(
+ 'fantasticon libs/assets/src/material-icons -o libs/angular/src/scss/bwicons/fonts -t woff2 woff ttf svg -n bwi-font --selector ".bwi-%s" --normalize -h 1024 --descent 128',
+ { stdio: "inherit" },
+ );
+
+ // Step 3: Update SCSS
+ const jsonPath = path.join(
+ __dirname,
+ "../../libs/angular/src/scss/bwicons/fonts/bwi-font.json",
+ );
+ const glyphMap: Record = JSON.parse(fs.readFileSync(jsonPath, "utf-8"));
+
+ const entries = Object.entries(glyphMap)
+ .sort((a, b) => a[0].localeCompare(b[0]))
+ .map(([name, code]) => {
+ const hex = code.toString(16);
+ return ` "${name}": "\\${hex}"`;
+ });
+
+ const iconCount = entries.length;
+ const iconsMapContent = `// For new icons - add their glyph name and value to the map below
+// Also add to \`libs/components/src/shared/icon.ts\`
+// Auto-generated from Figma icons (${iconCount} icons)
+$icons: (
+${entries.join(",\n")}
+);`;
+
+ let scssContent = fs.readFileSync(SCSS_PATH, "utf-8");
+
+ // Replace the $icons map
+ const iconsMapRegex = /\/\/ For new icons - add their glyph name[\s\S]*?\$icons: \([\s\S]*?\);/;
+ scssContent = scssContent.replace(iconsMapRegex, iconsMapContent);
+
+ // Remove the BWI aliases section since we don't need it anymore
+ const aliasesRegex = /\/\/ BWI name aliases for Figma icons[\s\S]*?(?=\n\/\/|$)/;
+ scssContent = scssContent.replace(aliasesRegex, "");
+
+ fs.writeFileSync(SCSS_PATH, scssContent, "utf-8");
+
+ // Step 4: Cleanup temporary files
+ execSync("rm -f libs/angular/src/scss/bwicons/fonts/bwi-font.{css,html,json,ts}", {
+ stdio: "inherit",
+ });
+ } finally {
+ // Step 5: Restore original Figma names
+ const processedSources = new Set();
+
+ for (const { from, to } of renameOps) {
+ if (fs.existsSync(to)) {
+ // If this is the first target for this source, rename it back
+ // Otherwise, it's a copy that should just be deleted
+ if (!processedSources.has(from)) {
+ fs.renameSync(to, from);
+ processedSources.add(from);
+ } else {
+ fs.unlinkSync(to);
+ }
+ }
+ }
+ }
+}
+
+buildIconFont();
diff --git a/scripts/material-icons/extract-material-svgs.ts b/scripts/material-icons/extract-material-svgs.ts
deleted file mode 100644
index bd3a8650d24..00000000000
--- a/scripts/material-icons/extract-material-svgs.ts
+++ /dev/null
@@ -1,227 +0,0 @@
-#!/usr/bin/env ts-node
-
-/**
- * Extract Material Icon SVG files based on BWI → Material mapping
- *
- * This script:
- * 1. Reads the icon mapping configuration
- * 2. Finds the corresponding Material Icon SVG files
- * 3. Copies them to a staging directory for font generation
- * 4. Renames them to match BWI icon names
- */
-
-import * as fs from "fs";
-import * as path from "path";
-
-import { BWI_TO_MATERIAL_MAPPING } from "./icon-mapping";
-
-// Configuration
-const MATERIAL_ICONS_SOURCE = path.join(__dirname, "../../node_modules/@material-design-icons/svg");
-const OUTPUT_DIR = path.join(__dirname, "../../.material-icons-staging");
-const ICON_VARIANT = "outlined"; // Options: filled, outlined, round, sharp, two-tone
-
-interface ExtractionResult {
- bwiName: string;
- materialName: string;
- sourcePath: string;
- outputPath: string;
- success: boolean;
- error?: string;
-}
-
-/**
- * Clean and prepare output directory
- */
-function prepareOutputDirectory(): void {
- if (fs.existsSync(OUTPUT_DIR)) {
- fs.rmSync(OUTPUT_DIR, { recursive: true });
- }
- fs.mkdirSync(OUTPUT_DIR, { recursive: true });
-}
-
-/**
- * Extract a single Material Icon SVG
- */
-function extractIcon(bwiName: string, materialName: string): ExtractionResult {
- const result: ExtractionResult = {
- bwiName,
- materialName,
- sourcePath: "",
- outputPath: "",
- success: false,
- };
-
- try {
- // Construct source path
- // Material Icons are organized as: svg/{variant}/{icon_name}.svg
- const sourcePath = path.join(MATERIAL_ICONS_SOURCE, ICON_VARIANT, `${materialName}.svg`);
-
- result.sourcePath = sourcePath;
-
- // Check if source file exists
- if (!fs.existsSync(sourcePath)) {
- result.error = `Source file not found: ${sourcePath}`;
- return result;
- }
-
- // Read SVG content
- const svgContent = fs.readFileSync(sourcePath, "utf-8");
-
- // Create output filename: bwi-{name}.svg
- // This preserves the BWI naming convention for font generation
- const outputFileName = `${bwiName}.svg`;
- const outputPath = path.join(OUTPUT_DIR, outputFileName);
-
- result.outputPath = outputPath;
-
- // Write to output directory
- fs.writeFileSync(outputPath, svgContent, "utf-8");
-
- result.success = true;
- return result;
- } catch (error) {
- result.error = error.message;
- return result;
- }
-}
-
-/**
- * Extract all Material Icons based on mapping
- */
-function extractAllIcons(): void {
- const results: ExtractionResult[] = [];
- const errors: ExtractionResult[] = [];
-
- // Process each mapping
- for (const [bwiName, materialName] of Object.entries(BWI_TO_MATERIAL_MAPPING)) {
- const result = extractIcon(bwiName, materialName);
- results.push(result);
-
- if (!result.success) {
- errors.push(result);
- }
- }
-
- // Save extraction report
- const reportPath = path.join(OUTPUT_DIR, "extraction-report.json");
- const report = {
- timestamp: new Date().toISOString(),
- variant: ICON_VARIANT,
- totalMapped: results.length,
- successful: results.filter((r) => r.success).length,
- failed: errors.length,
- results,
- };
-
- fs.writeFileSync(reportPath, JSON.stringify(report, null, 2));
-
- // Create instructions file
- createInstructionsFile();
-}
-
-/**
- * Create instructions for next steps
- */
-function createInstructionsFile(): void {
- const instructions = `
-# Material Icons Extraction Complete
-
-## What Was Done
-- Extracted ${Object.keys(BWI_TO_MATERIAL_MAPPING).length} Material Icons (${ICON_VARIANT} variant)
-- Renamed to match BWI icon names
-- Saved to: ${OUTPUT_DIR}
-
-## Next Steps: Generate Icon Font
-
-### Option 1: Using IcoMoon (Recommended)
-1. Go to https://icomoon.io/app
-2. Click "Import Icons" button
-3. Select all SVG files from: ${OUTPUT_DIR}
-4. Select all imported icons
-5. Click "Generate Font" at bottom
-6. In font preferences:
- - Font Name: bwi-font
- - Class Prefix: bwi-
- - Keep existing icon names (they already have bwi- prefix)
-7. Download the font package
-8. Extract and copy these files to libs/angular/src/scss/bwicons/fonts/:
- - bwi-font.svg
- - bwi-font.ttf
- - bwi-font.woff
- - bwi-font.woff2
-
-### Option 2: Using Fontello
-1. Go to https://fontello.com
-2. Drag and drop all SVG files from ${OUTPUT_DIR}
-3. Assign each icon to its glyph code
-4. Download font package
-5. Copy font files to libs/angular/src/scss/bwicons/fonts/
-
-### Option 3: Automated (Advanced)
-Use a tool like 'fantasticon' or 'icon-font-generator':
-
-\`\`\`bash
-npm install -g fantasticon
-
-fantasticon ${OUTPUT_DIR} \\
- --output-dir libs/angular/src/scss/bwicons/fonts \\
- --font-types woff2,woff,ttf,svg \\
- --name bwi-font \\
- --prefix bwi- \\
- --normalize
-\`\`\`
-
-## Testing
-After replacing font files:
-1. Run: npm run build
-2. Start dev server: npm start
-3. Check that all icons display correctly
-4. Test across: browser extension, desktop app, web app
-
-## Rollback
-If anything goes wrong:
-\`\`\`bash
-git checkout HEAD -- libs/angular/src/scss/bwicons/fonts/
-\`\`\`
-
-## Current Font Files Location
-${path.join(__dirname, "../../libs/angular/src/scss/bwicons/fonts")}
-`;
-
- const instructionsPath = path.join(OUTPUT_DIR, "INSTRUCTIONS.md");
- fs.writeFileSync(instructionsPath, instructions.trim());
-}
-
-/**
- * Validate Material Icons package is installed
- */
-function validateMaterialIconsPackage(): boolean {
- if (!fs.existsSync(MATERIAL_ICONS_SOURCE)) {
- throw new Error(
- `Material Icons package not found at ${MATERIAL_ICONS_SOURCE}. Install with: npm install @material-design-icons/svg`,
- );
- }
-
- const variantPath = path.join(MATERIAL_ICONS_SOURCE, ICON_VARIANT);
- if (!fs.existsSync(variantPath)) {
- throw new Error(`Icon variant '${ICON_VARIANT}' not found at ${variantPath}`);
- }
-
- return true;
-}
-
-/**
- * Main execution
- */
-function main(): void {
- validateMaterialIconsPackage();
- prepareOutputDirectory();
- extractAllIcons();
-}
-
-// Run if executed directly
-if (require.main === module) {
- main();
-}
-
-export { extractIcon, extractAllIcons, prepareOutputDirectory };
diff --git a/scripts/material-icons/icon-mapping.ts b/scripts/material-icons/icon-mapping.ts
deleted file mode 100644
index 544130a44f6..00000000000
--- a/scripts/material-icons/icon-mapping.ts
+++ /dev/null
@@ -1,206 +0,0 @@
-/**
- * Mapping from BWI icon names to Material Icon names
- *
- * This mapping is used to generate a new BWI font file where each BWI icon name
- * maps to a Material Design icon glyph.
- *
- * Source: Figma design file - Icon mapping tables
- * https://www.figma.com/design/Zt3YSeb6E6lebAffrNLa0h/Tailwind-Component-Library
- *
- * Last updated: 2025-12-04
- */
-
-export const BWI_TO_MATERIAL_MAPPING = {
- // ============================================
- // STATUS INDICATORS
- // ============================================
- "bwi-check": "check",
- "bwi-error": "error",
- "bwi-info-circle": "info", // Was: bwi-info-circle
- "bwi-spinner": "sync", // Was: bwi-spinner (loading/spinner icon)
- "bwi-question-circle": "help", // Was: bwi-question-circle
- "bwi-exclamation-triangle": "warning", // Was: bwi-exclamation-triangle
-
- // ============================================
- // BITWARDEN OBJECTS
- // ============================================
- "bwi-business": "business",
- "bwi-collection": "folder_shared",
- "bwi-collection-shared": "folder_shared", // Remove this - use collection instead
- "bwi-credit-card": "credit_card",
- "bwi-dashboard": "dashboard",
- "bwi-family": "family_restroom",
- "bwi-folder": "folder",
- "bwi-user": "person", // Was: bwi-users (singular)
- "bwi-users": "group", // Was: bwi-users (plural)
- "bwi-id-card": "badge", // Was: bwi-id-card
- "bwi-globe": "public", // login item type
- "bwi-sticky-note": "sticky_note_2", // Was: bwi-sticky-note
- "bwi-send": "send",
- "bwi-vault": "inventory_2",
-
- // ============================================
- // ACTIONS
- // ============================================
- "bwi-plus": "add", // Was: bwi-plus
- "bwi-plus-circle": "add_circle", // Was: bwi-plus-circle
- "bwi-archive": "archive",
- "bwi-import": "upload_file", // Was: bwi-import (autofill is new)
- "bwi-check-circle": "check_circle",
- "bwi-clone": "content_copy", // Was: bwi-clone
- "bwi-close": "close",
- "bwi-download": "download",
- "bwi-pencil": "edit", // Was: bwi-pencil
- "bwi-pencil-square": "edit_note", // Was: bwi-pencil-square
- "bwi-lock-encrypted": "enhanced_encryption", // Was: bwi-lock-encrypted
- "bwi-external-link": "open_in_new",
- "bwi-files": "content_copy", // Was: bwi-files (duplicate action)
- "bwi-generate": "cached", // Was: bwi-generate
- "bwi-lock": "lock",
- "bwi-lock-f": "lock", // Was: bwi-lock-f (filled version)
- "bwi-envelope": "mail",
- "bwi-sign-in": "login",
- "bwi-sign-out": "logout",
- "bwi-popout": "open_in_new", // Was: bwi-popout (new-window)
- "bwi-refresh": "refresh",
- "bwi-search": "search",
- "bwi-cog": "settings", // Was: bwi-cog
- "bwi-cog-f": "settings", // Was: bwi-cog-f (filled version)
- "bwi-share": "share",
- "bwi-star": "star_outline",
- "bwi-star-f": "star",
- "bwi-minus-circle": "remove_circle", // Was: bwi-minus-circle (subtract-circle)
- "bwi-trash": "delete",
- "bwi-undo": "undo",
- "bwi-unlock": "lock_open",
- "bwi-eye": "visibility", // Was: bwi-eye
- "bwi-eye-slash": "visibility_off", // Was: bwi-eye-slash
-
- // ============================================
- // ARROWS AND MENUS
- // ============================================
- "bwi-angle-down": "keyboard_arrow_down",
- "bwi-angle-left": "keyboard_arrow_left",
- "bwi-angle-right": "keyboard_arrow_right",
- "bwi-angle-up": "keyboard_arrow_up",
- "bwi-up-down-btn": "unfold_more", // Was: bwi-up-down-btn (angle-up-down)
- "bwi-down-solid": "arrow_drop_down", // Was: bwi-down-solid (arrow-filled-down)
- "bwi-up-solid": "arrow_drop_up", // Was: bwi-up-solid (arrow-filled-up)
- "bwi-drag-and-drop": "drag_indicator", // Was: bwi-drag-and-drop (drag)
- "bwi-ellipsis-h": "more_horiz",
- "bwi-ellipsis-v": "more_vert",
- "bwi-filter": "filter_list",
- "bwi-list-alt": "view_agenda", // Was: bwi-filter (grid)
- "bwi-list": "list",
- "bwi-numbered-list": "format_list_numbered", // Was: bwi-numbered-list (list-alt)
- "bwi-sliders": "tune",
-
- // ============================================
- // MISCELLANEOUS
- // ============================================
- "bwi-universal-access": "accessibility", // Was: bwi-universal-access
- "bwi-paperclip": "attach_file", // Was: bwi-paperclip (attachment)
- "bwi-shield": "shield", // Was: bwi-shield (bitwarden-shield)
- "bwi-browser": "web",
- "bwi-bug": "bug_report",
- "bwi-camera": "photo_camera",
- "bwi-clock": "schedule",
- "bwi-desktop": "computer",
- "bwi-dollar": "attach_money", // Was: bwi-dollar
- "bwi-puzzle": "extension",
- "bwi-file": "description",
- "bwi-file-text": "article",
- "bwi-hashtag": "tag",
- "bwi-key": "vpn_key",
- "bwi-mobile": "smartphone",
- "bwi-msp": "business_center",
- "bwi-brush": "palette", // Was: bwi-brush
- "bwi-passkey": "password", // Was: bwi-passkey (using password icon)
- "bwi-bell": "notifications", // Was: bwi-bell (notifications)
- "bwi-billing": "receipt",
- "bwi-cli": "terminal",
- "bwi-tag": "label",
- "bwi-provider": "handshake", // Was: bwi-provider
- "bwi-wireless": "wifi",
- "bwi-wrench": "build",
-
- // ============================================
- // 3RD PARTY PLATFORMS AND LOGOS
- // ============================================
- "bwi-bitcoin": "currency_bitcoin",
- "bwi-paypal": "payments",
-} as const;
-
-/**
- * Material Icon names that are NEW and don't have BWI equivalents
- * These should be added to the component library as new icons
- */
-export const NEW_MATERIAL_ICONS = {
- autofill: "login", // New icon for autofill feature
- clear: "backspace", // New icon, differentiated from error
- redo: "redo", // New icon, should be coupled with undo
- subtract: "remove", // New icon (no outline version)
- "arrow-down": "south", // New icon for directional arrows
- "arrow-left": "west", // New icon
- "arrow-right": "east", // New icon
- "arrow-up": "north", // New icon
- "arrow-filled-left": "arrow_back", // New icon
- "arrow-filled-right": "arrow_forward", // New icon
- diamond: "diamond", // New icon for premium plans
- sso: "cloud", // New icon for single-sign-on
- "edit-alt": "edit", // Alternative edit icon
- duplicate: "content_copy", // Was: bwi-files
- "file-upload": "upload_file", // Was: bwi-import
- unarchive: "unarchive", // New icon
- grid: "grid_view", // Was: bwi-filter (different usage)
-} as const;
-
-export type BwiIconName = keyof typeof BWI_TO_MATERIAL_MAPPING;
-export type MaterialIconName = (typeof BWI_TO_MATERIAL_MAPPING)[BwiIconName];
-export type NewMaterialIconName = keyof typeof NEW_MATERIAL_ICONS;
-
-/**
- * Get Material Icon name from BWI icon name
- */
-export function getMaterialIconName(bwiName: string): string | undefined {
- return BWI_TO_MATERIAL_MAPPING[bwiName as BwiIconName];
-}
-
-/**
- * Check if BWI icon has a Material Icon mapping
- */
-export function hasMaterialMapping(bwiName: string): boolean {
- return bwiName in BWI_TO_MATERIAL_MAPPING;
-}
-
-/**
- * Get all BWI icon names that have Material mappings
- */
-export function getMappedBwiIcons(): readonly BwiIconName[] {
- return Object.keys(BWI_TO_MATERIAL_MAPPING) as BwiIconName[];
-}
-
-/**
- * Get all Material icon names used in mappings
- */
-export function getMappedMaterialIcons(): readonly MaterialIconName[] {
- return Object.values(BWI_TO_MATERIAL_MAPPING);
-}
-
-/**
- * Icons that need attention based on Figma notes
- */
-export const ICON_NOTES = {
- "bwi-collection-shared": "Remove this icon. Replace all instances with bwi-collection",
- "bwi-pencil-square": "Question: When should this be used in place of the edit-alt version?",
- "bwi-pencil": "Question: Move this icon from Misc Objects to Actions?",
- "bwi-down-solid":
- "All instances of the solid arrow used in tables to indicate sort order descending should be replaced with arrow-down",
- "bwi-up-solid":
- "All instances of the solid arrow used in tables to indicate sort order ascending should be replaced with arrow-up",
- "bwi-provider":
- "Replace instances of 'provider' icon used to indicate single-sign-on with the new sso icon",
- "bwi-filter":
- "Consider replacing the current sliders icon in the browser extension for this more standard filter icon",
- "bwi-brush": "Replace current 'brush' icon",
-} as const;