aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.clang-format65
-rw-r--r--.gitignore2
-rw-r--r--README.rst12
-rwxr-xr-xbuild.sh10
-rwxr-xr-xconvert_icons.sh16
-rw-r--r--feather/LICENSE21
-rw-r--r--feather/activity.svg1
-rw-r--r--feather/airplay.svg1
-rw-r--r--feather/alert-circle.svg1
-rw-r--r--feather/alert-octagon.svg1
-rw-r--r--feather/alert-triangle.svg1
-rw-r--r--feather/align-center.svg1
-rw-r--r--feather/align-justify.svg1
-rw-r--r--feather/align-left.svg1
-rw-r--r--feather/align-right.svg1
-rw-r--r--feather/anchor.svg1
-rw-r--r--feather/aperture.svg1
-rw-r--r--feather/archive.svg1
-rw-r--r--feather/arrow-down-circle.svg1
-rw-r--r--feather/arrow-down-left.svg1
-rw-r--r--feather/arrow-down-right.svg1
-rw-r--r--feather/arrow-down.svg1
-rw-r--r--feather/arrow-left-circle.svg1
-rw-r--r--feather/arrow-left.svg1
-rw-r--r--feather/arrow-right-circle.svg1
-rw-r--r--feather/arrow-right.svg1
-rw-r--r--feather/arrow-up-circle.svg1
-rw-r--r--feather/arrow-up-left.svg1
-rw-r--r--feather/arrow-up-right.svg1
-rw-r--r--feather/arrow-up.svg1
-rw-r--r--feather/at-sign.svg1
-rw-r--r--feather/award.svg1
-rw-r--r--feather/bar-chart-2.svg1
-rw-r--r--feather/bar-chart.svg1
-rw-r--r--feather/battery-charging.svg1
-rw-r--r--feather/battery.svg1
-rw-r--r--feather/bell-off.svg1
-rw-r--r--feather/bell.svg1
-rw-r--r--feather/bluetooth.svg1
-rw-r--r--feather/bold.svg1
-rw-r--r--feather/book-open.svg1
-rw-r--r--feather/book.svg1
-rw-r--r--feather/bookmark.svg1
-rw-r--r--feather/box.svg1
-rw-r--r--feather/briefcase.svg1
-rw-r--r--feather/calendar.svg1
-rw-r--r--feather/camera-off.svg1
-rw-r--r--feather/camera.svg1
-rw-r--r--feather/cast.svg1
-rw-r--r--feather/check-circle.svg1
-rw-r--r--feather/check-square.svg1
-rw-r--r--feather/check.svg1
-rw-r--r--feather/chevron-down.svg1
-rw-r--r--feather/chevron-left.svg1
-rw-r--r--feather/chevron-right.svg1
-rw-r--r--feather/chevron-up.svg1
-rw-r--r--feather/chevrons-down.svg1
-rw-r--r--feather/chevrons-left.svg1
-rw-r--r--feather/chevrons-right.svg1
-rw-r--r--feather/chevrons-up.svg1
-rw-r--r--feather/chrome.svg1
-rw-r--r--feather/circle.svg1
-rw-r--r--feather/clipboard.svg1
-rw-r--r--feather/clock.svg1
-rw-r--r--feather/cloud-drizzle.svg1
-rw-r--r--feather/cloud-lightning.svg1
-rw-r--r--feather/cloud-off.svg1
-rw-r--r--feather/cloud-rain.svg1
-rw-r--r--feather/cloud-snow.svg1
-rw-r--r--feather/cloud.svg1
-rw-r--r--feather/code.svg1
-rw-r--r--feather/codepen.svg1
-rw-r--r--feather/codesandbox.svg1
-rw-r--r--feather/coffee.svg1
-rw-r--r--feather/columns.svg1
-rw-r--r--feather/command.svg1
-rw-r--r--feather/compass.svg1
-rw-r--r--feather/copy.svg1
-rw-r--r--feather/corner-down-left.svg1
-rw-r--r--feather/corner-down-right.svg1
-rw-r--r--feather/corner-left-down.svg1
-rw-r--r--feather/corner-left-up.svg1
-rw-r--r--feather/corner-right-down.svg1
-rw-r--r--feather/corner-right-up.svg1
-rw-r--r--feather/corner-up-left.svg1
-rw-r--r--feather/corner-up-right.svg1
-rw-r--r--feather/cpu.svg1
-rw-r--r--feather/credit-card.svg1
-rw-r--r--feather/crop.svg1
-rw-r--r--feather/crosshair.svg1
-rw-r--r--feather/database.svg1
-rw-r--r--feather/delete.svg1
-rw-r--r--feather/disc.svg1
-rw-r--r--feather/divide-circle.svg1
-rw-r--r--feather/divide-square.svg1
-rw-r--r--feather/divide.svg1
-rw-r--r--feather/dollar-sign.svg1
-rw-r--r--feather/download-cloud.svg1
-rw-r--r--feather/download.svg1
-rw-r--r--feather/dribbble.svg1
-rw-r--r--feather/droplet.svg1
-rw-r--r--feather/edit-2.svg1
-rw-r--r--feather/edit-3.svg1
-rw-r--r--feather/edit.svg1
-rw-r--r--feather/external-link.svg1
-rw-r--r--feather/eye-off.svg1
-rw-r--r--feather/eye.svg1
-rw-r--r--feather/facebook.svg1
-rw-r--r--feather/fast-forward.svg1
-rw-r--r--feather/feather.svg1
-rw-r--r--feather/figma.svg1
-rw-r--r--feather/file-minus.svg1
-rw-r--r--feather/file-plus.svg1
-rw-r--r--feather/file-text.svg1
-rw-r--r--feather/file.svg1
-rw-r--r--feather/film.svg1
-rw-r--r--feather/filter.svg1
-rw-r--r--feather/flag.svg1
-rw-r--r--feather/folder-minus.svg1
-rw-r--r--feather/folder-plus.svg1
-rw-r--r--feather/folder.svg1
-rw-r--r--feather/framer.svg1
-rw-r--r--feather/frown.svg1
-rw-r--r--feather/gift.svg1
-rw-r--r--feather/git-branch.svg1
-rw-r--r--feather/git-commit.svg1
-rw-r--r--feather/git-merge.svg1
-rw-r--r--feather/git-pull-request.svg1
-rw-r--r--feather/github.svg1
-rw-r--r--feather/gitlab.svg1
-rw-r--r--feather/globe.svg1
-rw-r--r--feather/grid.svg1
-rw-r--r--feather/hard-drive.svg1
-rw-r--r--feather/hash.svg1
-rw-r--r--feather/headphones.svg1
-rw-r--r--feather/heart.svg1
-rw-r--r--feather/help-circle.svg1
-rw-r--r--feather/hexagon.svg1
-rw-r--r--feather/home.svg1
-rw-r--r--feather/image.svg1
-rw-r--r--feather/inbox.svg1
-rw-r--r--feather/info.svg1
-rw-r--r--feather/instagram.svg1
-rw-r--r--feather/italic.svg1
-rw-r--r--feather/key.svg1
-rw-r--r--feather/layers.svg1
-rw-r--r--feather/layout.svg1
-rw-r--r--feather/life-buoy.svg1
-rw-r--r--feather/link-2.svg1
-rw-r--r--feather/link.svg1
-rw-r--r--feather/linkedin.svg1
-rw-r--r--feather/list.svg1
-rw-r--r--feather/loader.svg1
-rw-r--r--feather/lock.svg1
-rw-r--r--feather/log-in.svg1
-rw-r--r--feather/log-out.svg1
-rw-r--r--feather/mail.svg1
-rw-r--r--feather/map-pin.svg1
-rw-r--r--feather/map.svg1
-rw-r--r--feather/maximize-2.svg1
-rw-r--r--feather/maximize.svg1
-rw-r--r--feather/meh.svg1
-rw-r--r--feather/menu.svg1
-rw-r--r--feather/message-circle.svg1
-rw-r--r--feather/message-square.svg1
-rw-r--r--feather/mic-off.svg1
-rw-r--r--feather/mic.svg1
-rw-r--r--feather/minimize-2.svg1
-rw-r--r--feather/minimize.svg1
-rw-r--r--feather/minus-circle.svg1
-rw-r--r--feather/minus-square.svg1
-rw-r--r--feather/minus.svg1
-rw-r--r--feather/monitor.svg1
-rw-r--r--feather/moon.svg1
-rw-r--r--feather/more-horizontal.svg1
-rw-r--r--feather/more-vertical.svg1
-rw-r--r--feather/mouse-pointer.svg1
-rw-r--r--feather/move.svg1
-rw-r--r--feather/music.svg1
-rw-r--r--feather/navigation-2.svg1
-rw-r--r--feather/navigation.svg1
-rw-r--r--feather/octagon.svg1
-rw-r--r--feather/package.svg1
-rw-r--r--feather/paperclip.svg1
-rw-r--r--feather/pause-circle.svg1
-rw-r--r--feather/pause.svg1
-rw-r--r--feather/pen-tool.svg1
-rw-r--r--feather/percent.svg1
-rw-r--r--feather/phone-call.svg1
-rw-r--r--feather/phone-forwarded.svg1
-rw-r--r--feather/phone-incoming.svg1
-rw-r--r--feather/phone-missed.svg1
-rw-r--r--feather/phone-off.svg1
-rw-r--r--feather/phone-outgoing.svg1
-rw-r--r--feather/phone.svg1
-rw-r--r--feather/pie-chart.svg1
-rw-r--r--feather/play-circle.svg1
-rw-r--r--feather/play.svg1
-rw-r--r--feather/plus-circle.svg1
-rw-r--r--feather/plus-square.svg1
-rw-r--r--feather/plus.svg1
-rw-r--r--feather/pocket.svg1
-rw-r--r--feather/power.svg1
-rw-r--r--feather/printer.svg1
-rw-r--r--feather/radio.svg1
-rw-r--r--feather/refresh-ccw.svg1
-rw-r--r--feather/refresh-cw.svg1
-rw-r--r--feather/repeat.svg1
-rw-r--r--feather/rewind.svg1
-rw-r--r--feather/rotate-ccw.svg1
-rw-r--r--feather/rotate-cw.svg1
-rw-r--r--feather/rss.svg1
-rw-r--r--feather/save.svg1
-rw-r--r--feather/scissors.svg1
-rw-r--r--feather/search.svg1
-rw-r--r--feather/send.svg1
-rw-r--r--feather/server.svg1
-rw-r--r--feather/settings.svg1
-rw-r--r--feather/share-2.svg1
-rw-r--r--feather/share.svg1
-rw-r--r--feather/shield-off.svg1
-rw-r--r--feather/shield.svg1
-rw-r--r--feather/shopping-bag.svg1
-rw-r--r--feather/shopping-cart.svg1
-rw-r--r--feather/shuffle.svg1
-rw-r--r--feather/sidebar.svg1
-rw-r--r--feather/skip-back.svg1
-rw-r--r--feather/skip-forward.svg1
-rw-r--r--feather/slack.svg1
-rw-r--r--feather/slash.svg1
-rw-r--r--feather/sliders.svg1
-rw-r--r--feather/smartphone.svg1
-rw-r--r--feather/smile.svg1
-rw-r--r--feather/speaker.svg1
-rw-r--r--feather/square.svg1
-rw-r--r--feather/star.svg1
-rw-r--r--feather/stop-circle.svg1
-rw-r--r--feather/sun.svg1
-rw-r--r--feather/sunrise.svg1
-rw-r--r--feather/sunset.svg1
-rw-r--r--feather/tablet.svg1
-rw-r--r--feather/tag.svg1
-rw-r--r--feather/target.svg1
-rw-r--r--feather/terminal.svg1
-rw-r--r--feather/thermometer.svg1
-rw-r--r--feather/thumbs-down.svg1
-rw-r--r--feather/thumbs-up.svg1
-rw-r--r--feather/toggle-left.svg1
-rw-r--r--feather/toggle-right.svg1
-rw-r--r--feather/tool.svg1
-rw-r--r--feather/trash-2.svg1
-rw-r--r--feather/trash.svg1
-rw-r--r--feather/trello.svg1
-rw-r--r--feather/trending-down.svg1
-rw-r--r--feather/trending-up.svg1
-rw-r--r--feather/triangle.svg1
-rw-r--r--feather/truck.svg1
-rw-r--r--feather/tv.svg1
-rw-r--r--feather/twitch.svg1
-rw-r--r--feather/twitter.svg1
-rw-r--r--feather/type.svg1
-rw-r--r--feather/umbrella.svg1
-rw-r--r--feather/underline.svg1
-rw-r--r--feather/unlock.svg1
-rw-r--r--feather/upload-cloud.svg1
-rw-r--r--feather/upload.svg1
-rw-r--r--feather/user-check.svg1
-rw-r--r--feather/user-minus.svg1
-rw-r--r--feather/user-plus.svg1
-rw-r--r--feather/user-x.svg1
-rw-r--r--feather/user.svg1
-rw-r--r--feather/users.svg1
-rw-r--r--feather/video-off.svg1
-rw-r--r--feather/video.svg1
-rw-r--r--feather/voicemail.svg1
-rw-r--r--feather/volume-1.svg1
-rw-r--r--feather/volume-2.svg1
-rw-r--r--feather/volume-x.svg1
-rw-r--r--feather/volume.svg1
-rw-r--r--feather/watch.svg1
-rw-r--r--feather/wifi-off.svg1
-rw-r--r--feather/wifi.svg1
-rw-r--r--feather/wind.svg1
-rw-r--r--feather/x-circle.svg1
-rw-r--r--feather/x-octagon.svg1
-rw-r--r--feather/x-square.svg1
-rw-r--r--feather/x.svg1
-rw-r--r--feather/youtube.svg1
-rw-r--r--feather/zap-off.svg1
-rw-r--r--feather/zap.svg1
-rw-r--r--feather/zoom-in.svg1
-rw-r--r--feather/zoom-out.svg1
-rwxr-xr-xformat.sh7
-rw-r--r--mbgui/__init__.py0
-rw-r--r--mbgui/__main__.py7
-rw-r--r--mbgui/executor.py49
-rw-r--r--mbgui/icons/eye-off-16.pngbin624 -> 0 bytes
-rw-r--r--mbgui/icons/file-16.pngbin520 -> 0 bytes
-rw-r--r--mbgui/icons/flag-16.pngbin521 -> 0 bytes
-rw-r--r--mbgui/icons/folder-16.pngbin478 -> 0 bytes
-rw-r--r--mbgui/icons/inbox-16.pngbin559 -> 0 bytes
-rw-r--r--mbgui/icons/mail-16.pngbin543 -> 0 bytes
-rw-r--r--mbgui/icons/trash-16.pngbin482 -> 0 bytes
-rw-r--r--mbgui/main.py252
-rw-r--r--mbgui/main.ui56
-rw-r--r--mbgui/mblaze.py145
-rwxr-xr-xrun.sh10
-rw-r--r--setup.py23
-rw-r--r--src_c/main.c389
-rw-r--r--src_c/mblaze.c511
-rw-r--r--src_c/mblaze.h59
311 files changed, 1043 insertions, 877 deletions
diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..8c67bcb
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,65 @@
+---
+Language: Cpp
+BasedOnStyle: LLVM
+AccessModifierOffset: -4
+AlignAfterOpenBracket: true
+AlignEscapedNewlinesLeft: false
+AlignOperands: true
+AlignTrailingComments: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: All
+AlwaysBreakAfterDefinitionReturnType: false
+AlwaysBreakTemplateDeclarations: false
+AlwaysBreakBeforeMultilineStrings: false
+BreakBeforeBinaryOperators: None
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializersBeforeComma: false
+BinPackParameters: true
+BinPackArguments: true
+ColumnLimit: 80
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+ConstructorInitializerIndentWidth: 4
+DerivePointerAlignment: false
+ExperimentalAutoDetectBinPacking: false
+IndentCaseLabels: false
+IndentWrappedFunctionNames: false
+IndentFunctionDeclarationAfterType: false
+MaxEmptyLinesToKeep: 2
+KeepEmptyLinesAtTheStartOfBlocks: true
+NamespaceIndentation: None
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakBeforeFirstCallParameter: 19
+PenaltyBreakComment: 300
+PenaltyBreakString: 1000
+PenaltyBreakFirstLessLess: 120
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 60
+PointerAlignment: Right
+SpacesBeforeTrailingComments: 1
+Cpp11BracedListStyle: true
+Standard: Cpp11
+IndentWidth: 4
+TabWidth: 4
+UseTab: Never
+BreakBeforeBraces: Attach
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+SpacesInAngles: false
+SpaceInEmptyParentheses: false
+SpacesInCStyleCastParentheses: false
+SpaceAfterCStyleCast: false
+SpacesInContainerLiterals: true
+SpaceBeforeAssignmentOperators: true
+ContinuationIndentWidth: 4
+CommentPragmas: '^ IWYU pragma:'
+ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
+SpaceBeforeParens: ControlStatements
+DisableFormat: false
+SortIncludes: false
+...
diff --git a/.gitignore b/.gitignore
index f284d11..ea36607 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,2 @@
/build
-__pycache__
+/compile_flags.txt
diff --git a/README.rst b/README.rst
index 94a7be7..dd56277 100644
--- a/README.rst
+++ b/README.rst
@@ -9,16 +9,18 @@ Maildir GUI based on `mblaze <https://github.com/leahneukirchen/mblaze>`_
Requirements
------------
-* python3
+* gtk4
* mblaze
-Install
--------
+Build
+-----
::
- $ pip install mbgui
+ $ ./build.sh
+
+After running build script, ``mbgui`` is avalaible inside ``build`` folder.
Run
@@ -26,7 +28,7 @@ Run
::
- $ mbgui path/to/maildir ...
+ $ build/mbgui path/to/maildir ...
All command line arguments are passed to ``mdirs`` command (with additional
``-a`` argument).
diff --git a/build.sh b/build.sh
index eac310c..6c47b9e 100755
--- a/build.sh
+++ b/build.sh
@@ -4,10 +4,8 @@ set -e
cd $(dirname -- "$0")
-PYTHON=${PYTHON:-python3}
+LIBS="gtk4 gio-2.0 gio-unix-2.0 glib-2.0"
+CC=${CC:-gcc}
-rm -rf ./build
-$PYTHON setup.py \
- build --build-base build \
- egg_info --egg-base build \
- bdist_wheel --dist-dir build
+mkdir -p build
+$CC -o build/mbgui src_c/*.c $(pkg-config --cflags --libs $LIBS)
diff --git a/convert_icons.sh b/convert_icons.sh
deleted file mode 100755
index ae9a204..0000000
--- a/convert_icons.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-set -e
-
-ROOT_DIR=$(dirname -- "$0")
-ICONS_DIR=$ROOT_DIR/mbgui/icons
-FEATHER_DIR=$ROOT_DIR/feather
-
-ICONS_16="inbox folder mail trash flag file eye-off"
-
-mkdir -p $ICONS_DIR
-
-for i in $ICONS_16; do
- convert -background none $FEATHER_DIR/$i.svg \
- -geometry 16x16 $ICONS_DIR/$i-16.png
-done
diff --git a/feather/LICENSE b/feather/LICENSE
deleted file mode 100644
index b869713..0000000
--- a/feather/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2013-2017 Cole Bemis
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE. \ No newline at end of file
diff --git a/feather/activity.svg b/feather/activity.svg
deleted file mode 100644
index 669a57a..0000000
--- a/feather/activity.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-activity"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg> \ No newline at end of file
diff --git a/feather/airplay.svg b/feather/airplay.svg
deleted file mode 100644
index 7ce7302..0000000
--- a/feather/airplay.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-airplay"><path d="M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1"></path><polygon points="12 15 17 21 7 21 12 15"></polygon></svg> \ No newline at end of file
diff --git a/feather/alert-circle.svg b/feather/alert-circle.svg
deleted file mode 100644
index 8d02b7d..0000000
--- a/feather/alert-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-alert-circle"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg> \ No newline at end of file
diff --git a/feather/alert-octagon.svg b/feather/alert-octagon.svg
deleted file mode 100644
index de9b03f..0000000
--- a/feather/alert-octagon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-alert-octagon"><polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"></polygon><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg> \ No newline at end of file
diff --git a/feather/alert-triangle.svg b/feather/alert-triangle.svg
deleted file mode 100644
index 6dcb096..0000000
--- a/feather/alert-triangle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-alert-triangle"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg> \ No newline at end of file
diff --git a/feather/align-center.svg b/feather/align-center.svg
deleted file mode 100644
index 5b8842e..0000000
--- a/feather/align-center.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-align-center"><line x1="18" y1="10" x2="6" y2="10"></line><line x1="21" y1="6" x2="3" y2="6"></line><line x1="21" y1="14" x2="3" y2="14"></line><line x1="18" y1="18" x2="6" y2="18"></line></svg> \ No newline at end of file
diff --git a/feather/align-justify.svg b/feather/align-justify.svg
deleted file mode 100644
index 0539876..0000000
--- a/feather/align-justify.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-align-justify"><line x1="21" y1="10" x2="3" y2="10"></line><line x1="21" y1="6" x2="3" y2="6"></line><line x1="21" y1="14" x2="3" y2="14"></line><line x1="21" y1="18" x2="3" y2="18"></line></svg> \ No newline at end of file
diff --git a/feather/align-left.svg b/feather/align-left.svg
deleted file mode 100644
index 9ac852a..0000000
--- a/feather/align-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-align-left"><line x1="17" y1="10" x2="3" y2="10"></line><line x1="21" y1="6" x2="3" y2="6"></line><line x1="21" y1="14" x2="3" y2="14"></line><line x1="17" y1="18" x2="3" y2="18"></line></svg> \ No newline at end of file
diff --git a/feather/align-right.svg b/feather/align-right.svg
deleted file mode 100644
index ef139ff..0000000
--- a/feather/align-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-align-right"><line x1="21" y1="10" x2="7" y2="10"></line><line x1="21" y1="6" x2="3" y2="6"></line><line x1="21" y1="14" x2="3" y2="14"></line><line x1="21" y1="18" x2="7" y2="18"></line></svg> \ No newline at end of file
diff --git a/feather/anchor.svg b/feather/anchor.svg
deleted file mode 100644
index e01627a..0000000
--- a/feather/anchor.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-anchor"><circle cx="12" cy="5" r="3"></circle><line x1="12" y1="22" x2="12" y2="8"></line><path d="M5 12H2a10 10 0 0 0 20 0h-3"></path></svg> \ No newline at end of file
diff --git a/feather/aperture.svg b/feather/aperture.svg
deleted file mode 100644
index 9936e86..0000000
--- a/feather/aperture.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-aperture"><circle cx="12" cy="12" r="10"></circle><line x1="14.31" y1="8" x2="20.05" y2="17.94"></line><line x1="9.69" y1="8" x2="21.17" y2="8"></line><line x1="7.38" y1="12" x2="13.12" y2="2.06"></line><line x1="9.69" y1="16" x2="3.95" y2="6.06"></line><line x1="14.31" y1="16" x2="2.83" y2="16"></line><line x1="16.62" y1="12" x2="10.88" y2="21.94"></line></svg> \ No newline at end of file
diff --git a/feather/archive.svg b/feather/archive.svg
deleted file mode 100644
index 428882c..0000000
--- a/feather/archive.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-archive"><polyline points="21 8 21 21 3 21 3 8"></polyline><rect x="1" y="3" width="22" height="5"></rect><line x1="10" y1="12" x2="14" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/arrow-down-circle.svg b/feather/arrow-down-circle.svg
deleted file mode 100644
index 3238091..0000000
--- a/feather/arrow-down-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-down-circle"><circle cx="12" cy="12" r="10"></circle><polyline points="8 12 12 16 16 12"></polyline><line x1="12" y1="8" x2="12" y2="16"></line></svg> \ No newline at end of file
diff --git a/feather/arrow-down-left.svg b/feather/arrow-down-left.svg
deleted file mode 100644
index 7248358..0000000
--- a/feather/arrow-down-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-down-left"><line x1="17" y1="7" x2="7" y2="17"></line><polyline points="17 17 7 17 7 7"></polyline></svg> \ No newline at end of file
diff --git a/feather/arrow-down-right.svg b/feather/arrow-down-right.svg
deleted file mode 100644
index 81d9822..0000000
--- a/feather/arrow-down-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-down-right"><line x1="7" y1="7" x2="17" y2="17"></line><polyline points="17 7 17 17 7 17"></polyline></svg> \ No newline at end of file
diff --git a/feather/arrow-down.svg b/feather/arrow-down.svg
deleted file mode 100644
index 4f84f62..0000000
--- a/feather/arrow-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-down"><line x1="12" y1="5" x2="12" y2="19"></line><polyline points="19 12 12 19 5 12"></polyline></svg> \ No newline at end of file
diff --git a/feather/arrow-left-circle.svg b/feather/arrow-left-circle.svg
deleted file mode 100644
index 3b19ff8..0000000
--- a/feather/arrow-left-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-left-circle"><circle cx="12" cy="12" r="10"></circle><polyline points="12 8 8 12 12 16"></polyline><line x1="16" y1="12" x2="8" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/arrow-left.svg b/feather/arrow-left.svg
deleted file mode 100644
index a5058fc..0000000
--- a/feather/arrow-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-left"><line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline></svg> \ No newline at end of file
diff --git a/feather/arrow-right-circle.svg b/feather/arrow-right-circle.svg
deleted file mode 100644
index ff01dd5..0000000
--- a/feather/arrow-right-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-right-circle"><circle cx="12" cy="12" r="10"></circle><polyline points="12 16 16 12 12 8"></polyline><line x1="8" y1="12" x2="16" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/arrow-right.svg b/feather/arrow-right.svg
deleted file mode 100644
index 939b57c..0000000
--- a/feather/arrow-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-right"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg> \ No newline at end of file
diff --git a/feather/arrow-up-circle.svg b/feather/arrow-up-circle.svg
deleted file mode 100644
index 044a75d..0000000
--- a/feather/arrow-up-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-up-circle"><circle cx="12" cy="12" r="10"></circle><polyline points="16 12 12 8 8 12"></polyline><line x1="12" y1="16" x2="12" y2="8"></line></svg> \ No newline at end of file
diff --git a/feather/arrow-up-left.svg b/feather/arrow-up-left.svg
deleted file mode 100644
index cea55e8..0000000
--- a/feather/arrow-up-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-up-left"><line x1="17" y1="17" x2="7" y2="7"></line><polyline points="7 17 7 7 17 7"></polyline></svg> \ No newline at end of file
diff --git a/feather/arrow-up-right.svg b/feather/arrow-up-right.svg
deleted file mode 100644
index 95678e0..0000000
--- a/feather/arrow-up-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-up-right"><line x1="7" y1="17" x2="17" y2="7"></line><polyline points="7 7 17 7 17 17"></polyline></svg> \ No newline at end of file
diff --git a/feather/arrow-up.svg b/feather/arrow-up.svg
deleted file mode 100644
index 16b13ab..0000000
--- a/feather/arrow-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-up"><line x1="12" y1="19" x2="12" y2="5"></line><polyline points="5 12 12 5 19 12"></polyline></svg> \ No newline at end of file
diff --git a/feather/at-sign.svg b/feather/at-sign.svg
deleted file mode 100644
index 5a5e5d0..0000000
--- a/feather/at-sign.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-at-sign"><circle cx="12" cy="12" r="4"></circle><path d="M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94"></path></svg> \ No newline at end of file
diff --git a/feather/award.svg b/feather/award.svg
deleted file mode 100644
index be70d5a..0000000
--- a/feather/award.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-award"><circle cx="12" cy="8" r="7"></circle><polyline points="8.21 13.89 7 23 12 20 17 23 15.79 13.88"></polyline></svg> \ No newline at end of file
diff --git a/feather/bar-chart-2.svg b/feather/bar-chart-2.svg
deleted file mode 100644
index 864167a..0000000
--- a/feather/bar-chart-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bar-chart-2"><line x1="18" y1="20" x2="18" y2="10"></line><line x1="12" y1="20" x2="12" y2="4"></line><line x1="6" y1="20" x2="6" y2="14"></line></svg> \ No newline at end of file
diff --git a/feather/bar-chart.svg b/feather/bar-chart.svg
deleted file mode 100644
index 074d7c1..0000000
--- a/feather/bar-chart.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bar-chart"><line x1="12" y1="20" x2="12" y2="10"></line><line x1="18" y1="20" x2="18" y2="4"></line><line x1="6" y1="20" x2="6" y2="16"></line></svg> \ No newline at end of file
diff --git a/feather/battery-charging.svg b/feather/battery-charging.svg
deleted file mode 100644
index 644cb59..0000000
--- a/feather/battery-charging.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-battery-charging"><path d="M5 18H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.19M15 6h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-3.19"></path><line x1="23" y1="13" x2="23" y2="11"></line><polyline points="11 6 7 12 13 12 9 18"></polyline></svg> \ No newline at end of file
diff --git a/feather/battery.svg b/feather/battery.svg
deleted file mode 100644
index 7fe8771..0000000
--- a/feather/battery.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-battery"><rect x="1" y="6" width="18" height="12" rx="2" ry="2"></rect><line x1="23" y1="13" x2="23" y2="11"></line></svg> \ No newline at end of file
diff --git a/feather/bell-off.svg b/feather/bell-off.svg
deleted file mode 100644
index 4b07c84..0000000
--- a/feather/bell-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bell-off"><path d="M13.73 21a2 2 0 0 1-3.46 0"></path><path d="M18.63 13A17.89 17.89 0 0 1 18 8"></path><path d="M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14"></path><path d="M18 8a6 6 0 0 0-9.33-5"></path><line x1="1" y1="1" x2="23" y2="23"></line></svg> \ No newline at end of file
diff --git a/feather/bell.svg b/feather/bell.svg
deleted file mode 100644
index bba561c..0000000
--- a/feather/bell.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bell"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"></path><path d="M13.73 21a2 2 0 0 1-3.46 0"></path></svg> \ No newline at end of file
diff --git a/feather/bluetooth.svg b/feather/bluetooth.svg
deleted file mode 100644
index cebed7b..0000000
--- a/feather/bluetooth.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bluetooth"><polyline points="6.5 6.5 17.5 17.5 12 23 12 1 17.5 6.5 6.5 17.5"></polyline></svg> \ No newline at end of file
diff --git a/feather/bold.svg b/feather/bold.svg
deleted file mode 100644
index d1a4efd..0000000
--- a/feather/bold.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bold"><path d="M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z"></path><path d="M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z"></path></svg> \ No newline at end of file
diff --git a/feather/book-open.svg b/feather/book-open.svg
deleted file mode 100644
index 5e0ca0a..0000000
--- a/feather/book-open.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-book-open"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg> \ No newline at end of file
diff --git a/feather/book.svg b/feather/book.svg
deleted file mode 100644
index 12ffcbc..0000000
--- a/feather/book.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-book"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path></svg> \ No newline at end of file
diff --git a/feather/bookmark.svg b/feather/bookmark.svg
deleted file mode 100644
index 2239cc5..0000000
--- a/feather/bookmark.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"></path></svg> \ No newline at end of file
diff --git a/feather/box.svg b/feather/box.svg
deleted file mode 100644
index d89be30..0000000
--- a/feather/box.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-box"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/briefcase.svg b/feather/briefcase.svg
deleted file mode 100644
index e3af050..0000000
--- a/feather/briefcase.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-briefcase"><rect x="2" y="7" width="20" height="14" rx="2" ry="2"></rect><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"></path></svg> \ No newline at end of file
diff --git a/feather/calendar.svg b/feather/calendar.svg
deleted file mode 100644
index 6c7fd87..0000000
--- a/feather/calendar.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg> \ No newline at end of file
diff --git a/feather/camera-off.svg b/feather/camera-off.svg
deleted file mode 100644
index daa3e25..0000000
--- a/feather/camera-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-camera-off"><line x1="1" y1="1" x2="23" y2="23"></line><path d="M21 21H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3m3-3h6l2 3h4a2 2 0 0 1 2 2v9.34m-7.72-2.06a4 4 0 1 1-5.56-5.56"></path></svg> \ No newline at end of file
diff --git a/feather/camera.svg b/feather/camera.svg
deleted file mode 100644
index 0e7f060..0000000
--- a/feather/camera.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-camera"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"></path><circle cx="12" cy="13" r="4"></circle></svg> \ No newline at end of file
diff --git a/feather/cast.svg b/feather/cast.svg
deleted file mode 100644
index 63c954d..0000000
--- a/feather/cast.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-cast"><path d="M2 16.1A5 5 0 0 1 5.9 20M2 12.05A9 9 0 0 1 9.95 20M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6"></path><line x1="2" y1="20" x2="2.01" y2="20"></line></svg> \ No newline at end of file
diff --git a/feather/check-circle.svg b/feather/check-circle.svg
deleted file mode 100644
index f2f4fd1..0000000
--- a/feather/check-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-check-circle"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg> \ No newline at end of file
diff --git a/feather/check-square.svg b/feather/check-square.svg
deleted file mode 100644
index 72ab7a8..0000000
--- a/feather/check-square.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-check-square"><polyline points="9 11 12 14 22 4"></polyline><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"></path></svg> \ No newline at end of file
diff --git a/feather/check.svg b/feather/check.svg
deleted file mode 100644
index 1c20989..0000000
--- a/feather/check.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-check"><polyline points="20 6 9 17 4 12"></polyline></svg> \ No newline at end of file
diff --git a/feather/chevron-down.svg b/feather/chevron-down.svg
deleted file mode 100644
index 278c6a3..0000000
--- a/feather/chevron-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-down"><polyline points="6 9 12 15 18 9"></polyline></svg> \ No newline at end of file
diff --git a/feather/chevron-left.svg b/feather/chevron-left.svg
deleted file mode 100644
index 747d46d..0000000
--- a/feather/chevron-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-left"><polyline points="15 18 9 12 15 6"></polyline></svg> \ No newline at end of file
diff --git a/feather/chevron-right.svg b/feather/chevron-right.svg
deleted file mode 100644
index 258de41..0000000
--- a/feather/chevron-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"><polyline points="9 18 15 12 9 6"></polyline></svg> \ No newline at end of file
diff --git a/feather/chevron-up.svg b/feather/chevron-up.svg
deleted file mode 100644
index 4eb5ecc..0000000
--- a/feather/chevron-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-up"><polyline points="18 15 12 9 6 15"></polyline></svg> \ No newline at end of file
diff --git a/feather/chevrons-down.svg b/feather/chevrons-down.svg
deleted file mode 100644
index e67ef2f..0000000
--- a/feather/chevrons-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevrons-down"><polyline points="7 13 12 18 17 13"></polyline><polyline points="7 6 12 11 17 6"></polyline></svg> \ No newline at end of file
diff --git a/feather/chevrons-left.svg b/feather/chevrons-left.svg
deleted file mode 100644
index c32e398..0000000
--- a/feather/chevrons-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevrons-left"><polyline points="11 17 6 12 11 7"></polyline><polyline points="18 17 13 12 18 7"></polyline></svg> \ No newline at end of file
diff --git a/feather/chevrons-right.svg b/feather/chevrons-right.svg
deleted file mode 100644
index f506814..0000000
--- a/feather/chevrons-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevrons-right"><polyline points="13 17 18 12 13 7"></polyline><polyline points="6 17 11 12 6 7"></polyline></svg> \ No newline at end of file
diff --git a/feather/chevrons-up.svg b/feather/chevrons-up.svg
deleted file mode 100644
index 0eaf518..0000000
--- a/feather/chevrons-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevrons-up"><polyline points="17 11 12 6 7 11"></polyline><polyline points="17 18 12 13 7 18"></polyline></svg> \ No newline at end of file
diff --git a/feather/chrome.svg b/feather/chrome.svg
deleted file mode 100644
index 9189815..0000000
--- a/feather/chrome.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chrome"><circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="4"></circle><line x1="21.17" y1="8" x2="12" y2="8"></line><line x1="3.95" y1="6.06" x2="8.54" y2="14"></line><line x1="10.88" y1="21.94" x2="15.46" y2="14"></line></svg> \ No newline at end of file
diff --git a/feather/circle.svg b/feather/circle.svg
deleted file mode 100644
index b009088..0000000
--- a/feather/circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-circle"><circle cx="12" cy="12" r="10"></circle></svg> \ No newline at end of file
diff --git a/feather/clipboard.svg b/feather/clipboard.svg
deleted file mode 100644
index ccee454..0000000
--- a/feather/clipboard.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-clipboard"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path><rect x="8" y="2" width="8" height="4" rx="1" ry="1"></rect></svg> \ No newline at end of file
diff --git a/feather/clock.svg b/feather/clock.svg
deleted file mode 100644
index ea3f5e5..0000000
--- a/feather/clock.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-clock"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> \ No newline at end of file
diff --git a/feather/cloud-drizzle.svg b/feather/cloud-drizzle.svg
deleted file mode 100644
index 13af6bb..0000000
--- a/feather/cloud-drizzle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-cloud-drizzle"><line x1="8" y1="19" x2="8" y2="21"></line><line x1="8" y1="13" x2="8" y2="15"></line><line x1="16" y1="19" x2="16" y2="21"></line><line x1="16" y1="13" x2="16" y2="15"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="12" y1="15" x2="12" y2="17"></line><path d="M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25"></path></svg> \ No newline at end of file
diff --git a/feather/cloud-lightning.svg b/feather/cloud-lightning.svg
deleted file mode 100644
index 32d154c..0000000
--- a/feather/cloud-lightning.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-cloud-lightning"><path d="M19 16.9A5 5 0 0 0 18 7h-1.26a8 8 0 1 0-11.62 9"></path><polyline points="13 11 9 17 15 17 11 23"></polyline></svg> \ No newline at end of file
diff --git a/feather/cloud-off.svg b/feather/cloud-off.svg
deleted file mode 100644
index 1e1e7d6..0000000
--- a/feather/cloud-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-cloud-off"><path d="M22.61 16.95A5 5 0 0 0 18 10h-1.26a8 8 0 0 0-7.05-6M5 5a8 8 0 0 0 4 15h9a5 5 0 0 0 1.7-.3"></path><line x1="1" y1="1" x2="23" y2="23"></line></svg> \ No newline at end of file
diff --git a/feather/cloud-rain.svg b/feather/cloud-rain.svg
deleted file mode 100644
index 3e0b85b..0000000
--- a/feather/cloud-rain.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-cloud-rain"><line x1="16" y1="13" x2="16" y2="21"></line><line x1="8" y1="13" x2="8" y2="21"></line><line x1="12" y1="15" x2="12" y2="23"></line><path d="M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25"></path></svg> \ No newline at end of file
diff --git a/feather/cloud-snow.svg b/feather/cloud-snow.svg
deleted file mode 100644
index e4eb820..0000000
--- a/feather/cloud-snow.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-cloud-snow"><path d="M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 4 16.25"></path><line x1="8" y1="16" x2="8.01" y2="16"></line><line x1="8" y1="20" x2="8.01" y2="20"></line><line x1="12" y1="18" x2="12.01" y2="18"></line><line x1="12" y1="22" x2="12.01" y2="22"></line><line x1="16" y1="16" x2="16.01" y2="16"></line><line x1="16" y1="20" x2="16.01" y2="20"></line></svg> \ No newline at end of file
diff --git a/feather/cloud.svg b/feather/cloud.svg
deleted file mode 100644
index 0ee0c63..0000000
--- a/feather/cloud.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-cloud"><path d="M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z"></path></svg> \ No newline at end of file
diff --git a/feather/code.svg b/feather/code.svg
deleted file mode 100644
index c4954b5..0000000
--- a/feather/code.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-code"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg> \ No newline at end of file
diff --git a/feather/codepen.svg b/feather/codepen.svg
deleted file mode 100644
index ab2a815..0000000
--- a/feather/codepen.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-codepen"><polygon points="12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2"></polygon><line x1="12" y1="22" x2="12" y2="15.5"></line><polyline points="22 8.5 12 15.5 2 8.5"></polyline><polyline points="2 15.5 12 8.5 22 15.5"></polyline><line x1="12" y1="2" x2="12" y2="8.5"></line></svg> \ No newline at end of file
diff --git a/feather/codesandbox.svg b/feather/codesandbox.svg
deleted file mode 100644
index 49848f5..0000000
--- a/feather/codesandbox.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-codesandbox"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="7.5 4.21 12 6.81 16.5 4.21"></polyline><polyline points="7.5 19.79 7.5 14.6 3 12"></polyline><polyline points="21 12 16.5 14.6 16.5 19.79"></polyline><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/coffee.svg b/feather/coffee.svg
deleted file mode 100644
index 32905e5..0000000
--- a/feather/coffee.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-coffee"><path d="M18 8h1a4 4 0 0 1 0 8h-1"></path><path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"></path><line x1="6" y1="1" x2="6" y2="4"></line><line x1="10" y1="1" x2="10" y2="4"></line><line x1="14" y1="1" x2="14" y2="4"></line></svg> \ No newline at end of file
diff --git a/feather/columns.svg b/feather/columns.svg
deleted file mode 100644
index d264b55..0000000
--- a/feather/columns.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-columns"><path d="M12 3h7a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-7m0-18H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h7m0-18v18"></path></svg> \ No newline at end of file
diff --git a/feather/command.svg b/feather/command.svg
deleted file mode 100644
index 93f554c..0000000
--- a/feather/command.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-command"><path d="M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z"></path></svg> \ No newline at end of file
diff --git a/feather/compass.svg b/feather/compass.svg
deleted file mode 100644
index 3296260..0000000
--- a/feather/compass.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-compass"><circle cx="12" cy="12" r="10"></circle><polygon points="16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"></polygon></svg> \ No newline at end of file
diff --git a/feather/copy.svg b/feather/copy.svg
deleted file mode 100644
index 4e0b09f..0000000
--- a/feather/copy.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-copy"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg> \ No newline at end of file
diff --git a/feather/corner-down-left.svg b/feather/corner-down-left.svg
deleted file mode 100644
index 9fffb3e..0000000
--- a/feather/corner-down-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-corner-down-left"><polyline points="9 10 4 15 9 20"></polyline><path d="M20 4v7a4 4 0 0 1-4 4H4"></path></svg> \ No newline at end of file
diff --git a/feather/corner-down-right.svg b/feather/corner-down-right.svg
deleted file mode 100644
index b27d408..0000000
--- a/feather/corner-down-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-corner-down-right"><polyline points="15 10 20 15 15 20"></polyline><path d="M4 4v7a4 4 0 0 0 4 4h12"></path></svg> \ No newline at end of file
diff --git a/feather/corner-left-down.svg b/feather/corner-left-down.svg
deleted file mode 100644
index 24b8375..0000000
--- a/feather/corner-left-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-corner-left-down"><polyline points="14 15 9 20 4 15"></polyline><path d="M20 4h-7a4 4 0 0 0-4 4v12"></path></svg> \ No newline at end of file
diff --git a/feather/corner-left-up.svg b/feather/corner-left-up.svg
deleted file mode 100644
index e54527c..0000000
--- a/feather/corner-left-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-corner-left-up"><polyline points="14 9 9 4 4 9"></polyline><path d="M20 20h-7a4 4 0 0 1-4-4V4"></path></svg> \ No newline at end of file
diff --git a/feather/corner-right-down.svg b/feather/corner-right-down.svg
deleted file mode 100644
index a49e6d6..0000000
--- a/feather/corner-right-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-corner-right-down"><polyline points="10 15 15 20 20 15"></polyline><path d="M4 4h7a4 4 0 0 1 4 4v12"></path></svg> \ No newline at end of file
diff --git a/feather/corner-right-up.svg b/feather/corner-right-up.svg
deleted file mode 100644
index a5c5dce..0000000
--- a/feather/corner-right-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-corner-right-up"><polyline points="10 9 15 4 20 9"></polyline><path d="M4 20h7a4 4 0 0 0 4-4V4"></path></svg> \ No newline at end of file
diff --git a/feather/corner-up-left.svg b/feather/corner-up-left.svg
deleted file mode 100644
index 0a1ffd6..0000000
--- a/feather/corner-up-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-corner-up-left"><polyline points="9 14 4 9 9 4"></polyline><path d="M20 20v-7a4 4 0 0 0-4-4H4"></path></svg> \ No newline at end of file
diff --git a/feather/corner-up-right.svg b/feather/corner-up-right.svg
deleted file mode 100644
index 0b8f961..0000000
--- a/feather/corner-up-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-corner-up-right"><polyline points="15 14 20 9 15 4"></polyline><path d="M4 20v-7a4 4 0 0 1 4-4h12"></path></svg> \ No newline at end of file
diff --git a/feather/cpu.svg b/feather/cpu.svg
deleted file mode 100644
index 2ed16ef..0000000
--- a/feather/cpu.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-cpu"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><rect x="9" y="9" width="6" height="6"></rect><line x1="9" y1="1" x2="9" y2="4"></line><line x1="15" y1="1" x2="15" y2="4"></line><line x1="9" y1="20" x2="9" y2="23"></line><line x1="15" y1="20" x2="15" y2="23"></line><line x1="20" y1="9" x2="23" y2="9"></line><line x1="20" y1="14" x2="23" y2="14"></line><line x1="1" y1="9" x2="4" y2="9"></line><line x1="1" y1="14" x2="4" y2="14"></line></svg> \ No newline at end of file
diff --git a/feather/credit-card.svg b/feather/credit-card.svg
deleted file mode 100644
index 1b7fd02..0000000
--- a/feather/credit-card.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-credit-card"><rect x="1" y="4" width="22" height="16" rx="2" ry="2"></rect><line x1="1" y1="10" x2="23" y2="10"></line></svg> \ No newline at end of file
diff --git a/feather/crop.svg b/feather/crop.svg
deleted file mode 100644
index ffbfd04..0000000
--- a/feather/crop.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-crop"><path d="M6.13 1L6 16a2 2 0 0 0 2 2h15"></path><path d="M1 6.13L16 6a2 2 0 0 1 2 2v15"></path></svg> \ No newline at end of file
diff --git a/feather/crosshair.svg b/feather/crosshair.svg
deleted file mode 100644
index ba39401..0000000
--- a/feather/crosshair.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-crosshair"><circle cx="12" cy="12" r="10"></circle><line x1="22" y1="12" x2="18" y2="12"></line><line x1="6" y1="12" x2="2" y2="12"></line><line x1="12" y1="6" x2="12" y2="2"></line><line x1="12" y1="22" x2="12" y2="18"></line></svg> \ No newline at end of file
diff --git a/feather/database.svg b/feather/database.svg
deleted file mode 100644
index c296fbc..0000000
--- a/feather/database.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-database"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"></path><path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"></path></svg> \ No newline at end of file
diff --git a/feather/delete.svg b/feather/delete.svg
deleted file mode 100644
index 8c6074b..0000000
--- a/feather/delete.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-delete"><path d="M21 4H8l-7 8 7 8h13a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z"></path><line x1="18" y1="9" x2="12" y2="15"></line><line x1="12" y1="9" x2="18" y2="15"></line></svg> \ No newline at end of file
diff --git a/feather/disc.svg b/feather/disc.svg
deleted file mode 100644
index 2595b44..0000000
--- a/feather/disc.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-disc"><circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="3"></circle></svg> \ No newline at end of file
diff --git a/feather/divide-circle.svg b/feather/divide-circle.svg
deleted file mode 100644
index 03a50b7..0000000
--- a/feather/divide-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-divide-circle"><line x1="8" y1="12" x2="16" y2="12"></line><line x1="12" y1="16" x2="12" y2="16"></line><line x1="12" y1="8" x2="12" y2="8"></line><circle cx="12" cy="12" r="10"></circle></svg> \ No newline at end of file
diff --git a/feather/divide-square.svg b/feather/divide-square.svg
deleted file mode 100644
index 852f776..0000000
--- a/feather/divide-square.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-divide-square"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="8" y1="12" x2="16" y2="12"></line><line x1="12" y1="16" x2="12" y2="16"></line><line x1="12" y1="8" x2="12" y2="8"></line></svg> \ No newline at end of file
diff --git a/feather/divide.svg b/feather/divide.svg
deleted file mode 100644
index 3cbff3a..0000000
--- a/feather/divide.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-divide"><circle cx="12" cy="6" r="2"></circle><line x1="5" y1="12" x2="19" y2="12"></line><circle cx="12" cy="18" r="2"></circle></svg> \ No newline at end of file
diff --git a/feather/dollar-sign.svg b/feather/dollar-sign.svg
deleted file mode 100644
index 1a124d2..0000000
--- a/feather/dollar-sign.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-dollar-sign"><line x1="12" y1="1" x2="12" y2="23"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg> \ No newline at end of file
diff --git a/feather/download-cloud.svg b/feather/download-cloud.svg
deleted file mode 100644
index f3126fc..0000000
--- a/feather/download-cloud.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-download-cloud"><polyline points="8 17 12 21 16 17"></polyline><line x1="12" y1="12" x2="12" y2="21"></line><path d="M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29"></path></svg> \ No newline at end of file
diff --git a/feather/download.svg b/feather/download.svg
deleted file mode 100644
index 76767a9..0000000
--- a/feather/download.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-download"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg> \ No newline at end of file
diff --git a/feather/dribbble.svg b/feather/dribbble.svg
deleted file mode 100644
index bb8577d..0000000
--- a/feather/dribbble.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-dribbble"><circle cx="12" cy="12" r="10"></circle><path d="M8.56 2.75c4.37 6.03 6.02 9.42 8.03 17.72m2.54-15.38c-3.72 4.35-8.94 5.66-16.88 5.85m19.5 1.9c-3.5-.93-6.63-.82-8.94 0-2.58.92-5.01 2.86-7.44 6.32"></path></svg> \ No newline at end of file
diff --git a/feather/droplet.svg b/feather/droplet.svg
deleted file mode 100644
index ca09301..0000000
--- a/feather/droplet.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-droplet"><path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"></path></svg> \ No newline at end of file
diff --git a/feather/edit-2.svg b/feather/edit-2.svg
deleted file mode 100644
index 06830c9..0000000
--- a/feather/edit-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-edit-2"><path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path></svg> \ No newline at end of file
diff --git a/feather/edit-3.svg b/feather/edit-3.svg
deleted file mode 100644
index d728efc..0000000
--- a/feather/edit-3.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-edit-3"><path d="M12 20h9"></path><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"></path></svg> \ No newline at end of file
diff --git a/feather/edit.svg b/feather/edit.svg
deleted file mode 100644
index ec7b4ca..0000000
--- a/feather/edit.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-edit"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg> \ No newline at end of file
diff --git a/feather/external-link.svg b/feather/external-link.svg
deleted file mode 100644
index 6236df3..0000000
--- a/feather/external-link.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line></svg> \ No newline at end of file
diff --git a/feather/eye-off.svg b/feather/eye-off.svg
deleted file mode 100644
index 77c54cb..0000000
--- a/feather/eye-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-eye-off"><path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path><line x1="1" y1="1" x2="23" y2="23"></line></svg> \ No newline at end of file
diff --git a/feather/eye.svg b/feather/eye.svg
deleted file mode 100644
index 9cde243..0000000
--- a/feather/eye.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-eye"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle></svg> \ No newline at end of file
diff --git a/feather/facebook.svg b/feather/facebook.svg
deleted file mode 100644
index 2570f56..0000000
--- a/feather/facebook.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-facebook"><path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path></svg> \ No newline at end of file
diff --git a/feather/fast-forward.svg b/feather/fast-forward.svg
deleted file mode 100644
index fa39877..0000000
--- a/feather/fast-forward.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-fast-forward"><polygon points="13 19 22 12 13 5 13 19"></polygon><polygon points="2 19 11 12 2 5 2 19"></polygon></svg> \ No newline at end of file
diff --git a/feather/feather.svg b/feather/feather.svg
deleted file mode 100644
index ac3b868..0000000
--- a/feather/feather.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-feather"><path d="M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z"></path><line x1="16" y1="8" x2="2" y2="22"></line><line x1="17.5" y1="15" x2="9" y2="15"></line></svg> \ No newline at end of file
diff --git a/feather/figma.svg b/feather/figma.svg
deleted file mode 100644
index 66fd217..0000000
--- a/feather/figma.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-figma"><path d="M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z"></path><path d="M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z"></path><path d="M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z"></path><path d="M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z"></path><path d="M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z"></path></svg> \ No newline at end of file
diff --git a/feather/file-minus.svg b/feather/file-minus.svg
deleted file mode 100644
index 345756e..0000000
--- a/feather/file-minus.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file-minus"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="9" y1="15" x2="15" y2="15"></line></svg> \ No newline at end of file
diff --git a/feather/file-plus.svg b/feather/file-plus.svg
deleted file mode 100644
index eed1200..0000000
--- a/feather/file-plus.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file-plus"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="12" y1="18" x2="12" y2="12"></line><line x1="9" y1="15" x2="15" y2="15"></line></svg> \ No newline at end of file
diff --git a/feather/file-text.svg b/feather/file-text.svg
deleted file mode 100644
index 4197ddd..0000000
--- a/feather/file-text.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file-text"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg> \ No newline at end of file
diff --git a/feather/file.svg b/feather/file.svg
deleted file mode 100644
index 378519a..0000000
--- a/feather/file.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file"><path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline></svg> \ No newline at end of file
diff --git a/feather/film.svg b/feather/film.svg
deleted file mode 100644
index ac46360..0000000
--- a/feather/film.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-film"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"></rect><line x1="7" y1="2" x2="7" y2="22"></line><line x1="17" y1="2" x2="17" y2="22"></line><line x1="2" y1="12" x2="22" y2="12"></line><line x1="2" y1="7" x2="7" y2="7"></line><line x1="2" y1="17" x2="7" y2="17"></line><line x1="17" y1="17" x2="22" y2="17"></line><line x1="17" y1="7" x2="22" y2="7"></line></svg> \ No newline at end of file
diff --git a/feather/filter.svg b/feather/filter.svg
deleted file mode 100644
index 38a47e0..0000000
--- a/feather/filter.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-filter"><polygon points="22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"></polygon></svg> \ No newline at end of file
diff --git a/feather/flag.svg b/feather/flag.svg
deleted file mode 100644
index 037737c..0000000
--- a/feather/flag.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-flag"><path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"></path><line x1="4" y1="22" x2="4" y2="15"></line></svg> \ No newline at end of file
diff --git a/feather/folder-minus.svg b/feather/folder-minus.svg
deleted file mode 100644
index d5b7af6..0000000
--- a/feather/folder-minus.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-folder-minus"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path><line x1="9" y1="14" x2="15" y2="14"></line></svg> \ No newline at end of file
diff --git a/feather/folder-plus.svg b/feather/folder-plus.svg
deleted file mode 100644
index 898f2fc..0000000
--- a/feather/folder-plus.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-folder-plus"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path><line x1="12" y1="11" x2="12" y2="17"></line><line x1="9" y1="14" x2="15" y2="14"></line></svg> \ No newline at end of file
diff --git a/feather/folder.svg b/feather/folder.svg
deleted file mode 100644
index 134458b..0000000
--- a/feather/folder.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-folder"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path></svg> \ No newline at end of file
diff --git a/feather/framer.svg b/feather/framer.svg
deleted file mode 100644
index 3e66347..0000000
--- a/feather/framer.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-framer"><path d="M5 16V9h14V2H5l14 14h-7m-7 0l7 7v-7m-7 0h7"></path></svg> \ No newline at end of file
diff --git a/feather/frown.svg b/feather/frown.svg
deleted file mode 100644
index f312254..0000000
--- a/feather/frown.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-frown"><circle cx="12" cy="12" r="10"></circle><path d="M16 16s-1.5-2-4-2-4 2-4 2"></path><line x1="9" y1="9" x2="9.01" y2="9"></line><line x1="15" y1="9" x2="15.01" y2="9"></line></svg> \ No newline at end of file
diff --git a/feather/gift.svg b/feather/gift.svg
deleted file mode 100644
index d2c14bd..0000000
--- a/feather/gift.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-gift"><polyline points="20 12 20 22 4 22 4 12"></polyline><rect x="2" y="7" width="20" height="5"></rect><line x1="12" y1="22" x2="12" y2="7"></line><path d="M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z"></path><path d="M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z"></path></svg> \ No newline at end of file
diff --git a/feather/git-branch.svg b/feather/git-branch.svg
deleted file mode 100644
index 4400372..0000000
--- a/feather/git-branch.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-git-branch"><line x1="6" y1="3" x2="6" y2="15"></line><circle cx="18" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle><path d="M18 9a9 9 0 0 1-9 9"></path></svg> \ No newline at end of file
diff --git a/feather/git-commit.svg b/feather/git-commit.svg
deleted file mode 100644
index e959d72..0000000
--- a/feather/git-commit.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-git-commit"><circle cx="12" cy="12" r="4"></circle><line x1="1.05" y1="12" x2="7" y2="12"></line><line x1="17.01" y1="12" x2="22.96" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/git-merge.svg b/feather/git-merge.svg
deleted file mode 100644
index c65fffd..0000000
--- a/feather/git-merge.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-git-merge"><circle cx="18" cy="18" r="3"></circle><circle cx="6" cy="6" r="3"></circle><path d="M6 21V9a9 9 0 0 0 9 9"></path></svg> \ No newline at end of file
diff --git a/feather/git-pull-request.svg b/feather/git-pull-request.svg
deleted file mode 100644
index fc80bdf..0000000
--- a/feather/git-pull-request.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-git-pull-request"><circle cx="18" cy="18" r="3"></circle><circle cx="6" cy="6" r="3"></circle><path d="M13 6h3a2 2 0 0 1 2 2v7"></path><line x1="6" y1="9" x2="6" y2="21"></line></svg> \ No newline at end of file
diff --git a/feather/github.svg b/feather/github.svg
deleted file mode 100644
index ff0af48..0000000
--- a/feather/github.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-github"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg> \ No newline at end of file
diff --git a/feather/gitlab.svg b/feather/gitlab.svg
deleted file mode 100644
index 85d54a1..0000000
--- a/feather/gitlab.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-gitlab"><path d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"></path></svg> \ No newline at end of file
diff --git a/feather/globe.svg b/feather/globe.svg
deleted file mode 100644
index 0a0586d..0000000
--- a/feather/globe.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-globe"><circle cx="12" cy="12" r="10"></circle><line x1="2" y1="12" x2="22" y2="12"></line><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"></path></svg> \ No newline at end of file
diff --git a/feather/grid.svg b/feather/grid.svg
deleted file mode 100644
index 8ef2e9d..0000000
--- a/feather/grid.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-grid"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect></svg> \ No newline at end of file
diff --git a/feather/hard-drive.svg b/feather/hard-drive.svg
deleted file mode 100644
index 8e90fa1..0000000
--- a/feather/hard-drive.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-hard-drive"><line x1="22" y1="12" x2="2" y2="12"></line><path d="M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"></path><line x1="6" y1="16" x2="6.01" y2="16"></line><line x1="10" y1="16" x2="10.01" y2="16"></line></svg> \ No newline at end of file
diff --git a/feather/hash.svg b/feather/hash.svg
deleted file mode 100644
index c9c8d41..0000000
--- a/feather/hash.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-hash"><line x1="4" y1="9" x2="20" y2="9"></line><line x1="4" y1="15" x2="20" y2="15"></line><line x1="10" y1="3" x2="8" y2="21"></line><line x1="16" y1="3" x2="14" y2="21"></line></svg> \ No newline at end of file
diff --git a/feather/headphones.svg b/feather/headphones.svg
deleted file mode 100644
index fd8915b..0000000
--- a/feather/headphones.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-headphones"><path d="M3 18v-6a9 9 0 0 1 18 0v6"></path><path d="M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z"></path></svg> \ No newline at end of file
diff --git a/feather/heart.svg b/feather/heart.svg
deleted file mode 100644
index a083b7e..0000000
--- a/feather/heart.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-heart"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path></svg> \ No newline at end of file
diff --git a/feather/help-circle.svg b/feather/help-circle.svg
deleted file mode 100644
index 51fddd8..0000000
--- a/feather/help-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-help-circle"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg> \ No newline at end of file
diff --git a/feather/hexagon.svg b/feather/hexagon.svg
deleted file mode 100644
index eae7f25..0000000
--- a/feather/hexagon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-hexagon"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path></svg> \ No newline at end of file
diff --git a/feather/home.svg b/feather/home.svg
deleted file mode 100644
index 7bb31b2..0000000
--- a/feather/home.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-home"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg> \ No newline at end of file
diff --git a/feather/image.svg b/feather/image.svg
deleted file mode 100644
index a7d84b9..0000000
--- a/feather/image.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-image"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg> \ No newline at end of file
diff --git a/feather/inbox.svg b/feather/inbox.svg
deleted file mode 100644
index 03a13b4..0000000
--- a/feather/inbox.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-inbox"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12"></polyline><path d="M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"></path></svg> \ No newline at end of file
diff --git a/feather/info.svg b/feather/info.svg
deleted file mode 100644
index a09fa5f..0000000
--- a/feather/info.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-info"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg> \ No newline at end of file
diff --git a/feather/instagram.svg b/feather/instagram.svg
deleted file mode 100644
index 9fdb8e3..0000000
--- a/feather/instagram.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-instagram"><rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"></line></svg> \ No newline at end of file
diff --git a/feather/italic.svg b/feather/italic.svg
deleted file mode 100644
index a123d37..0000000
--- a/feather/italic.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-italic"><line x1="19" y1="4" x2="10" y2="4"></line><line x1="14" y1="20" x2="5" y2="20"></line><line x1="15" y1="4" x2="9" y2="20"></line></svg> \ No newline at end of file
diff --git a/feather/key.svg b/feather/key.svg
deleted file mode 100644
index e778e74..0000000
--- a/feather/key.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-key"><path d="M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4"></path></svg> \ No newline at end of file
diff --git a/feather/layers.svg b/feather/layers.svg
deleted file mode 100644
index ea788c2..0000000
--- a/feather/layers.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-layers"><polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline></svg> \ No newline at end of file
diff --git a/feather/layout.svg b/feather/layout.svg
deleted file mode 100644
index 28743d9..0000000
--- a/feather/layout.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-layout"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg> \ No newline at end of file
diff --git a/feather/life-buoy.svg b/feather/life-buoy.svg
deleted file mode 100644
index 54c2bd7..0000000
--- a/feather/life-buoy.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-life-buoy"><circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="4"></circle><line x1="4.93" y1="4.93" x2="9.17" y2="9.17"></line><line x1="14.83" y1="14.83" x2="19.07" y2="19.07"></line><line x1="14.83" y1="9.17" x2="19.07" y2="4.93"></line><line x1="14.83" y1="9.17" x2="18.36" y2="5.64"></line><line x1="4.93" y1="19.07" x2="9.17" y2="14.83"></line></svg> \ No newline at end of file
diff --git a/feather/link-2.svg b/feather/link-2.svg
deleted file mode 100644
index 8cc7f6d..0000000
--- a/feather/link-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link-2"><path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path><line x1="8" y1="12" x2="16" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/link.svg b/feather/link.svg
deleted file mode 100644
index c89dd41..0000000
--- a/feather/link.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg> \ No newline at end of file
diff --git a/feather/linkedin.svg b/feather/linkedin.svg
deleted file mode 100644
index 3953109..0000000
--- a/feather/linkedin.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-linkedin"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect x="2" y="9" width="4" height="12"></rect><circle cx="4" cy="4" r="2"></circle></svg> \ No newline at end of file
diff --git a/feather/list.svg b/feather/list.svg
deleted file mode 100644
index 5ce38ea..0000000
--- a/feather/list.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-list"><line x1="8" y1="6" x2="21" y2="6"></line><line x1="8" y1="12" x2="21" y2="12"></line><line x1="8" y1="18" x2="21" y2="18"></line><line x1="3" y1="6" x2="3.01" y2="6"></line><line x1="3" y1="12" x2="3.01" y2="12"></line><line x1="3" y1="18" x2="3.01" y2="18"></line></svg> \ No newline at end of file
diff --git a/feather/loader.svg b/feather/loader.svg
deleted file mode 100644
index e1a70c1..0000000
--- a/feather/loader.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-loader"><line x1="12" y1="2" x2="12" y2="6"></line><line x1="12" y1="18" x2="12" y2="22"></line><line x1="4.93" y1="4.93" x2="7.76" y2="7.76"></line><line x1="16.24" y1="16.24" x2="19.07" y2="19.07"></line><line x1="2" y1="12" x2="6" y2="12"></line><line x1="18" y1="12" x2="22" y2="12"></line><line x1="4.93" y1="19.07" x2="7.76" y2="16.24"></line><line x1="16.24" y1="7.76" x2="19.07" y2="4.93"></line></svg> \ No newline at end of file
diff --git a/feather/lock.svg b/feather/lock.svg
deleted file mode 100644
index de09d9d..0000000
--- a/feather/lock.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-lock"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg> \ No newline at end of file
diff --git a/feather/log-in.svg b/feather/log-in.svg
deleted file mode 100644
index ba0da59..0000000
--- a/feather/log-in.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-log-in"><path d="M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"></path><polyline points="10 17 15 12 10 7"></polyline><line x1="15" y1="12" x2="3" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/log-out.svg b/feather/log-out.svg
deleted file mode 100644
index c9002c9..0000000
--- a/feather/log-out.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-log-out"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"></path><polyline points="16 17 21 12 16 7"></polyline><line x1="21" y1="12" x2="9" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/mail.svg b/feather/mail.svg
deleted file mode 100644
index 2af169e..0000000
--- a/feather/mail.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mail"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg> \ No newline at end of file
diff --git a/feather/map-pin.svg b/feather/map-pin.svg
deleted file mode 100644
index d5548e9..0000000
--- a/feather/map-pin.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-map-pin"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle></svg> \ No newline at end of file
diff --git a/feather/map.svg b/feather/map.svg
deleted file mode 100644
index ecebd7b..0000000
--- a/feather/map.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-map"><polygon points="1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6"></polygon><line x1="8" y1="2" x2="8" y2="18"></line><line x1="16" y1="6" x2="16" y2="22"></line></svg> \ No newline at end of file
diff --git a/feather/maximize-2.svg b/feather/maximize-2.svg
deleted file mode 100644
index e41fc0b..0000000
--- a/feather/maximize-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" y1="3" x2="14" y2="10"></line><line x1="3" y1="21" x2="10" y2="14"></line></svg> \ No newline at end of file
diff --git a/feather/maximize.svg b/feather/maximize.svg
deleted file mode 100644
index fc30518..0000000
--- a/feather/maximize.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-maximize"><path d="M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"></path></svg> \ No newline at end of file
diff --git a/feather/meh.svg b/feather/meh.svg
deleted file mode 100644
index 6f57fff..0000000
--- a/feather/meh.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-meh"><circle cx="12" cy="12" r="10"></circle><line x1="8" y1="15" x2="16" y2="15"></line><line x1="9" y1="9" x2="9.01" y2="9"></line><line x1="15" y1="9" x2="15.01" y2="9"></line></svg> \ No newline at end of file
diff --git a/feather/menu.svg b/feather/menu.svg
deleted file mode 100644
index e8a84a9..0000000
--- a/feather/menu.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg> \ No newline at end of file
diff --git a/feather/message-circle.svg b/feather/message-circle.svg
deleted file mode 100644
index 4b21b32..0000000
--- a/feather/message-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-message-circle"><path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"></path></svg> \ No newline at end of file
diff --git a/feather/message-square.svg b/feather/message-square.svg
deleted file mode 100644
index 6a2e4e5..0000000
--- a/feather/message-square.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-message-square"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg> \ No newline at end of file
diff --git a/feather/mic-off.svg b/feather/mic-off.svg
deleted file mode 100644
index 0786219..0000000
--- a/feather/mic-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mic-off"><line x1="1" y1="1" x2="23" y2="23"></line><path d="M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6"></path><path d="M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23"></path><line x1="12" y1="19" x2="12" y2="23"></line><line x1="8" y1="23" x2="16" y2="23"></line></svg> \ No newline at end of file
diff --git a/feather/mic.svg b/feather/mic.svg
deleted file mode 100644
index dc5f780..0000000
--- a/feather/mic.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mic"><path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"></path><path d="M19 10v2a7 7 0 0 1-14 0v-2"></path><line x1="12" y1="19" x2="12" y2="23"></line><line x1="8" y1="23" x2="16" y2="23"></line></svg> \ No newline at end of file
diff --git a/feather/minimize-2.svg b/feather/minimize-2.svg
deleted file mode 100644
index a720fa6..0000000
--- a/feather/minimize-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-minimize-2"><polyline points="4 14 10 14 10 20"></polyline><polyline points="20 10 14 10 14 4"></polyline><line x1="14" y1="10" x2="21" y2="3"></line><line x1="3" y1="21" x2="10" y2="14"></line></svg> \ No newline at end of file
diff --git a/feather/minimize.svg b/feather/minimize.svg
deleted file mode 100644
index 46d6119..0000000
--- a/feather/minimize.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-minimize"><path d="M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3"></path></svg> \ No newline at end of file
diff --git a/feather/minus-circle.svg b/feather/minus-circle.svg
deleted file mode 100644
index 80c0de1..0000000
--- a/feather/minus-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-minus-circle"><circle cx="12" cy="12" r="10"></circle><line x1="8" y1="12" x2="16" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/minus-square.svg b/feather/minus-square.svg
deleted file mode 100644
index 4862832..0000000
--- a/feather/minus-square.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-minus-square"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="8" y1="12" x2="16" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/minus.svg b/feather/minus.svg
deleted file mode 100644
index 93cc734..0000000
--- a/feather/minus.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-minus"><line x1="5" y1="12" x2="19" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/monitor.svg b/feather/monitor.svg
deleted file mode 100644
index 6c3556d..0000000
--- a/feather/monitor.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-monitor"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"></rect><line x1="8" y1="21" x2="16" y2="21"></line><line x1="12" y1="17" x2="12" y2="21"></line></svg> \ No newline at end of file
diff --git a/feather/moon.svg b/feather/moon.svg
deleted file mode 100644
index dbf7c6c..0000000
--- a/feather/moon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-moon"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg> \ No newline at end of file
diff --git a/feather/more-horizontal.svg b/feather/more-horizontal.svg
deleted file mode 100644
index dc6a855..0000000
--- a/feather/more-horizontal.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-more-horizontal"><circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle></svg> \ No newline at end of file
diff --git a/feather/more-vertical.svg b/feather/more-vertical.svg
deleted file mode 100644
index cba6958..0000000
--- a/feather/more-vertical.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-more-vertical"><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="19" r="1"></circle></svg> \ No newline at end of file
diff --git a/feather/mouse-pointer.svg b/feather/mouse-pointer.svg
deleted file mode 100644
index f5af559..0000000
--- a/feather/mouse-pointer.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mouse-pointer"><path d="M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z"></path><path d="M13 13l6 6"></path></svg> \ No newline at end of file
diff --git a/feather/move.svg b/feather/move.svg
deleted file mode 100644
index 4e251b5..0000000
--- a/feather/move.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-move"><polyline points="5 9 2 12 5 15"></polyline><polyline points="9 5 12 2 15 5"></polyline><polyline points="15 19 12 22 9 19"></polyline><polyline points="19 9 22 12 19 15"></polyline><line x1="2" y1="12" x2="22" y2="12"></line><line x1="12" y1="2" x2="12" y2="22"></line></svg> \ No newline at end of file
diff --git a/feather/music.svg b/feather/music.svg
deleted file mode 100644
index 7bee2f7..0000000
--- a/feather/music.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-music"><path d="M9 18V5l12-2v13"></path><circle cx="6" cy="18" r="3"></circle><circle cx="18" cy="16" r="3"></circle></svg> \ No newline at end of file
diff --git a/feather/navigation-2.svg b/feather/navigation-2.svg
deleted file mode 100644
index ae31db9..0000000
--- a/feather/navigation-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-navigation-2"><polygon points="12 2 19 21 12 17 5 21 12 2"></polygon></svg> \ No newline at end of file
diff --git a/feather/navigation.svg b/feather/navigation.svg
deleted file mode 100644
index f600a41..0000000
--- a/feather/navigation.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-navigation"><polygon points="3 11 22 2 13 21 11 13 3 11"></polygon></svg> \ No newline at end of file
diff --git a/feather/octagon.svg b/feather/octagon.svg
deleted file mode 100644
index 124c548..0000000
--- a/feather/octagon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-octagon"><polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"></polygon></svg> \ No newline at end of file
diff --git a/feather/package.svg b/feather/package.svg
deleted file mode 100644
index f1e09ee..0000000
--- a/feather/package.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-package"><line x1="16.5" y1="9.4" x2="7.5" y2="4.21"></line><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/paperclip.svg b/feather/paperclip.svg
deleted file mode 100644
index b1f69b7..0000000
--- a/feather/paperclip.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-paperclip"><path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path></svg> \ No newline at end of file
diff --git a/feather/pause-circle.svg b/feather/pause-circle.svg
deleted file mode 100644
index f6b1a8d..0000000
--- a/feather/pause-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-pause-circle"><circle cx="12" cy="12" r="10"></circle><line x1="10" y1="15" x2="10" y2="9"></line><line x1="14" y1="15" x2="14" y2="9"></line></svg> \ No newline at end of file
diff --git a/feather/pause.svg b/feather/pause.svg
deleted file mode 100644
index 4e78038..0000000
--- a/feather/pause.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-pause"><rect x="6" y="4" width="4" height="16"></rect><rect x="14" y="4" width="4" height="16"></rect></svg> \ No newline at end of file
diff --git a/feather/pen-tool.svg b/feather/pen-tool.svg
deleted file mode 100644
index 0d26fa1..0000000
--- a/feather/pen-tool.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-pen-tool"><path d="M12 19l7-7 3 3-7 7-3-3z"></path><path d="M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"></path><path d="M2 2l7.586 7.586"></path><circle cx="11" cy="11" r="2"></circle></svg> \ No newline at end of file
diff --git a/feather/percent.svg b/feather/percent.svg
deleted file mode 100644
index 2cb9719..0000000
--- a/feather/percent.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-percent"><line x1="19" y1="5" x2="5" y2="19"></line><circle cx="6.5" cy="6.5" r="2.5"></circle><circle cx="17.5" cy="17.5" r="2.5"></circle></svg> \ No newline at end of file
diff --git a/feather/phone-call.svg b/feather/phone-call.svg
deleted file mode 100644
index 8b86660..0000000
--- a/feather/phone-call.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-phone-call"><path d="M15.05 5A5 5 0 0 1 19 8.95M15.05 1A9 9 0 0 1 23 8.94m-1 7.98v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path></svg> \ No newline at end of file
diff --git a/feather/phone-forwarded.svg b/feather/phone-forwarded.svg
deleted file mode 100644
index aa21bef..0000000
--- a/feather/phone-forwarded.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-phone-forwarded"><polyline points="19 1 23 5 19 9"></polyline><line x1="15" y1="5" x2="23" y2="5"></line><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path></svg> \ No newline at end of file
diff --git a/feather/phone-incoming.svg b/feather/phone-incoming.svg
deleted file mode 100644
index b2d523a..0000000
--- a/feather/phone-incoming.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-phone-incoming"><polyline points="16 2 16 8 22 8"></polyline><line x1="23" y1="1" x2="16" y2="8"></line><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path></svg> \ No newline at end of file
diff --git a/feather/phone-missed.svg b/feather/phone-missed.svg
deleted file mode 100644
index 4950f09..0000000
--- a/feather/phone-missed.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-phone-missed"><line x1="23" y1="1" x2="17" y2="7"></line><line x1="17" y1="1" x2="23" y2="7"></line><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path></svg> \ No newline at end of file
diff --git a/feather/phone-off.svg b/feather/phone-off.svg
deleted file mode 100644
index 4d00fb3..0000000
--- a/feather/phone-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-phone-off"><path d="M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91"></path><line x1="23" y1="1" x2="1" y2="23"></line></svg> \ No newline at end of file
diff --git a/feather/phone-outgoing.svg b/feather/phone-outgoing.svg
deleted file mode 100644
index fea27a3..0000000
--- a/feather/phone-outgoing.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-phone-outgoing"><polyline points="23 7 23 1 17 1"></polyline><line x1="16" y1="8" x2="23" y2="1"></line><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path></svg> \ No newline at end of file
diff --git a/feather/phone.svg b/feather/phone.svg
deleted file mode 100644
index 2a35154..0000000
--- a/feather/phone.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-phone"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path></svg> \ No newline at end of file
diff --git a/feather/pie-chart.svg b/feather/pie-chart.svg
deleted file mode 100644
index b5bbe67..0000000
--- a/feather/pie-chart.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-pie-chart"><path d="M21.21 15.89A10 10 0 1 1 8 2.83"></path><path d="M22 12A10 10 0 0 0 12 2v10z"></path></svg> \ No newline at end of file
diff --git a/feather/play-circle.svg b/feather/play-circle.svg
deleted file mode 100644
index 8766dc7..0000000
--- a/feather/play-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-play-circle"><circle cx="12" cy="12" r="10"></circle><polygon points="10 8 16 12 10 16 10 8"></polygon></svg> \ No newline at end of file
diff --git a/feather/play.svg b/feather/play.svg
deleted file mode 100644
index fd76e30..0000000
--- a/feather/play.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-play"><polygon points="5 3 19 12 5 21 5 3"></polygon></svg> \ No newline at end of file
diff --git a/feather/plus-circle.svg b/feather/plus-circle.svg
deleted file mode 100644
index 4291ff0..0000000
--- a/feather/plus-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-plus-circle"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="16"></line><line x1="8" y1="12" x2="16" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/plus-square.svg b/feather/plus-square.svg
deleted file mode 100644
index c380e24..0000000
--- a/feather/plus-square.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-plus-square"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="12" y1="8" x2="12" y2="16"></line><line x1="8" y1="12" x2="16" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/plus.svg b/feather/plus.svg
deleted file mode 100644
index 703c5b7..0000000
--- a/feather/plus.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-plus"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/pocket.svg b/feather/pocket.svg
deleted file mode 100644
index a3b2561..0000000
--- a/feather/pocket.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-pocket"><path d="M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z"></path><polyline points="8 10 12 14 16 10"></polyline></svg> \ No newline at end of file
diff --git a/feather/power.svg b/feather/power.svg
deleted file mode 100644
index 598308f..0000000
--- a/feather/power.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-power"><path d="M18.36 6.64a9 9 0 1 1-12.73 0"></path><line x1="12" y1="2" x2="12" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/printer.svg b/feather/printer.svg
deleted file mode 100644
index 8a9a7ac..0000000
--- a/feather/printer.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-printer"><polyline points="6 9 6 2 18 2 18 9"></polyline><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"></path><rect x="6" y="14" width="12" height="8"></rect></svg> \ No newline at end of file
diff --git a/feather/radio.svg b/feather/radio.svg
deleted file mode 100644
index 5abfcd1..0000000
--- a/feather/radio.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-radio"><circle cx="12" cy="12" r="2"></circle><path d="M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14"></path></svg> \ No newline at end of file
diff --git a/feather/refresh-ccw.svg b/feather/refresh-ccw.svg
deleted file mode 100644
index 10cff0e..0000000
--- a/feather/refresh-ccw.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-refresh-ccw"><polyline points="1 4 1 10 7 10"></polyline><polyline points="23 20 23 14 17 14"></polyline><path d="M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15"></path></svg> \ No newline at end of file
diff --git a/feather/refresh-cw.svg b/feather/refresh-cw.svg
deleted file mode 100644
index 06c358d..0000000
--- a/feather/refresh-cw.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-refresh-cw"><polyline points="23 4 23 10 17 10"></polyline><polyline points="1 20 1 14 7 14"></polyline><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path></svg> \ No newline at end of file
diff --git a/feather/repeat.svg b/feather/repeat.svg
deleted file mode 100644
index c7657b0..0000000
--- a/feather/repeat.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-repeat"><polyline points="17 1 21 5 17 9"></polyline><path d="M3 11V9a4 4 0 0 1 4-4h14"></path><polyline points="7 23 3 19 7 15"></polyline><path d="M21 13v2a4 4 0 0 1-4 4H3"></path></svg> \ No newline at end of file
diff --git a/feather/rewind.svg b/feather/rewind.svg
deleted file mode 100644
index 7b0fa3d..0000000
--- a/feather/rewind.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-rewind"><polygon points="11 19 2 12 11 5 11 19"></polygon><polygon points="22 19 13 12 22 5 22 19"></polygon></svg> \ No newline at end of file
diff --git a/feather/rotate-ccw.svg b/feather/rotate-ccw.svg
deleted file mode 100644
index ade5dc4..0000000
--- a/feather/rotate-ccw.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-rotate-ccw"><polyline points="1 4 1 10 7 10"></polyline><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"></path></svg> \ No newline at end of file
diff --git a/feather/rotate-cw.svg b/feather/rotate-cw.svg
deleted file mode 100644
index 83dca35..0000000
--- a/feather/rotate-cw.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-rotate-cw"><polyline points="23 4 23 10 17 10"></polyline><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"></path></svg> \ No newline at end of file
diff --git a/feather/rss.svg b/feather/rss.svg
deleted file mode 100644
index c9a1368..0000000
--- a/feather/rss.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-rss"><path d="M4 11a9 9 0 0 1 9 9"></path><path d="M4 4a16 16 0 0 1 16 16"></path><circle cx="5" cy="19" r="1"></circle></svg> \ No newline at end of file
diff --git a/feather/save.svg b/feather/save.svg
deleted file mode 100644
index 46c7299..0000000
--- a/feather/save.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-save"><path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"></path><polyline points="17 21 17 13 7 13 7 21"></polyline><polyline points="7 3 7 8 15 8"></polyline></svg> \ No newline at end of file
diff --git a/feather/scissors.svg b/feather/scissors.svg
deleted file mode 100644
index fd0647f..0000000
--- a/feather/scissors.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-scissors"><circle cx="6" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle><line x1="20" y1="4" x2="8.12" y2="15.88"></line><line x1="14.47" y1="14.48" x2="20" y2="20"></line><line x1="8.12" y1="8.12" x2="12" y2="12"></line></svg> \ No newline at end of file
diff --git a/feather/search.svg b/feather/search.svg
deleted file mode 100644
index 8710306..0000000
--- a/feather/search.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg> \ No newline at end of file
diff --git a/feather/send.svg b/feather/send.svg
deleted file mode 100644
index 42ef2a2..0000000
--- a/feather/send.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-send"><line x1="22" y1="2" x2="11" y2="13"></line><polygon points="22 2 15 22 11 13 2 9 22 2"></polygon></svg> \ No newline at end of file
diff --git a/feather/server.svg b/feather/server.svg
deleted file mode 100644
index 54ce094..0000000
--- a/feather/server.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-server"><rect x="2" y="2" width="20" height="8" rx="2" ry="2"></rect><rect x="2" y="14" width="20" height="8" rx="2" ry="2"></rect><line x1="6" y1="6" x2="6.01" y2="6"></line><line x1="6" y1="18" x2="6.01" y2="18"></line></svg> \ No newline at end of file
diff --git a/feather/settings.svg b/feather/settings.svg
deleted file mode 100644
index 19c2726..0000000
--- a/feather/settings.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-settings"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg> \ No newline at end of file
diff --git a/feather/share-2.svg b/feather/share-2.svg
deleted file mode 100644
index 09b1c7b..0000000
--- a/feather/share-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-share-2"><circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line></svg> \ No newline at end of file
diff --git a/feather/share.svg b/feather/share.svg
deleted file mode 100644
index df38c14..0000000
--- a/feather/share.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-share"><path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"></path><polyline points="16 6 12 2 8 6"></polyline><line x1="12" y1="2" x2="12" y2="15"></line></svg> \ No newline at end of file
diff --git a/feather/shield-off.svg b/feather/shield-off.svg
deleted file mode 100644
index 18692dd..0000000
--- a/feather/shield-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-shield-off"><path d="M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18"></path><path d="M4.73 4.73L4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38"></path><line x1="1" y1="1" x2="23" y2="23"></line></svg> \ No newline at end of file
diff --git a/feather/shield.svg b/feather/shield.svg
deleted file mode 100644
index c7c4841..0000000
--- a/feather/shield.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-shield"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg> \ No newline at end of file
diff --git a/feather/shopping-bag.svg b/feather/shopping-bag.svg
deleted file mode 100644
index eaa39e8..0000000
--- a/feather/shopping-bag.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-shopping-bag"><path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"></path><line x1="3" y1="6" x2="21" y2="6"></line><path d="M16 10a4 4 0 0 1-8 0"></path></svg> \ No newline at end of file
diff --git a/feather/shopping-cart.svg b/feather/shopping-cart.svg
deleted file mode 100644
index 17a40bf..0000000
--- a/feather/shopping-cart.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-shopping-cart"><circle cx="9" cy="21" r="1"></circle><circle cx="20" cy="21" r="1"></circle><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path></svg> \ No newline at end of file
diff --git a/feather/shuffle.svg b/feather/shuffle.svg
deleted file mode 100644
index 8cfb5db..0000000
--- a/feather/shuffle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-shuffle"><polyline points="16 3 21 3 21 8"></polyline><line x1="4" y1="20" x2="21" y2="3"></line><polyline points="21 16 21 21 16 21"></polyline><line x1="15" y1="15" x2="21" y2="21"></line><line x1="4" y1="4" x2="9" y2="9"></line></svg> \ No newline at end of file
diff --git a/feather/sidebar.svg b/feather/sidebar.svg
deleted file mode 100644
index 8ba817e..0000000
--- a/feather/sidebar.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-sidebar"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line></svg> \ No newline at end of file
diff --git a/feather/skip-back.svg b/feather/skip-back.svg
deleted file mode 100644
index 88d024e..0000000
--- a/feather/skip-back.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-skip-back"><polygon points="19 20 9 12 19 4 19 20"></polygon><line x1="5" y1="19" x2="5" y2="5"></line></svg> \ No newline at end of file
diff --git a/feather/skip-forward.svg b/feather/skip-forward.svg
deleted file mode 100644
index f3fdac3..0000000
--- a/feather/skip-forward.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-skip-forward"><polygon points="5 4 15 12 5 20 5 4"></polygon><line x1="19" y1="5" x2="19" y2="19"></line></svg> \ No newline at end of file
diff --git a/feather/slack.svg b/feather/slack.svg
deleted file mode 100644
index 5d97346..0000000
--- a/feather/slack.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-slack"><path d="M14.5 10c-.83 0-1.5-.67-1.5-1.5v-5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5z"></path><path d="M20.5 10H19V8.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"></path><path d="M9.5 14c.83 0 1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5S8 21.33 8 20.5v-5c0-.83.67-1.5 1.5-1.5z"></path><path d="M3.5 14H5v1.5c0 .83-.67 1.5-1.5 1.5S2 16.33 2 15.5 2.67 14 3.5 14z"></path><path d="M14 14.5c0-.83.67-1.5 1.5-1.5h5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-5c-.83 0-1.5-.67-1.5-1.5z"></path><path d="M15.5 19H14v1.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"></path><path d="M10 9.5C10 8.67 9.33 8 8.5 8h-5C2.67 8 2 8.67 2 9.5S2.67 11 3.5 11h5c.83 0 1.5-.67 1.5-1.5z"></path><path d="M8.5 5H10V3.5C10 2.67 9.33 2 8.5 2S7 2.67 7 3.5 7.67 5 8.5 5z"></path></svg> \ No newline at end of file
diff --git a/feather/slash.svg b/feather/slash.svg
deleted file mode 100644
index f4131b8..0000000
--- a/feather/slash.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-slash"><circle cx="12" cy="12" r="10"></circle><line x1="4.93" y1="4.93" x2="19.07" y2="19.07"></line></svg> \ No newline at end of file
diff --git a/feather/sliders.svg b/feather/sliders.svg
deleted file mode 100644
index 19c9385..0000000
--- a/feather/sliders.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-sliders"><line x1="4" y1="21" x2="4" y2="14"></line><line x1="4" y1="10" x2="4" y2="3"></line><line x1="12" y1="21" x2="12" y2="12"></line><line x1="12" y1="8" x2="12" y2="3"></line><line x1="20" y1="21" x2="20" y2="16"></line><line x1="20" y1="12" x2="20" y2="3"></line><line x1="1" y1="14" x2="7" y2="14"></line><line x1="9" y1="8" x2="15" y2="8"></line><line x1="17" y1="16" x2="23" y2="16"></line></svg> \ No newline at end of file
diff --git a/feather/smartphone.svg b/feather/smartphone.svg
deleted file mode 100644
index 0171a95..0000000
--- a/feather/smartphone.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-smartphone"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"></rect><line x1="12" y1="18" x2="12.01" y2="18"></line></svg> \ No newline at end of file
diff --git a/feather/smile.svg b/feather/smile.svg
deleted file mode 100644
index 24dc8a2..0000000
--- a/feather/smile.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-smile"><circle cx="12" cy="12" r="10"></circle><path d="M8 14s1.5 2 4 2 4-2 4-2"></path><line x1="9" y1="9" x2="9.01" y2="9"></line><line x1="15" y1="9" x2="15.01" y2="9"></line></svg> \ No newline at end of file
diff --git a/feather/speaker.svg b/feather/speaker.svg
deleted file mode 100644
index 75d5ff9..0000000
--- a/feather/speaker.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-speaker"><rect x="4" y="2" width="16" height="20" rx="2" ry="2"></rect><circle cx="12" cy="14" r="4"></circle><line x1="12" y1="6" x2="12.01" y2="6"></line></svg> \ No newline at end of file
diff --git a/feather/square.svg b/feather/square.svg
deleted file mode 100644
index 6eabc77..0000000
--- a/feather/square.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-square"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect></svg> \ No newline at end of file
diff --git a/feather/star.svg b/feather/star.svg
deleted file mode 100644
index bcdc31a..0000000
--- a/feather/star.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg> \ No newline at end of file
diff --git a/feather/stop-circle.svg b/feather/stop-circle.svg
deleted file mode 100644
index c10d9d4..0000000
--- a/feather/stop-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-stop-circle"><circle cx="12" cy="12" r="10"></circle><rect x="9" y="9" width="6" height="6"></rect></svg> \ No newline at end of file
diff --git a/feather/sun.svg b/feather/sun.svg
deleted file mode 100644
index 7f51b94..0000000
--- a/feather/sun.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-sun"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg> \ No newline at end of file
diff --git a/feather/sunrise.svg b/feather/sunrise.svg
deleted file mode 100644
index eff4b1e..0000000
--- a/feather/sunrise.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-sunrise"><path d="M17 18a5 5 0 0 0-10 0"></path><line x1="12" y1="2" x2="12" y2="9"></line><line x1="4.22" y1="10.22" x2="5.64" y2="11.64"></line><line x1="1" y1="18" x2="3" y2="18"></line><line x1="21" y1="18" x2="23" y2="18"></line><line x1="18.36" y1="11.64" x2="19.78" y2="10.22"></line><line x1="23" y1="22" x2="1" y2="22"></line><polyline points="8 6 12 2 16 6"></polyline></svg> \ No newline at end of file
diff --git a/feather/sunset.svg b/feather/sunset.svg
deleted file mode 100644
index a5a2221..0000000
--- a/feather/sunset.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-sunset"><path d="M17 18a5 5 0 0 0-10 0"></path><line x1="12" y1="9" x2="12" y2="2"></line><line x1="4.22" y1="10.22" x2="5.64" y2="11.64"></line><line x1="1" y1="18" x2="3" y2="18"></line><line x1="21" y1="18" x2="23" y2="18"></line><line x1="18.36" y1="11.64" x2="19.78" y2="10.22"></line><line x1="23" y1="22" x2="1" y2="22"></line><polyline points="16 5 12 9 8 5"></polyline></svg> \ No newline at end of file
diff --git a/feather/tablet.svg b/feather/tablet.svg
deleted file mode 100644
index 9c80b40..0000000
--- a/feather/tablet.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tablet"><rect x="4" y="2" width="16" height="20" rx="2" ry="2"></rect><line x1="12" y1="18" x2="12.01" y2="18"></line></svg> \ No newline at end of file
diff --git a/feather/tag.svg b/feather/tag.svg
deleted file mode 100644
index 7219b15..0000000
--- a/feather/tag.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tag"><path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"></path><line x1="7" y1="7" x2="7.01" y2="7"></line></svg> \ No newline at end of file
diff --git a/feather/target.svg b/feather/target.svg
deleted file mode 100644
index be84b17..0000000
--- a/feather/target.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-target"><circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="6"></circle><circle cx="12" cy="12" r="2"></circle></svg> \ No newline at end of file
diff --git a/feather/terminal.svg b/feather/terminal.svg
deleted file mode 100644
index af459c0..0000000
--- a/feather/terminal.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-terminal"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" y1="19" x2="20" y2="19"></line></svg> \ No newline at end of file
diff --git a/feather/thermometer.svg b/feather/thermometer.svg
deleted file mode 100644
index 33142cc..0000000
--- a/feather/thermometer.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-thermometer"><path d="M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z"></path></svg> \ No newline at end of file
diff --git a/feather/thumbs-down.svg b/feather/thumbs-down.svg
deleted file mode 100644
index 3e7bcd6..0000000
--- a/feather/thumbs-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-thumbs-down"><path d="M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17"></path></svg> \ No newline at end of file
diff --git a/feather/thumbs-up.svg b/feather/thumbs-up.svg
deleted file mode 100644
index 226c44d..0000000
--- a/feather/thumbs-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-thumbs-up"><path d="M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"></path></svg> \ No newline at end of file
diff --git a/feather/toggle-left.svg b/feather/toggle-left.svg
deleted file mode 100644
index 240be29..0000000
--- a/feather/toggle-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-toggle-left"><rect x="1" y="5" width="22" height="14" rx="7" ry="7"></rect><circle cx="8" cy="12" r="3"></circle></svg> \ No newline at end of file
diff --git a/feather/toggle-right.svg b/feather/toggle-right.svg
deleted file mode 100644
index fc6e81c..0000000
--- a/feather/toggle-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-toggle-right"><rect x="1" y="5" width="22" height="14" rx="7" ry="7"></rect><circle cx="16" cy="12" r="3"></circle></svg> \ No newline at end of file
diff --git a/feather/tool.svg b/feather/tool.svg
deleted file mode 100644
index f3cbf3d..0000000
--- a/feather/tool.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tool"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"></path></svg> \ No newline at end of file
diff --git a/feather/trash-2.svg b/feather/trash-2.svg
deleted file mode 100644
index f24d55b..0000000
--- a/feather/trash-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trash-2"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path><line x1="10" y1="11" x2="10" y2="17"></line><line x1="14" y1="11" x2="14" y2="17"></line></svg> \ No newline at end of file
diff --git a/feather/trash.svg b/feather/trash.svg
deleted file mode 100644
index 55650bd..0000000
--- a/feather/trash.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trash"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path></svg> \ No newline at end of file
diff --git a/feather/trello.svg b/feather/trello.svg
deleted file mode 100644
index b2f599b..0000000
--- a/feather/trello.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trello"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><rect x="7" y="7" width="3" height="9"></rect><rect x="14" y="7" width="3" height="5"></rect></svg> \ No newline at end of file
diff --git a/feather/trending-down.svg b/feather/trending-down.svg
deleted file mode 100644
index a9d4cfa..0000000
--- a/feather/trending-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trending-down"><polyline points="23 18 13.5 8.5 8.5 13.5 1 6"></polyline><polyline points="17 18 23 18 23 12"></polyline></svg> \ No newline at end of file
diff --git a/feather/trending-up.svg b/feather/trending-up.svg
deleted file mode 100644
index 52026a4..0000000
--- a/feather/trending-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trending-up"><polyline points="23 6 13.5 15.5 8.5 10.5 1 18"></polyline><polyline points="17 6 23 6 23 12"></polyline></svg> \ No newline at end of file
diff --git a/feather/triangle.svg b/feather/triangle.svg
deleted file mode 100644
index 274b652..0000000
--- a/feather/triangle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-triangle"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path></svg> \ No newline at end of file
diff --git a/feather/truck.svg b/feather/truck.svg
deleted file mode 100644
index 3389837..0000000
--- a/feather/truck.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-truck"><rect x="1" y="3" width="15" height="13"></rect><polygon points="16 8 20 8 23 11 23 16 16 16 16 8"></polygon><circle cx="5.5" cy="18.5" r="2.5"></circle><circle cx="18.5" cy="18.5" r="2.5"></circle></svg> \ No newline at end of file
diff --git a/feather/tv.svg b/feather/tv.svg
deleted file mode 100644
index 955bbff..0000000
--- a/feather/tv.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tv"><rect x="2" y="7" width="20" height="15" rx="2" ry="2"></rect><polyline points="17 2 12 7 7 2"></polyline></svg> \ No newline at end of file
diff --git a/feather/twitch.svg b/feather/twitch.svg
deleted file mode 100644
index 1706249..0000000
--- a/feather/twitch.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-twitch"><path d="M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7"></path></svg> \ No newline at end of file
diff --git a/feather/twitter.svg b/feather/twitter.svg
deleted file mode 100644
index f8886ec..0000000
--- a/feather/twitter.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-twitter"><path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"></path></svg> \ No newline at end of file
diff --git a/feather/type.svg b/feather/type.svg
deleted file mode 100644
index c6b2de3..0000000
--- a/feather/type.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-type"><polyline points="4 7 4 4 20 4 20 7"></polyline><line x1="9" y1="20" x2="15" y2="20"></line><line x1="12" y1="4" x2="12" y2="20"></line></svg> \ No newline at end of file
diff --git a/feather/umbrella.svg b/feather/umbrella.svg
deleted file mode 100644
index dc77c0c..0000000
--- a/feather/umbrella.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-umbrella"><path d="M23 12a11.05 11.05 0 0 0-22 0zm-5 7a3 3 0 0 1-6 0v-7"></path></svg> \ No newline at end of file
diff --git a/feather/underline.svg b/feather/underline.svg
deleted file mode 100644
index 044945d..0000000
--- a/feather/underline.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-underline"><path d="M6 3v7a6 6 0 0 0 6 6 6 6 0 0 0 6-6V3"></path><line x1="4" y1="21" x2="20" y2="21"></line></svg> \ No newline at end of file
diff --git a/feather/unlock.svg b/feather/unlock.svg
deleted file mode 100644
index 01dc359..0000000
--- a/feather/unlock.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-unlock"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 9.9-1"></path></svg> \ No newline at end of file
diff --git a/feather/upload-cloud.svg b/feather/upload-cloud.svg
deleted file mode 100644
index a1db297..0000000
--- a/feather/upload-cloud.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-upload-cloud"><polyline points="16 16 12 12 8 16"></polyline><line x1="12" y1="12" x2="12" y2="21"></line><path d="M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3"></path><polyline points="16 16 12 12 8 16"></polyline></svg> \ No newline at end of file
diff --git a/feather/upload.svg b/feather/upload.svg
deleted file mode 100644
index 91eaff7..0000000
--- a/feather/upload.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-upload"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg> \ No newline at end of file
diff --git a/feather/user-check.svg b/feather/user-check.svg
deleted file mode 100644
index 42f91b2..0000000
--- a/feather/user-check.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-user-check"><path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><polyline points="17 11 19 13 23 9"></polyline></svg> \ No newline at end of file
diff --git a/feather/user-minus.svg b/feather/user-minus.svg
deleted file mode 100644
index 44b75f5..0000000
--- a/feather/user-minus.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-user-minus"><path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><line x1="23" y1="11" x2="17" y2="11"></line></svg> \ No newline at end of file
diff --git a/feather/user-plus.svg b/feather/user-plus.svg
deleted file mode 100644
index 21460f6..0000000
--- a/feather/user-plus.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-user-plus"><path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><line x1="20" y1="8" x2="20" y2="14"></line><line x1="23" y1="11" x2="17" y2="11"></line></svg> \ No newline at end of file
diff --git a/feather/user-x.svg b/feather/user-x.svg
deleted file mode 100644
index 0c41a48..0000000
--- a/feather/user-x.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-user-x"><path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><line x1="18" y1="8" x2="23" y2="13"></line><line x1="23" y1="8" x2="18" y2="13"></line></svg> \ No newline at end of file
diff --git a/feather/user.svg b/feather/user.svg
deleted file mode 100644
index 7bb5f29..0000000
--- a/feather/user.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-user"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg> \ No newline at end of file
diff --git a/feather/users.svg b/feather/users.svg
deleted file mode 100644
index aacf6b0..0000000
--- a/feather/users.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-users"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg> \ No newline at end of file
diff --git a/feather/video-off.svg b/feather/video-off.svg
deleted file mode 100644
index 08ec697..0000000
--- a/feather/video-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-video-off"><path d="M16 16v1a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2m5.66 0H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10"></path><line x1="1" y1="1" x2="23" y2="23"></line></svg> \ No newline at end of file
diff --git a/feather/video.svg b/feather/video.svg
deleted file mode 100644
index 8ff156a..0000000
--- a/feather/video.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-video"><polygon points="23 7 16 12 23 17 23 7"></polygon><rect x="1" y="5" width="15" height="14" rx="2" ry="2"></rect></svg> \ No newline at end of file
diff --git a/feather/voicemail.svg b/feather/voicemail.svg
deleted file mode 100644
index 5d78a8e..0000000
--- a/feather/voicemail.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-voicemail"><circle cx="5.5" cy="11.5" r="4.5"></circle><circle cx="18.5" cy="11.5" r="4.5"></circle><line x1="5.5" y1="16" x2="18.5" y2="16"></line></svg> \ No newline at end of file
diff --git a/feather/volume-1.svg b/feather/volume-1.svg
deleted file mode 100644
index 150e875..0000000
--- a/feather/volume-1.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-volume-1"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><path d="M15.54 8.46a5 5 0 0 1 0 7.07"></path></svg> \ No newline at end of file
diff --git a/feather/volume-2.svg b/feather/volume-2.svg
deleted file mode 100644
index 03d521c..0000000
--- a/feather/volume-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-volume-2"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><path d="M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07"></path></svg> \ No newline at end of file
diff --git a/feather/volume-x.svg b/feather/volume-x.svg
deleted file mode 100644
index be44240..0000000
--- a/feather/volume-x.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-volume-x"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><line x1="23" y1="9" x2="17" y2="15"></line><line x1="17" y1="9" x2="23" y2="15"></line></svg> \ No newline at end of file
diff --git a/feather/volume.svg b/feather/volume.svg
deleted file mode 100644
index 53bfe15..0000000
--- a/feather/volume.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-volume"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon></svg> \ No newline at end of file
diff --git a/feather/watch.svg b/feather/watch.svg
deleted file mode 100644
index a1099da..0000000
--- a/feather/watch.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-watch"><circle cx="12" cy="12" r="7"></circle><polyline points="12 9 12 12 13.5 13.5"></polyline><path d="M16.51 17.35l-.35 3.83a2 2 0 0 1-2 1.82H9.83a2 2 0 0 1-2-1.82l-.35-3.83m.01-10.7l.35-3.83A2 2 0 0 1 9.83 1h4.35a2 2 0 0 1 2 1.82l.35 3.83"></path></svg> \ No newline at end of file
diff --git a/feather/wifi-off.svg b/feather/wifi-off.svg
deleted file mode 100644
index 35eae43..0000000
--- a/feather/wifi-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-wifi-off"><line x1="1" y1="1" x2="23" y2="23"></line><path d="M16.72 11.06A10.94 10.94 0 0 1 19 12.55"></path><path d="M5 12.55a10.94 10.94 0 0 1 5.17-2.39"></path><path d="M10.71 5.05A16 16 0 0 1 22.58 9"></path><path d="M1.42 9a15.91 15.91 0 0 1 4.7-2.88"></path><path d="M8.53 16.11a6 6 0 0 1 6.95 0"></path><line x1="12" y1="20" x2="12.01" y2="20"></line></svg> \ No newline at end of file
diff --git a/feather/wifi.svg b/feather/wifi.svg
deleted file mode 100644
index 748c285..0000000
--- a/feather/wifi.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-wifi"><path d="M5 12.55a11 11 0 0 1 14.08 0"></path><path d="M1.42 9a16 16 0 0 1 21.16 0"></path><path d="M8.53 16.11a6 6 0 0 1 6.95 0"></path><line x1="12" y1="20" x2="12.01" y2="20"></line></svg> \ No newline at end of file
diff --git a/feather/wind.svg b/feather/wind.svg
deleted file mode 100644
index 82b3646..0000000
--- a/feather/wind.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-wind"><path d="M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2"></path></svg> \ No newline at end of file
diff --git a/feather/x-circle.svg b/feather/x-circle.svg
deleted file mode 100644
index 94aad5e..0000000
--- a/feather/x-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-x-circle"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg> \ No newline at end of file
diff --git a/feather/x-octagon.svg b/feather/x-octagon.svg
deleted file mode 100644
index 8543198..0000000
--- a/feather/x-octagon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-x-octagon"><polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"></polygon><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg> \ No newline at end of file
diff --git a/feather/x-square.svg b/feather/x-square.svg
deleted file mode 100644
index 7677c38..0000000
--- a/feather/x-square.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-x-square"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="9" x2="15" y2="15"></line><line x1="15" y1="9" x2="9" y2="15"></line></svg> \ No newline at end of file
diff --git a/feather/x.svg b/feather/x.svg
deleted file mode 100644
index 7d5875c..0000000
--- a/feather/x.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-x"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg> \ No newline at end of file
diff --git a/feather/youtube.svg b/feather/youtube.svg
deleted file mode 100644
index c482438..0000000
--- a/feather/youtube.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-youtube"><path d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"></path><polygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"></polygon></svg> \ No newline at end of file
diff --git a/feather/zap-off.svg b/feather/zap-off.svg
deleted file mode 100644
index c636f8b..0000000
--- a/feather/zap-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-zap-off"><polyline points="12.41 6.75 13 2 10.57 4.92"></polyline><polyline points="18.57 12.91 21 10 15.66 10"></polyline><polyline points="8 8 3 14 12 14 11 22 16 16"></polyline><line x1="1" y1="1" x2="23" y2="23"></line></svg> \ No newline at end of file
diff --git a/feather/zap.svg b/feather/zap.svg
deleted file mode 100644
index 8fdafa9..0000000
--- a/feather/zap.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-zap"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg> \ No newline at end of file
diff --git a/feather/zoom-in.svg b/feather/zoom-in.svg
deleted file mode 100644
index da4572d..0000000
--- a/feather/zoom-in.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-zoom-in"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg> \ No newline at end of file
diff --git a/feather/zoom-out.svg b/feather/zoom-out.svg
deleted file mode 100644
index fd678d7..0000000
--- a/feather/zoom-out.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-zoom-out"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg> \ No newline at end of file
diff --git a/format.sh b/format.sh
new file mode 100755
index 0000000..6645cab
--- /dev/null
+++ b/format.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+set -e
+
+cd $(dirname -- "$0")
+
+clang-format -style=file -i src_c/*.c src_c/*.h
diff --git a/mbgui/__init__.py b/mbgui/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/mbgui/__init__.py
+++ /dev/null
diff --git a/mbgui/__main__.py b/mbgui/__main__.py
deleted file mode 100644
index 9d5f7b2..0000000
--- a/mbgui/__main__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-import sys
-
-from mbgui.main import main
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/mbgui/executor.py b/mbgui/executor.py
deleted file mode 100644
index d9efd58..0000000
--- a/mbgui/executor.py
+++ /dev/null
@@ -1,49 +0,0 @@
-import collections
-import concurrent.futures
-import threading
-import typing
-
-from PySide6 import QtCore
-
-
-class Executor(QtCore.QObject):
-
- def __init__(self):
- super().__init__()
- self._executor = concurrent.futures.ThreadPoolExecutor()
- self._call_main_queue = collections.deque()
- self._call_main_lock = threading.Lock()
-
- def call_main(self,
- fn: typing.Callable,
- *args):
- with self._call_main_lock:
- self._call_main_queue.append((fn, args))
-
- QtCore.QMetaObject.invokeMethod(self, "_on_main_call",
- QtCore.Qt.QueuedConnection)
-
- def call_worker(self,
- fn: typing.Callable,
- *args,
- done_cb: typing.Callable = None,
- ) -> concurrent.futures.Future:
- future = self._executor.submit(fn, *args)
-
- if done_cb:
- future.add_done_callback(
- lambda f: self.call_main(done_cb, f.result()))
-
- return future
-
- @QtCore.Slot()
- def _on_main_call(self):
- with self._call_main_lock:
- if not self._call_main_queue:
- return
-
- queue = self._call_main_queue
- self._call_main_queue = collections.deque()
-
- for fn, args in queue:
- fn(*args)
diff --git a/mbgui/icons/eye-off-16.png b/mbgui/icons/eye-off-16.png
deleted file mode 100644
index 1165e76..0000000
--- a/mbgui/icons/eye-off-16.png
+++ /dev/null
Binary files differ
diff --git a/mbgui/icons/file-16.png b/mbgui/icons/file-16.png
deleted file mode 100644
index a0c6a66..0000000
--- a/mbgui/icons/file-16.png
+++ /dev/null
Binary files differ
diff --git a/mbgui/icons/flag-16.png b/mbgui/icons/flag-16.png
deleted file mode 100644
index 85c8a93..0000000
--- a/mbgui/icons/flag-16.png
+++ /dev/null
Binary files differ
diff --git a/mbgui/icons/folder-16.png b/mbgui/icons/folder-16.png
deleted file mode 100644
index a77576d..0000000
--- a/mbgui/icons/folder-16.png
+++ /dev/null
Binary files differ
diff --git a/mbgui/icons/inbox-16.png b/mbgui/icons/inbox-16.png
deleted file mode 100644
index bb82fb1..0000000
--- a/mbgui/icons/inbox-16.png
+++ /dev/null
Binary files differ
diff --git a/mbgui/icons/mail-16.png b/mbgui/icons/mail-16.png
deleted file mode 100644
index 53c53b8..0000000
--- a/mbgui/icons/mail-16.png
+++ /dev/null
Binary files differ
diff --git a/mbgui/icons/trash-16.png b/mbgui/icons/trash-16.png
deleted file mode 100644
index 46d5920..0000000
--- a/mbgui/icons/trash-16.png
+++ /dev/null
Binary files differ
diff --git a/mbgui/main.py b/mbgui/main.py
deleted file mode 100644
index 6975d6a..0000000
--- a/mbgui/main.py
+++ /dev/null
@@ -1,252 +0,0 @@
-from pathlib import Path
-import sys
-import typing
-
-from PySide6 import QtCore
-from PySide6 import QtGui
-from PySide6 import QtUiTools
-from PySide6 import QtWidgets
-
-from mbgui import mblaze
-from mbgui.executor import Executor
-
-
-icons_path = Path(__file__).parent / 'icons'
-main_ui_path = Path(__file__).parent / 'main.ui'
-
-
-def main():
-
- def on_directories_changed(current, previous):
- item = directories.model.itemFromIndex(current)
- directory = item.data() if item else None
- messages.set_directory(directory)
-
- def on_messages_changed(current, pevious):
- item = messages.model.itemFromIndex(current)
- path = item.data() if item else None
- message.set_path(path)
-
- def on_messages_double_clicked(index):
- item = messages.model.itemFromIndex(index)
- path = item.data() if item else None
- if path:
- print(path)
-
- app = QtWidgets.QApplication(sys.argv)
-
- executor = Executor()
- icons = {i.stem: QtGui.QIcon(str(i))
- for i in icons_path.glob('*.png')}
-
- directories = Directories(executor, icons, sys.argv[1:])
- messages = Messages(executor, icons)
- message = Message(executor)
-
- loader = QtUiTools.QUiLoader()
- window = loader.load(str(main_ui_path))
-
- font = QtGui.QFontDatabase.systemFont(QtGui.QFontDatabase.FixedFont)
- window.message.setFont(font)
-
- window.vsplitter.setStretchFactor(0, 1)
- window.vsplitter.setStretchFactor(1, 2)
-
- window.directories.setModel(directories.model)
- model = window.directories.selectionModel()
- model.currentChanged.connect(on_directories_changed)
-
- header = window.directories.header()
- header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
- header.setSectionResizeMode(1, QtWidgets.QHeaderView.Interactive)
- header.setSectionResizeMode(2, QtWidgets.QHeaderView.Interactive)
-
- window.messages.setModel(messages.model)
- model = window.messages.selectionModel()
- model.currentChanged.connect(on_messages_changed)
- window.messages.doubleClicked.connect(on_messages_double_clicked)
-
- header = window.messages.header()
- header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
- header.setSectionResizeMode(1, QtWidgets.QHeaderView.Interactive)
- header.setSectionResizeMode(2, QtWidgets.QHeaderView.Interactive)
-
- message.change.connect(window.message.setText)
-
- window.show()
-
- sys.exit(app.exec_())
-
-
-class Directories:
-
- def __init__(self,
- executor: Executor,
- icons: typing.Dict[str, QtGui.QIcon],
- paths: typing.Iterable[str]):
- self._executor = executor
- self._icons = icons
- self._model = QtGui.QStandardItemModel()
- self._model.setHorizontalHeaderLabels(['Directory', 'Unseen', 'Total'])
- self._get_directories(paths)
-
- @property
- def model(self) -> QtCore.QAbstractItemModel:
- return self._model
-
- def _get_directories(self, paths):
-
- def on_done(directories):
- for directory in directories:
- self._model.appendRow(create_row(directory))
-
- def create_row(directory):
- icon = self._icons['inbox-16' if directory.path
- else 'folder-16']
-
- items = [QtGui.QStandardItem(icon, directory.name),
- QtGui.QStandardItem(''),
- QtGui.QStandardItem('')]
-
- for item in items:
- item.setData(directory.path)
-
- if directory.path:
- self._get_directory_unseen(items[1], directory.path)
- self._get_directory_total(items[2], directory.path)
-
- for child in directory.children:
- items[0].appendRow(create_row(child))
-
- return items
-
- self._executor.call_worker(mblaze.get_directories, paths,
- done_cb=on_done)
-
- def _get_directory_unseen(self, item, path):
-
- def on_done(count):
- item.setText(str(count))
-
- self._executor.call_worker(mblaze.get_directory_unseen, path,
- done_cb=on_done)
-
- def _get_directory_total(self, item, path):
-
- def on_done(count):
- item.setText(str(count))
-
- self._executor.call_worker(mblaze.get_directory_total, path,
- done_cb=on_done)
-
-
-class Messages:
-
- def __init__(self,
- executor: Executor,
- icons: typing.Dict[str, QtGui.QIcon]):
- self._executor = executor
- self._icons = icons
- self._model = QtGui.QStandardItemModel()
- self._model.setHorizontalHeaderLabels(['Subject', 'Sender', 'Date'])
- self._directory = None
-
- @property
- def model(self) -> QtCore.QAbstractItemModel:
- return self._model
-
- def set_directory(self, directory: str):
- if self._directory == directory:
- return
-
- self._directory = directory
- self._model.setRowCount(0)
-
- if directory:
- self._get_messages(directory)
-
- def _get_messages(self, directory):
-
- def on_done(messages):
- if self._directory != directory:
- return
-
- for message in messages:
- self._model.appendRow(create_row(message))
-
- def create_row(message):
- icon = _status_icon(message.status)
- icon = self._icons[f'{icon}-16'] if icon else None
-
- items = [QtGui.QStandardItem(icon, message.subject),
- QtGui.QStandardItem(message.sender),
- QtGui.QStandardItem(message.date)]
-
- for item in items:
- item.setData(message.path)
-
- for child in message.children:
- items[0].appendRow(create_row(child))
-
- return items
-
- self._executor.call_worker(mblaze.get_messages, directory,
- done_cb=on_done)
-
- def _on_messages(self, directory, messages):
- if directory != self._selected_directory:
- return
-
-
-class Message(QtCore.QObject):
-
- change = QtCore.Signal(str)
-
- def __init__(self, executor: Executor):
- super().__init__()
- self._executor = executor
- self._path = None
-
- def set_path(self, path: str):
- if self._path == path:
- return
-
- self._path = path
- self.change.emit('')
-
- if path:
- self._get_message(path)
-
- def _get_message(self, path):
-
- def on_done(text):
- if self._path != path:
- return
-
- self.change.emit(text)
-
- self._executor.call_worker(mblaze.get_message, path,
- done_cb=on_done)
-
-
-def _status_icon(status):
- if status == mblaze.Status.SEEN:
- return 'file'
-
- if status == mblaze.Status.FLAGGED:
- return 'flag'
-
- if status == mblaze.Status.UNSEEN:
- return 'mail'
-
- if status == mblaze.Status.TRASHED:
- return 'trash'
-
- if status == mblaze.Status.VIRTUAL:
- return 'eye-off'
-
- raise ValueError('unsupported status')
-
-
-if __name__ == '__main__':
- main()
diff --git a/mbgui/main.ui b/mbgui/main.ui
deleted file mode 100644
index a675f4c..0000000
--- a/mbgui/main.ui
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>windows</class>
- <widget class="QMainWindow" name="windows">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>800</width>
- <height>600</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>MainWindow</string>
- </property>
- <widget class="QWidget" name="centralwidget">
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QSplitter" name="vsplitter">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <widget class="QTreeView" name="directories">
- <property name="editTriggers">
- <set>QAbstractItemView::NoEditTriggers</set>
- </property>
- <attribute name="headerStretchLastSection">
- <bool>false</bool>
- </attribute>
- </widget>
- <widget class="QSplitter" name="hsplitter">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <widget class="QTreeView" name="messages">
- <property name="editTriggers">
- <set>QAbstractItemView::NoEditTriggers</set>
- </property>
- <attribute name="headerStretchLastSection">
- <bool>false</bool>
- </attribute>
- </widget>
- <widget class="QTextEdit" name="message">
- <property name="readOnly">
- <bool>true</bool>
- </property>
- </widget>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/mbgui/mblaze.py b/mbgui/mblaze.py
deleted file mode 100644
index f93f6a0..0000000
--- a/mbgui/mblaze.py
+++ /dev/null
@@ -1,145 +0,0 @@
-from pathlib import Path
-import enum
-import io
-import itertools
-import subprocess
-import typing
-
-
-class Status(enum.Enum):
- SEEN = ' '
- FLAGGED = '*'
- UNSEEN = '.'
- TRASHED = 'x'
- VIRTUAL = 'v'
-
-
-class Directory(typing.NamedTuple):
- path: typing.Optional[str]
- name: str
- children: typing.List['Directory']
-
-
-class Message(typing.NamedTuple):
- path: str
- status: Status
- subject: str
- sender: str
- date: str
- children: typing.List['Message']
-
-
-def get_directories(roots: typing.Iterable[str]) -> typing.List[Directory]:
- paths = _cmd(['mdirs', '-a', *roots])
- directories = (_get_directory(path, Path(path).parts) for path in paths)
- directories = _group_directories(directories)
- directories = [_reduce_directory(directory) for directory in directories]
- return directories
-
-
-def get_directory_total(dir_path: str) -> int:
- paths = _cmd(['mlist', dir_path])
- return sum(1 for i in paths)
-
-
-def get_directory_unseen(dir_path: str) -> int:
- paths = _cmd(['mlist', '-s', dir_path])
- return sum(1 for i in paths)
-
-
-def get_messages(dir_path: str) -> typing.List[Message]:
- paths = _cmd(['mlist', dir_path])
- paths = _cmd(['mthread', '-r'], paths)
- lines = _cmd(['mscan', '-f', r'%i\n%R\n%u\n%s\n%f\n%D'], paths)
- messages = _parse_messages(lines)
- return messages
-
-
-def get_message(msg_path: str) -> str:
- if not Path(msg_path).exists():
- return ''
- lines = _cmd(['mshow', msg_path])
- return '\n'.join(lines)
-
-
-def _cmd(args, stdin_lines=[]):
- p = subprocess.run(args,
- input='\n'.join(stdin_lines),
- stdout=subprocess.PIPE,
- encoding='utf-8',
- check=True)
- stdout = io.StringIO(p.stdout)
- while True:
- line = stdout.readline()
- if not line:
- break
- yield line[:-1]
-
-
-def _get_directory(path, path_parts):
- name, path_parts = path_parts[0], path_parts[1:]
- children = [_get_directory(path, path_parts)] if path_parts else []
- return Directory(path=(path if not path_parts else None),
- name=name,
- children=children)
-
-
-def _group_directories(directories):
- name_directories = {}
- for i in directories:
- name_directories.setdefault(i.name, []).append(i)
-
- for name, directories in name_directories.items():
- path = next((i.path for i in directories if i.path), None)
- children = list(_group_directories(
- itertools.chain.from_iterable(i.children for i in directories)))
- yield Directory(path=path,
- name=name,
- children=children)
-
-
-def _reduce_directory(directory):
- while not directory.path and len(directory.children) == 1:
- child = directory.children[0]
- directory = child._replace(name=str(Path(directory.name) / child.name))
-
- return directory._replace(children=[_reduce_directory(child)
- for child in directory.children])
-
-
-def _parse_messages(lines):
- messages = []
-
- while True:
- try:
- line = next(lines)
- except StopIteration:
- break
-
- if line.startswith('..'):
- depth = int(line[2:].split('.', 1)[0]) - 1
- else:
- depth = line.count(' ')
-
- path = next(lines)
-
- status = Status(next(lines))
- if not Path(path).exists():
- status = Status.VIRTUAL
-
- message = Message(path=path,
- status=status,
- subject=next(lines),
- sender=next(lines),
- date=next(lines),
- children=[])
-
- children = messages
- while depth:
- if children:
- children = children[-1].children
- depth -= 1
-
- children.append(message)
-
- return messages
diff --git a/run.sh b/run.sh
deleted file mode 100755
index a13fa5c..0000000
--- a/run.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-set -e
-
-PYTHON=${PYTHON:-python3}
-ROOT_DIR=$(dirname -- "$0")
-
-export PYTHONPATH=$ROOT_DIR
-
-exec $PYTHON -m mbgui "$@"
diff --git a/setup.py b/setup.py
deleted file mode 100644
index 6c5683e..0000000
--- a/setup.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from pathlib import Path
-from setuptools import setup
-
-
-readme = (Path(__file__).parent / 'README.rst').read_text()
-
-
-setup(
- name='mbgui',
- version='0.1.3',
- description='Maildir GUI based on mblaze',
- long_description=readme,
- long_description_content_type='text/x-rst',
- url='https://github.com/bozokopic/mbgui',
- packages=['mbgui'],
- install_requires=['PySide6'],
- package_data={'mbgui': ['icons/*.png',
- 'main.ui']},
- license='GPLv3',
- classifiers=[
- 'Programming Language :: Python :: 3',
- 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)'],
- entry_points={'console_scripts': ['mbgui = mbgui.main:main']})
diff --git a/src_c/main.c b/src_c/main.c
new file mode 100644
index 0000000..ec30a13
--- /dev/null
+++ b/src_c/main.c
@@ -0,0 +1,389 @@
+#include <gtk/gtk.h>
+#include "mblaze.h"
+
+
+typedef struct {
+ GtkTreeStore *directories_store;
+ GtkTreeSelection *directories_selection;
+ GtkTreeStore *messages_store;
+ GtkTreeSelection *messages_selection;
+ GtkTextBuffer *message_buffer;
+} app_data_t;
+
+typedef struct {
+ grefcount rc;
+ GtkTreeStore *store;
+ GtkTreeIter iter;
+} tree_store_iter_data_t;
+
+
+static gchar *get_message_status_icon(mbgui_message_status_t status) {
+ switch (status) {
+ case MBGUI_MSG_STATUS_SEEN:
+ return "mail-read";
+ case MBGUI_MSG_STATUS_FLAGGED:
+ return "starred";
+ case MBGUI_MSG_STATUS_UNSEEN:
+ return "mail-unread";
+ case MBGUI_MSG_STATUS_TRASHED:
+ return "user-trash";
+ case MBGUI_MSG_STATUS_VIRTUAL:
+ return NULL;
+ }
+ return NULL;
+}
+
+
+static gchar *get_selected_directory(app_data_t *data) {
+ GtkTreeIter iter;
+
+ if (!gtk_tree_selection_get_selected(
+ data->directories_selection,
+ (GtkTreeModel **)&(data->directories_store), &iter))
+ return NULL;
+
+ gchar *result;
+ gtk_tree_model_get(GTK_TREE_MODEL(data->directories_store), &iter, 0,
+ &result, -1);
+ return result;
+}
+
+
+static gchar *get_selected_message(app_data_t *data) {
+ GtkTreeIter iter;
+
+ if (!gtk_tree_selection_get_selected(
+ data->messages_selection, (GtkTreeModel **)&(data->messages_store),
+ &iter))
+ return NULL;
+
+ gchar *result;
+ gtk_tree_model_get(GTK_TREE_MODEL(data->messages_store), &iter, 0, &result,
+ -1);
+ return result;
+}
+
+
+static void on_get_message(gchar *path, gchar *message, gpointer user_data) {
+ app_data_t *data = user_data;
+
+ if (!message || !message[0])
+ return;
+
+ gchar *selected_message = get_selected_message(data);
+ if (!selected_message)
+ return;
+
+ int not_selected = g_strcmp0(path, selected_message);
+ g_free(selected_message);
+ if (not_selected)
+ return;
+
+ gtk_text_buffer_set_text(data->message_buffer, message, -1);
+}
+
+
+static void on_messages_selection_changed(GtkTreeSelection *self,
+ gpointer user_data) {
+ app_data_t *data = user_data;
+
+ gtk_text_buffer_set_text(data->message_buffer, "", 0);
+
+ gchar *message = get_selected_message(data);
+ if (!message)
+ return;
+
+ // TODO chech virtual
+
+ mbgui_get_message(message, on_get_message, data);
+ g_free(message);
+}
+
+
+static void add_message(GtkTreeStore *store, mbgui_message_t *message,
+ GtkTreeIter *parent) {
+ GtkTreeIter iter;
+ gtk_tree_store_append(store, &iter, parent);
+ gtk_tree_store_set(store, &iter, 0, message->path->str, 1,
+ get_message_status_icon(message->status), 2,
+ message->subject->str, 3, message->sender->str, 4,
+ message->date->str, -1);
+
+ for (mbgui_message_t *child = message->children; child; child = child->next)
+ add_message(store, child, &iter);
+}
+
+
+static void on_get_messages(gchar *directory, mbgui_message_t *messages,
+ gpointer user_data) {
+ app_data_t *data = user_data;
+
+ gchar *selected_directory = get_selected_directory(data);
+ if (!selected_directory)
+ return;
+
+ int not_selected = g_strcmp0(directory, selected_directory);
+ g_free(selected_directory);
+ if (not_selected)
+ return;
+
+ for (mbgui_message_t *message = messages; message; message = message->next)
+ add_message(data->messages_store, message, NULL);
+}
+
+
+static void on_directories_selection_changed(GtkTreeSelection *self,
+ gpointer user_data) {
+ app_data_t *data = user_data;
+
+ gtk_tree_store_clear(data->messages_store);
+
+ gchar *directory = get_selected_directory(data);
+ if (!directory)
+ return;
+
+ mbgui_get_messages(directory, on_get_messages, data);
+ g_free(directory);
+}
+
+
+static GtkWidget *create_directories(app_data_t *data) {
+ data->directories_store =
+ gtk_tree_store_new(5, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_STRING, G_TYPE_STRING);
+
+ GtkCellRenderer *icon_renderer = gtk_cell_renderer_pixbuf_new();
+ g_object_set(icon_renderer, "mode", GTK_CELL_RENDERER_MODE_INERT, NULL);
+
+ GtkCellRenderer *left_renderer = gtk_cell_renderer_text_new();
+ g_object_set(left_renderer, "xalign", 0.0, "xpad", 5, "mode",
+ GTK_CELL_RENDERER_MODE_INERT, NULL);
+
+ GtkCellRenderer *right_renderer = gtk_cell_renderer_text_new();
+ g_object_set(right_renderer, "xalign", 1.0, "mode",
+ GTK_CELL_RENDERER_MODE_INERT, NULL);
+
+ GtkWidget *scrolled_window = gtk_scrolled_window_new();
+
+ GtkWidget *directories =
+ gtk_tree_view_new_with_model(GTK_TREE_MODEL(data->directories_store));
+ gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scrolled_window),
+ directories);
+
+ GtkTreeViewColumn *col_directory = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(col_directory, "Directory");
+ gtk_tree_view_column_set_expand(col_directory, TRUE);
+ gtk_tree_view_column_pack_start(col_directory, icon_renderer, FALSE);
+ gtk_tree_view_column_set_attributes(col_directory, icon_renderer,
+ "icon-name", 1, NULL);
+ gtk_tree_view_column_pack_start(col_directory, left_renderer, TRUE);
+ gtk_tree_view_column_set_attributes(col_directory, left_renderer, "text", 2,
+ NULL);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(directories), col_directory);
+
+ GtkTreeViewColumn *col_unseen = gtk_tree_view_column_new_with_attributes(
+ "Unseen", right_renderer, "text", 3, NULL);
+ gtk_tree_view_column_set_sizing(col_unseen, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(directories), col_unseen);
+
+ GtkTreeViewColumn *col_total = gtk_tree_view_column_new_with_attributes(
+ "Total", right_renderer, "text", 4, NULL);
+ gtk_tree_view_column_set_sizing(col_total, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(directories), col_total);
+
+ data->directories_selection =
+ gtk_tree_view_get_selection(GTK_TREE_VIEW(directories));
+ gtk_tree_selection_set_mode(data->directories_selection,
+ GTK_SELECTION_SINGLE);
+ g_signal_connect(data->directories_selection, "changed",
+ G_CALLBACK(on_directories_selection_changed), data);
+
+ return scrolled_window;
+}
+
+
+static GtkWidget *create_messages(app_data_t *data) {
+ data->messages_store =
+ gtk_tree_store_new(5, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_STRING, G_TYPE_STRING);
+
+ GtkCellRenderer *icon_renderer = gtk_cell_renderer_pixbuf_new();
+ g_object_set(icon_renderer, "mode", GTK_CELL_RENDERER_MODE_INERT, NULL);
+
+ GtkCellRenderer *left_renderer = gtk_cell_renderer_text_new();
+ g_object_set(left_renderer, "xalign", 0.0, "xpad", 5, "mode",
+ GTK_CELL_RENDERER_MODE_INERT, NULL);
+
+ GtkWidget *scrolled_window = gtk_scrolled_window_new();
+
+ GtkWidget *messages =
+ gtk_tree_view_new_with_model(GTK_TREE_MODEL(data->messages_store));
+ gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scrolled_window),
+ messages);
+
+ GtkTreeViewColumn *col_subject = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(col_subject, "Subject");
+ gtk_tree_view_column_set_expand(col_subject, TRUE);
+ gtk_tree_view_column_pack_start(col_subject, icon_renderer, FALSE);
+ gtk_tree_view_column_set_attributes(col_subject, icon_renderer, "icon-name",
+ 1, NULL);
+ gtk_tree_view_column_pack_start(col_subject, left_renderer, TRUE);
+ gtk_tree_view_column_set_attributes(col_subject, left_renderer, "text", 2,
+ NULL);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(messages), col_subject);
+
+ GtkTreeViewColumn *col_sender = gtk_tree_view_column_new_with_attributes(
+ "Sender", left_renderer, "text", 3, NULL);
+ gtk_tree_view_column_set_sizing(col_sender, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(messages), col_sender);
+
+ GtkTreeViewColumn *col_date = gtk_tree_view_column_new_with_attributes(
+ "Date", left_renderer, "text", 4, NULL);
+ gtk_tree_view_column_set_sizing(col_date, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(messages), col_date);
+
+ data->messages_selection =
+ gtk_tree_view_get_selection(GTK_TREE_VIEW(messages));
+ gtk_tree_selection_set_mode(data->messages_selection, GTK_SELECTION_SINGLE);
+ g_signal_connect(data->messages_selection, "changed",
+ G_CALLBACK(on_messages_selection_changed), data);
+
+ return scrolled_window;
+}
+
+
+static GtkWidget *create_message(app_data_t *data) {
+ data->message_buffer = gtk_text_buffer_new(NULL);
+
+ GtkWidget *scrolled_window = gtk_scrolled_window_new();
+
+ GtkWidget *message = gtk_text_view_new_with_buffer(data->message_buffer);
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(message), FALSE);
+ gtk_text_view_set_monospace(GTK_TEXT_VIEW(message), TRUE);
+ gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scrolled_window),
+ message);
+
+ return scrolled_window;
+}
+
+
+static GtkWidget *create_window(GtkApplication *app, app_data_t *data) {
+ GtkWidget *window = gtk_application_window_new(app);
+ gtk_window_set_title(GTK_WINDOW(window), "mbgui");
+ gtk_window_set_default_size(GTK_WINDOW(window), 600, 800);
+
+ GtkWidget *hpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
+ gtk_paned_set_position(GTK_PANED(hpaned), 400);
+ gtk_window_set_child(GTK_WINDOW(window), hpaned);
+
+ GtkWidget *directories = create_directories(data);
+ gtk_paned_set_start_child(GTK_PANED(hpaned), directories);
+ gtk_paned_set_resize_start_child(GTK_PANED(hpaned), TRUE);
+
+ GtkWidget *vpaned = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
+ gtk_paned_set_position(GTK_PANED(vpaned), 400);
+ gtk_paned_set_end_child(GTK_PANED(hpaned), vpaned);
+ gtk_paned_set_resize_end_child(GTK_PANED(hpaned), TRUE);
+
+ GtkWidget *messages = create_messages(data);
+ gtk_paned_set_start_child(GTK_PANED(vpaned), messages);
+ gtk_paned_set_resize_start_child(GTK_PANED(vpaned), TRUE);
+
+ GtkWidget *message = create_message(data);
+ gtk_paned_set_end_child(GTK_PANED(vpaned), message);
+ gtk_paned_set_resize_end_child(GTK_PANED(vpaned), TRUE);
+
+ return window;
+}
+
+
+static void on_get_directory_unseen(gchar *directory, gsize unseen,
+ gpointer user_data) {
+ tree_store_iter_data_t *data = user_data;
+
+ GString *unseen_str = g_string_sized_new(8);
+ g_string_printf(unseen_str, "%lu", unseen);
+
+ gtk_tree_store_set(data->store, &(data->iter), 3, unseen_str->str, -1);
+
+ g_string_free(unseen_str, TRUE);
+ if (g_ref_count_dec((grefcount *)data))
+ g_free(data);
+}
+
+
+static void on_get_directory_total(gchar *directory, gsize total,
+ gpointer user_data) {
+ tree_store_iter_data_t *data = user_data;
+
+ GString *total_str = g_string_sized_new(8);
+ g_string_printf(total_str, "%lu", total);
+
+ gtk_tree_store_set(data->store, &(data->iter), 4, total_str->str, -1);
+
+ g_string_free(total_str, TRUE);
+ if (g_ref_count_dec((grefcount *)data))
+ g_free(data);
+}
+
+
+static void add_directory(GtkTreeStore *store, mbgui_directory_t *directory,
+ GtkTreeIter *parent) {
+ GtkTreeIter iter;
+ gtk_tree_store_append(store, &iter, parent);
+ gtk_tree_store_set(store, &iter, 0,
+ (directory->path ? directory->path->str : NULL), 1,
+ (directory->path ? "folder-documents" : "folder"), 2,
+ directory->name->str, -1);
+
+ for (mbgui_directory_t *child = directory->children; child;
+ child = child->next)
+ add_directory(store, child, &iter);
+
+ if (!directory->path)
+ return;
+
+ tree_store_iter_data_t *data = g_malloc(sizeof(tree_store_iter_data_t));
+ data->store = store;
+ data->iter = iter;
+
+ g_ref_count_init((grefcount *)data);
+ mbgui_get_directory_unseen(directory->path->str, on_get_directory_unseen,
+ data);
+
+ g_ref_count_inc((grefcount *)data);
+ mbgui_get_directory_total(directory->path->str, on_get_directory_total,
+ data);
+}
+
+
+static void on_get_directories(mbgui_directory_t *directories,
+ gpointer user_data) {
+ app_data_t *data = user_data;
+
+ for (mbgui_directory_t *directory = directories; directory;
+ directory = directory->next)
+ add_directory(data->directories_store, directory, NULL);
+}
+
+
+static void on_command_line(GtkApplication *app,
+ GApplicationCommandLine *command_line,
+ gpointer user_data) {
+ app_data_t *data = g_malloc(sizeof(app_data_t));
+ GtkWidget *window = create_window(app, data);
+ gtk_window_present(GTK_WINDOW(window));
+
+ gchar **argv = g_application_command_line_get_arguments(command_line, NULL);
+ mbgui_get_directories(argv, on_get_directories, data);
+ g_strfreev(argv);
+}
+
+
+int main(int argc, char **argv) {
+ GtkApplication *app =
+ gtk_application_new(NULL, G_APPLICATION_HANDLES_COMMAND_LINE);
+ g_signal_connect(app, "command-line", G_CALLBACK(on_command_line), NULL);
+
+ return g_application_run(G_APPLICATION(app), argc, argv);
+}
diff --git a/src_c/mblaze.c b/src_c/mblaze.c
new file mode 100644
index 0000000..f6ee2ce
--- /dev/null
+++ b/src_c/mblaze.c
@@ -0,0 +1,511 @@
+#include <glib/gstdio.h>
+#include <gio/gio.h>
+#include <gio/gunixinputstream.h>
+#include "mblaze.h"
+
+
+typedef struct {
+ mbgui_get_directories_cb_t cb;
+ gpointer user_data;
+ mbgui_directory_t *directories;
+ GSubprocess *process;
+ GDataInputStream *stream;
+} get_directories_data_t;
+
+typedef struct {
+ GString *directory;
+ mbgui_get_directory_total_cb_t cb;
+ gpointer user_data;
+ gsize total;
+ GSubprocess *process;
+ GDataInputStream *stream;
+} get_directory_total_data_t;
+
+typedef struct {
+ GString *directory;
+ mbgui_get_directory_unseen_cb_t cb;
+ gpointer user_data;
+ gsize unseen;
+ GSubprocess *process;
+ GDataInputStream *stream;
+} get_directory_unseen_data_t;
+
+typedef struct {
+ GString *directory;
+ mbgui_get_messages_cb_t cb;
+ gpointer user_data;
+ mbgui_message_t *messages;
+ gchar *line_buff[6];
+ gsize line_buff_count;
+ gint mlist_stdout_fd;
+ gint mthread_stdout_fd;
+ gint mscan_stdout_fd;
+ GInputStream *mscan_stdout;
+ GDataInputStream *stream;
+} get_messages_data_t;
+
+typedef struct {
+ GString *path;
+ mbgui_get_message_cb_t cb;
+ gpointer user_data;
+ gchar buff[1024];
+ GString *message;
+ GSubprocess *process;
+} get_message_data_t;
+
+
+static void free_directories(mbgui_directory_t *directories) {
+ if (!directories)
+ return;
+ if (directories->path)
+ g_string_free(directories->path, TRUE);
+ if (directories->name)
+ g_string_free(directories->name, TRUE);
+ free_directories(directories->children);
+ free_directories(directories->next);
+ g_free(directories);
+}
+
+
+static void free_messages(mbgui_message_t *messages) {
+ if (!messages)
+ return;
+ if (messages->path)
+ g_string_free(messages->path, TRUE);
+ if (messages->subject)
+ g_string_free(messages->subject, TRUE);
+ if (messages->sender)
+ g_string_free(messages->sender, TRUE);
+ if (messages->date)
+ g_string_free(messages->date, TRUE);
+ free_messages(messages->children);
+ free_messages(messages->next);
+ g_free(messages);
+}
+
+
+static void free_get_directories_data(get_directories_data_t *data) {
+ free_directories(data->directories);
+ g_object_unref(data->stream);
+ g_object_unref(data->process);
+ g_free(data);
+}
+
+
+static void free_get_directory_total_data(get_directory_total_data_t *data) {
+ g_string_free(data->directory, TRUE);
+ g_object_unref(data->stream);
+ g_object_unref(data->process);
+ g_free(data);
+}
+
+
+static void free_get_directory_unseen_data(get_directory_unseen_data_t *data) {
+ g_string_free(data->directory, TRUE);
+ g_object_unref(data->stream);
+ g_object_unref(data->process);
+ g_free(data);
+}
+
+
+static void free_get_messages_data(get_messages_data_t *data) {
+ g_string_free(data->directory, TRUE);
+ free_messages(data->messages);
+ for (gsize i = 0; i < data->line_buff_count; ++i)
+ g_free(data->line_buff[i]);
+ if (data->stream)
+ g_object_unref(data->stream);
+ if (data->mscan_stdout)
+ g_object_unref(data->mscan_stdout);
+ if (data->mscan_stdout_fd >= 0)
+ g_close(data->mscan_stdout_fd, NULL);
+ if (data->mthread_stdout_fd >= 0)
+ g_close(data->mthread_stdout_fd, NULL);
+ if (data->mlist_stdout_fd >= 0)
+ g_close(data->mlist_stdout_fd, NULL);
+ free(data);
+}
+
+
+static void free_get_message_data(get_message_data_t *data) {
+ g_string_free(data->path, TRUE);
+ g_string_free(data->message, TRUE);
+ g_object_unref(data->process);
+ g_free(data);
+}
+
+
+static void reduce_directory(mbgui_directory_t *directory) {
+ for (mbgui_directory_t *child = directory->children;
+ child && !child->next && !directory->path;
+ child = directory->children) {
+ g_string_append_printf(directory->name, "/%s", child->name->str);
+ directory->path = child->path;
+ child->path = NULL;
+ directory->children = child->children;
+ child->children = NULL;
+ free_directories(child);
+ }
+
+ for (mbgui_directory_t *child = directory->children; child;
+ child = child->next)
+ reduce_directory(child);
+}
+
+
+static mbgui_directory_t *reverse_directories(mbgui_directory_t *directories) {
+ mbgui_directory_t *reversed = NULL;
+ while (directories) {
+ mbgui_directory_t *next = directories->next;
+ directories->children = reverse_directories(directories->children);
+ directories->next = reversed;
+ reversed = directories;
+ directories = next;
+ }
+ return reversed;
+}
+
+
+static mbgui_directory_t *add_directory(mbgui_directory_t *directories,
+ gchar *path, gchar *name) {
+ if (*name != '/')
+ return directories;
+
+ gsize index = 1;
+ while (name[index] && name[index] != '/')
+ ++index;
+
+ if (name[index]) {
+ GString *subname = g_string_new_len(name + 1, index - 1);
+
+ mbgui_directory_t *directory = directories;
+ while (directory && !g_string_equal(directory->name, subname))
+ directory = directory->next;
+
+ if (directory) {
+ g_string_free(subname, TRUE);
+
+ } else {
+ directory = g_malloc(sizeof(mbgui_directory_t));
+ directory->path = NULL;
+ directory->name = subname;
+ directory->children = NULL;
+ directory->next = directories;
+ }
+
+ directory->children =
+ add_directory(directory->children, path, name + index);
+ return directory;
+ }
+
+ mbgui_directory_t *directory = g_malloc(sizeof(mbgui_directory_t));
+ directory->path = g_string_new(path);
+ directory->name = g_string_new(name + 1);
+ directory->children = NULL;
+ directory->next = directories;
+ return directory;
+}
+
+
+static gsize get_message_depth(gchar *line) {
+ gsize depth = 0;
+
+ if (line[0] == '.' && line[1] == '.') {
+ for (gchar *i = line + 2; g_ascii_isdigit(*i); ++i)
+ depth = depth * 10 + (*i - '0');
+
+ } else {
+ for (gchar *i = line; *i; ++i) {
+ if (*i == ' ')
+ depth += 1;
+ }
+ }
+
+ return depth;
+}
+
+
+static mbgui_message_t *reverse_messages(mbgui_message_t *messages) {
+ mbgui_message_t *reversed = NULL;
+ while (messages) {
+ mbgui_message_t *next = messages->next;
+ messages->children = reverse_messages(messages->children);
+ messages->next = reversed;
+ reversed = messages;
+ messages = next;
+ }
+ return reversed;
+}
+
+
+static mbgui_message_t *add_message(mbgui_message_t *messages, gsize depth,
+ gchar **lines) {
+ if (depth && messages) {
+ messages->children = add_message(messages->children, depth - 1, lines);
+ return messages;
+ }
+
+ mbgui_message_t *message = g_malloc(sizeof(mbgui_message_t));
+ message->path = g_string_new(lines[0]);
+ message->status = lines[1][0];
+ message->subject = g_string_new(lines[2]);
+ message->sender = g_string_new(lines[3]);
+ message->date = g_string_new(lines[4]);
+ message->children = NULL;
+ message->next = messages;
+
+ return message;
+}
+
+
+static void on_get_directories_read_line(GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data) {
+ get_directories_data_t *data = user_data;
+
+ gchar *line =
+ g_data_input_stream_read_line_finish(data->stream, result, NULL, NULL);
+
+ if (!line) {
+ data->directories = reverse_directories(data->directories);
+ for (mbgui_directory_t *directory = data->directories; directory;
+ directory = directory->next) {
+ g_string_prepend_c(directory->name, '/');
+ reduce_directory(directory);
+ }
+ data->cb(data->directories, data->user_data);
+ free_get_directories_data(data);
+ return;
+ }
+
+ data->directories = add_directory(data->directories, line, line);
+ g_free(line);
+
+ g_data_input_stream_read_line_async(data->stream, 0, NULL,
+ on_get_directories_read_line, data);
+}
+
+
+static void on_get_directory_total_read_line(GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data) {
+ get_directory_total_data_t *data = user_data;
+
+ gchar *line =
+ g_data_input_stream_read_line_finish(data->stream, result, NULL, NULL);
+
+ if (!line) {
+ data->cb(data->directory->str, data->total, data->user_data);
+ free_get_directory_total_data(data);
+ return;
+ }
+
+ data->total += 1;
+ g_free(line);
+
+ g_data_input_stream_read_line_async(data->stream, 0, NULL,
+ on_get_directory_total_read_line, data);
+}
+
+
+static void on_get_directory_unseen_read_line(GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data) {
+ get_directory_unseen_data_t *data = user_data;
+
+ gchar *line =
+ g_data_input_stream_read_line_finish(data->stream, result, NULL, NULL);
+
+ if (!line) {
+ data->cb(data->directory->str, data->unseen, data->user_data);
+ free_get_directory_unseen_data(data);
+ return;
+ }
+
+ data->unseen += 1;
+ g_free(line);
+
+ g_data_input_stream_read_line_async(
+ data->stream, 0, NULL, on_get_directory_unseen_read_line, data);
+}
+
+
+static void on_get_messages_read_line(GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data) {
+ get_messages_data_t *data = user_data;
+
+ gchar *line =
+ g_data_input_stream_read_line_finish(data->stream, result, NULL, NULL);
+
+ if (!line) {
+ data->messages = reverse_messages(data->messages);
+ data->cb(data->directory->str, data->messages, data->user_data);
+ free_get_messages_data(data);
+ return;
+ }
+
+ data->line_buff[data->line_buff_count++] = line;
+
+ if (data->line_buff_count >= 6) {
+ gsize depth = get_message_depth(data->line_buff[0]);
+ data->messages =
+ add_message(data->messages, depth, data->line_buff + 1);
+
+ for (gsize i = 0; i < data->line_buff_count; ++i)
+ g_free(data->line_buff[i]);
+ data->line_buff_count = 0;
+ }
+
+ g_data_input_stream_read_line_async(data->stream, 0, NULL,
+ on_get_messages_read_line, data);
+}
+
+
+static void on_get_message_read_all(GObject *source_object,
+ GAsyncResult *result, gpointer user_data) {
+ get_message_data_t *data = user_data;
+ GInputStream *stream = g_subprocess_get_stdout_pipe(data->process);
+
+ gsize count = 0;
+ g_input_stream_read_all_finish(stream, result, &count, NULL);
+ g_string_append_len(data->message, data->buff, count);
+
+ if (count < sizeof(data->buff)) {
+ data->cb(data->path->str, data->message->str, data->user_data);
+ free_get_message_data(data);
+ return;
+ }
+
+ g_input_stream_read_all_async(stream, data->buff, sizeof(data->buff), 0,
+ NULL, on_get_message_read_all, data);
+}
+
+
+void mbgui_get_directories(gchar **argv, mbgui_get_directories_cb_t cb,
+ gpointer user_data) {
+ GStrvBuilder *new_argv_builder = g_strv_builder_new();
+ g_strv_builder_add_many(new_argv_builder, "mdirs", "-a", NULL);
+ g_strv_builder_addv(new_argv_builder, (const gchar **)argv);
+
+ gchar **new_argv = g_strv_builder_end(new_argv_builder);
+ g_strv_builder_unref(new_argv_builder);
+
+ get_directories_data_t *data = g_malloc(sizeof(get_directories_data_t));
+ data->cb = cb;
+ data->user_data = user_data;
+ data->directories = NULL;
+ data->process = g_subprocess_newv((const gchar **)new_argv,
+ G_SUBPROCESS_FLAGS_STDOUT_PIPE, NULL);
+ data->stream =
+ g_data_input_stream_new(g_subprocess_get_stdout_pipe(data->process));
+
+ g_data_input_stream_read_line_async(data->stream, 0, NULL,
+ on_get_directories_read_line, data);
+
+ g_strfreev(new_argv);
+}
+
+
+void mbgui_get_directory_total(gchar *directory,
+ mbgui_get_directory_total_cb_t cb,
+ gpointer user_data) {
+ get_directory_total_data_t *data =
+ g_malloc(sizeof(get_directory_total_data_t));
+ data->directory = g_string_new(directory);
+ data->cb = cb;
+ data->user_data = user_data;
+ data->total = 0;
+ data->process = g_subprocess_new(G_SUBPROCESS_FLAGS_STDOUT_PIPE, NULL,
+ "mlist", directory, NULL);
+ data->stream =
+ g_data_input_stream_new(g_subprocess_get_stdout_pipe(data->process));
+
+ g_data_input_stream_read_line_async(data->stream, 0, NULL,
+ on_get_directory_total_read_line, data);
+}
+
+
+void mbgui_get_directory_unseen(gchar *directory,
+ mbgui_get_directory_unseen_cb_t cb,
+ gpointer user_data) {
+ get_directory_unseen_data_t *data =
+ g_malloc(sizeof(get_directory_unseen_data_t));
+ data->directory = g_string_new(directory);
+ data->cb = cb;
+ data->user_data = user_data;
+ data->unseen = 0;
+ data->process = g_subprocess_new(G_SUBPROCESS_FLAGS_STDOUT_PIPE, NULL,
+ "mlist", "-s", directory, NULL);
+ data->stream =
+ g_data_input_stream_new(g_subprocess_get_stdout_pipe(data->process));
+
+ g_data_input_stream_read_line_async(
+ data->stream, 0, NULL, on_get_directory_unseen_read_line, data);
+}
+
+
+void mbgui_get_messages(gchar *directory, mbgui_get_messages_cb_t cb,
+ gpointer user_data) {
+ get_messages_data_t *data = g_malloc(sizeof(get_messages_data_t));
+ data->directory = g_string_new(directory), data->cb = cb;
+ data->user_data = user_data;
+ data->messages = NULL;
+ data->line_buff_count = 0;
+ data->mlist_stdout_fd = -1;
+ data->mthread_stdout_fd = -1;
+ data->mscan_stdout_fd = -1;
+ data->mscan_stdout = NULL;
+ data->stream = NULL;
+
+ const gchar *mlist_argv[] = {"mlist", directory, NULL};
+ if (!g_spawn_async_with_pipes_and_fds(
+ NULL, mlist_argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, -1, -1, -1,
+ NULL, NULL, 0, NULL, NULL, &(data->mlist_stdout_fd), NULL, NULL)) {
+ g_printerr(">> mlist err");
+ free_get_messages_data(data);
+ return;
+ }
+
+ const gchar *mthread_argv[] = {"mthread", "-r", NULL};
+ if (!g_spawn_async_with_pipes_and_fds(
+ NULL, mthread_argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL,
+ data->mlist_stdout_fd, -1, -1, NULL, NULL, 0, NULL, NULL,
+ &(data->mthread_stdout_fd), NULL, NULL)) {
+ g_printerr(">> mthread err");
+ free_get_messages_data(data);
+ return;
+ }
+
+ const gchar *mscan_argv[] = {"mscan", "-f", "%i\n%R\n%u\n%s\n%f\n%D", NULL};
+ if (!g_spawn_async_with_pipes_and_fds(
+ NULL, mscan_argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL,
+ data->mthread_stdout_fd, -1, -1, NULL, NULL, 0, NULL, NULL,
+ &(data->mscan_stdout_fd), NULL, NULL)) {
+ g_printerr(">> mscan err");
+ free_get_messages_data(data);
+ return;
+ }
+
+ data->mscan_stdout = g_unix_input_stream_new(data->mscan_stdout_fd, FALSE);
+ data->stream = g_data_input_stream_new(data->mscan_stdout);
+
+ g_data_input_stream_read_line_async(data->stream, 0, NULL,
+ on_get_messages_read_line, data);
+}
+
+
+void mbgui_get_message(gchar *path, mbgui_get_message_cb_t cb,
+ gpointer user_data) {
+ get_message_data_t *data = g_malloc(sizeof(get_message_data_t));
+ data->path = g_string_new(path);
+ data->cb = cb;
+ data->user_data = user_data;
+ data->message = g_string_new("");
+ data->process = g_subprocess_new(G_SUBPROCESS_FLAGS_STDOUT_PIPE, NULL,
+ "mshow", path, NULL);
+
+ GInputStream *stream = g_subprocess_get_stdout_pipe(data->process);
+ g_input_stream_read_all_async(stream, data->buff, sizeof(data->buff), 0,
+ NULL, on_get_message_read_all, data);
+}
diff --git a/src_c/mblaze.h b/src_c/mblaze.h
new file mode 100644
index 0000000..e49abc5
--- /dev/null
+++ b/src_c/mblaze.h
@@ -0,0 +1,59 @@
+#ifndef MBGUI_MBLAZE_H
+#define MBGUI_MBLAZE_H
+
+#include <glib.h>
+
+
+typedef enum {
+ MBGUI_MSG_STATUS_SEEN = ' ',
+ MBGUI_MSG_STATUS_FLAGGED = '*',
+ MBGUI_MSG_STATUS_UNSEEN = '.',
+ MBGUI_MSG_STATUS_TRASHED = 'x',
+ MBGUI_MSG_STATUS_VIRTUAL = 'v'
+} mbgui_message_status_t;
+
+typedef struct mbgui_directory_t {
+ GString *path;
+ GString *name;
+ struct mbgui_directory_t *children;
+ struct mbgui_directory_t *next;
+} mbgui_directory_t;
+
+typedef struct mbgui_message_t {
+ GString *path;
+ mbgui_message_status_t status;
+ GString *subject;
+ GString *sender;
+ GString *date;
+ struct mbgui_message_t *children;
+ struct mbgui_message_t *next;
+} mbgui_message_t;
+
+
+typedef void (*mbgui_get_directories_cb_t)(mbgui_directory_t *directories,
+ gpointer user_data);
+typedef void (*mbgui_get_directory_total_cb_t)(gchar *directory, gsize total,
+ gpointer user_data);
+typedef void (*mbgui_get_directory_unseen_cb_t)(gchar *directory, gsize unseen,
+ gpointer user_data);
+typedef void (*mbgui_get_messages_cb_t)(gchar *directory,
+ mbgui_message_t *messages,
+ gpointer user_data);
+typedef void (*mbgui_get_message_cb_t)(gchar *path, gchar *message,
+ gpointer user_data);
+
+
+void mbgui_get_directories(gchar **argv, mbgui_get_directories_cb_t cb,
+ gpointer user_data);
+void mbgui_get_directory_total(gchar *directory,
+ mbgui_get_directory_total_cb_t cb,
+ gpointer user_data);
+void mbgui_get_directory_unseen(gchar *directory,
+ mbgui_get_directory_unseen_cb_t cb,
+ gpointer user_data);
+void mbgui_get_messages(gchar *directory, mbgui_get_messages_cb_t cb,
+ gpointer user_data);
+void mbgui_get_message(gchar *path, mbgui_get_message_cb_t cb,
+ gpointer user_data);
+
+#endif