diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 381a69b37e..029a9e6e03 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -188,11 +188,6 @@ jobs: access: public package: packages/react-icons-font-subsetting-webpack-plugin/package.json - - name: Build React-Native library - run: | - npm run build - working-directory: packages/react-native-icons - - uses: JS-DevTools/npm-publish@v1 with: token: ${{ secrets.NPM_TOKEN }} diff --git a/flutter/lib/fonts/FluentSystemIcons-Light.ttf b/flutter/lib/fonts/FluentSystemIcons-Light.ttf new file mode 100644 index 0000000000..23c83dd6a4 Binary files /dev/null and b/flutter/lib/fonts/FluentSystemIcons-Light.ttf differ diff --git a/fonts/FluentSystemIcons-Light.css b/fonts/FluentSystemIcons-Light.css new file mode 100644 index 0000000000..43a9a11d80 --- /dev/null +++ b/fonts/FluentSystemIcons-Light.css @@ -0,0 +1,468 @@ +@font-face { + font-family: "FluentSystemIcons-Light"; + src: url("./FluentSystemIcons-Light.woff2?d28ee75896ad379c3c432cf6635fa7e8") format("woff2"), +url("./FluentSystemIcons-Light.woff?d28ee75896ad379c3c432cf6635fa7e8") format("woff"), +url("./FluentSystemIcons-Light.ttf?d28ee75896ad379c3c432cf6635fa7e8") format("truetype"); +} + +i[class^="icon-"]:before, i[class*=" icon-"]:before { + font-family: FluentSystemIcons-Light !important; + font-style: normal; + font-weight: normal !important; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-ic_fluent_accessibility_checkmark_32_light:before { + content: "\e000"; +} +.icon-ic_fluent_add_32_light:before { + content: "\e001"; +} +.icon-ic_fluent_app_folder_32_light:before { + content: "\e002"; +} +.icon-ic_fluent_archive_32_light:before { + content: "\e003"; +} +.icon-ic_fluent_archive_settings_32_light:before { + content: "\e004"; +} +.icon-ic_fluent_arrow_clockwise_32_light:before { + content: "\e005"; +} +.icon-ic_fluent_arrow_down_32_light:before { + content: "\e006"; +} +.icon-ic_fluent_arrow_forward_32_light:before { + content: "\e007"; +} +.icon-ic_fluent_arrow_hook_up_left_32_light:before { + content: "\e008"; +} +.icon-ic_fluent_arrow_redo_32_light:before { + content: "\e009"; +} +.icon-ic_fluent_arrow_reply_32_light:before { + content: "\e00a"; +} +.icon-ic_fluent_arrow_reply_all_32_light:before { + content: "\e00b"; +} +.icon-ic_fluent_arrow_undo_32_light:before { + content: "\e00c"; +} +.icon-ic_fluent_attach_32_light:before { + content: "\e00d"; +} +.icon-ic_fluent_auto_fit_32_light:before { + content: "\e00e"; +} +.icon-ic_fluent_autocorrect_32_light:before { + content: "\e00f"; +} +.icon-ic_fluent_broom_32_light:before { + content: "\e010"; +} +.icon-ic_fluent_calendar_3_day_32_light:before { + content: "\e011"; +} +.icon-ic_fluent_calendar_clock_32_light:before { + content: "\e012"; +} +.icon-ic_fluent_calendar_data_bar_32_light:before { + content: "\e013"; +} +.icon-ic_fluent_calendar_day_32_light:before { + content: "\e014"; +} +.icon-ic_fluent_calendar_edit_32_light:before { + content: "\e015"; +} +.icon-ic_fluent_calendar_empty_32_light:before { + content: "\e016"; +} +.icon-ic_fluent_calendar_ltr_32_light:before { + content: "\e017"; +} +.icon-ic_fluent_calendar_month_32_light:before { + content: "\e018"; +} +.icon-ic_fluent_calendar_multiple_32_light:before { + content: "\e019"; +} +.icon-ic_fluent_calendar_pattern_32_light:before { + content: "\e01a"; +} +.icon-ic_fluent_calendar_reply_32_light:before { + content: "\e01b"; +} +.icon-ic_fluent_calendar_work_week_32_light:before { + content: "\e01c"; +} +.icon-ic_fluent_checkmark_32_light:before { + content: "\e01d"; +} +.icon-ic_fluent_checkmark_circle_32_light:before { + content: "\e01e"; +} +.icon-ic_fluent_classification_32_light:before { + content: "\e01f"; +} +.icon-ic_fluent_clipboard_paste_32_light:before { + content: "\e020"; +} +.icon-ic_fluent_clock_32_light:before { + content: "\e021"; +} +.icon-ic_fluent_clock_alarm_32_light:before { + content: "\e022"; +} +.icon-ic_fluent_color_32_light:before { + content: "\e023"; +} +.icon-ic_fluent_color_fill_32_light:before { + content: "\e024"; +} +.icon-ic_fluent_comment_32_light:before { + content: "\e025"; +} +.icon-ic_fluent_comment_add_32_light:before { + content: "\e026"; +} +.icon-ic_fluent_compose_32_light:before { + content: "\e027"; +} +.icon-ic_fluent_copy_32_light:before { + content: "\e028"; +} +.icon-ic_fluent_crop_32_light:before { + content: "\e029"; +} +.icon-ic_fluent_cursor_32_light:before { + content: "\e02a"; +} +.icon-ic_fluent_delete_32_light:before { + content: "\e02b"; +} +.icon-ic_fluent_dismiss_32_light:before { + content: "\e02c"; +} +.icon-ic_fluent_dismiss_circle_32_light:before { + content: "\e02d"; +} +.icon-ic_fluent_document_lightning_32_light:before { + content: "\e02e"; +} +.icon-ic_fluent_document_signature_32_light:before { + content: "\e02f"; +} +.icon-ic_fluent_door_arrow_right_32_light:before { + content: "\e030"; +} +.icon-ic_fluent_edit_32_light:before { + content: "\e031"; +} +.icon-ic_fluent_emoji_32_light:before { + content: "\e032"; +} +.icon-ic_fluent_filter_32_light:before { + content: "\e033"; +} +.icon-ic_fluent_flag_32_light:before { + content: "\e034"; +} +.icon-ic_fluent_flag_off_32_light:before { + content: "\e035"; +} +.icon-ic_fluent_flash_32_light:before { + content: "\e036"; +} +.icon-ic_fluent_folder_arrow_right_32_light:before { + content: "\e037"; +} +.icon-ic_fluent_folder_mail_32_light:before { + content: "\e038"; +} +.icon-ic_fluent_hand_draw_32_light:before { + content: "\e039"; +} +.icon-ic_fluent_image_add_32_light:before { + content: "\e03a"; +} +.icon-ic_fluent_image_alt_text_32_light:before { + content: "\e03b"; +} +.icon-ic_fluent_image_copy_32_light:before { + content: "\e03c"; +} +.icon-ic_fluent_image_reflection_32_light:before { + content: "\e03d"; +} +.icon-ic_fluent_image_shadow_32_light:before { + content: "\e03e"; +} +.icon-ic_fluent_immersive_reader_32_light:before { + content: "\e03f"; +} +.icon-ic_fluent_important_32_light:before { + content: "\e040"; +} +.icon-ic_fluent_lasso_32_light:before { + content: "\e041"; +} +.icon-ic_fluent_layout_column_two_32_light:before { + content: "\e042"; +} +.icon-ic_fluent_layout_column_two_focus_left_32_light:before { + content: "\e043"; +} +.icon-ic_fluent_layout_column_two_focus_right_32_light:before { + content: "\e044"; +} +.icon-ic_fluent_layout_row_two_32_light:before { + content: "\e045"; +} +.icon-ic_fluent_layout_row_two_focus_top_32_light:before { + content: "\e046"; +} +.icon-ic_fluent_link_32_light:before { + content: "\e047"; +} +.icon-ic_fluent_lock_closed_32_light:before { + content: "\e048"; +} +.icon-ic_fluent_lock_open_32_light:before { + content: "\e049"; +} +.icon-ic_fluent_mail_32_light:before { + content: "\e04a"; +} +.icon-ic_fluent_mail_alert_32_light:before { + content: "\e04b"; +} +.icon-ic_fluent_mail_arrow_clockwise_32_light:before { + content: "\e04c"; +} +.icon-ic_fluent_mail_arrow_double_back_32_light:before { + content: "\e04d"; +} +.icon-ic_fluent_mail_copy_32_light:before { + content: "\e04e"; +} +.icon-ic_fluent_mail_edit_32_light:before { + content: "\e04f"; +} +.icon-ic_fluent_mail_list_32_light:before { + content: "\e050"; +} +.icon-ic_fluent_mail_multiple_32_light:before { + content: "\e051"; +} +.icon-ic_fluent_mail_read_32_light:before { + content: "\e052"; +} +.icon-ic_fluent_mail_rewind_32_light:before { + content: "\e053"; +} +.icon-ic_fluent_mail_settings_32_light:before { + content: "\e054"; +} +.icon-ic_fluent_mail_unread_32_light:before { + content: "\e055"; +} +.icon-ic_fluent_mic_32_light:before { + content: "\e056"; +} +.icon-ic_fluent_note_32_light:before { + content: "\e057"; +} +.icon-ic_fluent_options_32_light:before { + content: "\e058"; +} +.icon-ic_fluent_paint_brush_32_light:before { + content: "\e059"; +} +.icon-ic_fluent_panel_left_default_32_light:before { + content: "\e05a"; +} +.icon-ic_fluent_panel_left_focus_right_32_light:before { + content: "\e05b"; +} +.icon-ic_fluent_pen_sparkle_32_light:before { + content: "\e05c"; +} +.icon-ic_fluent_people_32_light:before { + content: "\e05d"; +} +.icon-ic_fluent_people_add_32_light:before { + content: "\e05e"; +} +.icon-ic_fluent_people_community_32_light:before { + content: "\e05f"; +} +.icon-ic_fluent_people_list_32_light:before { + content: "\e060"; +} +.icon-ic_fluent_people_settings_32_light:before { + content: "\e061"; +} +.icon-ic_fluent_people_sync_32_light:before { + content: "\e062"; +} +.icon-ic_fluent_person_32_light:before { + content: "\e063"; +} +.icon-ic_fluent_person_add_32_light:before { + content: "\e064"; +} +.icon-ic_fluent_person_available_32_light:before { + content: "\e065"; +} +.icon-ic_fluent_person_feedback_32_light:before { + content: "\e066"; +} +.icon-ic_fluent_person_prohibited_32_light:before { + content: "\e067"; +} +.icon-ic_fluent_person_suport_32_light:before { + content: "\e068"; +} +.icon-ic_fluent_phone_32_light:before { + content: "\e069"; +} +.icon-ic_fluent_picture_in_picture_32_light:before { + content: "\e06a"; +} +.icon-ic_fluent_pin_32_light:before { + content: "\e06b"; +} +.icon-ic_fluent_pin_off_32_light:before { + content: "\e06c"; +} +.icon-ic_fluent_poll_32_light:before { + content: "\e06d"; +} +.icon-ic_fluent_print_32_light:before { + content: "\e06e"; +} +.icon-ic_fluent_question_32_light:before { + content: "\e06f"; +} +.icon-ic_fluent_read_aloud_32_light:before { + content: "\e070"; +} +.icon-ic_fluent_rectangle_landscape_32_light:before { + content: "\e071"; +} +.icon-ic_fluent_rotate_left_32_light:before { + content: "\e072"; +} +.icon-ic_fluent_save_32_light:before { + content: "\e073"; +} +.icon-ic_fluent_send_clock_32_light:before { + content: "\e074"; +} +.icon-ic_fluent_settings_32_light:before { + content: "\e075"; +} +.icon-ic_fluent_share_32_light:before { + content: "\e076"; +} +.icon-ic_fluent_shield_error_32_light:before { + content: "\e077"; +} +.icon-ic_fluent_signature_32_light:before { + content: "\e078"; +} +.icon-ic_fluent_square_arrow_forward_32_light:before { + content: "\e079"; +} +.icon-ic_fluent_stamp_32_light:before { + content: "\e07a"; +} +.icon-ic_fluent_star_add_32_light:before { + content: "\e07b"; +} +.icon-ic_fluent_star_arrow_right_32_light:before { + content: "\e07c"; +} +.icon-ic_fluent_table_32_light:before { + content: "\e07d"; +} +.icon-ic_fluent_table_cells_merge_32_light:before { + content: "\e07e"; +} +.icon-ic_fluent_table_cells_split_32_light:before { + content: "\e07f"; +} +.icon-ic_fluent_table_dismiss_32_light:before { + content: "\e080"; +} +.icon-ic_fluent_table_move_above_32_light:before { + content: "\e081"; +} +.icon-ic_fluent_table_move_below_32_light:before { + content: "\e082"; +} +.icon-ic_fluent_table_move_left_32_light:before { + content: "\e083"; +} +.icon-ic_fluent_table_move_right_32_light:before { + content: "\e084"; +} +.icon-ic_fluent_table_settings_32_light:before { + content: "\e085"; +} +.icon-ic_fluent_table_simple_32_light:before { + content: "\e086"; +} +.icon-ic_fluent_tag_32_light:before { + content: "\e087"; +} +.icon-ic_fluent_text_32_light:before { + content: "\e088"; +} +.icon-ic_fluent_text_clear_formatting_32_light:before { + content: "\e089"; +} +.icon-ic_fluent_text_collapse_32_light:before { + content: "\e08a"; +} +.icon-ic_fluent_text_density_32_light:before { + content: "\e08b"; +} +.icon-ic_fluent_text_edit_style_32_light:before { + content: "\e08c"; +} +.icon-ic_fluent_text_expand_32_light:before { + content: "\e08d"; +} +.icon-ic_fluent_textbox_align_top_left_32_light:before { + content: "\e08e"; +} +.icon-ic_fluent_translate_32_light:before { + content: "\e08f"; +} +.icon-ic_fluent_video_32_light:before { + content: "\e090"; +} +.icon-ic_fluent_video_clip_32_light:before { + content: "\e091"; +} +.icon-ic_fluent_window_32_light:before { + content: "\e092"; +} +.icon-ic_fluent_wrench_screwdriver_32_light:before { + content: "\e093"; +} +.icon-ic_fluent_zoom_in_32_light:before { + content: "\e094"; +} +.icon-ic_fluent_zoom_out_32_light:before { + content: "\e095"; +} diff --git a/fonts/FluentSystemIcons-Light.html b/fonts/FluentSystemIcons-Light.html new file mode 100644 index 0000000000..9e9c3a8bd9 --- /dev/null +++ b/fonts/FluentSystemIcons-Light.html @@ -0,0 +1,1410 @@ + + + + + FluentSystemIcons-Light + + + + + + + +

FluentSystemIcons-Light

+ + +
+ + + +
+ ic_fluent_accessibility_checkmark_32_light +
+ + +
+ + + +
+ ic_fluent_add_32_light +
+ + +
+ + + +
+ ic_fluent_app_folder_32_light +
+ + +
+ + + +
+ ic_fluent_archive_32_light +
+ + +
+ + + +
+ ic_fluent_archive_settings_32_light +
+ + +
+ + + +
+ ic_fluent_arrow_clockwise_32_light +
+ + +
+ + + +
+ ic_fluent_arrow_down_32_light +
+ + +
+ + + +
+ ic_fluent_arrow_forward_32_light +
+ + +
+ + + +
+ ic_fluent_arrow_hook_up_left_32_light +
+ + +
+ + + +
+ ic_fluent_arrow_redo_32_light +
+ + +
+ + + +
+ ic_fluent_arrow_reply_32_light +
+ + +
+ + + +
+ ic_fluent_arrow_reply_all_32_light +
+ + +
+ + + +
+ ic_fluent_arrow_undo_32_light +
+ + +
+ + + +
+ ic_fluent_attach_32_light +
+ + +
+ + + +
+ ic_fluent_auto_fit_32_light +
+ + +
+ + + +
+ ic_fluent_autocorrect_32_light +
+ + +
+ + + +
+ ic_fluent_broom_32_light +
+ + +
+ + + +
+ ic_fluent_calendar_3_day_32_light +
+ + +
+ + + +
+ ic_fluent_calendar_clock_32_light +
+ + +
+ + + +
+ ic_fluent_calendar_data_bar_32_light +
+ + +
+ + + +
+ ic_fluent_calendar_day_32_light +
+ + +
+ + + +
+ ic_fluent_calendar_edit_32_light +
+ + +
+ + + +
+ ic_fluent_calendar_empty_32_light +
+ + +
+ + + +
+ ic_fluent_calendar_ltr_32_light +
+ + +
+ + + +
+ ic_fluent_calendar_month_32_light +
+ + +
+ + + +
+ ic_fluent_calendar_multiple_32_light +
+ + +
+ + + +
+ ic_fluent_calendar_pattern_32_light +
+ + +
+ + + +
+ ic_fluent_calendar_reply_32_light +
+ + +
+ + + +
+ ic_fluent_calendar_work_week_32_light +
+ + +
+ + + +
+ ic_fluent_checkmark_32_light +
+ + +
+ + + +
+ ic_fluent_checkmark_circle_32_light +
+ + +
+ + + +
+ ic_fluent_classification_32_light +
+ + +
+ + + +
+ ic_fluent_clipboard_paste_32_light +
+ + +
+ + + +
+ ic_fluent_clock_32_light +
+ + +
+ + + +
+ ic_fluent_clock_alarm_32_light +
+ + +
+ + + +
+ ic_fluent_color_32_light +
+ + +
+ + + +
+ ic_fluent_color_fill_32_light +
+ + +
+ + + +
+ ic_fluent_comment_32_light +
+ + +
+ + + +
+ ic_fluent_comment_add_32_light +
+ + +
+ + + +
+ ic_fluent_compose_32_light +
+ + +
+ + + +
+ ic_fluent_copy_32_light +
+ + +
+ + + +
+ ic_fluent_crop_32_light +
+ + +
+ + + +
+ ic_fluent_cursor_32_light +
+ + +
+ + + +
+ ic_fluent_delete_32_light +
+ + +
+ + + +
+ ic_fluent_dismiss_32_light +
+ + +
+ + + +
+ ic_fluent_dismiss_circle_32_light +
+ + +
+ + + +
+ ic_fluent_document_lightning_32_light +
+ + +
+ + + +
+ ic_fluent_document_signature_32_light +
+ + +
+ + + +
+ ic_fluent_door_arrow_right_32_light +
+ + +
+ + + +
+ ic_fluent_edit_32_light +
+ + +
+ + + +
+ ic_fluent_emoji_32_light +
+ + +
+ + + +
+ ic_fluent_filter_32_light +
+ + +
+ + + +
+ ic_fluent_flag_32_light +
+ + +
+ + + +
+ ic_fluent_flag_off_32_light +
+ + +
+ + + +
+ ic_fluent_flash_32_light +
+ + +
+ + + +
+ ic_fluent_folder_arrow_right_32_light +
+ + +
+ + + +
+ ic_fluent_folder_mail_32_light +
+ + +
+ + + +
+ ic_fluent_hand_draw_32_light +
+ + +
+ + + +
+ ic_fluent_image_add_32_light +
+ + +
+ + + +
+ ic_fluent_image_alt_text_32_light +
+ + +
+ + + +
+ ic_fluent_image_copy_32_light +
+ + +
+ + + +
+ ic_fluent_image_reflection_32_light +
+ + +
+ + + +
+ ic_fluent_image_shadow_32_light +
+ + +
+ + + +
+ ic_fluent_immersive_reader_32_light +
+ + +
+ + + +
+ ic_fluent_important_32_light +
+ + +
+ + + +
+ ic_fluent_lasso_32_light +
+ + +
+ + + +
+ ic_fluent_layout_column_two_32_light +
+ + +
+ + + +
+ ic_fluent_layout_column_two_focus_left_32_light +
+ + +
+ + + +
+ ic_fluent_layout_column_two_focus_right_32_light +
+ + +
+ + + +
+ ic_fluent_layout_row_two_32_light +
+ + +
+ + + +
+ ic_fluent_layout_row_two_focus_top_32_light +
+ + +
+ + + +
+ ic_fluent_link_32_light +
+ + +
+ + + +
+ ic_fluent_lock_closed_32_light +
+ + +
+ + + +
+ ic_fluent_lock_open_32_light +
+ + +
+ + + +
+ ic_fluent_mail_32_light +
+ + +
+ + + +
+ ic_fluent_mail_alert_32_light +
+ + +
+ + + +
+ ic_fluent_mail_arrow_clockwise_32_light +
+ + +
+ + + +
+ ic_fluent_mail_arrow_double_back_32_light +
+ + +
+ + + +
+ ic_fluent_mail_copy_32_light +
+ + +
+ + + +
+ ic_fluent_mail_edit_32_light +
+ + +
+ + + +
+ ic_fluent_mail_list_32_light +
+ + +
+ + + +
+ ic_fluent_mail_multiple_32_light +
+ + +
+ + + +
+ ic_fluent_mail_read_32_light +
+ + +
+ + + +
+ ic_fluent_mail_rewind_32_light +
+ + +
+ + + +
+ ic_fluent_mail_settings_32_light +
+ + +
+ + + +
+ ic_fluent_mail_unread_32_light +
+ + +
+ + + +
+ ic_fluent_mic_32_light +
+ + +
+ + + +
+ ic_fluent_note_32_light +
+ + +
+ + + +
+ ic_fluent_options_32_light +
+ + +
+ + + +
+ ic_fluent_paint_brush_32_light +
+ + +
+ + + +
+ ic_fluent_panel_left_default_32_light +
+ + +
+ + + +
+ ic_fluent_panel_left_focus_right_32_light +
+ + +
+ + + +
+ ic_fluent_pen_sparkle_32_light +
+ + +
+ + + +
+ ic_fluent_people_32_light +
+ + +
+ + + +
+ ic_fluent_people_add_32_light +
+ + +
+ + + +
+ ic_fluent_people_community_32_light +
+ + +
+ + + +
+ ic_fluent_people_list_32_light +
+ + +
+ + + +
+ ic_fluent_people_settings_32_light +
+ + +
+ + + +
+ ic_fluent_people_sync_32_light +
+ + +
+ + + +
+ ic_fluent_person_32_light +
+ + +
+ + + +
+ ic_fluent_person_add_32_light +
+ + +
+ + + +
+ ic_fluent_person_available_32_light +
+ + +
+ + + +
+ ic_fluent_person_feedback_32_light +
+ + +
+ + + +
+ ic_fluent_person_prohibited_32_light +
+ + +
+ + + +
+ ic_fluent_person_suport_32_light +
+ + +
+ + + +
+ ic_fluent_phone_32_light +
+ + +
+ + + +
+ ic_fluent_picture_in_picture_32_light +
+ + +
+ + + +
+ ic_fluent_pin_32_light +
+ + +
+ + + +
+ ic_fluent_pin_off_32_light +
+ + +
+ + + +
+ ic_fluent_poll_32_light +
+ + +
+ + + +
+ ic_fluent_print_32_light +
+ + +
+ + + +
+ ic_fluent_question_32_light +
+ + +
+ + + +
+ ic_fluent_read_aloud_32_light +
+ + +
+ + + +
+ ic_fluent_rectangle_landscape_32_light +
+ + +
+ + + +
+ ic_fluent_rotate_left_32_light +
+ + +
+ + + +
+ ic_fluent_save_32_light +
+ + +
+ + + +
+ ic_fluent_send_clock_32_light +
+ + +
+ + + +
+ ic_fluent_settings_32_light +
+ + +
+ + + +
+ ic_fluent_share_32_light +
+ + +
+ + + +
+ ic_fluent_shield_error_32_light +
+ + +
+ + + +
+ ic_fluent_signature_32_light +
+ + +
+ + + +
+ ic_fluent_square_arrow_forward_32_light +
+ + +
+ + + +
+ ic_fluent_stamp_32_light +
+ + +
+ + + +
+ ic_fluent_star_add_32_light +
+ + +
+ + + +
+ ic_fluent_star_arrow_right_32_light +
+ + +
+ + + +
+ ic_fluent_table_32_light +
+ + +
+ + + +
+ ic_fluent_table_cells_merge_32_light +
+ + +
+ + + +
+ ic_fluent_table_cells_split_32_light +
+ + +
+ + + +
+ ic_fluent_table_dismiss_32_light +
+ + +
+ + + +
+ ic_fluent_table_move_above_32_light +
+ + +
+ + + +
+ ic_fluent_table_move_below_32_light +
+ + +
+ + + +
+ ic_fluent_table_move_left_32_light +
+ + +
+ + + +
+ ic_fluent_table_move_right_32_light +
+ + +
+ + + +
+ ic_fluent_table_settings_32_light +
+ + +
+ + + +
+ ic_fluent_table_simple_32_light +
+ + +
+ + + +
+ ic_fluent_tag_32_light +
+ + +
+ + + +
+ ic_fluent_text_32_light +
+ + +
+ + + +
+ ic_fluent_text_clear_formatting_32_light +
+ + +
+ + + +
+ ic_fluent_text_collapse_32_light +
+ + +
+ + + +
+ ic_fluent_text_density_32_light +
+ + +
+ + + +
+ ic_fluent_text_edit_style_32_light +
+ + +
+ + + +
+ ic_fluent_text_expand_32_light +
+ + +
+ + + +
+ ic_fluent_textbox_align_top_left_32_light +
+ + +
+ + + +
+ ic_fluent_translate_32_light +
+ + +
+ + + +
+ ic_fluent_video_32_light +
+ + +
+ + + +
+ ic_fluent_video_clip_32_light +
+ + +
+ + + +
+ ic_fluent_window_32_light +
+ + +
+ + + +
+ ic_fluent_wrench_screwdriver_32_light +
+ + +
+ + + +
+ ic_fluent_zoom_in_32_light +
+ + +
+ + + +
+ ic_fluent_zoom_out_32_light +
+ + + + diff --git a/fonts/FluentSystemIcons-Light.json b/fonts/FluentSystemIcons-Light.json new file mode 100644 index 0000000000..65ab122c0c --- /dev/null +++ b/fonts/FluentSystemIcons-Light.json @@ -0,0 +1,152 @@ +{ + "ic_fluent_accessibility_checkmark_32_light": 57344, + "ic_fluent_add_32_light": 57345, + "ic_fluent_app_folder_32_light": 57346, + "ic_fluent_archive_32_light": 57347, + "ic_fluent_archive_settings_32_light": 57348, + "ic_fluent_arrow_clockwise_32_light": 57349, + "ic_fluent_arrow_down_32_light": 57350, + "ic_fluent_arrow_forward_32_light": 57351, + "ic_fluent_arrow_hook_up_left_32_light": 57352, + "ic_fluent_arrow_redo_32_light": 57353, + "ic_fluent_arrow_reply_32_light": 57354, + "ic_fluent_arrow_reply_all_32_light": 57355, + "ic_fluent_arrow_undo_32_light": 57356, + "ic_fluent_attach_32_light": 57357, + "ic_fluent_auto_fit_32_light": 57358, + "ic_fluent_autocorrect_32_light": 57359, + "ic_fluent_broom_32_light": 57360, + "ic_fluent_calendar_3_day_32_light": 57361, + "ic_fluent_calendar_clock_32_light": 57362, + "ic_fluent_calendar_data_bar_32_light": 57363, + "ic_fluent_calendar_day_32_light": 57364, + "ic_fluent_calendar_edit_32_light": 57365, + "ic_fluent_calendar_empty_32_light": 57366, + "ic_fluent_calendar_ltr_32_light": 57367, + "ic_fluent_calendar_month_32_light": 57368, + "ic_fluent_calendar_multiple_32_light": 57369, + "ic_fluent_calendar_pattern_32_light": 57370, + "ic_fluent_calendar_reply_32_light": 57371, + "ic_fluent_calendar_work_week_32_light": 57372, + "ic_fluent_checkmark_32_light": 57373, + "ic_fluent_checkmark_circle_32_light": 57374, + "ic_fluent_classification_32_light": 57375, + "ic_fluent_clipboard_paste_32_light": 57376, + "ic_fluent_clock_32_light": 57377, + "ic_fluent_clock_alarm_32_light": 57378, + "ic_fluent_color_32_light": 57379, + "ic_fluent_color_fill_32_light": 57380, + "ic_fluent_comment_32_light": 57381, + "ic_fluent_comment_add_32_light": 57382, + "ic_fluent_compose_32_light": 57383, + "ic_fluent_copy_32_light": 57384, + "ic_fluent_crop_32_light": 57385, + "ic_fluent_cursor_32_light": 57386, + "ic_fluent_delete_32_light": 57387, + "ic_fluent_dismiss_32_light": 57388, + "ic_fluent_dismiss_circle_32_light": 57389, + "ic_fluent_document_lightning_32_light": 57390, + "ic_fluent_document_signature_32_light": 57391, + "ic_fluent_door_arrow_right_32_light": 57392, + "ic_fluent_edit_32_light": 57393, + "ic_fluent_emoji_32_light": 57394, + "ic_fluent_filter_32_light": 57395, + "ic_fluent_flag_32_light": 57396, + "ic_fluent_flag_off_32_light": 57397, + "ic_fluent_flash_32_light": 57398, + "ic_fluent_folder_arrow_right_32_light": 57399, + "ic_fluent_folder_mail_32_light": 57400, + "ic_fluent_hand_draw_32_light": 57401, + "ic_fluent_image_add_32_light": 57402, + "ic_fluent_image_alt_text_32_light": 57403, + "ic_fluent_image_copy_32_light": 57404, + "ic_fluent_image_reflection_32_light": 57405, + "ic_fluent_image_shadow_32_light": 57406, + "ic_fluent_immersive_reader_32_light": 57407, + "ic_fluent_important_32_light": 57408, + "ic_fluent_lasso_32_light": 57409, + "ic_fluent_layout_column_two_32_light": 57410, + "ic_fluent_layout_column_two_focus_left_32_light": 57411, + "ic_fluent_layout_column_two_focus_right_32_light": 57412, + "ic_fluent_layout_row_two_32_light": 57413, + "ic_fluent_layout_row_two_focus_top_32_light": 57414, + "ic_fluent_link_32_light": 57415, + "ic_fluent_lock_closed_32_light": 57416, + "ic_fluent_lock_open_32_light": 57417, + "ic_fluent_mail_32_light": 57418, + "ic_fluent_mail_alert_32_light": 57419, + "ic_fluent_mail_arrow_clockwise_32_light": 57420, + "ic_fluent_mail_arrow_double_back_32_light": 57421, + "ic_fluent_mail_copy_32_light": 57422, + "ic_fluent_mail_edit_32_light": 57423, + "ic_fluent_mail_list_32_light": 57424, + "ic_fluent_mail_multiple_32_light": 57425, + "ic_fluent_mail_read_32_light": 57426, + "ic_fluent_mail_rewind_32_light": 57427, + "ic_fluent_mail_settings_32_light": 57428, + "ic_fluent_mail_unread_32_light": 57429, + "ic_fluent_mic_32_light": 57430, + "ic_fluent_note_32_light": 57431, + "ic_fluent_options_32_light": 57432, + "ic_fluent_paint_brush_32_light": 57433, + "ic_fluent_panel_left_default_32_light": 57434, + "ic_fluent_panel_left_focus_right_32_light": 57435, + "ic_fluent_pen_sparkle_32_light": 57436, + "ic_fluent_people_32_light": 57437, + "ic_fluent_people_add_32_light": 57438, + "ic_fluent_people_community_32_light": 57439, + "ic_fluent_people_list_32_light": 57440, + "ic_fluent_people_settings_32_light": 57441, + "ic_fluent_people_sync_32_light": 57442, + "ic_fluent_person_32_light": 57443, + "ic_fluent_person_add_32_light": 57444, + "ic_fluent_person_available_32_light": 57445, + "ic_fluent_person_feedback_32_light": 57446, + "ic_fluent_person_prohibited_32_light": 57447, + "ic_fluent_person_suport_32_light": 57448, + "ic_fluent_phone_32_light": 57449, + "ic_fluent_picture_in_picture_32_light": 57450, + "ic_fluent_pin_32_light": 57451, + "ic_fluent_pin_off_32_light": 57452, + "ic_fluent_poll_32_light": 57453, + "ic_fluent_print_32_light": 57454, + "ic_fluent_question_32_light": 57455, + "ic_fluent_read_aloud_32_light": 57456, + "ic_fluent_rectangle_landscape_32_light": 57457, + "ic_fluent_rotate_left_32_light": 57458, + "ic_fluent_save_32_light": 57459, + "ic_fluent_send_clock_32_light": 57460, + "ic_fluent_settings_32_light": 57461, + "ic_fluent_share_32_light": 57462, + "ic_fluent_shield_error_32_light": 57463, + "ic_fluent_signature_32_light": 57464, + "ic_fluent_square_arrow_forward_32_light": 57465, + "ic_fluent_stamp_32_light": 57466, + "ic_fluent_star_add_32_light": 57467, + "ic_fluent_star_arrow_right_32_light": 57468, + "ic_fluent_table_32_light": 57469, + "ic_fluent_table_cells_merge_32_light": 57470, + "ic_fluent_table_cells_split_32_light": 57471, + "ic_fluent_table_dismiss_32_light": 57472, + "ic_fluent_table_move_above_32_light": 57473, + "ic_fluent_table_move_below_32_light": 57474, + "ic_fluent_table_move_left_32_light": 57475, + "ic_fluent_table_move_right_32_light": 57476, + "ic_fluent_table_settings_32_light": 57477, + "ic_fluent_table_simple_32_light": 57478, + "ic_fluent_tag_32_light": 57479, + "ic_fluent_text_32_light": 57480, + "ic_fluent_text_clear_formatting_32_light": 57481, + "ic_fluent_text_collapse_32_light": 57482, + "ic_fluent_text_density_32_light": 57483, + "ic_fluent_text_edit_style_32_light": 57484, + "ic_fluent_text_expand_32_light": 57485, + "ic_fluent_textbox_align_top_left_32_light": 57486, + "ic_fluent_translate_32_light": 57487, + "ic_fluent_video_32_light": 57488, + "ic_fluent_video_clip_32_light": 57489, + "ic_fluent_window_32_light": 57490, + "ic_fluent_wrench_screwdriver_32_light": 57491, + "ic_fluent_zoom_in_32_light": 57492, + "ic_fluent_zoom_out_32_light": 57493 +} \ No newline at end of file diff --git a/fonts/FluentSystemIcons-Light.ttf b/fonts/FluentSystemIcons-Light.ttf new file mode 100644 index 0000000000..23c83dd6a4 Binary files /dev/null and b/fonts/FluentSystemIcons-Light.ttf differ diff --git a/fonts/FluentSystemIcons-Light.woff b/fonts/FluentSystemIcons-Light.woff new file mode 100644 index 0000000000..e8c1d2cec2 Binary files /dev/null and b/fonts/FluentSystemIcons-Light.woff differ diff --git a/fonts/FluentSystemIcons-Light.woff2 b/fonts/FluentSystemIcons-Light.woff2 new file mode 100644 index 0000000000..ba8587cc59 Binary files /dev/null and b/fonts/FluentSystemIcons-Light.woff2 differ diff --git a/importer/generate.js b/importer/generate.js index e319b004df..32cdeeb8a9 100644 --- a/importer/generate.js +++ b/importer/generate.js @@ -82,6 +82,7 @@ function processFolder(srcPath, destPath, folderDepth) { return; } else if (!file.endsWith(ICON_OUTLINE_STYLE + "." + EXTENSION) && !file.endsWith(ICON_FILLED_STYLE + "." + EXTENSION) + && !file.endsWith(ICON_LIGHT_STYLE + "." + EXTENSION) && !(EXTENSION === "pdf" && file.endsWith(ICON_LIGHT_STYLE + "." + EXTENSION)) && !file.endsWith(BRAND_MONO_STYLE + "." + EXTENSION) && !file.endsWith(BRAND_COLOR_STYLE + "." + EXTENSION)) { diff --git a/importer/generateFont.js b/importer/generateFont.js index d7f43387a5..a3e50b7016 100644 --- a/importer/generateFont.js +++ b/importer/generateFont.js @@ -31,7 +31,7 @@ if (!SRC_PATH) { if (!DEST_PATH) { throw new Error("Output destination folder not specified by --dest"); } -if (!(ICON_TYPE === 'Filled' || ICON_TYPE === 'Regular' || ICON_TYPE === 'Resizable')) { +if (!(ICON_TYPE === 'Filled' || ICON_TYPE === 'Regular' || ICON_TYPE === 'Resizable' || ICON_TYPE === 'Light')) { throw new Error("Icon type not specified"); } @@ -41,7 +41,7 @@ async function main() { const stagingFolder = path.resolve(DEST_PATH, ICON_TYPE); await mkdirp(stagingFolder); - const svgFiles = await glob(path.resolve(SRC_PATH, `*_${ICON_TYPE === 'Resizable' ? '20_{filled,regular}' : ICON_TYPE.toLowerCase()}.svg`)); + const svgFiles = await glob(path.resolve(SRC_PATH, `*_${ICON_TYPE === 'Resizable' ? '20_{filled,regular,light}' : ICON_TYPE.toLowerCase()}.svg`)); const icons = new Set(svgFiles.map(file => path.basename(file).replace(/\.svg$/, ''))); if (icons.size > MAX_PRIVATE_USE_CODEPOINTS) { diff --git a/importer/package.json b/importer/package.json index 24254ee1c8..55d2bd6c9f 100644 --- a/importer/package.json +++ b/importer/package.json @@ -21,11 +21,12 @@ "deploy:ios": "python3 process_ios_assets.py", "generate:font-regular": "node generateFont.js --source=dist --dest=dist/fonts --iconType=Regular --codepoints=../fonts/FluentSystemIcons-Regular.json", "generate:font-filled": "node generateFont.js --source=dist --dest=dist/fonts --iconType=Filled --codepoints=../fonts/FluentSystemIcons-Filled.json", + "generate:font-light": "node generateFont.js --source=dist --dest=dist/fonts --iconType=Light", "generate:font-resizable": "node generateFont.js --source=dist --dest=dist/fonts --iconType=Resizable", - "build:fonts": "npm run generate:svg && find ./dist -type f -name '*.svg' -exec svgo --config svgo_config.yml {} + && mkdir dist/fonts && npm run generate:font-regular && npm run generate:font-filled && npm run generate:font-resizable && replace '\\\\\\\\' '0x' dist/fonts/*.json", + "build:fonts": "npm run generate:svg && find ./dist -type f -name '*.svg' -exec svgo --config svgo_config.yml {} + && mkdir dist/fonts && npm run generate:font-regular && npm run generate:font-filled && npm run generate:font-light && npm run generate:font-resizable && replace '\\\\\\\\' '0x' dist/fonts/*.json", "deploy:fonts": "npm run build:fonts && cp -a dist/fonts/* ../fonts && npm run clean", - "generate:flutter-icon-lib-class": "node generate_flutter_lib_class.js --source=../fonts/FluentSystemIcons-Regular.json ../fonts/FluentSystemIcons-Filled.json --dest=dist/flutter", - "generate:flutter-icon-demo-class": "node generate_flutter_demo_class.js --source=../fonts/FluentSystemIcons-Regular.json ../fonts/FluentSystemIcons-Filled.json --dest=dist/flutter", + "generate:flutter-icon-lib-class": "node generate_flutter_lib_class.js --source=../fonts/FluentSystemIcons-Regular.json ../fonts/FluentSystemIcons-Filled.json ../fonts/FluentSystemIcons-Light.json --dest=dist/flutter", + "generate:flutter-icon-demo-class": "node generate_flutter_demo_class.js --source=../fonts/FluentSystemIcons-Regular.json ../fonts/FluentSystemIcons-Filled.json ../fonts/FluentSystemIcons-Light.json --dest=dist/flutter", "build:flutter": "npm run deploy:fonts && mkdir dist/flutter && npm run generate:flutter-icon-lib-class && npm run generate:flutter-icon-demo-class", "deploy:flutter": "npm run build:flutter && cp ../fonts/*.ttf ../flutter/lib/fonts && cp dist/flutter/fluent_icons.dart ../flutter/lib/src/fluent_icons.dart && cp dist/flutter/sample_icons.dart ../flutter/example/lib/sample_icons.dart && npm run clean" }, diff --git a/importer/rtlMetadata.js b/importer/rtlMetadata.js index 51c35e1c08..f64ad8bf0d 100644 --- a/importer/rtlMetadata.js +++ b/importer/rtlMetadata.js @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -const fs = require("fs"); +const fs = require("fs").promises; const path = require("path"); const process = require("process"); const argv = require("yargs").boolean("selector").default("selector", false).boolean("keepdirs").default("keepdirs", false).argv; @@ -18,92 +18,62 @@ if (!DEST_FILE) { } const destFolder = path.dirname(DEST_FILE); -if (!fs.existsSync(destFolder)) { - fs.mkdirSync(destFolder); -} +fs.mkdir(destFolder, { recursive: true }); + +const result = {}; +async function processFolder(srcPath) { + const files = await fs.readdir(srcPath); + for (const file of files) { + const srcFile = path.join(srcPath, file); + const stat = await fs.stat(srcFile); -processFolder(SRC_PATH); -const result ={} -function processFolder(srcPath) { - fs.readdir(srcPath, function (err, files) { - if (err) { - console.error("Could not list the directory.", err); - process.exit(1); - } - - files.forEach(function (file, index) { - var srcFile = path.join(srcPath, file); - - fs.stat(srcFile, function (error, stat) { - if (error) { - console.error("Error stating file.", error); - return; - } - - if (stat.isDirectory()) { - processFolder(srcFile) - return; - } else if (file.startsWith('.')) { - // Skip invisible files - return; - } else if (file.startsWith('_')) { - // Skip invalid file names - return; - } else if (file === 'metadata.json') { + if (stat.isDirectory()) { + await processFolder(srcFile); + } else if (file.startsWith('.') || file.startsWith('_')) { + // Skip invisible and invalid files + continue; + } else if (file === 'metadata.json') { // If it's a metadata file, read and parse its content - fs.readFile(srcFile, 'utf8', (err, data) => { - if (err) { - console.error('Error reading metadata file:', err); - return; + const data = await fs.readFile(srcFile, 'utf8'); + try { + // Parse the json content + let metadata = JSON.parse(data); + let iconSize = metadata.size; + let iconName = metadata.name; + const directionType = metadata.directionType; + if (!directionType) { //ignore files with no directionType + continue; } - try { - // Parse the json content - let metadata = JSON.parse(data); - let iconSize = metadata.size; - let iconName = metadata.name; - const directionType = metadata.directionType; - if (!directionType) { //ignore files with no directionType - return; - } - iconName = iconName.replace(/\s+/g, '') //remove space - iconName = iconName.replace(iconName.substring(0, 1), iconName.substring(0, 1).toUpperCase()) // capitalize the first letter - - iconSize.forEach((size, i) => { //iterate through the size file and create entries for each icon file - let tempName = iconName; - - tempName = tempName + size + "Filled"; - result[tempName] = directionType; + iconName = iconName.replace(/\s+/g, '') //remove space + iconName = iconName.replace(iconName.substring(0, 1), iconName.substring(0, 1).toUpperCase()) // capitalize the first letter - tempName = iconName; - tempName = tempName + size + "Regular"; - result[tempName] = directionType; - - }) - let tempName = iconName - tempName = tempName + "Filled"; + for (const size of iconSize) { //iterate through the size file and create entries for each icon file + let tempName = iconName + size + "Filled"; result[tempName] = directionType; - - tempName = iconName; - tempName = tempName + "Regular"; + + tempName = iconName + size + "Regular"; result[tempName] = directionType; - - convertToJson(result) - - } catch (error) { - console.error('Error parsing JSON in metadata file:', error); } - }) + let tempName = iconName + "Filled"; + result[tempName] = directionType; + + tempName = iconName + "Regular"; + result[tempName] = directionType; + } catch (error) { + console.error('Error parsing JSON in metadata file:', error); } - }) - }) - }) + } + } } -function convertToJson(result) { - const compiledJson = JSON.stringify(result, null, 2); - fs.writeFile(DEST_FILE, compiledJson, 'utf8', (err) => { - if (err) { - console.error('Error writing to JSON fIle: ', err) - } +processFolder(SRC_PATH) + .then(() => { + const compiledJson = JSON.stringify(result, null, 2); + return fs.writeFile(DEST_FILE, compiledJson, 'utf8'); }) -} + .then(() => { + console.log('JSON file has been written successfully.'); + }) + .catch(err => { + console.error('Error processing folder:', err); + }); diff --git a/packages/icon-app/src/index.tsx b/packages/icon-app/src/index.tsx index 0afdd37bd7..d40b847464 100644 --- a/packages/icon-app/src/index.tsx +++ b/packages/icon-app/src/index.tsx @@ -93,7 +93,7 @@ function IconCell({ FontIcon, SvgIcon, name }: { FontIcon: React.ComponentType, } function filterModuleImports(mod: Record): Record { - const importsToFilter = new Set(['wrapIcon', 'bundleIcon', 'useIconState', 'iconFilledClassName', 'iconRegularClassName', '_esModule']); + const importsToFilter = new Set(['wrapIcon', 'bundleIcon', 'useIconState', 'iconFilledClassName', 'iconRegularClassName', 'iconLightClassName', '_esModule']); const components: Record = {}; for (const [name, possibleComponent] of Object.entries(mod)) { diff --git a/packages/react-icons-font-subsetting-webpack-plugin/src/index.ts b/packages/react-icons-font-subsetting-webpack-plugin/src/index.ts index 8a82b9bb3f..07ddf9818d 100644 --- a/packages/react-icons-font-subsetting-webpack-plugin/src/index.ts +++ b/packages/react-icons-font-subsetting-webpack-plugin/src/index.ts @@ -9,6 +9,7 @@ const FONT_FILES_BASE_NAMES = [ "FluentSystemIcons-Filled", "FluentSystemIcons-Resizable", "FluentSystemIcons-Regular", + "FluentSystemIcons-Light" ]; const FONT_EXTENSIONS = [ diff --git a/packages/react-icons/convert-font.js b/packages/react-icons/convert-font.js index 6c1a10ebca..5f737fc9f1 100644 --- a/packages/react-icons/convert-font.js +++ b/packages/react-icons/convert-font.js @@ -93,7 +93,7 @@ async function processFiles(src, dest) { * @returns { Promise } - chunked icon files to insert */ async function processFolder(srcPath, codepointMapDestFolder, resizable) { - var files = await glob(resizable ? 'FluentSystemIcons-Resizable.json' : 'FluentSystemIcons-{Filled,Regular}.json', { cwd: srcPath, absolute: true }); + var files = await glob(resizable ? 'FluentSystemIcons-Resizable.json' : 'FluentSystemIcons-{Filled,Regular,Light}.json', { cwd: srcPath, absolute: true }); /** @type string[] */ const iconExports = []; @@ -154,10 +154,11 @@ function generateReactIconEntries(iconEntries, resizable) { for (const [iconName, codepoint] of Object.entries(iconEntries)) { let destFilename = getReactIconNameFromGlyphName(iconName, resizable); var flipInRtl = metadata[destFilename] === 'mirror'; + let iconStyle = /filled$/i.test(iconName) ? 0 /* Filled */ : /regular$/i.test(iconName) ? 1 /* Regular */ : 3 /* Light */ var jsCode = `export const ${destFilename} = /*#__PURE__*/createFluentFontIcon(${JSON.stringify(destFilename) }, ${JSON.stringify(String.fromCodePoint(codepoint)) - }, ${resizable ? 2 /* Resizable */ : /filled$/i.test(iconName) ? 0 /* Filled */ : 1 /* Regular */ - }, ${resizable ? undefined : ` ${/(?<=_)\d+(?=_filled|_regular)/.exec(iconName)?.[0]}` + }, ${resizable ? 2 /* Resizable */ : iconStyle + }, ${resizable ? undefined : ` ${/(?<=_)\d+(?=_filled|_regular|_light)/.exec(iconName)?.[0]}` }${flipInRtl ? `, { flipInRtl: true }` : ''});`; iconExports.push(jsCode); diff --git a/packages/react-icons/package.json b/packages/react-icons/package.json index 7f4334a216..c920067fa9 100644 --- a/packages/react-icons/package.json +++ b/packages/react-icons/package.json @@ -14,17 +14,19 @@ "scripts": { "clean": "find ./src -type f ! -name \"wrapIcon.tsx\" -name \"*.tsx\" -delete", "clean:svg": "rm -rf ./intermediate", + "clean:gitignore": "git clean -fdX", "copy": "node ../../importer/generate.js --source=../../assets --dest=./intermediate --extension=svg --target=react", "copy:font-files": "cpy './src/utils/fonts/*.{ttf,woff,woff2,json}' ./lib/utils/fonts/. && cpy './src/utils/fonts/*.{ttf,woff,woff2,json}' ./lib-cjs/utils/fonts/.", "convert:svg": "node convert.js --source=./intermediate --dest=./src --rtl=./intermediate/rtl.json", "convert:fonts": "node convert-font.js --source=./src/utils/fonts --dest=./src/fonts --codepointDest=./src/utils/fonts --rtl=./intermediate/rtl.json", "generate:font-regular": "node ../../importer/generateFont.js --source=intermediate --dest=src/utils/fonts --iconType=Regular --codepoints=../../fonts/FluentSystemIcons-Regular.json", "generate:font-filled": "node ../../importer/generateFont.js --source=intermediate --dest=src/utils/fonts --iconType=Filled --codepoints=../../fonts/FluentSystemIcons-Filled.json", + "generate:font-light": "node ../../importer/generateFont.js --source=intermediate --dest=src/utils/fonts --iconType=Light", "generate:font-resizable": "node ../../importer/generateFont.js --source=intermediate --dest=src/utils/fonts --iconType=Resizable", - "generate:font": "npm run generate:font-regular && npm run generate:font-filled && npm run generate:font-resizable", + "generate:font": "npm run generate:font-regular && npm run generate:font-filled && npm run generate:font-light && npm run generate:font-resizable", "generate:rtl": "node ../../importer/rtlMetadata.js --source=../../assets --dest=./intermediate/rtl.json", "rollup": "node ./generateRollup.js", - "optimize": "svgo --config svgo.config.js --folder=./intermediate --precision=2", + "optimize": "svgo --config svgo.config.js --folder=./intermediate --precision=2 --quiet", "unfill": "find ./intermediate -type f -name \"*.svg\" -exec sed -i.bak 's/fill=\"none\"//g' {} \\; && find ./intermediate -type f -name \"*.bak\" -delete", "build": "npm run copy && npm run generate:font && npm run generate:rtl && npm run optimize && npm run unfill && npm run convert:svg && npm run convert:fonts && npm run clean:svg && npm run build:esm && npm run build:cjs && npm run copy:font-files", "build:svg": "npm run copy && npm run generate:rtl && npm run optimize && npm run unfill && npm run convert:svg && npm run clean:svg && npm run build:esm && npm run build:cjs", diff --git a/packages/react-icons/src/utils/bundleIcon.tsx b/packages/react-icons/src/utils/bundleIcon.tsx index d471809804..39989c70f7 100644 --- a/packages/react-icons/src/utils/bundleIcon.tsx +++ b/packages/react-icons/src/utils/bundleIcon.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { iconFilledClassName, iconRegularClassName } from "./constants"; +import { iconFilledClassName, iconRegularClassName, iconLightClassName } from "./constants"; import { FluentIconsProps } from "./FluentIconsProps.types"; import { makeStyles, mergeClasses } from "@griffel/react"; import { FluentIcon } from "./createFluentIcon"; @@ -9,7 +9,7 @@ const useBundledIconStyles = makeStyles({ visible: { display: "inline" } }); -const bundleIcon = (FilledIcon: FluentIcon, RegularIcon: FluentIcon) => { +const bundleIcon = (FilledIcon: FluentIcon, RegularIcon: FluentIcon, LightIcon: FluentIcon) => { const Component: FluentIcon = (props) => { const { className, filled, ...rest } = props; const styles = useBundledIconStyles(); @@ -33,6 +33,15 @@ const bundleIcon = (FilledIcon: FluentIcon, RegularIcon: FluentIcon) => { className )} /> + ) } diff --git a/packages/react-icons/src/utils/constants.tsx b/packages/react-icons/src/utils/constants.tsx index c13595a351..2d4d22d75a 100644 --- a/packages/react-icons/src/utils/constants.tsx +++ b/packages/react-icons/src/utils/constants.tsx @@ -1,2 +1,3 @@ export const iconFilledClassName = "fui-Icon-filled"; -export const iconRegularClassName = "fui-Icon-regular"; \ No newline at end of file +export const iconRegularClassName = "fui-Icon-regular"; +export const iconLightClassName = "fui-Icon-light"; \ No newline at end of file diff --git a/packages/react-icons/src/utils/fonts/createFluentFontIcon.tsx b/packages/react-icons/src/utils/fonts/createFluentFontIcon.tsx index 20becf939d..894fc1c6c1 100644 --- a/packages/react-icons/src/utils/fonts/createFluentFontIcon.tsx +++ b/packages/react-icons/src/utils/fonts/createFluentFontIcon.tsx @@ -11,6 +11,10 @@ import fontRegularTtf from './FluentSystemIcons-Regular.ttf'; import fontRegularWoff from './FluentSystemIcons-Regular.woff'; import fontRegularWoff2 from './FluentSystemIcons-Regular.woff2'; +import fontLightTtf from './FluentSystemIcons-Light.ttf'; +import fontLightWoff from './FluentSystemIcons-Light.woff'; +import fontLightWoff2 from './FluentSystemIcons-Light.woff2'; + import fontOneSizeTtf from './FluentSystemIcons-Resizable.ttf'; import fontOneSizeWoff from './FluentSystemIcons-Resizable.woff'; import fontOneSizeWoff2 from './FluentSystemIcons-Resizable.woff2'; @@ -18,7 +22,8 @@ import fontOneSizeWoff2 from './FluentSystemIcons-Resizable.woff2'; export const enum FontFile { Filled = 0, Regular = 1, - Resizable = 2 + Resizable = 2, + Light = 3 } const FONT_FAMILY_MAP = { @@ -42,6 +47,14 @@ const useStaticStyles = makeStaticStyles(` url(${JSON.stringify(fontRegularWoff)}) format("woff"), url(${JSON.stringify(fontRegularTtf)}) format("truetype"); } + +@font-face { + font-family: ${FONT_FAMILY_MAP[FontFile.Light]}; + src: url(${JSON.stringify(fontLightWoff2)}) format("woff2"), + url(${JSON.stringify(fontLightWoff)}) format("woff"), + url(${JSON.stringify(fontLightTtf)}) format("truetype"); +} + @font-face { font-family: ${FONT_FAMILY_MAP[FontFile.Resizable]}; font-display: "block"; @@ -70,6 +83,9 @@ const useRootStyles = makeStyles({ [FontFile.Resizable]: { fontFamily: 'FluentSystemIcons', }, + [FontFile.Light]: { + fontFamily: 'FluentSystemIconsLight', + } }); export type CreateFluentFontIconOptions = { diff --git a/packages/react-native-icons/convert-font.js b/packages/react-native-icons/convert-font.js index c67b3a04fa..69c77a4f4a 100644 --- a/packages/react-native-icons/convert-font.js +++ b/packages/react-native-icons/convert-font.js @@ -79,7 +79,7 @@ async function processFiles(src, dest) { * @returns { Promise } - chunked icon files to insert */ async function processFolder(srcPath, codepointMapDestFolder, resizable) { - var files = await glob(resizable ? 'FluentSystemIcons-Resizable.json' : 'FluentSystemIcons-{Filled,Regular}.json', { cwd: srcPath, absolute: true }); + var files = await glob(resizable ? 'FluentSystemIcons-Resizable.json' : 'FluentSystemIcons-{Filled,Regular,Light}.json', { cwd: srcPath, absolute: true }); /** @type string[] */ const iconExports = []; @@ -139,10 +139,12 @@ function generateReactIconEntries(iconEntries, resizable) { for (const [iconName, codepoint] of Object.entries(iconEntries)) { let destFilename = getReactIconNameFromGlyphName(iconName, resizable); + let iconStyle = /filled$/i.test(iconName) ? 0 /* Filled */ : /regular$/i.test(iconName) ? 1 /* Regular */ : 3 /* Light */ + var jsCode = `export const ${destFilename} = /*#__PURE__*/createFluentFontIcon(${JSON.stringify(destFilename) }, ${JSON.stringify(String.fromCodePoint(codepoint)) - }, ${resizable ? 2 /* Resizable */ : /filled$/i.test(iconName) ? 0 /* Filled */ : 1 /* Regular */ - }${resizable ? '' : `, ${/(?<=_)\d+(?=_filled|_regular)/.exec(iconName)[0]}` + }, ${resizable ? 2 /* Resizable */ : iconStyle + }${resizable ? '' : `, ${/(?<=_)\d+(?=_filled|_regular|_light)/.exec(iconName)[0]}` });`; iconExports.push(jsCode); diff --git a/packages/react-native-icons/src/utils/constants.tsx b/packages/react-native-icons/src/utils/constants.tsx index c13595a351..2d4d22d75a 100644 --- a/packages/react-native-icons/src/utils/constants.tsx +++ b/packages/react-native-icons/src/utils/constants.tsx @@ -1,2 +1,3 @@ export const iconFilledClassName = "fui-Icon-filled"; -export const iconRegularClassName = "fui-Icon-regular"; \ No newline at end of file +export const iconRegularClassName = "fui-Icon-regular"; +export const iconLightClassName = "fui-Icon-light"; \ No newline at end of file diff --git a/packages/react-native-icons/src/utils/fonts/createFluentFontIcon.tsx b/packages/react-native-icons/src/utils/fonts/createFluentFontIcon.tsx index 078013631a..c41ce30bda 100644 --- a/packages/react-native-icons/src/utils/fonts/createFluentFontIcon.tsx +++ b/packages/react-native-icons/src/utils/fonts/createFluentFontIcon.tsx @@ -11,6 +11,10 @@ import fontRegularTtf from './FluentSystemIcons-Regular.ttf'; import fontRegularWoff from './FluentSystemIcons-Regular.woff'; import fontRegularWoff2 from './FluentSystemIcons-Regular.woff2'; +import fontLightTtf from './FluentSystemIcons-Light.ttf'; +import fontLightWoff from './FluentSystemIcons-Light.woff'; +import fontLightWoff2 from './FluentSystemIcons-Light.woff2'; + import fontOneSizeTtf from './FluentSystemIcons-Resizable.ttf'; import fontOneSizeWoff from './FluentSystemIcons-Resizable.woff'; import fontOneSizeWoff2 from './FluentSystemIcons-Resizable.woff2'; @@ -18,7 +22,8 @@ import fontOneSizeWoff2 from './FluentSystemIcons-Resizable.woff2'; export const enum FontFile { Filled = 0, Regular = 1, - Resizable = 2 + Resizable = 2, + Light = 3 } const FONT_FAMILY_MAP = { @@ -40,6 +45,14 @@ const useStaticStyles = makeStaticStyles(` url(${JSON.stringify(fontRegularWoff)}) format("woff"), url(${JSON.stringify(fontRegularTtf)}) format("truetype"); } + +@font-face { + font-family: ${FONT_FAMILY_MAP[FontFile.Light]}; + src: url(${JSON.stringify(fontLightWoff2)}) format("woff2"), + url(${JSON.stringify(fontLightWoff)}) format("woff"), + url(${JSON.stringify(fontLightTtf)}) format("truetype"); +} + @font-face { font-family: ${FONT_FAMILY_MAP[FontFile.Resizable]}; src: url(${JSON.stringify(fontOneSizeWoff2)}) format("woff2"), @@ -67,6 +80,9 @@ const useRootStyles = makeStyles({ [FontFile.Resizable]: { fontFamily: 'FluentSystemIcons', }, + [FontFile.Light]: { + fontFamily: 'FluentSystemIconsLight', + } }); export function createFluentFontIcon(displayName: string, codepoint: string, font: FontFile, fontSize?: number): React.FC>> & { codepoint: string} {