From 2000623c67e59d2f56e89d835c253f84b367c4e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Sun, 22 Feb 2026 21:35:53 +0100 Subject: [PATCH] feat: implement Figlet, Pastel, and Unit tools with a unified layout - Add Figlet text converter with font selection and history - Add Pastel color palette generator and manipulation suite - Add comprehensive Units converter with category-based logic - Introduce AppShell with Sidebar and Header for navigation - Modernize theme system with CSS variables and new animations - Update project configuration and dependencies --- app/(app)/figlet/page.tsx | 13 + app/(app)/layout.tsx | 16 + .../pastel/accessibility/colorblind/page.tsx | 214 + .../pastel/accessibility/contrast/page.tsx | 172 + app/(app)/pastel/accessibility/page.tsx | 96 + .../pastel/accessibility/textcolor/page.tsx | 221 + app/(app)/pastel/batch/page.tsx | 193 + app/(app)/pastel/globals.css | 192 + app/(app)/pastel/layout.tsx | 11 + app/(app)/pastel/names/page.tsx | 106 + app/(app)/pastel/page.tsx | 218 + app/(app)/pastel/palettes/distinct/page.tsx | 147 + app/(app)/pastel/palettes/gradient/page.tsx | 188 + app/(app)/pastel/palettes/harmony/page.tsx | 141 + app/(app)/pastel/palettes/page.tsx | 68 + app/(app)/units/page.tsx | 13 + app/api/fonts/route.ts | 29 + app/globals.css | 150 +- app/layout.tsx | 3 +- components/AnimatedBackground.tsx | 14 +- components/Footer.tsx | 18 +- components/Hero.tsx | 19 +- components/Stats.tsx | 4 +- components/ToolCard.tsx | 34 +- components/ToolsGrid.tsx | 10 +- components/figlet/ComparisonMode.tsx | 124 + components/figlet/FigletConverter.tsx | 288 + components/figlet/FontPreview.tsx | 205 + components/figlet/FontSelector.tsx | 279 + components/figlet/HistoryPanel.tsx | 133 + components/figlet/TextInput.tsx | 28 + components/figlet/TextTemplates.tsx | 92 + components/layout/AppHeader.tsx | 82 + components/layout/AppShell.tsx | 28 + components/layout/AppSidebar.tsx | 230 + components/layout/SidebarProvider.tsx | 36 + components/pastel/color/ColorDisplay.tsx | 38 + components/pastel/color/ColorInfo.tsx | 92 + components/pastel/color/ColorPicker.tsx | 38 + components/pastel/color/ColorSwatch.tsx | 66 + components/pastel/color/PaletteGrid.tsx | 37 + components/pastel/layout/Footer.tsx | 203 + components/pastel/layout/Navbar.tsx | 77 + components/pastel/layout/ThemeToggle.tsx | 28 + components/pastel/providers/Providers.tsx | 29 + components/pastel/providers/ThemeProvider.tsx | 78 + components/pastel/tools/ExportMenu.tsx | 125 + components/pastel/tools/ManipulationPanel.tsx | 231 + components/providers/Providers.tsx | 32 + components/providers/ThemeProvider.tsx | 78 + components/ui/Badge.tsx | 35 + components/ui/Button.tsx | 45 + components/ui/Card.tsx | 50 + components/ui/CommandPalette.tsx | 231 + components/ui/EmptyState.tsx | 36 + components/ui/Input.tsx | 28 + components/ui/KeyboardShortcutsHelp.tsx | 102 + components/ui/Select.tsx | 39 + components/ui/Separator.tsx | 32 + components/ui/Skeleton.tsx | 14 + components/ui/Slider.tsx | 65 + components/ui/Toast.tsx | 90 + .../units/converter/ConversionHistory.tsx | 122 + components/units/converter/MainConverter.tsx | 345 + components/units/converter/SearchUnits.tsx | 201 + .../units/converter/VisualComparison.tsx | 314 + components/units/providers/ThemeProvider.tsx | 77 + components/units/ui/Footer.tsx | 103 + lib/figlet/constants/templates.ts | 38 + lib/figlet/figletService.ts | 80 + lib/figlet/fontLoader.ts | 61 + lib/figlet/hooks/useKeyboardShortcuts.ts | 34 + lib/pastel/api/client.ts | 248 + lib/pastel/api/queries.ts | 251 + lib/pastel/api/types.ts | 268 + lib/pastel/api/wasm-client.ts | 484 ++ lib/pastel/hooks/useKeyboard.ts | 106 + lib/pastel/index.ts | 5 + lib/pastel/stores/historyStore.ts | 68 + lib/pastel/utils/cn.ts | 6 + lib/pastel/utils/color.ts | 57 + lib/pastel/utils/export.ts | 83 + lib/storage/favorites.ts | 70 + lib/storage/history.ts | 53 + lib/units/index.ts | 4 + lib/units/storage.ts | 115 + lib/units/tempo.ts | 117 + lib/units/units.ts | 306 + lib/units/utils.ts | 106 + lib/utils/animations.ts | 38 + lib/utils/cn.ts | 6 + lib/utils/debounce.ts | 18 + lib/utils/index.ts | 4 + lib/utils/urlSharing.ts | 64 + package.json | 40 +- pnpm-lock.yaml | 2135 ++++--- pnpm-workspace.yaml | 3 + public/fonts/figlet-fonts/1Row.flf | 218 + public/fonts/figlet-fonts/3-D.flf | 823 +++ public/fonts/figlet-fonts/3D Diagonal.flf | 1670 +++++ public/fonts/figlet-fonts/3D-ASCII.flf | 1028 +++ public/fonts/figlet-fonts/3d.flf | 818 +++ public/fonts/figlet-fonts/3d_diagonal.flf | 1644 +++++ public/fonts/figlet-fonts/3x5.flf | 617 ++ public/fonts/figlet-fonts/4Max.flf | 411 ++ public/fonts/figlet-fonts/5 Line Oblique.flf | 617 ++ public/fonts/figlet-fonts/5lineoblique.flf | 717 +++ public/fonts/figlet-fonts/646-ca.flc | 157 + public/fonts/figlet-fonts/646-ca2.flc | 156 + public/fonts/figlet-fonts/646-cn.flc | 156 + public/fonts/figlet-fonts/646-cu.flc | 156 + public/fonts/figlet-fonts/646-de.flc | 156 + public/fonts/figlet-fonts/646-dk.flc | 155 + public/fonts/figlet-fonts/646-es.flc | 155 + public/fonts/figlet-fonts/646-es2.flc | 155 + public/fonts/figlet-fonts/646-fr.flc | 156 + public/fonts/figlet-fonts/646-gb.flc | 157 + public/fonts/figlet-fonts/646-hu.flc | 156 + public/fonts/figlet-fonts/646-irv.flc | 155 + public/fonts/figlet-fonts/646-it.flc | 155 + public/fonts/figlet-fonts/646-jp.flc | 156 + public/fonts/figlet-fonts/646-kr.flc | 152 + public/fonts/figlet-fonts/646-no.flc | 156 + public/fonts/figlet-fonts/646-no2.flc | 156 + public/fonts/figlet-fonts/646-pt.flc | 155 + public/fonts/figlet-fonts/646-pt2.flc | 155 + public/fonts/figlet-fonts/646-se.flc | 158 + public/fonts/figlet-fonts/646-se2.flc | 156 + public/fonts/figlet-fonts/646-yu.flc | 157 + public/fonts/figlet-fonts/8859-2.flc | 303 + public/fonts/figlet-fonts/8859-3.flc | 296 + public/fonts/figlet-fonts/8859-4.flc | 303 + public/fonts/figlet-fonts/8859-5.flc | 303 + public/fonts/figlet-fonts/8859-7.flc | 308 + public/fonts/figlet-fonts/8859-8.flc | 270 + public/fonts/figlet-fonts/8859-9.flc | 307 + public/fonts/figlet-fonts/AMC 3 Line.flf | 427 ++ public/fonts/figlet-fonts/AMC 3 Liv1.flf | 427 ++ public/fonts/figlet-fonts/AMC AAA01.flf | 1549 +++++ public/fonts/figlet-fonts/AMC Neko.flf | 1043 ++++ public/fonts/figlet-fonts/AMC Razor.flf | 733 +++ public/fonts/figlet-fonts/AMC Razor2.flf | 937 +++ public/fonts/figlet-fonts/AMC Slash.flf | 1039 ++++ public/fonts/figlet-fonts/AMC Slider.flf | 631 ++ public/fonts/figlet-fonts/AMC Thin.flf | 733 +++ public/fonts/figlet-fonts/AMC Tubes.flf | 835 +++ public/fonts/figlet-fonts/AMC Untitled.flf | 835 +++ public/fonts/figlet-fonts/ANSI Regular.flf | 722 +++ public/fonts/figlet-fonts/ANSI Shadow.flf | 722 +++ public/fonts/figlet-fonts/ASCII New Roman.flf | 421 ++ public/fonts/figlet-fonts/Acrobatic.flf | 1240 ++++ public/fonts/figlet-fonts/Alligator.flf | 718 +++ public/fonts/figlet-fonts/Alligator2.flf | 719 +++ public/fonts/figlet-fonts/Alpha.flf | 2272 +++++++ public/fonts/figlet-fonts/Alphabet.flf | 732 +++ public/fonts/figlet-fonts/Arrows.flf | 825 +++ public/fonts/figlet-fonts/Avatar.flf | 629 ++ public/fonts/figlet-fonts/B1FF.flf | 375 ++ public/fonts/figlet-fonts/B1FF.php | 375 ++ public/fonts/figlet-fonts/Banner.flf | 2494 ++++++++ public/fonts/figlet-fonts/Banner3-D.flf | 820 +++ public/fonts/figlet-fonts/Banner3.flf | 718 +++ public/fonts/figlet-fonts/Banner4.flf | 718 +++ public/fonts/figlet-fonts/Barbwire.flf | 825 +++ public/fonts/figlet-fonts/Basic.flf | 825 +++ public/fonts/figlet-fonts/Bear.flf | 930 +++ public/fonts/figlet-fonts/Bell.flf | 636 ++ public/fonts/figlet-fonts/Benjamin.flf | 143 + public/fonts/figlet-fonts/Big Chief.flf | 819 +++ public/fonts/figlet-fonts/Big Money-ne.flf | 1148 ++++ public/fonts/figlet-fonts/Big Money-nw.flf | 1148 ++++ public/fonts/figlet-fonts/Big Money-se.flf | 1250 ++++ public/fonts/figlet-fonts/Big Money-sw.flf | 1250 ++++ public/fonts/figlet-fonts/Big.flf | 2204 +++++++ public/fonts/figlet-fonts/Bigfig.flf | 334 + public/fonts/figlet-fonts/Binary.flf | 372 ++ public/fonts/figlet-fonts/Block.flf | 1691 +++++ public/fonts/figlet-fonts/Blocks.flf | 1134 ++++ public/fonts/figlet-fonts/Bloody.flf | 1024 +++ public/fonts/figlet-fonts/Bolger.flf | 722 +++ public/fonts/figlet-fonts/Braced.flf | 527 ++ public/fonts/figlet-fonts/Bright.flf | 616 ++ public/fonts/figlet-fonts/Broadway KB.flf | 324 + public/fonts/figlet-fonts/Broadway.flf | 1152 ++++ public/fonts/figlet-fonts/Bubble.flf | 1630 +++++ public/fonts/figlet-fonts/Bulbhead.flf | 434 ++ public/fonts/figlet-fonts/Caligraphy.flf | 2157 +++++++ public/fonts/figlet-fonts/Caligraphy2.flf | 2113 +++++++ public/fonts/figlet-fonts/Calvin S.flf | 314 + public/fonts/figlet-fonts/Cards.flf | 627 ++ public/fonts/figlet-fonts/Catwalk.flf | 824 +++ public/fonts/figlet-fonts/Chiseled.flf | 935 +++ public/fonts/figlet-fonts/Chunky.flf | 517 ++ public/fonts/figlet-fonts/Coinstak.flf | 824 +++ public/fonts/figlet-fonts/Cola.flf | 624 ++ public/fonts/figlet-fonts/Colossal.flf | 1140 ++++ public/fonts/figlet-fonts/Computer.flf | 717 +++ public/fonts/figlet-fonts/Contessa.flf | 411 ++ public/fonts/figlet-fonts/Contrast.flf | 615 ++ public/fonts/figlet-fonts/Cosmike.flf | 616 ++ public/fonts/figlet-fonts/Crawford.flf | 842 +++ public/fonts/figlet-fonts/Crawford2.flf | 842 +++ public/fonts/figlet-fonts/Crazy.flf | 1343 ++++ public/fonts/figlet-fonts/Cricket.flf | 842 +++ public/fonts/figlet-fonts/Cursive.flf | 624 ++ public/fonts/figlet-fonts/Cyberlarge.flf | 429 ++ public/fonts/figlet-fonts/Cybermedium.flf | 429 ++ public/fonts/figlet-fonts/Cybersmall.flf | 225 + public/fonts/figlet-fonts/Cygnet.flf | 558 ++ public/fonts/figlet-fonts/DANC4.flf | 429 ++ public/fonts/figlet-fonts/DOS Rebel.flf | 1137 ++++ public/fonts/figlet-fonts/DWhistled.flf | 1033 +++ public/fonts/figlet-fonts/Dancing Font.flf | 731 +++ public/fonts/figlet-fonts/Decimal.flf | 373 ++ public/fonts/figlet-fonts/Def Leppard.flf | 5537 +++++++++++++++++ .../figlet-fonts/Delta Corps Priest 1.flf | 922 +++ public/fonts/figlet-fonts/Diamond.flf | 824 +++ public/fonts/figlet-fonts/Diet Cola.flf | 624 ++ public/fonts/figlet-fonts/Digital.flf | 1286 ++++ public/fonts/figlet-fonts/Doh.flf | 2554 ++++++++ public/fonts/figlet-fonts/Doom.flf | 833 +++ public/fonts/figlet-fonts/Dot Matrix.flf | 1024 +++ public/fonts/figlet-fonts/Double Shorts.flf | 341 + public/fonts/figlet-fonts/Double.flf | 532 ++ public/fonts/figlet-fonts/Dr Pepper.flf | 569 ++ public/fonts/figlet-fonts/Efti Chess.flf | 519 ++ public/fonts/figlet-fonts/Efti Font.flf | 885 +++ public/fonts/figlet-fonts/Efti Italic.flf | 885 +++ public/fonts/figlet-fonts/Efti Piti.flf | 547 ++ public/fonts/figlet-fonts/Efti Robot.flf | 625 ++ public/fonts/figlet-fonts/Efti Wall.flf | 417 ++ public/fonts/figlet-fonts/Efti Water.flf | 417 ++ public/fonts/figlet-fonts/Electronic.flf | 1232 ++++ public/fonts/figlet-fonts/Elite.flf | 518 ++ public/fonts/figlet-fonts/Epic.flf | 935 +++ public/fonts/figlet-fonts/Examples.md | 4448 +++++++++++++ public/fonts/figlet-fonts/Fender.flf | 727 +++ public/fonts/figlet-fonts/Filter.flf | 547 ++ public/fonts/figlet-fonts/Fire Font-k.flf | 947 +++ public/fonts/figlet-fonts/Fire Font-s.flf | 947 +++ public/fonts/figlet-fonts/Flipped.flf | 420 ++ public/fonts/figlet-fonts/Flower Power.flf | 1043 ++++ public/fonts/figlet-fonts/Four Tops.flf | 423 ++ public/fonts/figlet-fonts/Fraktur.flf | 1533 +++++ public/fonts/figlet-fonts/Fun Face.flf | 731 +++ public/fonts/figlet-fonts/Fun Faces.flf | 731 +++ public/fonts/figlet-fonts/Fuzzy.flf | 722 +++ public/fonts/figlet-fonts/Georgi16.flf | 3744 +++++++++++ public/fonts/figlet-fonts/Georgia11.flf | 4073 ++++++++++++ public/fonts/figlet-fonts/Ghost.flf | 949 +++ public/fonts/figlet-fonts/Ghoulish.flf | 731 +++ public/fonts/figlet-fonts/Glenyn.flf | 441 ++ public/fonts/figlet-fonts/Goofy.flf | 635 ++ public/fonts/figlet-fonts/Gothic.flf | 935 +++ public/fonts/figlet-fonts/Graceful.flf | 753 +++ public/fonts/figlet-fonts/Gradient.flf | 922 +++ public/fonts/figlet-fonts/Graffiti.flf | 630 ++ public/fonts/figlet-fonts/Greek.flf | 950 +++ public/fonts/figlet-fonts/Heart Left.flf | 424 ++ public/fonts/figlet-fonts/Heart Right.flf | 423 ++ public/fonts/figlet-fonts/Henry 3D.flf | 829 +++ public/fonts/figlet-fonts/Hex.flf | 373 ++ public/fonts/figlet-fonts/Hieroglyphs.flf | 457 ++ public/fonts/figlet-fonts/Hollywood.flf | 1028 +++ public/fonts/figlet-fonts/Horizontal Left.flf | 624 ++ .../fonts/figlet-fonts/Horizontal Right.flf | 624 ++ public/fonts/figlet-fonts/ICL-1900.flf | 1345 ++++ public/fonts/figlet-fonts/Impossible.flf | 1236 ++++ public/fonts/figlet-fonts/Invita.flf | 615 ++ public/fonts/figlet-fonts/Isometric1.flf | 1146 ++++ public/fonts/figlet-fonts/Isometric2.flf | 1146 ++++ public/fonts/figlet-fonts/Isometric3.flf | 1146 ++++ public/fonts/figlet-fonts/Isometric4.flf | 1146 ++++ public/fonts/figlet-fonts/Italic.flf | 412 ++ public/fonts/figlet-fonts/Ivrit.flf | 900 +++ .../fonts/figlet-fonts/JS Block Letters.flf | 310 + .../fonts/figlet-fonts/JS Bracket Letters.flf | 412 ++ .../fonts/figlet-fonts/JS Capital Curves.flf | 420 ++ public/fonts/figlet-fonts/JS Cursive.flf | 616 ++ .../fonts/figlet-fonts/JS Stick Letters.flf | 412 ++ public/fonts/figlet-fonts/Jacky.flf | 874 +++ public/fonts/figlet-fonts/Jazmine.flf | 1030 +++ public/fonts/figlet-fonts/Jerusalem.flf | 746 +++ public/fonts/figlet-fonts/Katakana.flf | 823 +++ public/fonts/figlet-fonts/Kban.flf | 718 +++ public/fonts/figlet-fonts/Keyboard.flf | 932 +++ public/fonts/figlet-fonts/Knob.flf | 420 ++ public/fonts/figlet-fonts/Konto Slant.flf | 230 + public/fonts/figlet-fonts/Konto.flf | 229 + public/fonts/figlet-fonts/LCD.flf | 615 ++ public/fonts/figlet-fonts/Larry 3D 2.flf | 924 +++ public/fonts/figlet-fonts/Larry 3D.flf | 924 +++ public/fonts/figlet-fonts/Lean.flf | 1691 +++++ public/fonts/figlet-fonts/Letters.flf | 624 ++ public/fonts/figlet-fonts/Lil Devil.flf | 833 +++ public/fonts/figlet-fonts/Line Blocks.flf | 522 ++ public/fonts/figlet-fonts/Linux.flf | 422 ++ public/fonts/figlet-fonts/Lockergnome.flf | 412 ++ public/fonts/figlet-fonts/Madrid.flf | 416 ++ public/fonts/figlet-fonts/Marquee.flf | 824 +++ public/fonts/figlet-fonts/Maxfour.flf | 423 ++ public/fonts/figlet-fonts/Merlin1.flf | 841 +++ public/fonts/figlet-fonts/Merlin2.flf | 943 +++ public/fonts/figlet-fonts/Mike.flf | 310 + public/fonts/figlet-fonts/Mini.flf | 899 +++ public/fonts/figlet-fonts/Mirror.flf | 1303 ++++ public/fonts/figlet-fonts/Mnemonic.flf | 3702 +++++++++++ public/fonts/figlet-fonts/Modular.flf | 732 +++ public/fonts/figlet-fonts/Morse.flf | 189 + public/fonts/figlet-fonts/Morse2.flf | 189 + public/fonts/figlet-fonts/Moscow.flf | 623 ++ public/fonts/figlet-fonts/Mshebrew210.flf | 422 ++ public/fonts/figlet-fonts/Muzzle.flf | 420 ++ public/fonts/figlet-fonts/NScript.flf | 1654 +++++ public/fonts/figlet-fonts/NT Greek.flf | 949 +++ public/fonts/figlet-fonts/NV Script.flf | 2107 +++++++ public/fonts/figlet-fonts/Nancyj-Fancy.flf | 828 +++ public/fonts/figlet-fonts/Nancyj-Improved.flf | 826 +++ .../fonts/figlet-fonts/Nancyj-Underlined.flf | 826 +++ public/fonts/figlet-fonts/Nancyj.flf | 826 +++ public/fonts/figlet-fonts/Nipples.flf | 824 +++ public/fonts/figlet-fonts/O8.flf | 627 ++ public/fonts/figlet-fonts/OS2.flf | 734 +++ public/fonts/figlet-fonts/Octal.flf | 373 ++ public/fonts/figlet-fonts/Ogre.flf | 626 ++ public/fonts/figlet-fonts/Old Banner.flf | 721 +++ .../fonts/figlet-fonts/Patorjk's Cheese.flf | 1437 +++++ public/fonts/figlet-fonts/Patorjk-HeX.flf | 1235 ++++ public/fonts/figlet-fonts/Pawp.flf | 923 +++ public/fonts/figlet-fonts/Peaks Slant.flf | 622 ++ public/fonts/figlet-fonts/Peaks.flf | 824 +++ public/fonts/figlet-fonts/Pebbles.flf | 1028 +++ public/fonts/figlet-fonts/Pepper.flf | 418 ++ public/fonts/figlet-fonts/Poison.flf | 1239 ++++ public/fonts/figlet-fonts/Puffy.flf | 820 +++ public/fonts/figlet-fonts/Puzzle.flf | 522 ++ public/fonts/figlet-fonts/Pyramid.flf | 836 +++ public/fonts/figlet-fonts/README.md | 11 + public/fonts/figlet-fonts/Rammstein.flf | 726 +++ public/fonts/figlet-fonts/Rectangles.flf | 614 ++ public/fonts/figlet-fonts/Red Phoenix.flf | 734 +++ public/fonts/figlet-fonts/Relief.flf | 717 +++ public/fonts/figlet-fonts/Relief2.flf | 717 +++ public/fonts/figlet-fonts/Reverse.flf | 1125 ++++ public/fonts/figlet-fonts/Roman.flf | 1028 +++ public/fonts/figlet-fonts/Rot13.flf | 367 ++ public/fonts/figlet-fonts/Rot13.php | 369 ++ public/fonts/figlet-fonts/Rotated.flf | 323 + public/fonts/figlet-fonts/Rounded.flf | 717 +++ public/fonts/figlet-fonts/Rowan Cap.flf | 634 ++ public/fonts/figlet-fonts/Rozzo.flf | 717 +++ public/fonts/figlet-fonts/Runic.flf | 632 ++ public/fonts/figlet-fonts/Runyc.flf | 633 ++ public/fonts/figlet-fonts/S Blood.flf | 634 ++ public/fonts/figlet-fonts/SL Script.flf | 626 ++ public/fonts/figlet-fonts/Santa Clara.flf | 615 ++ public/fonts/figlet-fonts/Script.flf | 1493 +++++ public/fonts/figlet-fonts/Serifcap.flf | 411 ++ public/fonts/figlet-fonts/Shadow.flf | 1101 ++++ public/fonts/figlet-fonts/Shimrod.flf | 626 ++ public/fonts/figlet-fonts/Short.flf | 315 + public/fonts/figlet-fonts/Slant Relief.flf | 934 +++ public/fonts/figlet-fonts/Slant.flf | 1295 ++++ public/fonts/figlet-fonts/Slide.flf | 623 ++ public/fonts/figlet-fonts/Small Caps.flf | 522 ++ .../fonts/figlet-fonts/Small Isometric1.flf | 733 +++ public/fonts/figlet-fonts/Small Keyboard.flf | 466 ++ public/fonts/figlet-fonts/Small Poison.flf | 729 +++ public/fonts/figlet-fonts/Small Script.flf | 1097 ++++ public/fonts/figlet-fonts/Small Shadow.flf | 899 +++ public/fonts/figlet-fonts/Small Slant.flf | 1097 ++++ public/fonts/figlet-fonts/Small Tengwar.flf | 312 + public/fonts/figlet-fonts/Small.flf | 1097 ++++ public/fonts/figlet-fonts/Soft.flf | 742 +++ public/fonts/figlet-fonts/Speed.flf | 1301 ++++ public/fonts/figlet-fonts/Spliff.flf | 527 ++ public/fonts/figlet-fonts/Stacey.flf | 739 +++ public/fonts/figlet-fonts/Stampate.flf | 722 +++ public/fonts/figlet-fonts/Stampatello.flf | 1380 ++++ public/fonts/figlet-fonts/Standard.flf | 2237 +++++++ public/fonts/figlet-fonts/Star Strips.flf | 935 +++ public/fonts/figlet-fonts/Star Wars.flf | 719 +++ public/fonts/figlet-fonts/Stellar.flf | 824 +++ public/fonts/figlet-fonts/Stforek.flf | 423 ++ public/fonts/figlet-fonts/Stick Letters.flf | 412 ++ public/fonts/figlet-fonts/Stop.flf | 718 +++ public/fonts/figlet-fonts/Straight.flf | 413 ++ .../fonts/figlet-fonts/Stronger Than All.flf | 924 +++ public/fonts/figlet-fonts/Sub-Zero.flf | 629 ++ public/fonts/figlet-fonts/Swamp Land.flf | 828 +++ public/fonts/figlet-fonts/Swan.flf | 990 +++ public/fonts/figlet-fonts/Sweet.flf | 1339 ++++ public/fonts/figlet-fonts/THIS.flf | 720 +++ public/fonts/figlet-fonts/Tanja.flf | 819 +++ public/fonts/figlet-fonts/Tengwar.flf | 1037 +++ public/fonts/figlet-fonts/Term.flf | 600 ++ public/fonts/figlet-fonts/Test1.flf | 420 ++ public/fonts/figlet-fonts/The Edge.flf | 720 +++ public/fonts/figlet-fonts/Thick.flf | 525 ++ public/fonts/figlet-fonts/Thin.flf | 625 ++ public/fonts/figlet-fonts/Thorned.flf | 522 ++ public/fonts/figlet-fonts/Three Point.flf | 321 + public/fonts/figlet-fonts/Ticks Slant.flf | 622 ++ public/fonts/figlet-fonts/Ticks.flf | 622 ++ public/fonts/figlet-fonts/Tiles.flf | 824 +++ public/fonts/figlet-fonts/Tinker-Toy.flf | 727 +++ public/fonts/figlet-fonts/Tombstone.flf | 523 ++ public/fonts/figlet-fonts/Train.flf | 626 ++ public/fonts/figlet-fonts/Trek.flf | 643 ++ public/fonts/figlet-fonts/Tsalagi.flf | 564 ++ public/fonts/figlet-fonts/Tubes-Regular.flf | 718 +++ public/fonts/figlet-fonts/Tubes-Smushed.flf | 718 +++ public/fonts/figlet-fonts/Tubular.flf | 824 +++ public/fonts/figlet-fonts/Twisted.flf | 829 +++ public/fonts/figlet-fonts/Two Point.flf | 219 + public/fonts/figlet-fonts/USA Flag.flf | 632 ++ public/fonts/figlet-fonts/Univers.flf | 1137 ++++ public/fonts/figlet-fonts/Varsity.flf | 726 +++ public/fonts/figlet-fonts/Wavy.flf | 903 +++ public/fonts/figlet-fonts/Weird.flf | 626 ++ public/fonts/figlet-fonts/Wet Letter.flf | 726 +++ public/fonts/figlet-fonts/Whimsy.flf | 1041 ++++ public/fonts/figlet-fonts/Wow.flf | 116 + public/fonts/figlet-fonts/alligator3.flf | 720 +++ public/fonts/figlet-fonts/amc3line.flf | 427 ++ public/fonts/figlet-fonts/amc3liv1.flf | 427 ++ public/fonts/figlet-fonts/amcaaa01.flf | 1549 +++++ public/fonts/figlet-fonts/amcneko.flf | 1039 ++++ public/fonts/figlet-fonts/amcrazo2.flf | 937 +++ public/fonts/figlet-fonts/amcrazor.flf | 733 +++ public/fonts/figlet-fonts/amcslash.flf | 1039 ++++ public/fonts/figlet-fonts/amcslder.flf | 631 ++ public/fonts/figlet-fonts/amcthin.flf | 733 +++ public/fonts/figlet-fonts/amctubes.flf | 835 +++ public/fonts/figlet-fonts/amcun1.flf | 835 +++ public/fonts/figlet-fonts/ascii12.tlf | Bin 0 -> 57675 bytes public/fonts/figlet-fonts/ascii9.tlf | Bin 0 -> 43154 bytes public/fonts/figlet-fonts/ascii_new_roman.flf | 421 ++ public/fonts/figlet-fonts/bigascii12.tlf | Bin 0 -> 85164 bytes public/fonts/figlet-fonts/bigascii9.tlf | Bin 0 -> 63228 bytes public/fonts/figlet-fonts/bigchief.flf | 819 +++ public/fonts/figlet-fonts/bigmono12.tlf | Bin 0 -> 96319 bytes public/fonts/figlet-fonts/bigmono9.tlf | Bin 0 -> 71389 bytes public/fonts/figlet-fonts/broadway_kb.flf | 319 + public/fonts/figlet-fonts/calgphy2.flf | 2113 +++++++ public/fonts/figlet-fonts/circle.tlf | 186 + public/fonts/figlet-fonts/cosmic.flf | 615 ++ public/fonts/figlet-fonts/dancingfont.flf | 726 +++ public/fonts/figlet-fonts/defleppard.flf | 5532 ++++++++++++++++ public/fonts/figlet-fonts/dietcola.flf | 624 ++ public/fonts/figlet-fonts/dosrebel.flf | 1138 ++++ public/fonts/figlet-fonts/dotmatrix.flf | 1024 +++ public/fonts/figlet-fonts/doubleshorts.flf | 336 + public/fonts/figlet-fonts/drpepper.flf | 569 ++ public/fonts/figlet-fonts/eftichess.flf | 519 ++ public/fonts/figlet-fonts/eftifont.flf | 885 +++ public/fonts/figlet-fonts/eftipiti.flf | 547 ++ public/fonts/figlet-fonts/eftirobot.flf | 621 ++ public/fonts/figlet-fonts/eftitalic.flf | 885 +++ public/fonts/figlet-fonts/eftiwall.flf | 417 ++ public/fonts/figlet-fonts/eftiwater.flf | 417 ++ public/fonts/figlet-fonts/emboss.tlf | 325 + public/fonts/figlet-fonts/emboss2.tlf | 325 + public/fonts/figlet-fonts/fire_font-k.flf | 947 +++ public/fonts/figlet-fonts/fire_font-s.flf | 947 +++ public/fonts/figlet-fonts/flowerpower.flf | 1040 ++++ public/fonts/figlet-fonts/fourtops.flf | 423 ++ public/fonts/figlet-fonts/frango.flc | 65 + public/fonts/figlet-fonts/funface.flf | 726 +++ public/fonts/figlet-fonts/funfaces.flf | 726 +++ public/fonts/figlet-fonts/future.tlf | 457 ++ public/fonts/figlet-fonts/halfiwi.flf | 384 ++ public/fonts/figlet-fonts/heart_left.flf | 423 ++ public/fonts/figlet-fonts/heart_right.flf | 422 ++ public/fonts/figlet-fonts/henry3d.flf | 829 +++ public/fonts/figlet-fonts/horizontalleft.flf | 624 ++ public/fonts/figlet-fonts/horizontalright.flf | 624 ++ public/fonts/figlet-fonts/hz.flc | 4 + public/fonts/figlet-fonts/ilhebrew.flc | 38 + public/fonts/figlet-fonts/jis0201.flc | 249 + public/fonts/figlet-fonts/koholint.flf | 514 ++ public/fonts/figlet-fonts/koi8r.flc | 128 + public/fonts/figlet-fonts/kompaktblk.flf | 310 + public/fonts/figlet-fonts/kontoslant.flf | 230 + public/fonts/figlet-fonts/larry3d.flf | 924 +++ public/fonts/figlet-fonts/letter.tlf | 840 +++ public/fonts/figlet-fonts/lildevil.flf | 828 +++ public/fonts/figlet-fonts/lineblocks.flf | 522 ++ public/fonts/figlet-fonts/maxiwi.flf | 764 +++ public/fonts/figlet-fonts/miniwi.flf | 386 ++ public/fonts/figlet-fonts/mono12.tlf | Bin 0 -> 64764 bytes public/fonts/figlet-fonts/mono9.tlf | Bin 0 -> 47399 bytes public/fonts/figlet-fonts/moscow.flc | 68 + public/fonts/figlet-fonts/ntgreek.flf | 949 +++ public/fonts/figlet-fonts/oldbanner.flf | 721 +++ public/fonts/figlet-fonts/pagga.tlf | 534 ++ public/fonts/figlet-fonts/peaksslant.flf | 622 ++ public/fonts/figlet-fonts/rebel.tlf | 1138 ++++ public/fonts/figlet-fonts/red_phoenix.flf | 729 +++ public/fonts/figlet-fonts/rev.flf | 1125 ++++ public/fonts/figlet-fonts/rowancap.flf | 634 ++ public/fonts/figlet-fonts/rusto.tlf | 433 ++ public/fonts/figlet-fonts/rustofat.tlf | 433 ++ public/fonts/figlet-fonts/s-relief.flf | 934 +++ public/fonts/figlet-fonts/santaclara.flf | 615 ++ public/fonts/figlet-fonts/sblood.flf | 634 ++ public/fonts/figlet-fonts/six-fo.flf | 1636 +++++ public/fonts/figlet-fonts/slscript.flf | 624 ++ public/fonts/figlet-fonts/smallcaps.flf | 522 ++ public/fonts/figlet-fonts/smascii12.tlf | Bin 0 -> 50934 bytes public/fonts/figlet-fonts/smascii9.tlf | Bin 0 -> 39922 bytes public/fonts/figlet-fonts/smblock.tlf | 1200 ++++ public/fonts/figlet-fonts/smbraille.tlf | 220 + public/fonts/figlet-fonts/smisome1.flf | 733 +++ public/fonts/figlet-fonts/smkeyboard.flf | 466 ++ public/fonts/figlet-fonts/smmono12.tlf | Bin 0 -> 57416 bytes public/fonts/figlet-fonts/smmono9.tlf | Bin 0 -> 43296 bytes public/fonts/figlet-fonts/smpoison.flf | 729 +++ public/fonts/figlet-fonts/smscript.flf | 1097 ++++ public/fonts/figlet-fonts/smshadow.flf | 899 +++ public/fonts/figlet-fonts/smslant.flf | 1097 ++++ public/fonts/figlet-fonts/smtengwar.flf | 312 + public/fonts/figlet-fonts/starstrips.flf | 930 +++ public/fonts/figlet-fonts/starwars.flf | 719 +++ public/fonts/figlet-fonts/stencil.flf | 1645 +++++ public/fonts/figlet-fonts/swampland.flf | 828 +++ public/fonts/figlet-fonts/threepoint.flf | 321 + public/fonts/figlet-fonts/ticksslant.flf | 622 ++ public/fonts/figlet-fonts/twopoint.flf | 219 + public/fonts/figlet-fonts/ublk.flf | 412 ++ public/fonts/figlet-fonts/upper.flc | 193 + public/fonts/figlet-fonts/usaflag.flf | 632 ++ public/fonts/figlet-fonts/ushebrew.flc | 33 + public/fonts/figlet-fonts/uskata.flc | 53 + public/fonts/figlet-fonts/utf8.flc | 4 + public/fonts/figlet-fonts/wetletter.flf | 726 +++ public/fonts/figlet-fonts/wideterm.tlf | 132 + tsconfig.json | 1 + types/figlet.ts | 27 + types/units/convert-units.d.ts | 30 + 540 files changed, 338653 insertions(+), 809 deletions(-) create mode 100644 app/(app)/figlet/page.tsx create mode 100644 app/(app)/layout.tsx create mode 100644 app/(app)/pastel/accessibility/colorblind/page.tsx create mode 100644 app/(app)/pastel/accessibility/contrast/page.tsx create mode 100644 app/(app)/pastel/accessibility/page.tsx create mode 100644 app/(app)/pastel/accessibility/textcolor/page.tsx create mode 100644 app/(app)/pastel/batch/page.tsx create mode 100644 app/(app)/pastel/globals.css create mode 100644 app/(app)/pastel/layout.tsx create mode 100644 app/(app)/pastel/names/page.tsx create mode 100644 app/(app)/pastel/page.tsx create mode 100644 app/(app)/pastel/palettes/distinct/page.tsx create mode 100644 app/(app)/pastel/palettes/gradient/page.tsx create mode 100644 app/(app)/pastel/palettes/harmony/page.tsx create mode 100644 app/(app)/pastel/palettes/page.tsx create mode 100644 app/(app)/units/page.tsx create mode 100644 app/api/fonts/route.ts create mode 100644 components/figlet/ComparisonMode.tsx create mode 100644 components/figlet/FigletConverter.tsx create mode 100644 components/figlet/FontPreview.tsx create mode 100644 components/figlet/FontSelector.tsx create mode 100644 components/figlet/HistoryPanel.tsx create mode 100644 components/figlet/TextInput.tsx create mode 100644 components/figlet/TextTemplates.tsx create mode 100644 components/layout/AppHeader.tsx create mode 100644 components/layout/AppShell.tsx create mode 100644 components/layout/AppSidebar.tsx create mode 100644 components/layout/SidebarProvider.tsx create mode 100644 components/pastel/color/ColorDisplay.tsx create mode 100644 components/pastel/color/ColorInfo.tsx create mode 100644 components/pastel/color/ColorPicker.tsx create mode 100644 components/pastel/color/ColorSwatch.tsx create mode 100644 components/pastel/color/PaletteGrid.tsx create mode 100644 components/pastel/layout/Footer.tsx create mode 100644 components/pastel/layout/Navbar.tsx create mode 100644 components/pastel/layout/ThemeToggle.tsx create mode 100644 components/pastel/providers/Providers.tsx create mode 100644 components/pastel/providers/ThemeProvider.tsx create mode 100644 components/pastel/tools/ExportMenu.tsx create mode 100644 components/pastel/tools/ManipulationPanel.tsx create mode 100644 components/providers/Providers.tsx create mode 100644 components/providers/ThemeProvider.tsx create mode 100644 components/ui/Badge.tsx create mode 100644 components/ui/Button.tsx create mode 100644 components/ui/Card.tsx create mode 100644 components/ui/CommandPalette.tsx create mode 100644 components/ui/EmptyState.tsx create mode 100644 components/ui/Input.tsx create mode 100644 components/ui/KeyboardShortcutsHelp.tsx create mode 100644 components/ui/Select.tsx create mode 100644 components/ui/Separator.tsx create mode 100644 components/ui/Skeleton.tsx create mode 100644 components/ui/Slider.tsx create mode 100644 components/ui/Toast.tsx create mode 100644 components/units/converter/ConversionHistory.tsx create mode 100644 components/units/converter/MainConverter.tsx create mode 100644 components/units/converter/SearchUnits.tsx create mode 100644 components/units/converter/VisualComparison.tsx create mode 100644 components/units/providers/ThemeProvider.tsx create mode 100644 components/units/ui/Footer.tsx create mode 100644 lib/figlet/constants/templates.ts create mode 100644 lib/figlet/figletService.ts create mode 100644 lib/figlet/fontLoader.ts create mode 100644 lib/figlet/hooks/useKeyboardShortcuts.ts create mode 100644 lib/pastel/api/client.ts create mode 100644 lib/pastel/api/queries.ts create mode 100644 lib/pastel/api/types.ts create mode 100644 lib/pastel/api/wasm-client.ts create mode 100644 lib/pastel/hooks/useKeyboard.ts create mode 100644 lib/pastel/index.ts create mode 100644 lib/pastel/stores/historyStore.ts create mode 100644 lib/pastel/utils/cn.ts create mode 100644 lib/pastel/utils/color.ts create mode 100644 lib/pastel/utils/export.ts create mode 100644 lib/storage/favorites.ts create mode 100644 lib/storage/history.ts create mode 100644 lib/units/index.ts create mode 100644 lib/units/storage.ts create mode 100644 lib/units/tempo.ts create mode 100644 lib/units/units.ts create mode 100644 lib/units/utils.ts create mode 100644 lib/utils/animations.ts create mode 100644 lib/utils/cn.ts create mode 100644 lib/utils/debounce.ts create mode 100644 lib/utils/index.ts create mode 100644 lib/utils/urlSharing.ts create mode 100644 pnpm-workspace.yaml create mode 100644 public/fonts/figlet-fonts/1Row.flf create mode 100644 public/fonts/figlet-fonts/3-D.flf create mode 100644 public/fonts/figlet-fonts/3D Diagonal.flf create mode 100644 public/fonts/figlet-fonts/3D-ASCII.flf create mode 100644 public/fonts/figlet-fonts/3d.flf create mode 100644 public/fonts/figlet-fonts/3d_diagonal.flf create mode 100644 public/fonts/figlet-fonts/3x5.flf create mode 100644 public/fonts/figlet-fonts/4Max.flf create mode 100644 public/fonts/figlet-fonts/5 Line Oblique.flf create mode 100644 public/fonts/figlet-fonts/5lineoblique.flf create mode 100644 public/fonts/figlet-fonts/646-ca.flc create mode 100644 public/fonts/figlet-fonts/646-ca2.flc create mode 100644 public/fonts/figlet-fonts/646-cn.flc create mode 100644 public/fonts/figlet-fonts/646-cu.flc create mode 100644 public/fonts/figlet-fonts/646-de.flc create mode 100644 public/fonts/figlet-fonts/646-dk.flc create mode 100644 public/fonts/figlet-fonts/646-es.flc create mode 100644 public/fonts/figlet-fonts/646-es2.flc create mode 100644 public/fonts/figlet-fonts/646-fr.flc create mode 100644 public/fonts/figlet-fonts/646-gb.flc create mode 100644 public/fonts/figlet-fonts/646-hu.flc create mode 100644 public/fonts/figlet-fonts/646-irv.flc create mode 100644 public/fonts/figlet-fonts/646-it.flc create mode 100644 public/fonts/figlet-fonts/646-jp.flc create mode 100644 public/fonts/figlet-fonts/646-kr.flc create mode 100644 public/fonts/figlet-fonts/646-no.flc create mode 100644 public/fonts/figlet-fonts/646-no2.flc create mode 100644 public/fonts/figlet-fonts/646-pt.flc create mode 100644 public/fonts/figlet-fonts/646-pt2.flc create mode 100644 public/fonts/figlet-fonts/646-se.flc create mode 100644 public/fonts/figlet-fonts/646-se2.flc create mode 100644 public/fonts/figlet-fonts/646-yu.flc create mode 100644 public/fonts/figlet-fonts/8859-2.flc create mode 100644 public/fonts/figlet-fonts/8859-3.flc create mode 100644 public/fonts/figlet-fonts/8859-4.flc create mode 100644 public/fonts/figlet-fonts/8859-5.flc create mode 100644 public/fonts/figlet-fonts/8859-7.flc create mode 100644 public/fonts/figlet-fonts/8859-8.flc create mode 100644 public/fonts/figlet-fonts/8859-9.flc create mode 100644 public/fonts/figlet-fonts/AMC 3 Line.flf create mode 100644 public/fonts/figlet-fonts/AMC 3 Liv1.flf create mode 100644 public/fonts/figlet-fonts/AMC AAA01.flf create mode 100644 public/fonts/figlet-fonts/AMC Neko.flf create mode 100644 public/fonts/figlet-fonts/AMC Razor.flf create mode 100644 public/fonts/figlet-fonts/AMC Razor2.flf create mode 100644 public/fonts/figlet-fonts/AMC Slash.flf create mode 100644 public/fonts/figlet-fonts/AMC Slider.flf create mode 100644 public/fonts/figlet-fonts/AMC Thin.flf create mode 100644 public/fonts/figlet-fonts/AMC Tubes.flf create mode 100644 public/fonts/figlet-fonts/AMC Untitled.flf create mode 100644 public/fonts/figlet-fonts/ANSI Regular.flf create mode 100644 public/fonts/figlet-fonts/ANSI Shadow.flf create mode 100644 public/fonts/figlet-fonts/ASCII New Roman.flf create mode 100644 public/fonts/figlet-fonts/Acrobatic.flf create mode 100644 public/fonts/figlet-fonts/Alligator.flf create mode 100644 public/fonts/figlet-fonts/Alligator2.flf create mode 100644 public/fonts/figlet-fonts/Alpha.flf create mode 100644 public/fonts/figlet-fonts/Alphabet.flf create mode 100644 public/fonts/figlet-fonts/Arrows.flf create mode 100644 public/fonts/figlet-fonts/Avatar.flf create mode 100644 public/fonts/figlet-fonts/B1FF.flf create mode 100644 public/fonts/figlet-fonts/B1FF.php create mode 100644 public/fonts/figlet-fonts/Banner.flf create mode 100644 public/fonts/figlet-fonts/Banner3-D.flf create mode 100644 public/fonts/figlet-fonts/Banner3.flf create mode 100644 public/fonts/figlet-fonts/Banner4.flf create mode 100644 public/fonts/figlet-fonts/Barbwire.flf create mode 100644 public/fonts/figlet-fonts/Basic.flf create mode 100644 public/fonts/figlet-fonts/Bear.flf create mode 100644 public/fonts/figlet-fonts/Bell.flf create mode 100644 public/fonts/figlet-fonts/Benjamin.flf create mode 100644 public/fonts/figlet-fonts/Big Chief.flf create mode 100644 public/fonts/figlet-fonts/Big Money-ne.flf create mode 100644 public/fonts/figlet-fonts/Big Money-nw.flf create mode 100644 public/fonts/figlet-fonts/Big Money-se.flf create mode 100644 public/fonts/figlet-fonts/Big Money-sw.flf create mode 100644 public/fonts/figlet-fonts/Big.flf create mode 100644 public/fonts/figlet-fonts/Bigfig.flf create mode 100644 public/fonts/figlet-fonts/Binary.flf create mode 100644 public/fonts/figlet-fonts/Block.flf create mode 100644 public/fonts/figlet-fonts/Blocks.flf create mode 100644 public/fonts/figlet-fonts/Bloody.flf create mode 100644 public/fonts/figlet-fonts/Bolger.flf create mode 100644 public/fonts/figlet-fonts/Braced.flf create mode 100644 public/fonts/figlet-fonts/Bright.flf create mode 100644 public/fonts/figlet-fonts/Broadway KB.flf create mode 100644 public/fonts/figlet-fonts/Broadway.flf create mode 100644 public/fonts/figlet-fonts/Bubble.flf create mode 100644 public/fonts/figlet-fonts/Bulbhead.flf create mode 100644 public/fonts/figlet-fonts/Caligraphy.flf create mode 100644 public/fonts/figlet-fonts/Caligraphy2.flf create mode 100644 public/fonts/figlet-fonts/Calvin S.flf create mode 100644 public/fonts/figlet-fonts/Cards.flf create mode 100644 public/fonts/figlet-fonts/Catwalk.flf create mode 100644 public/fonts/figlet-fonts/Chiseled.flf create mode 100644 public/fonts/figlet-fonts/Chunky.flf create mode 100644 public/fonts/figlet-fonts/Coinstak.flf create mode 100644 public/fonts/figlet-fonts/Cola.flf create mode 100644 public/fonts/figlet-fonts/Colossal.flf create mode 100644 public/fonts/figlet-fonts/Computer.flf create mode 100644 public/fonts/figlet-fonts/Contessa.flf create mode 100644 public/fonts/figlet-fonts/Contrast.flf create mode 100644 public/fonts/figlet-fonts/Cosmike.flf create mode 100644 public/fonts/figlet-fonts/Crawford.flf create mode 100644 public/fonts/figlet-fonts/Crawford2.flf create mode 100644 public/fonts/figlet-fonts/Crazy.flf create mode 100644 public/fonts/figlet-fonts/Cricket.flf create mode 100644 public/fonts/figlet-fonts/Cursive.flf create mode 100644 public/fonts/figlet-fonts/Cyberlarge.flf create mode 100644 public/fonts/figlet-fonts/Cybermedium.flf create mode 100644 public/fonts/figlet-fonts/Cybersmall.flf create mode 100644 public/fonts/figlet-fonts/Cygnet.flf create mode 100644 public/fonts/figlet-fonts/DANC4.flf create mode 100644 public/fonts/figlet-fonts/DOS Rebel.flf create mode 100644 public/fonts/figlet-fonts/DWhistled.flf create mode 100644 public/fonts/figlet-fonts/Dancing Font.flf create mode 100644 public/fonts/figlet-fonts/Decimal.flf create mode 100644 public/fonts/figlet-fonts/Def Leppard.flf create mode 100644 public/fonts/figlet-fonts/Delta Corps Priest 1.flf create mode 100644 public/fonts/figlet-fonts/Diamond.flf create mode 100644 public/fonts/figlet-fonts/Diet Cola.flf create mode 100644 public/fonts/figlet-fonts/Digital.flf create mode 100644 public/fonts/figlet-fonts/Doh.flf create mode 100644 public/fonts/figlet-fonts/Doom.flf create mode 100644 public/fonts/figlet-fonts/Dot Matrix.flf create mode 100644 public/fonts/figlet-fonts/Double Shorts.flf create mode 100644 public/fonts/figlet-fonts/Double.flf create mode 100644 public/fonts/figlet-fonts/Dr Pepper.flf create mode 100644 public/fonts/figlet-fonts/Efti Chess.flf create mode 100644 public/fonts/figlet-fonts/Efti Font.flf create mode 100644 public/fonts/figlet-fonts/Efti Italic.flf create mode 100644 public/fonts/figlet-fonts/Efti Piti.flf create mode 100644 public/fonts/figlet-fonts/Efti Robot.flf create mode 100644 public/fonts/figlet-fonts/Efti Wall.flf create mode 100644 public/fonts/figlet-fonts/Efti Water.flf create mode 100644 public/fonts/figlet-fonts/Electronic.flf create mode 100644 public/fonts/figlet-fonts/Elite.flf create mode 100644 public/fonts/figlet-fonts/Epic.flf create mode 100644 public/fonts/figlet-fonts/Examples.md create mode 100644 public/fonts/figlet-fonts/Fender.flf create mode 100644 public/fonts/figlet-fonts/Filter.flf create mode 100644 public/fonts/figlet-fonts/Fire Font-k.flf create mode 100644 public/fonts/figlet-fonts/Fire Font-s.flf create mode 100644 public/fonts/figlet-fonts/Flipped.flf create mode 100644 public/fonts/figlet-fonts/Flower Power.flf create mode 100644 public/fonts/figlet-fonts/Four Tops.flf create mode 100644 public/fonts/figlet-fonts/Fraktur.flf create mode 100644 public/fonts/figlet-fonts/Fun Face.flf create mode 100644 public/fonts/figlet-fonts/Fun Faces.flf create mode 100644 public/fonts/figlet-fonts/Fuzzy.flf create mode 100644 public/fonts/figlet-fonts/Georgi16.flf create mode 100644 public/fonts/figlet-fonts/Georgia11.flf create mode 100644 public/fonts/figlet-fonts/Ghost.flf create mode 100644 public/fonts/figlet-fonts/Ghoulish.flf create mode 100644 public/fonts/figlet-fonts/Glenyn.flf create mode 100644 public/fonts/figlet-fonts/Goofy.flf create mode 100644 public/fonts/figlet-fonts/Gothic.flf create mode 100644 public/fonts/figlet-fonts/Graceful.flf create mode 100644 public/fonts/figlet-fonts/Gradient.flf create mode 100644 public/fonts/figlet-fonts/Graffiti.flf create mode 100644 public/fonts/figlet-fonts/Greek.flf create mode 100644 public/fonts/figlet-fonts/Heart Left.flf create mode 100644 public/fonts/figlet-fonts/Heart Right.flf create mode 100644 public/fonts/figlet-fonts/Henry 3D.flf create mode 100644 public/fonts/figlet-fonts/Hex.flf create mode 100644 public/fonts/figlet-fonts/Hieroglyphs.flf create mode 100644 public/fonts/figlet-fonts/Hollywood.flf create mode 100644 public/fonts/figlet-fonts/Horizontal Left.flf create mode 100644 public/fonts/figlet-fonts/Horizontal Right.flf create mode 100644 public/fonts/figlet-fonts/ICL-1900.flf create mode 100644 public/fonts/figlet-fonts/Impossible.flf create mode 100644 public/fonts/figlet-fonts/Invita.flf create mode 100644 public/fonts/figlet-fonts/Isometric1.flf create mode 100644 public/fonts/figlet-fonts/Isometric2.flf create mode 100644 public/fonts/figlet-fonts/Isometric3.flf create mode 100644 public/fonts/figlet-fonts/Isometric4.flf create mode 100644 public/fonts/figlet-fonts/Italic.flf create mode 100644 public/fonts/figlet-fonts/Ivrit.flf create mode 100644 public/fonts/figlet-fonts/JS Block Letters.flf create mode 100644 public/fonts/figlet-fonts/JS Bracket Letters.flf create mode 100644 public/fonts/figlet-fonts/JS Capital Curves.flf create mode 100644 public/fonts/figlet-fonts/JS Cursive.flf create mode 100644 public/fonts/figlet-fonts/JS Stick Letters.flf create mode 100644 public/fonts/figlet-fonts/Jacky.flf create mode 100644 public/fonts/figlet-fonts/Jazmine.flf create mode 100644 public/fonts/figlet-fonts/Jerusalem.flf create mode 100644 public/fonts/figlet-fonts/Katakana.flf create mode 100644 public/fonts/figlet-fonts/Kban.flf create mode 100644 public/fonts/figlet-fonts/Keyboard.flf create mode 100644 public/fonts/figlet-fonts/Knob.flf create mode 100644 public/fonts/figlet-fonts/Konto Slant.flf create mode 100644 public/fonts/figlet-fonts/Konto.flf create mode 100644 public/fonts/figlet-fonts/LCD.flf create mode 100644 public/fonts/figlet-fonts/Larry 3D 2.flf create mode 100644 public/fonts/figlet-fonts/Larry 3D.flf create mode 100644 public/fonts/figlet-fonts/Lean.flf create mode 100644 public/fonts/figlet-fonts/Letters.flf create mode 100644 public/fonts/figlet-fonts/Lil Devil.flf create mode 100644 public/fonts/figlet-fonts/Line Blocks.flf create mode 100644 public/fonts/figlet-fonts/Linux.flf create mode 100644 public/fonts/figlet-fonts/Lockergnome.flf create mode 100644 public/fonts/figlet-fonts/Madrid.flf create mode 100644 public/fonts/figlet-fonts/Marquee.flf create mode 100644 public/fonts/figlet-fonts/Maxfour.flf create mode 100644 public/fonts/figlet-fonts/Merlin1.flf create mode 100644 public/fonts/figlet-fonts/Merlin2.flf create mode 100644 public/fonts/figlet-fonts/Mike.flf create mode 100644 public/fonts/figlet-fonts/Mini.flf create mode 100644 public/fonts/figlet-fonts/Mirror.flf create mode 100644 public/fonts/figlet-fonts/Mnemonic.flf create mode 100644 public/fonts/figlet-fonts/Modular.flf create mode 100644 public/fonts/figlet-fonts/Morse.flf create mode 100644 public/fonts/figlet-fonts/Morse2.flf create mode 100644 public/fonts/figlet-fonts/Moscow.flf create mode 100644 public/fonts/figlet-fonts/Mshebrew210.flf create mode 100644 public/fonts/figlet-fonts/Muzzle.flf create mode 100644 public/fonts/figlet-fonts/NScript.flf create mode 100644 public/fonts/figlet-fonts/NT Greek.flf create mode 100644 public/fonts/figlet-fonts/NV Script.flf create mode 100644 public/fonts/figlet-fonts/Nancyj-Fancy.flf create mode 100644 public/fonts/figlet-fonts/Nancyj-Improved.flf create mode 100644 public/fonts/figlet-fonts/Nancyj-Underlined.flf create mode 100644 public/fonts/figlet-fonts/Nancyj.flf create mode 100644 public/fonts/figlet-fonts/Nipples.flf create mode 100644 public/fonts/figlet-fonts/O8.flf create mode 100644 public/fonts/figlet-fonts/OS2.flf create mode 100644 public/fonts/figlet-fonts/Octal.flf create mode 100644 public/fonts/figlet-fonts/Ogre.flf create mode 100644 public/fonts/figlet-fonts/Old Banner.flf create mode 100644 public/fonts/figlet-fonts/Patorjk's Cheese.flf create mode 100644 public/fonts/figlet-fonts/Patorjk-HeX.flf create mode 100644 public/fonts/figlet-fonts/Pawp.flf create mode 100644 public/fonts/figlet-fonts/Peaks Slant.flf create mode 100644 public/fonts/figlet-fonts/Peaks.flf create mode 100644 public/fonts/figlet-fonts/Pebbles.flf create mode 100644 public/fonts/figlet-fonts/Pepper.flf create mode 100644 public/fonts/figlet-fonts/Poison.flf create mode 100644 public/fonts/figlet-fonts/Puffy.flf create mode 100644 public/fonts/figlet-fonts/Puzzle.flf create mode 100644 public/fonts/figlet-fonts/Pyramid.flf create mode 100644 public/fonts/figlet-fonts/README.md create mode 100644 public/fonts/figlet-fonts/Rammstein.flf create mode 100644 public/fonts/figlet-fonts/Rectangles.flf create mode 100644 public/fonts/figlet-fonts/Red Phoenix.flf create mode 100644 public/fonts/figlet-fonts/Relief.flf create mode 100644 public/fonts/figlet-fonts/Relief2.flf create mode 100644 public/fonts/figlet-fonts/Reverse.flf create mode 100644 public/fonts/figlet-fonts/Roman.flf create mode 100644 public/fonts/figlet-fonts/Rot13.flf create mode 100644 public/fonts/figlet-fonts/Rot13.php create mode 100644 public/fonts/figlet-fonts/Rotated.flf create mode 100644 public/fonts/figlet-fonts/Rounded.flf create mode 100644 public/fonts/figlet-fonts/Rowan Cap.flf create mode 100644 public/fonts/figlet-fonts/Rozzo.flf create mode 100644 public/fonts/figlet-fonts/Runic.flf create mode 100644 public/fonts/figlet-fonts/Runyc.flf create mode 100644 public/fonts/figlet-fonts/S Blood.flf create mode 100644 public/fonts/figlet-fonts/SL Script.flf create mode 100644 public/fonts/figlet-fonts/Santa Clara.flf create mode 100644 public/fonts/figlet-fonts/Script.flf create mode 100644 public/fonts/figlet-fonts/Serifcap.flf create mode 100644 public/fonts/figlet-fonts/Shadow.flf create mode 100644 public/fonts/figlet-fonts/Shimrod.flf create mode 100644 public/fonts/figlet-fonts/Short.flf create mode 100644 public/fonts/figlet-fonts/Slant Relief.flf create mode 100644 public/fonts/figlet-fonts/Slant.flf create mode 100644 public/fonts/figlet-fonts/Slide.flf create mode 100644 public/fonts/figlet-fonts/Small Caps.flf create mode 100644 public/fonts/figlet-fonts/Small Isometric1.flf create mode 100644 public/fonts/figlet-fonts/Small Keyboard.flf create mode 100644 public/fonts/figlet-fonts/Small Poison.flf create mode 100644 public/fonts/figlet-fonts/Small Script.flf create mode 100644 public/fonts/figlet-fonts/Small Shadow.flf create mode 100644 public/fonts/figlet-fonts/Small Slant.flf create mode 100644 public/fonts/figlet-fonts/Small Tengwar.flf create mode 100644 public/fonts/figlet-fonts/Small.flf create mode 100644 public/fonts/figlet-fonts/Soft.flf create mode 100644 public/fonts/figlet-fonts/Speed.flf create mode 100644 public/fonts/figlet-fonts/Spliff.flf create mode 100644 public/fonts/figlet-fonts/Stacey.flf create mode 100644 public/fonts/figlet-fonts/Stampate.flf create mode 100644 public/fonts/figlet-fonts/Stampatello.flf create mode 100644 public/fonts/figlet-fonts/Standard.flf create mode 100644 public/fonts/figlet-fonts/Star Strips.flf create mode 100644 public/fonts/figlet-fonts/Star Wars.flf create mode 100644 public/fonts/figlet-fonts/Stellar.flf create mode 100644 public/fonts/figlet-fonts/Stforek.flf create mode 100644 public/fonts/figlet-fonts/Stick Letters.flf create mode 100644 public/fonts/figlet-fonts/Stop.flf create mode 100644 public/fonts/figlet-fonts/Straight.flf create mode 100644 public/fonts/figlet-fonts/Stronger Than All.flf create mode 100644 public/fonts/figlet-fonts/Sub-Zero.flf create mode 100644 public/fonts/figlet-fonts/Swamp Land.flf create mode 100644 public/fonts/figlet-fonts/Swan.flf create mode 100644 public/fonts/figlet-fonts/Sweet.flf create mode 100644 public/fonts/figlet-fonts/THIS.flf create mode 100644 public/fonts/figlet-fonts/Tanja.flf create mode 100644 public/fonts/figlet-fonts/Tengwar.flf create mode 100644 public/fonts/figlet-fonts/Term.flf create mode 100644 public/fonts/figlet-fonts/Test1.flf create mode 100644 public/fonts/figlet-fonts/The Edge.flf create mode 100644 public/fonts/figlet-fonts/Thick.flf create mode 100644 public/fonts/figlet-fonts/Thin.flf create mode 100644 public/fonts/figlet-fonts/Thorned.flf create mode 100644 public/fonts/figlet-fonts/Three Point.flf create mode 100644 public/fonts/figlet-fonts/Ticks Slant.flf create mode 100644 public/fonts/figlet-fonts/Ticks.flf create mode 100644 public/fonts/figlet-fonts/Tiles.flf create mode 100644 public/fonts/figlet-fonts/Tinker-Toy.flf create mode 100644 public/fonts/figlet-fonts/Tombstone.flf create mode 100644 public/fonts/figlet-fonts/Train.flf create mode 100644 public/fonts/figlet-fonts/Trek.flf create mode 100644 public/fonts/figlet-fonts/Tsalagi.flf create mode 100644 public/fonts/figlet-fonts/Tubes-Regular.flf create mode 100644 public/fonts/figlet-fonts/Tubes-Smushed.flf create mode 100644 public/fonts/figlet-fonts/Tubular.flf create mode 100644 public/fonts/figlet-fonts/Twisted.flf create mode 100644 public/fonts/figlet-fonts/Two Point.flf create mode 100644 public/fonts/figlet-fonts/USA Flag.flf create mode 100644 public/fonts/figlet-fonts/Univers.flf create mode 100644 public/fonts/figlet-fonts/Varsity.flf create mode 100644 public/fonts/figlet-fonts/Wavy.flf create mode 100644 public/fonts/figlet-fonts/Weird.flf create mode 100644 public/fonts/figlet-fonts/Wet Letter.flf create mode 100644 public/fonts/figlet-fonts/Whimsy.flf create mode 100644 public/fonts/figlet-fonts/Wow.flf create mode 100644 public/fonts/figlet-fonts/alligator3.flf create mode 100644 public/fonts/figlet-fonts/amc3line.flf create mode 100644 public/fonts/figlet-fonts/amc3liv1.flf create mode 100644 public/fonts/figlet-fonts/amcaaa01.flf create mode 100644 public/fonts/figlet-fonts/amcneko.flf create mode 100644 public/fonts/figlet-fonts/amcrazo2.flf create mode 100644 public/fonts/figlet-fonts/amcrazor.flf create mode 100644 public/fonts/figlet-fonts/amcslash.flf create mode 100644 public/fonts/figlet-fonts/amcslder.flf create mode 100644 public/fonts/figlet-fonts/amcthin.flf create mode 100644 public/fonts/figlet-fonts/amctubes.flf create mode 100644 public/fonts/figlet-fonts/amcun1.flf create mode 100644 public/fonts/figlet-fonts/ascii12.tlf create mode 100644 public/fonts/figlet-fonts/ascii9.tlf create mode 100644 public/fonts/figlet-fonts/ascii_new_roman.flf create mode 100644 public/fonts/figlet-fonts/bigascii12.tlf create mode 100644 public/fonts/figlet-fonts/bigascii9.tlf create mode 100644 public/fonts/figlet-fonts/bigchief.flf create mode 100644 public/fonts/figlet-fonts/bigmono12.tlf create mode 100644 public/fonts/figlet-fonts/bigmono9.tlf create mode 100644 public/fonts/figlet-fonts/broadway_kb.flf create mode 100644 public/fonts/figlet-fonts/calgphy2.flf create mode 100644 public/fonts/figlet-fonts/circle.tlf create mode 100644 public/fonts/figlet-fonts/cosmic.flf create mode 100644 public/fonts/figlet-fonts/dancingfont.flf create mode 100644 public/fonts/figlet-fonts/defleppard.flf create mode 100644 public/fonts/figlet-fonts/dietcola.flf create mode 100644 public/fonts/figlet-fonts/dosrebel.flf create mode 100644 public/fonts/figlet-fonts/dotmatrix.flf create mode 100644 public/fonts/figlet-fonts/doubleshorts.flf create mode 100644 public/fonts/figlet-fonts/drpepper.flf create mode 100644 public/fonts/figlet-fonts/eftichess.flf create mode 100644 public/fonts/figlet-fonts/eftifont.flf create mode 100644 public/fonts/figlet-fonts/eftipiti.flf create mode 100644 public/fonts/figlet-fonts/eftirobot.flf create mode 100644 public/fonts/figlet-fonts/eftitalic.flf create mode 100644 public/fonts/figlet-fonts/eftiwall.flf create mode 100644 public/fonts/figlet-fonts/eftiwater.flf create mode 100644 public/fonts/figlet-fonts/emboss.tlf create mode 100644 public/fonts/figlet-fonts/emboss2.tlf create mode 100644 public/fonts/figlet-fonts/fire_font-k.flf create mode 100644 public/fonts/figlet-fonts/fire_font-s.flf create mode 100644 public/fonts/figlet-fonts/flowerpower.flf create mode 100644 public/fonts/figlet-fonts/fourtops.flf create mode 100644 public/fonts/figlet-fonts/frango.flc create mode 100644 public/fonts/figlet-fonts/funface.flf create mode 100644 public/fonts/figlet-fonts/funfaces.flf create mode 100644 public/fonts/figlet-fonts/future.tlf create mode 100644 public/fonts/figlet-fonts/halfiwi.flf create mode 100644 public/fonts/figlet-fonts/heart_left.flf create mode 100644 public/fonts/figlet-fonts/heart_right.flf create mode 100644 public/fonts/figlet-fonts/henry3d.flf create mode 100644 public/fonts/figlet-fonts/horizontalleft.flf create mode 100644 public/fonts/figlet-fonts/horizontalright.flf create mode 100644 public/fonts/figlet-fonts/hz.flc create mode 100644 public/fonts/figlet-fonts/ilhebrew.flc create mode 100644 public/fonts/figlet-fonts/jis0201.flc create mode 100644 public/fonts/figlet-fonts/koholint.flf create mode 100644 public/fonts/figlet-fonts/koi8r.flc create mode 100644 public/fonts/figlet-fonts/kompaktblk.flf create mode 100644 public/fonts/figlet-fonts/kontoslant.flf create mode 100644 public/fonts/figlet-fonts/larry3d.flf create mode 100644 public/fonts/figlet-fonts/letter.tlf create mode 100644 public/fonts/figlet-fonts/lildevil.flf create mode 100644 public/fonts/figlet-fonts/lineblocks.flf create mode 100644 public/fonts/figlet-fonts/maxiwi.flf create mode 100644 public/fonts/figlet-fonts/miniwi.flf create mode 100644 public/fonts/figlet-fonts/mono12.tlf create mode 100644 public/fonts/figlet-fonts/mono9.tlf create mode 100644 public/fonts/figlet-fonts/moscow.flc create mode 100644 public/fonts/figlet-fonts/ntgreek.flf create mode 100644 public/fonts/figlet-fonts/oldbanner.flf create mode 100644 public/fonts/figlet-fonts/pagga.tlf create mode 100644 public/fonts/figlet-fonts/peaksslant.flf create mode 100644 public/fonts/figlet-fonts/rebel.tlf create mode 100644 public/fonts/figlet-fonts/red_phoenix.flf create mode 100644 public/fonts/figlet-fonts/rev.flf create mode 100644 public/fonts/figlet-fonts/rowancap.flf create mode 100644 public/fonts/figlet-fonts/rusto.tlf create mode 100644 public/fonts/figlet-fonts/rustofat.tlf create mode 100644 public/fonts/figlet-fonts/s-relief.flf create mode 100644 public/fonts/figlet-fonts/santaclara.flf create mode 100644 public/fonts/figlet-fonts/sblood.flf create mode 100644 public/fonts/figlet-fonts/six-fo.flf create mode 100644 public/fonts/figlet-fonts/slscript.flf create mode 100644 public/fonts/figlet-fonts/smallcaps.flf create mode 100644 public/fonts/figlet-fonts/smascii12.tlf create mode 100644 public/fonts/figlet-fonts/smascii9.tlf create mode 100644 public/fonts/figlet-fonts/smblock.tlf create mode 100644 public/fonts/figlet-fonts/smbraille.tlf create mode 100644 public/fonts/figlet-fonts/smisome1.flf create mode 100644 public/fonts/figlet-fonts/smkeyboard.flf create mode 100644 public/fonts/figlet-fonts/smmono12.tlf create mode 100644 public/fonts/figlet-fonts/smmono9.tlf create mode 100644 public/fonts/figlet-fonts/smpoison.flf create mode 100644 public/fonts/figlet-fonts/smscript.flf create mode 100644 public/fonts/figlet-fonts/smshadow.flf create mode 100644 public/fonts/figlet-fonts/smslant.flf create mode 100644 public/fonts/figlet-fonts/smtengwar.flf create mode 100644 public/fonts/figlet-fonts/starstrips.flf create mode 100644 public/fonts/figlet-fonts/starwars.flf create mode 100644 public/fonts/figlet-fonts/stencil.flf create mode 100644 public/fonts/figlet-fonts/swampland.flf create mode 100644 public/fonts/figlet-fonts/threepoint.flf create mode 100644 public/fonts/figlet-fonts/ticksslant.flf create mode 100644 public/fonts/figlet-fonts/twopoint.flf create mode 100644 public/fonts/figlet-fonts/ublk.flf create mode 100644 public/fonts/figlet-fonts/upper.flc create mode 100644 public/fonts/figlet-fonts/usaflag.flf create mode 100644 public/fonts/figlet-fonts/ushebrew.flc create mode 100644 public/fonts/figlet-fonts/uskata.flc create mode 100644 public/fonts/figlet-fonts/utf8.flc create mode 100644 public/fonts/figlet-fonts/wetletter.flf create mode 100644 public/fonts/figlet-fonts/wideterm.tlf create mode 100644 types/figlet.ts create mode 100644 types/units/convert-units.d.ts diff --git a/app/(app)/figlet/page.tsx b/app/(app)/figlet/page.tsx new file mode 100644 index 0000000..64d807a --- /dev/null +++ b/app/(app)/figlet/page.tsx @@ -0,0 +1,13 @@ +import { FigletConverter } from '@/components/figlet/FigletConverter'; + +export default function FigletPage() { + return ( +
+
+

Figlet UI

+

ASCII Art Text Generator with 373 Fonts

+
+ +
+ ); +} diff --git a/app/(app)/layout.tsx b/app/(app)/layout.tsx new file mode 100644 index 0000000..65c0b2e --- /dev/null +++ b/app/(app)/layout.tsx @@ -0,0 +1,16 @@ +import { AppShell } from '@/components/layout/AppShell'; +import { Providers } from '@/components/providers/Providers'; + +export default function AppLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + {children} + + + ); +} diff --git a/app/(app)/pastel/accessibility/colorblind/page.tsx b/app/(app)/pastel/accessibility/colorblind/page.tsx new file mode 100644 index 0000000..6cfc231 --- /dev/null +++ b/app/(app)/pastel/accessibility/colorblind/page.tsx @@ -0,0 +1,214 @@ +'use client'; + +import { useState } from 'react'; +import { ColorPicker } from '@/components/pastel/color/ColorPicker'; +import { ColorDisplay } from '@/components/pastel/color/ColorDisplay'; +import { Button } from '@/components/ui/Button'; +import { Select } from '@/components/ui/Select'; +import { useSimulateColorBlindness } from '@/lib/pastel/api/queries'; +import { Loader2, Eye, Plus, X } from 'lucide-react'; +import { toast } from 'sonner'; + +type ColorBlindnessType = 'protanopia' | 'deuteranopia' | 'tritanopia'; + +export default function ColorBlindPage() { + const [colors, setColors] = useState(['#ff0099']); + const [blindnessType, setBlindnessType] = useState('protanopia'); + const [simulations, setSimulations] = useState< + Array<{ input: string; output: string; difference_percentage: number }> + >([]); + + const simulateMutation = useSimulateColorBlindness(); + + const handleSimulate = async () => { + try { + const result = await simulateMutation.mutateAsync({ + colors, + type: blindnessType, + }); + setSimulations(result.colors); + toast.success(`Simulated ${blindnessType}`); + } catch (error) { + toast.error('Failed to simulate color blindness'); + console.error(error); + } + }; + + const addColor = () => { + if (colors.length < 10) { + setColors([...colors, '#000000']); + } + }; + + const removeColor = (index: number) => { + if (colors.length > 1) { + setColors(colors.filter((_, i) => i !== index)); + } + }; + + const updateColor = (index: number, color: string) => { + const newColors = [...colors]; + newColors[index] = color; + setColors(newColors); + }; + + const typeDescriptions: Record = { + protanopia: 'Red-blind (affects ~1% of males)', + deuteranopia: 'Green-blind (affects ~1% of males)', + tritanopia: 'Blue-blind (rare, affects ~0.001%)', + }; + + return ( +
+
+
+

Color Blindness Simulator

+

+ Simulate how colors appear with different types of color blindness +

+
+ +
+ {/* Controls */} +
+
+
+

Colors to Test

+ +
+ +
+ {colors.map((color, index) => ( +
+
+ updateColor(index, newColor)} + /> +
+ {colors.length > 1 && ( + + )} +
+ ))} +
+
+ +
+

Blindness Type

+
+ + +

+ {typeDescriptions[blindnessType]} +

+ + +
+
+
+ + {/* Results */} +
+ {simulations.length > 0 ? ( + <> +
+

Simulation Results

+

+ Compare original colors (left) with how they appear to people with{' '} + {blindnessType} (right) +

+ +
+ {simulations.map((sim, index) => ( +
+
+

+ Original +

+
+ + {sim.input} +
+
+ +
+

+ As Seen ({sim.difference_percentage.toFixed(1)}% difference) +

+
+ + {sim.output} +
+
+
+ ))} +
+
+ +
+

+ + Accessibility Tip +

+

+ Ensure important information isn't conveyed by color alone. Use text + labels, patterns, or icons to make your design accessible to everyone +

+
+ + ) : ( +
+ +

Add colors and click Simulate to see how they appear

+

with different types of color blindness

+
+ )} +
+
+
+
+ ); +} diff --git a/app/(app)/pastel/accessibility/contrast/page.tsx b/app/(app)/pastel/accessibility/contrast/page.tsx new file mode 100644 index 0000000..a8010c3 --- /dev/null +++ b/app/(app)/pastel/accessibility/contrast/page.tsx @@ -0,0 +1,172 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import { ColorPicker } from '@/components/pastel/color/ColorPicker'; +import { Button } from '@/components/ui/Button'; +import { Badge } from '@/components/ui/Badge'; +import { getContrastRatio, hexToRgb, checkWCAGCompliance } from '@/lib/pastel/utils/color'; +import { ArrowLeftRight, Check, X } from 'lucide-react'; + +export default function ContrastPage() { + const [foreground, setForeground] = useState('#000000'); + const [background, setBackground] = useState('#ffffff'); + const [ratio, setRatio] = useState(null); + const [compliance, setCompliance] = useState(null); + + useEffect(() => { + const fgRgb = hexToRgb(foreground); + const bgRgb = hexToRgb(background); + + if (fgRgb && bgRgb) { + const contrastRatio = getContrastRatio(fgRgb, bgRgb); + setRatio(contrastRatio); + setCompliance(checkWCAGCompliance(contrastRatio)); + } + }, [foreground, background]); + + const swapColors = () => { + const temp = foreground; + setForeground(background); + setBackground(temp); + }; + + const ComplianceItem = ({ + label, + passed, + }: { + label: string; + passed: boolean; + }) => ( +
+ {label} + + {passed ? ( + <> + + Pass + + ) : ( + <> + + Fail + + )} + +
+ ); + + return ( +
+
+
+

Contrast Checker

+

+ Test color combinations for WCAG 2.1 compliance +

+
+ +
+ {/* Color Pickers */} +
+
+
+

Foreground Color

+
+ +
+ +
+ +
+ +
+

Background Color

+ +
+
+ + {/* Results */} +
+ {/* Preview */} +
+

Preview

+
+

Normal Text (16px)

+

Large Text (24px)

+
+
+ + {/* Contrast Ratio */} + {ratio !== null && ( +
+

Contrast Ratio

+
+
{ratio.toFixed(2)}:1
+

+ {ratio >= 7 + ? 'Excellent contrast' + : ratio >= 4.5 + ? 'Good contrast' + : ratio >= 3 + ? 'Minimum contrast' + : 'Poor contrast'} +

+
+
+ )} + + {/* WCAG Compliance */} + {compliance && ( +
+

WCAG 2.1 Compliance

+
+
+

Level AA

+
+ + + +
+
+ +
+

Level AAA

+
+ + +
+
+
+
+ )} +
+
+
+
+ ); +} diff --git a/app/(app)/pastel/accessibility/page.tsx b/app/(app)/pastel/accessibility/page.tsx new file mode 100644 index 0000000..ec8c370 --- /dev/null +++ b/app/(app)/pastel/accessibility/page.tsx @@ -0,0 +1,96 @@ +import Link from 'next/link'; +import { Contrast, Eye, Palette } from 'lucide-react'; + +export default function AccessibilityPage() { + const tools = [ + { + title: 'Contrast Checker', + description: 'Test color combinations for WCAG 2.1 AA and AAA compliance', + href: '/pastel/accessibility/contrast', + icon: Contrast, + features: ['WCAG 2.1 standards', 'AA/AAA ratings', 'Live preview'], + }, + { + title: 'Color Blindness Simulator', + description: 'Simulate how colors appear with different types of color blindness', + href: '/pastel/accessibility/colorblind', + icon: Eye, + features: ['Protanopia', 'Deuteranopia', 'Tritanopia'], + }, + { + title: 'Text Color Optimizer', + description: 'Find the best text color for any background automatically', + href: '/pastel/accessibility/textcolor', + icon: Palette, + features: ['Automatic optimization', 'WCAG guaranteed', 'Light/dark options'], + }, + ]; + + return ( +
+
+
+

Accessibility Tools

+

+ Ensure your colors are accessible to everyone +

+
+ +
+ {tools.map((tool) => { + const Icon = tool.icon; + return ( + +
+ +
+

{tool.title}

+

{tool.description}

+
    + {tool.features.map((feature) => ( +
  • + โ€ข + {feature} +
  • + ))} +
+ + ); + })} +
+ + {/* Educational Content */} +
+

About WCAG 2.1

+
+

+ The Web Content Accessibility Guidelines (WCAG) 2.1 provide standards for making web + content more accessible to people with disabilities +

+
+
+

Level AA (Minimum)

+
    +
  • โ€ข Normal text: 4.5:1 contrast ratio
  • +
  • โ€ข Large text: 3:1 contrast ratio
  • +
  • โ€ข UI components: 3:1 contrast ratio
  • +
+
+
+

Level AAA (Enhanced)

+
    +
  • โ€ข Normal text: 7:1 contrast ratio
  • +
  • โ€ข Large text: 4.5:1 contrast ratio
  • +
+
+
+
+
+
+
+ ); +} diff --git a/app/(app)/pastel/accessibility/textcolor/page.tsx b/app/(app)/pastel/accessibility/textcolor/page.tsx new file mode 100644 index 0000000..1fcf489 --- /dev/null +++ b/app/(app)/pastel/accessibility/textcolor/page.tsx @@ -0,0 +1,221 @@ +'use client'; + +import { useState } from 'react'; +import { ColorPicker } from '@/components/pastel/color/ColorPicker'; +import { ColorDisplay } from '@/components/pastel/color/ColorDisplay'; +import { Button } from '@/components/ui/Button'; +import { useTextColor } from '@/lib/pastel/api/queries'; +import { Loader2, Palette, Plus, X, CheckCircle2, XCircle } from 'lucide-react'; +import { toast } from 'sonner'; + +export default function TextColorPage() { + const [backgrounds, setBackgrounds] = useState(['#ff0099']); + const [results, setResults] = useState< + Array<{ + background: string; + textcolor: string; + contrast_ratio: number; + wcag_aa: boolean; + wcag_aaa: boolean; + }> + >([]); + + const textColorMutation = useTextColor(); + + const handleOptimize = async () => { + try { + const result = await textColorMutation.mutateAsync({ + backgrounds, + }); + setResults(result.colors); + toast.success(`Optimized text colors for ${result.colors.length} background(s)`); + } catch (error) { + toast.error('Failed to optimize text colors'); + console.error(error); + } + }; + + const addBackground = () => { + if (backgrounds.length < 10) { + setBackgrounds([...backgrounds, '#000000']); + } + }; + + const removeBackground = (index: number) => { + if (backgrounds.length > 1) { + setBackgrounds(backgrounds.filter((_, i) => i !== index)); + } + }; + + const updateBackground = (index: number, color: string) => { + const newBackgrounds = [...backgrounds]; + newBackgrounds[index] = color; + setBackgrounds(newBackgrounds); + }; + + return ( +
+
+
+

Text Color Optimizer

+

+ Automatically find the best text color (black or white) for any background color +

+
+ +
+ {/* Input */} +
+
+
+

Background Colors

+ +
+ +
+ {backgrounds.map((color, index) => ( +
+
+ updateBackground(index, newColor)} + /> +
+ {backgrounds.length > 1 && ( + + )} +
+ ))} +
+ + +
+ +
+

How it works

+

+ This tool analyzes each background color and automatically selects either black + or white text to ensure maximum readability. The algorithm guarantees WCAG AA + compliance (4.5:1 contrast ratio) for normal text +

+
+
+ + {/* Results */} +
+ {results.length > 0 ? ( + <> +
+

Optimized Results

+
+ {results.map((result, index) => ( +
+
+
+ + + {result.background} + +
+
+ +
+

+ Sample Text Preview +

+

+ The quick brown fox jumps over the lazy dog. This is how your text + will look on this background color +

+
+ +
+
+ Text Color: + {result.textcolor} +
+
+ Contrast: + + {result.contrast_ratio.toFixed(2)}:1 + +
+
+ {result.wcag_aa ? ( + + ) : ( + + )} + + WCAG AA + +
+
+ {result.wcag_aaa ? ( + + ) : ( + + )} + + WCAG AAA + +
+
+
+ ))} +
+
+ + ) : ( +
+ +

Add background colors and click Optimize to see results

+
+ )} +
+
+
+
+ ); +} diff --git a/app/(app)/pastel/batch/page.tsx b/app/(app)/pastel/batch/page.tsx new file mode 100644 index 0000000..fc96210 --- /dev/null +++ b/app/(app)/pastel/batch/page.tsx @@ -0,0 +1,193 @@ +'use client'; + +import { useState } from 'react'; +import { Button } from '@/components/ui/Button'; +import { Select } from '@/components/ui/Select'; +import { Input } from '@/components/ui/Input'; +import { PaletteGrid } from '@/components/pastel/color/PaletteGrid'; +import { ExportMenu } from '@/components/pastel/tools/ExportMenu'; +import { useLighten, useDarken, useSaturate, useDesaturate, useRotate } from '@/lib/pastel/api/queries'; +import { Loader2, Upload, Download } from 'lucide-react'; +import { toast } from 'sonner'; + +type Operation = 'lighten' | 'darken' | 'saturate' | 'desaturate' | 'rotate'; + +export default function BatchPage() { + const [inputColors, setInputColors] = useState(''); + const [operation, setOperation] = useState('lighten'); + const [amount, setAmount] = useState(0.2); + const [outputColors, setOutputColors] = useState([]); + + const lightenMutation = useLighten(); + const darkenMutation = useDarken(); + const saturateMutation = useSaturate(); + const desaturateMutation = useDesaturate(); + const rotateMutation = useRotate(); + + const parseColors = (text: string): string[] => { + // Parse colors from text (one per line, or comma-separated) + return text + .split(/[\n,]/) + .map((c) => c.trim()) + .filter((c) => c.length > 0 && c.match(/^#?[0-9a-fA-F]{3,8}$/)); + }; + + const handleProcess = async () => { + const colors = parseColors(inputColors); + + if (colors.length === 0) { + toast.error('No valid colors found'); + return; + } + + if (colors.length > 100) { + toast.error('Maximum 100 colors allowed'); + return; + } + + try { + let result; + + switch (operation) { + case 'lighten': + result = await lightenMutation.mutateAsync({ colors, amount }); + break; + case 'darken': + result = await darkenMutation.mutateAsync({ colors, amount }); + break; + case 'saturate': + result = await saturateMutation.mutateAsync({ colors, amount }); + break; + case 'desaturate': + result = await desaturateMutation.mutateAsync({ colors, amount }); + break; + case 'rotate': + result = await rotateMutation.mutateAsync({ colors, amount: amount * 360 }); + break; + } + + // Extract output colors from the result + const processed = result.colors.map((c) => c.output); + setOutputColors(processed); + toast.success(`Processed ${processed.length} colors`); + } catch (error) { + toast.error('Failed to process colors'); + console.error(error); + } + }; + + const isPending = + lightenMutation.isPending || + darkenMutation.isPending || + saturateMutation.isPending || + desaturateMutation.isPending || + rotateMutation.isPending; + + return ( +
+
+
+

Batch Operations

+

+ Process multiple colors at once with manipulation operations +

+
+ +
+ {/* Input */} +
+
+

Input Colors

+

+ Enter colors (one per line or comma-separated). Supports hex format +

+ +