Skip to content

Commit 5c2b0b9

Browse files
authored
Merge pull request #62 from khlebobul:file_icons
File icons
2 parents 797eba3 + d7abb7e commit 5c2b0b9

135 files changed

Lines changed: 7103 additions & 75 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/pull_request_template.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,4 @@
22

33
- [ ] bugfix
44
- [ ] new icon / icon update
5-
- [ ] other
6-
7-
### Demo video with icons
8-
9-
// TODO
5+
- [ ] other

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 0.47.0
2+
3+
#### New icons
4+
* Added 55 animated file icons, including archive, charts, code, media, search, security, status, and editing variants.
5+
* Added 8 animated icons: `files`, `film`, `fingerprint-pattern`, `fire-extinguisher`, `fish-off`, `fish-symbol`, `fishing-hook`, and `fishing-rod`.
6+
17
## 0.46.0
28

39
#### New icons

ICON_CHECKLIST.md

Lines changed: 69 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Lucide Icons Checklist
2-
Generated on 2026-05-27T04:59:54.073344Z UTC.
2+
Generated on 2026-07-04T22:06:30.826663Z UTC.
33

4-
## ✅ Existing Icons (621)
4+
## ✅ Existing Icons (684)
55
- [x] `a-arrow-down`
66
- [x] `a-arrow-up`
77
- [x] `a-large-small`
@@ -588,7 +588,70 @@ Generated on 2026-05-27T04:59:54.073344Z UTC.
588588
- [x] `feather`
589589
- [x] `fence`
590590
- [x] `ferris-wheel`
591+
- [x] `file`
592+
- [x] `file-archive`
593+
- [x] `file-axis-3d`
594+
- [x] `file-badge`
595+
- [x] `file-box`
596+
- [x] `file-braces`
597+
- [x] `file-braces-corner`
598+
- [x] `file-chart-column`
599+
- [x] `file-chart-column-increasing`
600+
- [x] `file-chart-line`
601+
- [x] `file-chart-pie`
602+
- [x] `file-check`
603+
- [x] `file-check-corner`
604+
- [x] `file-clock`
605+
- [x] `file-code`
606+
- [x] `file-code-corner`
607+
- [x] `file-cog`
608+
- [x] `file-diff`
609+
- [x] `file-digit`
610+
- [x] `file-down`
611+
- [x] `file-exclamation-point`
612+
- [x] `file-headphone`
613+
- [x] `file-heart`
614+
- [x] `file-image`
615+
- [x] `file-input`
616+
- [x] `file-key`
617+
- [x] `file-lock`
618+
- [x] `file-minus`
619+
- [x] `file-minus-corner`
620+
- [x] `file-music`
621+
- [x] `file-output`
622+
- [x] `file-pen`
623+
- [x] `file-pen-line`
624+
- [x] `file-play`
625+
- [x] `file-plus`
626+
- [x] `file-plus-corner`
627+
- [x] `file-question-mark`
628+
- [x] `file-scan`
629+
- [x] `file-search`
630+
- [x] `file-search-corner`
631+
- [x] `file-signal`
632+
- [x] `file-sliders`
633+
- [x] `file-spreadsheet`
634+
- [x] `file-stack`
635+
- [x] `file-symlink`
636+
- [x] `file-terminal`
637+
- [x] `file-text`
638+
- [x] `file-type`
639+
- [x] `file-type-corner`
640+
- [x] `file-up`
641+
- [x] `file-user`
642+
- [x] `file-video-camera`
643+
- [x] `file-volume`
644+
- [x] `file-x`
645+
- [x] `file-x-corner`
646+
- [x] `files`
647+
- [x] `film`
648+
- [x] `fingerprint-pattern`
649+
- [x] `fire-extinguisher`
591650
- [x] `fish`
651+
- [x] `fish-off`
652+
- [x] `fish-symbol`
653+
- [x] `fishing-hook`
654+
- [x] `fishing-rod`
592655
- [x] `grid-2x2`
593656
- [x] `hash`
594657
- [x] `heart`
@@ -624,70 +687,7 @@ Generated on 2026-05-27T04:59:54.073344Z UTC.
624687
- [x] `venus`
625688
- [x] `x`
626689

627-
## ➕ New Icons to Add (1090)
628-
- [ ] `file`
629-
- [ ] `file-archive`
630-
- [ ] `file-axis-3d`
631-
- [ ] `file-badge`
632-
- [ ] `file-box`
633-
- [ ] `file-braces`
634-
- [ ] `file-braces-corner`
635-
- [ ] `file-chart-column`
636-
- [ ] `file-chart-column-increasing`
637-
- [ ] `file-chart-line`
638-
- [ ] `file-chart-pie`
639-
- [ ] `file-check`
640-
- [ ] `file-check-corner`
641-
- [ ] `file-clock`
642-
- [ ] `file-code`
643-
- [ ] `file-code-corner`
644-
- [ ] `file-cog`
645-
- [ ] `file-diff`
646-
- [ ] `file-digit`
647-
- [ ] `file-down`
648-
- [ ] `file-exclamation-point`
649-
- [ ] `file-headphone`
650-
- [ ] `file-heart`
651-
- [ ] `file-image`
652-
- [ ] `file-input`
653-
- [ ] `file-key`
654-
- [ ] `file-lock`
655-
- [ ] `file-minus`
656-
- [ ] `file-minus-corner`
657-
- [ ] `file-music`
658-
- [ ] `file-output`
659-
- [ ] `file-pen`
660-
- [ ] `file-pen-line`
661-
- [ ] `file-play`
662-
- [ ] `file-plus`
663-
- [ ] `file-plus-corner`
664-
- [ ] `file-question-mark`
665-
- [ ] `file-scan`
666-
- [ ] `file-search`
667-
- [ ] `file-search-corner`
668-
- [ ] `file-signal`
669-
- [ ] `file-sliders`
670-
- [ ] `file-spreadsheet`
671-
- [ ] `file-stack`
672-
- [ ] `file-symlink`
673-
- [ ] `file-terminal`
674-
- [ ] `file-text`
675-
- [ ] `file-type`
676-
- [ ] `file-type-corner`
677-
- [ ] `file-up`
678-
- [ ] `file-user`
679-
- [ ] `file-video-camera`
680-
- [ ] `file-volume`
681-
- [ ] `file-x`
682-
- [ ] `file-x-corner`
683-
- [ ] `files`
684-
- [ ] `film`
685-
- [ ] `fingerprint-pattern`
686-
- [ ] `fire-extinguisher`
687-
- [ ] `fish-off`
688-
- [ ] `fish-symbol`
689-
- [ ] `fishing-hook`
690-
- [ ] `fishing-rod`
690+
## ➕ New Icons to Add (1030)
691691
- [ ] `flag`
692692
- [ ] `flag-off`
693693
- [ ] `flag-triangle-left`
@@ -783,6 +783,7 @@ Generated on 2026-05-27T04:59:54.073344Z UTC.
783783
- [ ] `glass-water`
784784
- [ ] `glasses`
785785
- [ ] `globe`
786+
- [ ] `globe-check`
786787
- [ ] `globe-lock`
787788
- [ ] `globe-off`
788789
- [ ] `globe-x`
@@ -1146,6 +1147,7 @@ Generated on 2026-05-27T04:59:54.073344Z UTC.
11461147
- [ ] `panels-right-bottom`
11471148
- [ ] `panels-top-left`
11481149
- [ ] `paperclip`
1150+
- [ ] `parasol`
11491151
- [ ] `parentheses`
11501152
- [ ] `parking-meter`
11511153
- [ ] `party-popper`
@@ -1188,6 +1190,7 @@ Generated on 2026-05-27T04:59:54.073344Z UTC.
11881190
- [ ] `plane`
11891191
- [ ] `plane-landing`
11901192
- [ ] `plane-takeoff`
1193+
- [ ] `play-off`
11911194
- [ ] `plug`
11921195
- [ ] `plug-2`
11931196
- [ ] `plug-zap`

example/pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ packages:
166166
path: ".."
167167
relative: true
168168
source: path
169-
version: "0.45.0"
169+
version: "0.47.0"
170170
path:
171171
dependency: transitive
172172
description:

lib/src/all_icons.dart

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,69 @@ export 'icons/disc_2_icon.dart';
532532
export 'icons/disc_3_icon.dart';
533533
export 'icons/disc_album_icon.dart';
534534
export 'icons/disc_icon.dart';
535+
export 'icons/file_icon.dart';
536+
export 'icons/file_archive_icon.dart';
537+
export 'icons/file_axis_3d_icon.dart';
538+
export 'icons/file_badge_icon.dart';
539+
export 'icons/file_box_icon.dart';
540+
export 'icons/file_braces_icon.dart';
541+
export 'icons/file_braces_corner_icon.dart';
542+
export 'icons/file_chart_column_icon.dart';
543+
export 'icons/file_chart_column_increasing_icon.dart';
544+
export 'icons/file_chart_line_icon.dart';
545+
export 'icons/file_chart_pie_icon.dart';
546+
export 'icons/file_check_icon.dart';
547+
export 'icons/file_check_corner_icon.dart';
548+
export 'icons/file_clock_icon.dart';
549+
export 'icons/file_code_icon.dart';
550+
export 'icons/file_code_corner_icon.dart';
551+
export 'icons/file_cog_icon.dart';
552+
export 'icons/file_diff_icon.dart';
553+
export 'icons/file_digit_icon.dart';
554+
export 'icons/file_down_icon.dart';
555+
export 'icons/file_exclamation_point_icon.dart';
556+
export 'icons/file_headphone_icon.dart';
557+
export 'icons/file_heart_icon.dart';
558+
export 'icons/file_image_icon.dart';
559+
export 'icons/file_input_icon.dart';
560+
export 'icons/file_key_icon.dart';
561+
export 'icons/file_lock_icon.dart';
562+
export 'icons/file_minus_icon.dart';
563+
export 'icons/file_minus_corner_icon.dart';
564+
export 'icons/file_music_icon.dart';
565+
export 'icons/file_output_icon.dart';
566+
export 'icons/file_pen_icon.dart';
567+
export 'icons/file_pen_line_icon.dart';
568+
export 'icons/file_play_icon.dart';
569+
export 'icons/file_plus_icon.dart';
570+
export 'icons/file_plus_corner_icon.dart';
571+
export 'icons/file_question_mark_icon.dart';
572+
export 'icons/file_scan_icon.dart';
573+
export 'icons/file_search_icon.dart';
574+
export 'icons/file_search_corner_icon.dart';
575+
export 'icons/file_signal_icon.dart';
576+
export 'icons/file_sliders_icon.dart';
577+
export 'icons/file_spreadsheet_icon.dart';
578+
export 'icons/file_stack_icon.dart';
579+
export 'icons/file_symlink_icon.dart';
580+
export 'icons/file_terminal_icon.dart';
581+
export 'icons/file_text_icon.dart';
582+
export 'icons/file_type_icon.dart';
583+
export 'icons/file_type_corner_icon.dart';
584+
export 'icons/file_up_icon.dart';
585+
export 'icons/file_user_icon.dart';
586+
export 'icons/file_video_camera_icon.dart';
587+
export 'icons/file_volume_icon.dart';
588+
export 'icons/file_x_icon.dart';
589+
export 'icons/file_x_corner_icon.dart';
590+
export 'icons/files_icon.dart';
591+
export 'icons/film_icon.dart';
592+
export 'icons/fingerprint_pattern_icon.dart';
593+
export 'icons/fire_extinguisher_icon.dart';
594+
export 'icons/fish_off_icon.dart';
595+
export 'icons/fish_symbol_icon.dart';
596+
export 'icons/fishing_hook_icon.dart';
597+
export 'icons/fishing_rod_icon.dart';
535598
export 'icons/fish_icon.dart';
536599
export 'icons/palette_icon.dart';
537600
export 'icons/sailboat_icon.dart';
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
import 'package:flutter/material.dart';
2+
import '../core/animated_svg_icon_base.dart';
3+
4+
/// Animated File Archive Icon - archive box lifts
5+
class FileArchiveIcon extends AnimatedSVGIcon {
6+
const FileArchiveIcon({
7+
super.key,
8+
super.size = 40.0,
9+
super.color,
10+
super.hoverColor,
11+
super.animationDuration = const Duration(milliseconds: 650),
12+
super.strokeWidth = 2.0,
13+
super.reverseOnExit = false,
14+
super.enableTouchInteraction = true,
15+
super.infiniteLoop = false,
16+
super.onTap,
17+
super.interactive,
18+
super.controller,
19+
});
20+
21+
@override
22+
String get animationDescription => "archive box lifts";
23+
24+
@override
25+
CustomPainter createPainter({
26+
required Color color,
27+
required double animationValue,
28+
required double strokeWidth,
29+
}) {
30+
return FileArchivePainter(
31+
color: color,
32+
animationValue: animationValue,
33+
strokeWidth: strokeWidth,
34+
);
35+
}
36+
}
37+
38+
class FileArchivePainter extends CustomPainter {
39+
final Color color;
40+
final double animationValue;
41+
final double strokeWidth;
42+
43+
FileArchivePainter({
44+
required this.color,
45+
required this.animationValue,
46+
required this.strokeWidth,
47+
});
48+
49+
@override
50+
void paint(Canvas canvas, Size size) {
51+
final paint = Paint()
52+
..color = color
53+
..strokeWidth = strokeWidth
54+
..strokeCap = StrokeCap.round
55+
..strokeJoin = StrokeJoin.round
56+
..style = PaintingStyle.stroke;
57+
58+
final scale = size.width / 24.0;
59+
final path0 = Path();
60+
path0.moveTo(13.659 * scale, 22 * scale);
61+
path0.lineTo(18 * scale, 22 * scale);
62+
path0.arcToPoint(Offset(20 * scale, 20 * scale),
63+
radius: Radius.circular(2 * scale), clockwise: false);
64+
path0.lineTo(20 * scale, 8 * scale);
65+
path0.arcToPoint(Offset(19.294 * scale, 6.294 * scale),
66+
radius: Radius.circular(2.4 * scale), clockwise: false);
67+
path0.lineTo(15.706 * scale, 2.706 * scale);
68+
path0.arcToPoint(Offset(14 * scale, 2 * scale),
69+
radius: Radius.circular(2.4 * scale), clockwise: false);
70+
path0.lineTo(6 * scale, 2 * scale);
71+
path0.arcToPoint(Offset(4 * scale, 4 * scale),
72+
radius: Radius.circular(2 * scale), clockwise: false);
73+
path0.lineTo(4 * scale, 15.5 * scale);
74+
canvas.drawPath(path0, paint);
75+
final path1 = Path();
76+
path1.moveTo(14 * scale, 2 * scale);
77+
path1.lineTo(14 * scale, 7 * scale);
78+
path1.arcToPoint(Offset(15 * scale, 8 * scale),
79+
radius: Radius.circular(1 * scale), clockwise: false);
80+
path1.lineTo(20 * scale, 8 * scale);
81+
canvas.drawPath(path1, paint);
82+
final pulse = 4 * animationValue * (1 - animationValue);
83+
final path2 = Path();
84+
path2.moveTo(8 * scale, 12 * scale);
85+
path2.lineTo(8 * scale, 11 * scale);
86+
canvas.drawPath(path2, paint);
87+
final path3 = Path();
88+
path3.moveTo(8 * scale, 18 * scale);
89+
path3.lineTo(8 * scale, 16 * scale);
90+
canvas.drawPath(path3, paint);
91+
final path4 = Path();
92+
path4.moveTo(8 * scale, 7 * scale);
93+
path4.lineTo(8 * scale, 6 * scale);
94+
canvas.drawPath(path4, paint);
95+
canvas.save();
96+
canvas.translate(0, -pulse * 2.2 * scale);
97+
canvas.drawCircle(Offset(8 * scale, 20 * scale), 2 * scale, paint);
98+
canvas.restore();
99+
}
100+
101+
@override
102+
bool shouldRepaint(FileArchivePainter oldDelegate) {
103+
return oldDelegate.color != color ||
104+
oldDelegate.animationValue != animationValue ||
105+
oldDelegate.strokeWidth != strokeWidth;
106+
}
107+
}

0 commit comments

Comments
 (0)