Update Font Awesome to v6.6.x, adjust some icon references.

This commit is contained in:
fusionate 2024-08-09 18:14:52 -06:00
parent 10bd1b9f9f
commit 4b23913555
No known key found for this signature in database
2622 changed files with 321441 additions and 70166 deletions

View File

@ -215,7 +215,7 @@
echo " <div class='heading'><b>" . $text['header-call_forward'] . "</b></div>\n"; echo " <div class='heading'><b>" . $text['header-call_forward'] . "</b></div>\n";
echo " <div class='actions'>\n"; echo " <div class='actions'>\n";
if ($num_rows > 10) { if ($num_rows > 10) {
echo button::create(['type' => 'button', 'label' => $text['button-view_all'], 'icon' => 'project-diagram', 'collapse' => false, 'link' => PROJECT_PATH . '/app/call_forward/call_forward.php']); echo button::create(['type' => 'button', 'label' => $text['button-view_all'], 'icon' => 'diagram-project', 'collapse' => false, 'link' => PROJECT_PATH . '/app/call_forward/call_forward.php']);
} }
echo " </div>\n"; echo " </div>\n";
echo " <div style='clear: both;'></div>\n"; echo " <div style='clear: both;'></div>\n";

View File

@ -2330,7 +2330,7 @@ if (permission_exists('contact_relation_view')) {
} }
echo " <div class='button no-link' style='float: left; margin-top: 1px; margin-left: 8px;'>\n"; echo " <div class='button no-link' style='float: left; margin-top: 1px; margin-left: 8px;'>\n";
echo " <a href='contact_edit.php?id=".escape($row['relation_contact_uuid'])."' target='_blank'>\n"; echo " <a href='contact_edit.php?id=".escape($row['relation_contact_uuid'])."' target='_blank'>\n";
echo " <span class='fas fa-user-friends' style='color: ".$body_text_color."; float: left; margin-top: 7px; margin-left: 3px;'></span>\n"; echo " <span class='fas fa-user-group' style='color: ".$body_text_color."; float: left; margin-top: 7px; margin-left: 3px;'></span>\n";
echo " </a>\n"; echo " </a>\n";
echo " </div>\n"; echo " </div>\n";
echo " </div>\n"; echo " </div>\n";

View File

@ -480,7 +480,7 @@
if (permission_exists('contact_relation_view')) { if (permission_exists('contact_relation_view')) {
echo " <div class='box contact-details'>\n"; echo " <div class='box contact-details'>\n";
echo " <div class='grid contact-details'>\n"; echo " <div class='grid contact-details'>\n";
echo " <div class='box' title=\"".$text['header-contact_relations']."\"><b class='fas fa-project-diagram fa-fw fa-lg'></b></div>\n"; echo " <div class='box' title=\"".$text['header-contact_relations']."\"><b class='fas fa-diagram-project fa-fw fa-lg'></b></div>\n";
echo " <div class='box'>\n"; echo " <div class='box'>\n";
require "contact_relations_view.php"; require "contact_relations_view.php";
echo " </div>\n"; echo " </div>\n";

View File

@ -4,7 +4,7 @@
$array['dashboard'][$x]['dashboard_uuid'] = 'a294b771-a125-4d36-b51a-973540346fad'; $array['dashboard'][$x]['dashboard_uuid'] = 'a294b771-a125-4d36-b51a-973540346fad';
$array['dashboard'][$x]['dashboard_name'] = 'Destinations'; $array['dashboard'][$x]['dashboard_name'] = 'Destinations';
$array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php'; $array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-sign-in-alt'; $array['dashboard'][$x]['dashboard_icon'] = 'fa-solid fa-right-to-bracket';
$array['dashboard'][$x]['dashboard_url'] = '/app/destinations/destinations.php'; $array['dashboard'][$x]['dashboard_url'] = '/app/destinations/destinations.php';
$array['dashboard'][$x]['dashboard_target'] = 'self'; $array['dashboard'][$x]['dashboard_target'] = 'self';
$array['dashboard'][$x]['dashboard_width'] = ''; $array['dashboard'][$x]['dashboard_width'] = '';

View File

@ -27,7 +27,7 @@
$apps[$x]['menu'][$y]['uuid'] = "b94e8bd9-9eb5-e427-9c26-ff7a6c21552a"; $apps[$x]['menu'][$y]['uuid'] = "b94e8bd9-9eb5-e427-9c26-ff7a6c21552a";
$apps[$x]['menu'][$y]['parent_uuid'] = ""; $apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal"; $apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-exchange-alt"; $apps[$x]['menu'][$y]['icon'] = "fa-solid fa-right-left";
$apps[$x]['menu'][$y]['path'] = ""; $apps[$x]['menu'][$y]['path'] = "";
$apps[$x]['menu'][$y]['order'] = "15"; $apps[$x]['menu'][$y]['order'] = "15";
$apps[$x]['menu'][$y]['groups'][] = "admin"; $apps[$x]['menu'][$y]['groups'][] = "admin";

File diff suppressed because it is too large Load Diff

View File

@ -1124,7 +1124,7 @@
unset($button_margin); unset($button_margin);
} }
if (permission_exists('follow_me') || permission_exists('call_forward') || permission_exists('do_not_disturb')) { if (permission_exists('follow_me') || permission_exists('call_forward') || permission_exists('do_not_disturb')) {
echo button::create(['type'=>'button','label'=>$text['button-call_forward'],'icon'=>'project-diagram','style'=>($button_margin ?? ''),'link'=>'../call_forward/call_forward_edit.php?id='.urlencode($extension_uuid)]); echo button::create(['type'=>'button','label'=>$text['button-call_forward'],'icon'=>'diagram-project','style'=>($button_margin ?? ''),'link'=>'../call_forward/call_forward_edit.php?id='.urlencode($extension_uuid)]);
unset($button_margin); unset($button_margin);
} }
if (permission_exists('extension_setting_view')) { if (permission_exists('extension_setting_view')) {

View File

@ -4,7 +4,7 @@
$array['dashboard'][$x]['dashboard_uuid'] = '3af7af65-7861-4d05-a0bc-36d704458fa0'; $array['dashboard'][$x]['dashboard_uuid'] = '3af7af65-7861-4d05-a0bc-36d704458fa0';
$array['dashboard'][$x]['dashboard_name'] = 'IVR Menus'; $array['dashboard'][$x]['dashboard_name'] = 'IVR Menus';
$array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php'; $array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-project-diagram'; $array['dashboard'][$x]['dashboard_icon'] = 'fa-solid fa-diagram-project';
$array['dashboard'][$x]['dashboard_url'] = '/app/ivr_menus/ivr_menus.php'; $array['dashboard'][$x]['dashboard_url'] = '/app/ivr_menus/ivr_menus.php';
$array['dashboard'][$x]['dashboard_target'] = 'self'; $array['dashboard'][$x]['dashboard_target'] = 'self';
$array['dashboard'][$x]['dashboard_width'] = ''; $array['dashboard'][$x]['dashboard_width'] = '';
@ -39,4 +39,4 @@ $array['dashboard'][$x]['dashboard_groups'][$y]['dashboard_uuid'] = '3af7af65-78
$array['dashboard'][$x]['dashboard_groups'][$y]['group_name'] = 'admin'; $array['dashboard'][$x]['dashboard_groups'][$y]['group_name'] = 'admin';
$y++; $y++;
?> ?>

View File

@ -119,6 +119,16 @@ if ($domains_processed == 1) {
$p->delete('dashboard_add', 'temp'); $p->delete('dashboard_add', 'temp');
$p->delete('dashboard_group_add', 'temp'); $p->delete('dashboard_group_add', 'temp');
//update dashboard icons to be prefixed with v6.x font awesome style class name (e.g. 'fa-solid ')
$queries[] = "update v_dashboard set dashboard_icon = concat('fa-solid ', dashboard_icon) where dashboard_icon is not null and dashboard_icon not like 'fa-solid fa-%' and dashboard_icon not like 'fa-regular fa-%' and dashboard_icon not like 'fa-brands fa-%' ";
//execute array of queries
foreach ($queries as $sql) {
$database = new database;
$database->execute($sql);
}
unset($queries, $sql);
} }
?> ?>

View File

@ -558,36 +558,61 @@
echo " <tr class='type_icon' ".($dashboard_path != 'core/dashboard/resources/dashboard/icon.php' ? "style='display: none;'" : null).">"; echo " <tr class='type_icon' ".($dashboard_path != 'core/dashboard/resources/dashboard/icon.php' ? "style='display: none;'" : null).">";
echo " <td class='vncell'>".$text['label-icon']."</td>"; echo " <td class='vncell'>".$text['label-icon']."</td>";
echo " <td class='vtable' style='vertical-align: bottom;'>"; echo " <td class='vtable' style='vertical-align: bottom;'>";
if (file_exists($_SERVER["PROJECT_ROOT"].'/resources/fontawesome/fas_icons.php')) { if (file_exists($_SERVER["PROJECT_ROOT"].'/resources/fontawesome/fa_icons.php')) {
include 'resources/fontawesome/fas_icons.php'; include $_SERVER["PROJECT_ROOT"].'/resources/fontawesome/fa_icons.php';
if (is_array($font_awesome_solid_icons) && @sizeof($font_awesome_solid_icons) != 0) { if (!empty($font_awesome_icons) && is_array($font_awesome_icons)) {
// rebuild and sort array //initialize variables
foreach ($font_awesome_solid_icons as $i => $icon_class) { $previous_icon_classes = $previous_icon_name = $previous_icon_style = '';
$icon_label = str_replace('fa-', '', $icon_class); //rebuild array, parse and format label
foreach ($font_awesome_icons as $i => $icon_classes) {
//split classes
$icon_class = explode(' ', $icon_classes);
$icon_style = $icon_class[0];
$icon_name = $icon_class[1];
//determine label
$icon_label = str_replace('fa-', '', $icon_name);
$icon_label = str_replace('-', ' ', $icon_label); $icon_label = str_replace('-', ' ', $icon_label);
$icon_label = ucwords($icon_label); $icon_label = ucwords($icon_label);
$icons[$icon_class] = $icon_label; //update previous
if (
!empty($previous_icon_name) &&
!empty($previous_icon_style) &&
$icon_name == $previous_icon_name &&
$icon_style != $previous_icon_style
) {
$icons[$previous_icon_classes] = $icon_label.' - '.ucwords(str_replace('fa-', '', $previous_icon_style));
$append_style = true;
}
else {
$append_style = false;
}
//set current
$icons[$icon_classes] = $icon_label.($append_style ? ' - '.ucwords(str_replace('fa-', '', $icon_style)) : null);
//set previous values
$previous_icon_name = $icon_name;
$previous_icon_style = $icon_style;
$previous_icon_classes = $icon_classes;
} }
asort($icons, SORT_STRING); unset($icon_classes, $icon_class, $icon_style, $icon_name, $previous_icon_classes, $previous_icon_style, $previous_icon_name, $icon_label, $previous_icon_name, $previous_icon_style, $previous_icon_classes);
echo "<table cellpadding='0' cellspacing='0' border='0'>\n"; echo "<table cellpadding='0' cellspacing='0' border='0'>\n";
echo " <tr>\n"; echo " <tr>\n";
echo " <td>\n"; echo " <td>\n";
echo " <select class='formfld' name='dashboard_icon' id='dashboard_icon' onchange=\"$('#icons').slideUp(); $('#grid_icon').fadeIn();\">\n"; echo " <select class='formfld' name='dashboard_icon' id='dashboard_icon' onchange=\"$('#icons').slideUp(); $('#grid_icon').fadeIn();\">\n";
echo " <option value=''></option>\n"; echo " <option value=''></option>\n";
foreach ($icons as $icon_class => $icon_label) { foreach ($icons as $icon_class => $icon_label) {
$selected = ($dashboard_icon == $icon_class) ? "selected" : null; $selected = $dashboard_icon == $icon_class ? "selected" : null;
echo " <option value='".escape($icon_class)."' ".$selected.">".escape($icon_label)."</option>\n"; echo " <option value='".escape($icon_class)."' ".$selected.">".escape($icon_label)."</option>\n";
} }
echo " </select>\n"; echo " </select>\n";
echo " </td>\n"; echo " </td>\n";
echo " <td style='padding: 0 0 0 5px;'>\n"; echo " <td style='padding: 0 0 0 5px;'>\n";
echo " <button id='grid_icon' type='button' class='btn btn-default list_control_icon' style='font-size: 15px; padding-top: 1px; padding-left: 3px;' onclick=\"$('#icons').fadeIn(); $(this).fadeOut();\"><span class='fas fa-th'></span></button>"; echo " <button id='grid_icon' type='button' class='btn btn-default list_control_icon' style='font-size: 15px; padding-top: 1px; padding-left: 3px;' onclick=\"$('#icons').fadeIn(); $(this).fadeOut();\"><span class='fa-solid fa-th'></span></button>";
echo " </td>\n"; echo " </td>\n";
echo " </tr>\n"; echo " </tr>\n";
echo "</table>\n"; echo "</table>\n";
echo "<div id='icons' style='clear: both; display: none; margin-top: 8px; padding-top: 10px; color: #000; max-height: 400px; overflow: auto;'>\n"; echo "<div id='icons' style='clear: both; display: none; margin-top: 8px; padding-top: 10px; color: #000; max-height: 400px; overflow: auto;'>\n";
foreach ($icons as $icon_class => $icon_label) { foreach ($icons as $icon_class => $icon_label) {
echo "<span class='fas ".escape($icon_class)." fa-fw' style='font-size: 24px; float: left; margin: 0 8px 8px 0; cursor: pointer; opacity: 0.3;' title='".escape($icon_label)."' onclick=\"$('#dashboard_icon').val('".escape($icon_class)."'); $('#icons').slideUp(); $('#grid_icon').fadeIn();\" onmouseover=\"this.style.opacity='1';\" onmouseout=\"this.style.opacity='0.3';\"></span>\n"; echo "<span class='".escape($icon_class)." fa-fw' style='font-size: 24px; float: left; margin: 0 8px 8px 0; cursor: pointer; opacity: 0.3;' title='".escape($icon_label)."' onclick=\"$('#dashboard_icon').val('".escape($icon_class)."'); $('#icons').slideUp(); $('#grid_icon').fadeIn();\" onmouseover=\"this.style.opacity='1';\" onmouseout=\"this.style.opacity='0.3';\"></span>\n";
} }
echo "</div>"; echo "</div>";
} }

View File

@ -58,7 +58,7 @@
$apps[$x]['menu'][$y]['uuid'] = "02194288-6d56-6d3e-0b1a-d53a2bc10788"; $apps[$x]['menu'][$y]['uuid'] = "02194288-6d56-6d3e-0b1a-d53a2bc10788";
$apps[$x]['menu'][$y]['parent_uuid'] = ""; $apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal"; $apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-home"; $apps[$x]['menu'][$y]['icon'] = "fa-solid fa-house";
$apps[$x]['menu'][$y]['path'] = ""; $apps[$x]['menu'][$y]['path'] = "";
$apps[$x]['menu'][$y]['order'] = "5"; $apps[$x]['menu'][$y]['order'] = "5";
$apps[$x]['menu'][$y]['groups'][] = "superadmin"; $apps[$x]['menu'][$y]['groups'][] = "superadmin";
@ -93,7 +93,7 @@
$apps[$x]['menu'][$y]['uuid'] = "bc96d773-ee57-0cdd-c3ac-2d91aba61b55"; $apps[$x]['menu'][$y]['uuid'] = "bc96d773-ee57-0cdd-c3ac-2d91aba61b55";
$apps[$x]['menu'][$y]['parent_uuid'] = ""; $apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal"; $apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-user"; $apps[$x]['menu'][$y]['icon'] = "fa-solid fa-user";
$apps[$x]['menu'][$y]['path'] = ""; $apps[$x]['menu'][$y]['path'] = "";
$apps[$x]['menu'][$y]['order'] = "10"; $apps[$x]['menu'][$y]['order'] = "10";
$apps[$x]['menu'][$y]['groups'][] = "admin"; $apps[$x]['menu'][$y]['groups'][] = "admin";
@ -124,7 +124,7 @@
$apps[$x]['menu'][$y]['uuid'] = "fd29e39c-c936-f5fc-8e2b-611681b266b5"; $apps[$x]['menu'][$y]['uuid'] = "fd29e39c-c936-f5fc-8e2b-611681b266b5";
$apps[$x]['menu'][$y]['parent_uuid'] = ""; $apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal"; $apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-paper-plane"; $apps[$x]['menu'][$y]['icon'] = "fa-solid fa-paper-plane";
$apps[$x]['menu'][$y]['path'] = ""; $apps[$x]['menu'][$y]['path'] = "";
$apps[$x]['menu'][$y]['order'] = "20"; $apps[$x]['menu'][$y]['order'] = "20";
$apps[$x]['menu'][$y]['groups'][] = "superadmin"; $apps[$x]['menu'][$y]['groups'][] = "superadmin";
@ -159,7 +159,7 @@
$apps[$x]['menu'][$y]['uuid'] = "0438b504-8613-7887-c420-c837ffb20cb1"; $apps[$x]['menu'][$y]['uuid'] = "0438b504-8613-7887-c420-c837ffb20cb1";
$apps[$x]['menu'][$y]['parent_uuid'] = ""; $apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal"; $apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-chart-bar"; $apps[$x]['menu'][$y]['icon'] = "fa-solid fa-chart-column";
$apps[$x]['menu'][$y]['path'] = ""; $apps[$x]['menu'][$y]['path'] = "";
$apps[$x]['menu'][$y]['order'] = "25"; $apps[$x]['menu'][$y]['order'] = "25";
$apps[$x]['menu'][$y]['groups'][] = "admin"; $apps[$x]['menu'][$y]['groups'][] = "admin";
@ -191,7 +191,7 @@
$apps[$x]['menu'][$y]['uuid'] = "594d99c5-6128-9c88-ca35-4b33392cec0f"; $apps[$x]['menu'][$y]['uuid'] = "594d99c5-6128-9c88-ca35-4b33392cec0f";
$apps[$x]['menu'][$y]['parent_uuid'] = ""; $apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal"; $apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-cog"; $apps[$x]['menu'][$y]['icon'] = "fa-solid fa-gear";
$apps[$x]['menu'][$y]['path'] = ""; $apps[$x]['menu'][$y]['path'] = "";
$apps[$x]['menu'][$y]['order'] = "30"; $apps[$x]['menu'][$y]['order'] = "30";
$apps[$x]['menu'][$y]['groups'][] = "superadmin"; $apps[$x]['menu'][$y]['groups'][] = "superadmin";
@ -222,7 +222,7 @@
$apps[$x]['menu'][$y]['uuid'] = "c85bf816-b88d-40fa-8634-11b456928afa"; $apps[$x]['menu'][$y]['uuid'] = "c85bf816-b88d-40fa-8634-11b456928afa";
$apps[$x]['menu'][$y]['parent_uuid'] = ""; $apps[$x]['menu'][$y]['parent_uuid'] = "";
$apps[$x]['menu'][$y]['category'] = "internal"; $apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-sign-in-alt"; $apps[$x]['menu'][$y]['icon'] = "fa-solid fa-right-to-bracket";
$apps[$x]['menu'][$y]['path'] = "/login.php"; $apps[$x]['menu'][$y]['path'] = "/login.php";
$apps[$x]['menu'][$y]['order'] = "99"; $apps[$x]['menu'][$y]['order'] = "99";
$apps[$x]['menu'][$y]['groups'][] = "public"; $apps[$x]['menu'][$y]['groups'][] = "public";
@ -253,7 +253,7 @@
$apps[$x]['menu'][$y]['uuid'] = "0d29e9f4-0c9b-9d8d-cd2d-454899dc9bc4"; $apps[$x]['menu'][$y]['uuid'] = "0d29e9f4-0c9b-9d8d-cd2d-454899dc9bc4";
$apps[$x]['menu'][$y]['parent_uuid'] = "02194288-6d56-6d3e-0b1a-d53a2bc10788"; $apps[$x]['menu'][$y]['parent_uuid'] = "02194288-6d56-6d3e-0b1a-d53a2bc10788";
$apps[$x]['menu'][$y]['category'] = "internal"; $apps[$x]['menu'][$y]['category'] = "internal";
$apps[$x]['menu'][$y]['icon'] = "fa-sign-out-alt"; $apps[$x]['menu'][$y]['icon'] = "fa-solid fa-right-from-bracket";
$apps[$x]['menu'][$y]['path'] = "/logout.php"; $apps[$x]['menu'][$y]['path'] = "/logout.php";
$apps[$x]['menu'][$y]['order'] = ""; $apps[$x]['menu'][$y]['order'] = "";
$apps[$x]['menu'][$y]['groups'][] = "superadmin"; $apps[$x]['menu'][$y]['groups'][] = "superadmin";
@ -263,4 +263,4 @@
$apps[$x]['menu'][$y]['groups'][] = "fax"; $apps[$x]['menu'][$y]['groups'][] = "fax";
$y++; $y++;
?> ?>

View File

@ -433,36 +433,61 @@
echo " <tr>"; echo " <tr>";
echo " <td class='vncell'>".$text['label-icon']."</td>"; echo " <td class='vncell'>".$text['label-icon']."</td>";
echo " <td class='vtable' style='vertical-align: bottom;'>"; echo " <td class='vtable' style='vertical-align: bottom;'>";
if (file_exists($_SERVER["PROJECT_ROOT"].'/resources/fontawesome/fas_icons.php')) { if (file_exists($_SERVER["PROJECT_ROOT"].'/resources/fontawesome/fa_icons.php')) {
include 'resources/fontawesome/fas_icons.php'; include $_SERVER["PROJECT_ROOT"].'/resources/fontawesome/fa_icons.php';
if (is_array($font_awesome_solid_icons) && @sizeof($font_awesome_solid_icons) != 0) { if (!empty($font_awesome_icons) && is_array($font_awesome_icons)) {
// rebuild and sort array //initialize variables
foreach ($font_awesome_solid_icons as $i => $icon_class) { $previous_icon_classes = $previous_icon_name = $previous_icon_style = '';
$icon_label = str_replace('fa-', '', $icon_class); //rebuild array, parse and format label
foreach ($font_awesome_icons as $i => $icon_classes) {
//split classes
$icon_class = explode(' ', $icon_classes);
$icon_style = $icon_class[0];
$icon_name = $icon_class[1];
//determine label
$icon_label = str_replace('fa-', '', $icon_name);
$icon_label = str_replace('-', ' ', $icon_label); $icon_label = str_replace('-', ' ', $icon_label);
$icon_label = ucwords($icon_label); $icon_label = ucwords($icon_label);
$icons[$icon_class] = $icon_label; //update previous
if (
!empty($previous_icon_name) &&
!empty($previous_icon_style) &&
$icon_name == $previous_icon_name &&
$icon_style != $previous_icon_style
) {
$icons[$previous_icon_classes] = $icon_label.' - '.ucwords(str_replace('fa-', '', $previous_icon_style));
$append_style = true;
}
else {
$append_style = false;
}
//set current
$icons[$icon_classes] = $icon_label.($append_style ? ' - '.ucwords(str_replace('fa-', '', $icon_style)) : null);
//set previous values
$previous_icon_name = $icon_name;
$previous_icon_style = $icon_style;
$previous_icon_classes = $icon_classes;
} }
asort($icons, SORT_STRING); unset($icon_classes, $icon_class, $icon_style, $icon_name, $previous_icon_classes, $previous_icon_style, $previous_icon_name, $icon_label, $previous_icon_name, $previous_icon_style, $previous_icon_classes);
echo "<table cellpadding='0' cellspacing='0' border='0'>\n"; echo "<table cellpadding='0' cellspacing='0' border='0'>\n";
echo " <tr>\n"; echo " <tr>\n";
echo " <td>\n"; echo " <td>\n";
echo " <select class='formfld' name='menu_item_icon' id='menu_item_icon' onchange=\"$('#icons').slideUp(); $('#grid_icon').fadeIn();\">\n"; echo " <select class='formfld' name='menu_item_icon' id='menu_item_icon' onchange=\"$('#icons').slideUp(); $('#grid_icon').fadeIn();\">\n";
echo " <option value=''></option>\n"; echo " <option value=''></option>\n";
foreach ($icons as $icon_class => $icon_label) { foreach ($icons as $icon_class => $icon_label) {
$selected = ($menu_item_icon == $icon_class) ? "selected" : null; $selected = $menu_item_icon == $icon_class ? "selected" : null;
echo " <option value='".escape($icon_class)."' ".$selected.">".escape($icon_label)."</option>\n"; echo " <option value='".escape($icon_class)."' ".$selected.">".escape($icon_label)."</option>\n";
} }
echo " </select>\n"; echo " </select>\n";
echo " </td>\n"; echo " </td>\n";
echo " <td style='padding: 0 0 0 5px;'>\n"; echo " <td style='padding: 0 0 0 5px;'>\n";
echo " <button id='grid_icon' type='button' class='btn btn-default list_control_icon' style='font-size: 15px; padding-top: 1px; padding-left: 3px;' onclick=\"$('#icons').fadeIn(); $(this).fadeOut();\"><span class='fas fa-th'></span></button>"; echo " <button id='grid_icon' type='button' class='btn btn-default list_control_icon' style='font-size: 15px; padding-top: 1px; padding-left: 3px;' onclick=\"$('#icons').fadeIn(); $(this).fadeOut();\"><span class='fa-solid fa-th'></span></button>";
echo " </td>\n"; echo " </td>\n";
echo " </tr>\n"; echo " </tr>\n";
echo "</table>\n"; echo "</table>\n";
echo "<div id='icons' style='clear: both; display: none; margin-top: 8px; padding-top: 10px; color: #000; max-height: 400px; overflow: auto;'>\n"; echo "<div id='icons' style='clear: both; display: none; margin-top: 8px; padding-top: 10px; color: #000; max-height: 400px; overflow: auto;'>\n";
foreach ($icons as $icon_class => $icon_label) { foreach ($icons as $icon_class => $icon_label) {
echo "<span class='fas ".escape($icon_class)." fa-fw' style='font-size: 24px; float: left; margin: 0 8px 8px 0; cursor: pointer; opacity: 0.3;' title='".escape($icon_label)."' onclick=\"$('#menu_item_icon').val('".escape($icon_class)."'); $('#icons').slideUp(); $('#grid_icon').fadeIn();\" onmouseover=\"this.style.opacity='1';\" onmouseout=\"this.style.opacity='0.3';\"></span>\n"; echo "<span class='".escape($icon_class)." fa-fw' style='font-size: 24px; float: left; margin: 0 8px 8px 0; cursor: pointer; opacity: 0.3;' title='".escape($icon_label)."' onclick=\"$('#menu_item_icon').val('".escape($icon_class)."'); $('#icons').slideUp(); $('#grid_icon').fadeIn();\" onmouseover=\"this.style.opacity='1';\" onmouseout=\"this.style.opacity='0.3';\"></span>\n";
} }
echo "</div>"; echo "</div>";
} }

View File

@ -4,7 +4,7 @@
$array['dashboard'][$x]['dashboard_uuid'] = '57fd7761-6ffb-4a11-bdf0-4ce632f50c3c'; $array['dashboard'][$x]['dashboard_uuid'] = '57fd7761-6ffb-4a11-bdf0-4ce632f50c3c';
$array['dashboard'][$x]['dashboard_name'] = 'Users'; $array['dashboard'][$x]['dashboard_name'] = 'Users';
$array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php'; $array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-user-friends'; $array['dashboard'][$x]['dashboard_icon'] = 'fa-solid fa-user-group';
$array['dashboard'][$x]['dashboard_url'] = '/core/users/users.php'; $array['dashboard'][$x]['dashboard_url'] = '/core/users/users.php';
$array['dashboard'][$x]['dashboard_target'] = 'self'; $array['dashboard'][$x]['dashboard_target'] = 'self';
$array['dashboard'][$x]['dashboard_width'] = ''; $array['dashboard'][$x]['dashboard_width'] = '';
@ -43,7 +43,7 @@ $x++;
$array['dashboard'][$x]['dashboard_uuid'] = '8aa9bb66-7a62-4a90-b52e-68bd4ccf325f'; $array['dashboard'][$x]['dashboard_uuid'] = '8aa9bb66-7a62-4a90-b52e-68bd4ccf325f';
$array['dashboard'][$x]['dashboard_name'] = 'Account Settings'; $array['dashboard'][$x]['dashboard_name'] = 'Account Settings';
$array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php'; $array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-user-cog'; $array['dashboard'][$x]['dashboard_icon'] = 'fa-solid fa-user-gear';
$array['dashboard'][$x]['dashboard_url'] = '/core/users/user_edit.php?id=user'; $array['dashboard'][$x]['dashboard_url'] = '/core/users/user_edit.php?id=user';
$array['dashboard'][$x]['dashboard_target'] = 'self'; $array['dashboard'][$x]['dashboard_target'] = 'self';
$array['dashboard'][$x]['dashboard_width'] = ''; $array['dashboard'][$x]['dashboard_width'] = '';
@ -78,7 +78,7 @@ $x++;
$array['dashboard'][$x]['dashboard_uuid'] = 'b04ad600-9acc-45e5-a89a-d7a59a6fcb4c'; $array['dashboard'][$x]['dashboard_uuid'] = 'b04ad600-9acc-45e5-a89a-d7a59a6fcb4c';
$array['dashboard'][$x]['dashboard_name'] = 'Logout'; $array['dashboard'][$x]['dashboard_name'] = 'Logout';
$array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php'; $array['dashboard'][$x]['dashboard_path'] = 'core/dashboard/resources/dashboard/icon.php';
$array['dashboard'][$x]['dashboard_icon'] = 'fa-sign-out-alt'; $array['dashboard'][$x]['dashboard_icon'] = 'fa-solid fa-right-from-bracket';
$array['dashboard'][$x]['dashboard_url'] = '/logout.php'; $array['dashboard'][$x]['dashboard_url'] = '/logout.php';
$array['dashboard'][$x]['dashboard_target'] = 'self'; $array['dashboard'][$x]['dashboard_target'] = 'self';
$array['dashboard'][$x]['dashboard_width'] = ''; $array['dashboard'][$x]['dashboard_width'] = '';
@ -112,4 +112,4 @@ $array['dashboard'][$x]['dashboard_groups'][$y]['dashboard_group_uuid'] = '3cf3a
$array['dashboard'][$x]['dashboard_groups'][$y]['dashboard_uuid'] = 'b04ad600-9acc-45e5-a89a-d7a59a6fcb4c'; $array['dashboard'][$x]['dashboard_groups'][$y]['dashboard_uuid'] = 'b04ad600-9acc-45e5-a89a-d7a59a6fcb4c';
$array['dashboard'][$x]['dashboard_groups'][$y]['group_name'] = 'user'; $array['dashboard'][$x]['dashboard_groups'][$y]['group_name'] = 'user';
?> ?>

View File

@ -84,8 +84,8 @@ if (!class_exists('button')) {
$button_icons == 'auto' || $button_icons == 'auto' ||
!$array['label'] !$array['label']
)) { )) {
$icon_class = is_array($array['icon']) ? $array['icon']['text'] : 'fas fa-'.$array['icon']; $icon_class = is_array($array['icon']) ? $array['icon']['text'] : $array['icon'];
$button .= "<span class='".$icon_class." fa-fw'></span>"; $button .= "<span class='".(substr($icon_class, 0, 3) != 'fa-' ? 'fa-solid fa-' : null).$icon_class." fa-fw'></span>";
} }
//label //label
if (!empty($array['label']) && ( if (!empty($array['label']) && (
@ -167,7 +167,7 @@ if (!class_exists('button')) {
type 'button' (default) | 'submit' | 'link' type 'button' (default) | 'submit' | 'link'
label button text label button text
icon name without vendor prefix (e.g. 'user' instead of 'fa-user') icon name with full vendor style and prefix (e.g. 'fa-solid fa-user' instead of 'fa-user' or 'user')
value submitted value (if type is also set to 'submit') value submitted value (if type is also set to 'submit')
target '_blank' | '_self' (default) | etc target '_blank' | '_self' (default) | etc
onclick javascript onclick javascript
@ -237,4 +237,4 @@ if (!class_exists('button')) {
*/ */
?> ?>

View File

@ -0,0 +1,241 @@
<?php
/*
* FusionPBX
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is FusionPBX
*
* The Initial Developer of the Original Code is
* Mark J Crane <markjcrane@fusionpbx.com>
* Portions created by the Initial Developer are Copyright (C) 2008-2024
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Mark J Crane <markjcrane@fusionpbx.com>
* Tim Fry <tim@fusionpbx.com>
*/
/**
* Container object for creating command line options when creating a service
* @author Tim Fry <tim@fusionpbx.com>
*/
class cli_option {
private $short_option;
private $long_option;
private $description;
private $short_description;
private $long_description;
private $functions;
/**
* Constructs an empty cli_option
*/
public function __construct() {
$this->short_option = '';
$this->long_option = '';
$this->description = '';
$this->short_description = '';
$this->long_description = '';
$this->functions = [];
}
/**
* A factory method to create a new cli_option
* @param type $options
* @return cli_option
*/
public static function new(...$options): cli_option {
$obj = new cli_option();
//automatically assign properties to the object that were passed in key/value pairs
self::parse_options($obj, $options);
//return the cli_option with all properties filled in that were passed
return $obj;
}
// used to parse object values when created
private static function parse_options($obj, $options) {
foreach ($options as $key => $value) {
if (is_array($value)) {
self::parse_options($obj, $value);
}
//call the method with the name of $key and pass it $value
if (method_exists($obj, $key)) {
$obj->{$key}($value);
} elseif (property_exists($obj, $key)) {
$obj->{$key} = $value;
}
}
}
/**
* Sets or returns the short option value
* @param string|null $short_option
* @return $this
*/
public function short_option(?string $short_option = null) {
if (!empty($short_option)) {
$this->short_option = $short_option;
return $this;
}
return $this->short_option;
}
/**
* Sets or returns the long option value
* @param string|null $long_option
* @return $this
*/
public function long_option(?string $long_option = null) {
if (!empty($long_option)) {
$this->long_option = $long_option;
return $this;
}
return $this->long_option;
}
/**
* Set the general description
* @param string|null $description
* @return $this
*/
public function description(?string $description = null) {
if (!empty($description)) {
$this->description = $description;
return $this;
}
return $this->description;
}
/**
* Sets or returns the short_description. If short_description is empty then the short_option is used as a default.
* @param string|null $short_description When parameter is null, it returns the currently set value. When not null the short description is set to the passed value.
* @return $this
*/
public function short_description(?string $short_description = null) {
if (!empty($short_description)) {
$this->short_description = $short_description;
return $this;
}
if (empty($this->short_description)) {
if (str_ends_with($this->short_option, ':')) {
$short = rtrim($this->short_option, ':');
$short_description = "-$short <value>";
} else {
$short_description = '-' . $this->short_option;
}
} else {
$short_description = $this->short_description;
}
return $short_description;
}
/**
* Sets or returns the long_description. If long_description is empty then the long_option is used as a default.
* @param string|null $long_description When parameter is null, it returns the currently set value. When not null the long description is set to the passed value.
* @return $this
*/
public function long_description(?string $long_description = null) {
if ($long_description !== null) {
$this->long_description = $long_description;
return $this;
}
if (empty($this->long_description)) {
if (str_ends_with($this->long_option, ':')) {
$long = rtrim($this->long_option, ':');
$long_description = "--$long <value>";
} else {
$long_description = '--' . $this->long_option;
}
} else {
$long_description = $this->long_description;
}
return $long_description;
}
/**
* Adds an array of callback functions replacing the existing callback functions
* @param array|null $functions
* @return $this
*/
public function functions(?array $functions = null) {
if ($functions !== null) {
$this->functions = $functions;
return $this;
}
return $this->functions;
}
/**
* Appends the callback function to the array of existing callback functions
* @param string|null $function When function param is set, the callback function will be appended to the list of functions. When called without a param, the array will be returned of current callbacks.
* @return $this|array Returns the array of callbacks if no parameters passed or this object when appending a callback
*/
public function callback(?string $function = null) {
if ($function !== null) {
$this->functions += [$function];
return $this;
}
return $this->functions;
}
/**
* Appends the callback function to the array of existing callback functions
* @param string|null $function
* @return $this
*/
public function function_append(?string $function = null) {
if ($function !== null) {
$this->functions += [$function];
return $this;
}
return $this->functions;
}
/**
* Returns the array structure required for service
* @return array
*/
public function to_array(): array {
$arr['short_option'] = $this->short_option();
$arr['long_option'] = $this->long_option();
$arr['description'] = $this->description();
$arr['short_description'] = $this->short_description();
$arr['long_description'] = $this->long_description();
$arr['functions'] = $this->functions();
return $arr;
}
}
/* Examples
$cli_option = cli_option::new([
'short_option'=>'m',
'long_option' =>'my-option',
'description' =>'Create an option that uses -m or --my-option command-line parameter'
]);
$cli_option = cli_option::new()
->short_option('m')
->long_option('my-option')
->description('Create an option that uses -m or --my-option command-line parameter');
echo $cli_option->description();
$cli_parsing_array = $cli_option->to_array();
print_r($cli_parsing_array);
//*/

View File

@ -975,7 +975,7 @@ if (!class_exists('menu')) {
$html .= " </div>\n"; $html .= " </div>\n";
$html .= " <button type='button' class='navbar-toggler' data-toggle='collapse' data-target='#main_navbar' aria-expanded='false' aria-controls='main_navbar' aria-label='Toggle Menu'>\n"; $html .= " <button type='button' class='navbar-toggler' data-toggle='collapse' data-target='#main_navbar' aria-expanded='false' aria-controls='main_navbar' aria-label='Toggle Menu'>\n";
$html .= " <span class='fas fa-bars'></span>\n"; $html .= " <span class='fa-solid fa-bars'></span>\n";
$html .= " </button>\n"; $html .= " </button>\n";
$html .= " <div class='collapse navbar-collapse' id='main_navbar'>\n"; $html .= " <div class='collapse navbar-collapse' id='main_navbar'>\n";
@ -994,8 +994,8 @@ if (!class_exists('menu')) {
$mod_a_2 = (!empty($menu_parent['menu_item_link']) && !$submenu) ? $menu_parent['menu_item_link'] : '#'; $mod_a_2 = (!empty($menu_parent['menu_item_link']) && !$submenu) ? $menu_parent['menu_item_link'] : '#';
$mod_a_3 = ($menu_parent['menu_item_category'] == 'external') ? "target='_blank' " : null; $mod_a_3 = ($menu_parent['menu_item_category'] == 'external') ? "target='_blank' " : null;
if (isset($_SESSION['theme']['menu_main_icons']['boolean']) && $_SESSION['theme']['menu_main_icons']['boolean'] == 'true') { if (isset($_SESSION['theme']['menu_main_icons']['boolean']) && $_SESSION['theme']['menu_main_icons']['boolean'] == 'true') {
if (!empty($menu_parent['menu_item_icon']) && substr_count($menu_parent['menu_item_icon'], 'fa-') > 0) { if (!empty($menu_parent['menu_item_icon']) && substr($menu_parent['menu_item_icon'], 0, 3) == 'fa-') { // font awesome icon
$menu_main_icon = "<span class='fas ".$menu_parent['menu_item_icon']."' title=\"".escape($menu_parent['menu_language_title'])."\"></span>"; $menu_main_icon = "<span class='".escape($menu_parent['menu_item_icon'])."' title=\"".escape($menu_parent['menu_language_title'])."\"></span>";
} }
else { else {
$menu_main_icon = null; $menu_main_icon = null;
@ -1027,14 +1027,14 @@ if (!class_exists('menu')) {
$mod_a_3 = ($menu_sub['menu_item_category'] == 'external') ? "target='_blank' " : null; $mod_a_3 = ($menu_sub['menu_item_category'] == 'external') ? "target='_blank' " : null;
$menu_sub_icon = null; $menu_sub_icon = null;
if ($_SESSION['theme']['menu_sub_icons']['boolean'] != 'false') { if ($_SESSION['theme']['menu_sub_icons']['boolean'] != 'false') {
if (!empty($menu_sub['menu_item_icon']) && substr_count($menu_sub['menu_item_icon'], 'fa-') > 0) { if (!empty($menu_sub['menu_item_icon']) && substr($menu_sub['menu_item_icon'], 0, 3) == 'fa-') { // font awesome icon
$menu_sub_icon = "<span class='fas ".escape($menu_sub['menu_item_icon'])."'></span>"; $menu_sub_icon = "<span class='".escape($menu_sub['menu_item_icon'])."'></span>";
} }
else { else {
$menu_sub_icon = null; $menu_sub_icon = null;
} }
} }
$html .= " <li class='nav-item'><a class='nav-link' href='".$mod_a_2."' ".$mod_a_3.">".($_SESSION['theme']['menu_sub_icons']['boolean'] != 'false' ? "<span class='fas fa-bar d-inline-block d-sm-none float-left' style='margin: 4px 10px 0 25px;'></span>" : null).escape($menu_sub['menu_language_title']).$menu_sub_icon."</a></li>\n"; $html .= " <li class='nav-item'><a class='nav-link' href='".$mod_a_2."' ".$mod_a_3.">".($_SESSION['theme']['menu_sub_icons']['boolean'] != 'false' ? "<span class='fa-solid fa-minus d-inline-block d-sm-none float-left' style='margin: 4px 10px 0 25px;'></span>" : null).escape($menu_sub['menu_language_title']).$menu_sub_icon."</a></li>\n";
if ($columns > 1 && $column_current == 1 && ($index_sub+1) > (ceil(@sizeof($menu_parent['menu_items'])/2)-1)) { if ($columns > 1 && $column_current == 1 && ($index_sub+1) > (ceil(@sizeof($menu_parent['menu_items'])/2)-1)) {
$html .= " </ul>\n"; $html .= " </ul>\n";
$html .= " </div>\n"; $html .= " </div>\n";
@ -1060,20 +1060,20 @@ if (!class_exists('menu')) {
//current user //current user
if (isset($_SESSION['theme']['user_visible']['text']) && $_SESSION['theme']['user_visible']['text'] == 'true') { if (isset($_SESSION['theme']['user_visible']['text']) && $_SESSION['theme']['user_visible']['text'] == 'true') {
$html .= " <li class='nav-item'>\n"; $html .= " <li class='nav-item'>\n";
$html .= " <a class='header_user' href='".PROJECT_PATH."/core/users/user_edit.php?id=user' title=\"".$this->text['theme-label-user']."\"><i class='fas fa-".(!empty($_SESSION['theme']['body_header_icon_user']['text']) ? $_SESSION['theme']['body_header_icon_user']['text'] : 'user-circle')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".$_SESSION['username']."</a>"; $html .= " <a class='header_user' href='".PROJECT_PATH."/core/users/user_edit.php?id=user' title=\"".$this->text['theme-label-user']."\"><i class='".(!empty($_SESSION['theme']['body_header_icon_user']['text']) ? $_SESSION['theme']['body_header_icon_user']['text'] : 'fa-solid fa-user-circle')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".escape($_SESSION['username'])."</a>";
$html .= " </li>\n"; $html .= " </li>\n";
} }
//domain name/selector //domain name/selector
if (!empty($_SESSION['username']) && permission_exists('domain_select') && count($_SESSION['domains']) > 1 && $_SESSION['theme']['domain_visible']['text'] == 'true') { if (!empty($_SESSION['username']) && permission_exists('domain_select') && count($_SESSION['domains']) > 1 && $_SESSION['theme']['domain_visible']['text'] == 'true') {
$html .= " <li class='nav-item'>\n"; $html .= " <li class='nav-item'>\n";
$html .= " <a class='header_domain' href='#' id='header_domain_selector_domain' title='".$this->text['theme-label-open_selector']."'><i class='fas fa-".(!empty($_SESSION['theme']['body_header_icon_domain']['text']) ? $_SESSION['theme']['body_header_icon_domain']['text'] : 'globe-americas')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".escape($_SESSION['domain_name'])."</a>"; $html .= " <a class='header_domain' href='#' id='header_domain_selector_domain' title='".$this->text['theme-label-open_selector']."'><i class='".(!empty($_SESSION['theme']['body_header_icon_domain']['text']) ? $_SESSION['theme']['body_header_icon_domain']['text'] : 'fa-solid fa-earth-americas')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".escape($_SESSION['domain_name'])."</a>";
$html .= " </li>\n"; $html .= " </li>\n";
} }
//logout icon //logout icon
if (!empty($_SESSION['username']) && isset($_SESSION['theme']['logout_icon_visible']) && $_SESSION['theme']['logout_icon_visible']['text'] == "true") { if (!empty($_SESSION['username']) && isset($_SESSION['theme']['logout_icon_visible']) && $_SESSION['theme']['logout_icon_visible']['text'] == "true") {
$username_full = $_SESSION['username'].((count($_SESSION['domains']) > 1) ? "@".$_SESSION["user_context"] : null); $username_full = $_SESSION['username'].((count($_SESSION['domains']) > 1) ? "@".$_SESSION["user_context"] : null);
$html .= " <li class='nav-item'>\n"; $html .= " <li class='nav-item'>\n";
$html .= " <a class='logout_icon' href='#' title=\"".$this->text['theme-label-logout']."\" onclick=\"modal_open('modal-logout','btn_logout');\"><span class='fas fa-sign-out-alt'></span></a>"; $html .= " <a class='logout_icon' href='#' title=\"".$this->text['theme-label-logout']."\" onclick=\"modal_open('modal-logout','btn_logout');\"><span class='fa-solid fa-right-from-bracket'></span></a>";
$html .= " </li>\n"; $html .= " </li>\n";
unset($username_full); unset($username_full);
} }
@ -1085,7 +1085,7 @@ if (!class_exists('menu')) {
//modal for logout icon (above) //modal for logout icon (above)
if (!empty($_SESSION['username']) && isset($_SESSION['theme']['logout_icon_visible']) && $_SESSION['theme']['logout_icon_visible']['text'] == "true") { if (!empty($_SESSION['username']) && isset($_SESSION['theme']['logout_icon_visible']) && $_SESSION['theme']['logout_icon_visible']['text'] == "true") {
$html .= modal::create(['id'=>'modal-logout','type'=>'general','message'=>$this->text['theme-confirm-logout'],'actions'=>button::create(['type'=>'button','label'=>$this->text['theme-label-logout'],'icon'=>'sign-out-alt','id'=>'btn_logout','style'=>'float: right; margin-left: 15px;','collapse'=>'never','link'=>PROJECT_PATH.'/logout.php','onclick'=>"modal_close();"])]); $html .= modal::create(['id'=>'modal-logout','type'=>'general','message'=>$this->text['theme-confirm-logout'],'actions'=>button::create(['type'=>'button','label'=>$this->text['theme-label-logout'],'icon'=>'fa-solid fa-right-from-bracket','id'=>'btn_logout','style'=>'float: right; margin-left: 15px;','collapse'=>'never','link'=>PROJECT_PATH.'/logout.php','onclick'=>"modal_close();"])]);
} }
return $html; return $html;
@ -1102,15 +1102,15 @@ if (!class_exists('menu')) {
$html .= " <div id='menu_side_control_container'>\n"; $html .= " <div id='menu_side_control_container'>\n";
$html .= " <div class='menu_side_control_state' style='float: right; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? 'display: none' : null)."'>\n"; $html .= " <div class='menu_side_control_state' style='float: right; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? 'display: none' : null)."'>\n";
if ($_SESSION['theme']['menu_brand_type']['text'] != 'none') { if ($_SESSION['theme']['menu_brand_type']['text'] != 'none') {
$html .= " <a class='menu_side_item_main menu_side_contract' onclick='menu_side_contract();' style='padding: 8px 15px !important; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "display: none;" : null)."'><i class='fas fa-bars fa-fw'></i></a>\n"; $html .= " <a class='menu_side_item_main menu_side_contract' onclick='menu_side_contract();' style='padding: 8px 15px !important; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "display: none;" : null)."'><i class='fa-solid fa-bars fa-fw'></i></a>\n";
} }
if ($_SESSION['theme']['menu_side_pin']['boolean'] == 'true') { if ($_SESSION['theme']['menu_side_pin']['boolean'] == 'true') {
$html .= " <a class='menu_side_item_main' id='menu_side_state_set_expanded' onclick=\"menu_side_state_set('expanded');\" oncontextmenu=\"menu_side_state_set('delete'); return false;\" style='padding: 8px 14px 8px 16px !important; ".($_SESSION['theme']['menu_side_state']['text'] == 'expanded' ? 'display: none' : null)."' title=\"".$this->text['theme-label-pin_menu']."\"><i class='fas fa-toggle-off fa-sm fa-fw'></i></a>\n"; $html .= " <a class='menu_side_item_main' id='menu_side_state_set_expanded' onclick=\"menu_side_state_set('expanded');\" oncontextmenu=\"menu_side_state_set('delete'); return false;\" style='padding: 8px 14px 8px 16px !important; ".($_SESSION['theme']['menu_side_state']['text'] == 'expanded' ? 'display: none' : null)."' title=\"".$this->text['theme-label-pin_menu']."\"><i class='fa-solid fa-toggle-off fa-sm fa-fw'></i></a>\n";
$html .= " <a class='menu_side_item_main' id='menu_side_state_set_contracted' onclick=\"menu_side_state_set('contracted');\" oncontextmenu=\"menu_side_state_set('delete'); return false;\" style='padding: 8px 14px 8px 16px !important; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? 'display: none' : null)."' title=\"".$this->text['theme-label-unpin_menu']."\"><i class='fas fa-toggle-on fa-sm fa-fw'></i></a>\n"; $html .= " <a class='menu_side_item_main' id='menu_side_state_set_contracted' onclick=\"menu_side_state_set('contracted');\" oncontextmenu=\"menu_side_state_set('delete'); return false;\" style='padding: 8px 14px 8px 16px !important; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? 'display: none' : null)."' title=\"".$this->text['theme-label-unpin_menu']."\"><i class='fa-solid fa-toggle-on fa-sm fa-fw'></i></a>\n";
} }
$html .= " </div>\n"; $html .= " </div>\n";
if ($_SESSION['theme']['menu_brand_type']['text'] == 'none') { if ($_SESSION['theme']['menu_brand_type']['text'] == 'none') {
$html .= " <a class='menu_side_item_main menu_side_contract' onclick='menu_side_contract();' style='".($_SESSION['theme']['menu_side_pin']['boolean'] == 'true' ? "max-width: calc(100% - 50px);" : null)." ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "display: none;" : null)."' title=\"".$this->text['theme-label-contract_menu']."\"><i class='fas fa-bars fa-fw' style='z-index: 99800; padding-left: 1px;'></i></a>"; $html .= " <a class='menu_side_item_main menu_side_contract' onclick='menu_side_contract();' style='".($_SESSION['theme']['menu_side_pin']['boolean'] == 'true' ? "max-width: calc(100% - 50px);" : null)." ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "display: none;" : null)."' title=\"".$this->text['theme-label-contract_menu']."\"><i class='fa-solid fa-bars fa-fw' style='z-index: 99800; padding-left: 1px;'></i></a>";
} }
$menu_brand_text = !empty($_SESSION['theme']['menu_brand_text']['text']) ? escape($_SESSION['theme']['menu_brand_text']['text']) : "FusionPBX"; $menu_brand_text = !empty($_SESSION['theme']['menu_brand_text']['text']) ? escape($_SESSION['theme']['menu_brand_text']['text']) : "FusionPBX";
if ($_SESSION['theme']['menu_brand_type']['text'] == 'text') { if ($_SESSION['theme']['menu_brand_type']['text'] == 'text') {
@ -1125,7 +1125,7 @@ if (!class_exists('menu')) {
$html .= "</a>\n"; $html .= "</a>\n";
} }
// else { // else {
// $html .= " <a class='menu_side_item_main menu_side_expand' ".($_SESSION['theme']['menu_side_state']['text'] == 'expanded' ? "style='display: none';" : null)." onclick='menu_side_expand();' title=\"".$this->text['theme-label-expand_menu']."\"><i class='fas fa-bars fa-fw' style='z-index: 99800; padding-left: 1px;'></i></a>"; // $html .= " <a class='menu_side_item_main menu_side_expand' ".($_SESSION['theme']['menu_side_state']['text'] == 'expanded' ? "style='display: none';" : null)." onclick='menu_side_expand();' title=\"".$this->text['theme-label-expand_menu']."\"><i class='fa-solid fa-bars fa-fw' style='z-index: 99800; padding-left: 1px;'></i></a>";
// } // }
$html .= " </div>\n"; $html .= " </div>\n";
//main menu items //main menu items
@ -1134,10 +1134,10 @@ if (!class_exists('menu')) {
$menu_target = ($menu_item_main['menu_item_category'] == 'external') ? '_blank' : ''; $menu_target = ($menu_item_main['menu_item_category'] == 'external') ? '_blank' : '';
$html .= " <a class='menu_side_item_main' ".(!empty($menu_item_main['menu_item_link']) ? "href='".$menu_item_main['menu_item_link']."' target='".$menu_target."'" : "onclick=\"menu_side_expand(); menu_side_item_toggle('".$menu_item_main['menu_item_uuid']."');\"")." title=\"".$menu_item_main['menu_language_title']."\">"; $html .= " <a class='menu_side_item_main' ".(!empty($menu_item_main['menu_item_link']) ? "href='".$menu_item_main['menu_item_link']."' target='".$menu_target."'" : "onclick=\"menu_side_expand(); menu_side_item_toggle('".$menu_item_main['menu_item_uuid']."');\"")." title=\"".$menu_item_main['menu_language_title']."\">";
if (is_array($menu_item_main['menu_items']) && sizeof($menu_item_main['menu_items']) != 0 && $_SESSION['theme']['menu_side_item_main_sub_icons']['boolean'] == 'true') { if (is_array($menu_item_main['menu_items']) && sizeof($menu_item_main['menu_items']) != 0 && $_SESSION['theme']['menu_side_item_main_sub_icons']['boolean'] == 'true') {
$html .= " <div class='menu_side_item_main_sub_icons' style='float: right; margin-right: -1px; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "display: none;" : null)."'><i id='sub_arrow_".$menu_item_main['menu_item_uuid']."' class='sub_arrows fas fa-".(!empty($_SESSION['theme']['menu_side_item_main_sub_icon_expand']['text']) ? $_SESSION['theme']['menu_side_item_main_sub_icon_expand']['text'] : 'chevron-down')." fa-xs'></i></div>\n"; $html .= " <div class='menu_side_item_main_sub_icons' style='float: right; margin-right: -1px; ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "display: none;" : null)."'><i id='sub_arrow_".$menu_item_main['menu_item_uuid']."' class='sub_arrows ".(!empty($_SESSION['theme']['menu_side_item_main_sub_icon_expand']['text']) ? $_SESSION['theme']['menu_side_item_main_sub_icon_expand']['text'] : 'fa-solid fa-chevron-down')." fa-xs'></i></div>\n";
} }
if (!empty($menu_item_main['menu_item_icon'])) { if (!empty($menu_item_main['menu_item_icon']) && substr($menu_item_main['menu_item_icon'], 0, 3) == 'fa-') { // font awesome icon
$html .= "<i class='menu_side_item_icon fas ".$menu_item_main['menu_item_icon']." fa-fw' style='z-index: 99800; margin-right: 8px;'></i>"; $html .= "<i class='menu_side_item_icon ".$menu_item_main['menu_item_icon']." fa-fw' style='z-index: 99800; margin-right: 8px;'></i>";
} }
$html .= "<span class='menu_side_item_title' ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "style='display: none;'" : null).">".$menu_item_main['menu_language_title']."</span>"; $html .= "<span class='menu_side_item_title' ".($_SESSION['theme']['menu_side_state']['text'] != 'expanded' ? "style='display: none;'" : null).">".$menu_item_main['menu_language_title']."</span>";
$html .= "</a>\n"; $html .= "</a>\n";
@ -1178,24 +1178,24 @@ if (!class_exists('menu')) {
$html .= "<div class='float-right' style='white-space: nowrap;'>"; $html .= "<div class='float-right' style='white-space: nowrap;'>";
//current user //current user
$html .= "<span style='display: inline-block; padding-right: 20px; font-size: 90%;'>\n"; $html .= "<span style='display: inline-block; padding-right: 20px; font-size: 90%;'>\n";
$html .= " <a href='".PROJECT_PATH."/core/users/user_edit.php?id=user' title=\"".$this->text['theme-label-user']."\"><i class='fas fa-".($_SESSION['theme']['body_header_icon_user']['text'] != '' ? $_SESSION['theme']['body_header_icon_user']['text'] : 'user-circle')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".$_SESSION['username']."</a>"; $html .= " <a href='".PROJECT_PATH."/core/users/user_edit.php?id=user' title=\"".$this->text['theme-label-user']."\"><i class='".(!empty($_SESSION['theme']['body_header_icon_user']['text']) ? $_SESSION['theme']['body_header_icon_user']['text'] : 'fa-solid fa-user-circle')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".$_SESSION['username']."</a>";
$html .= "</span>\n"; $html .= "</span>\n";
//domain name/selector (sm+) //domain name/selector (sm+)
if (!empty($_SESSION['username']) && permission_exists('domain_select') && count($_SESSION['domains']) > 1 && $_SESSION['theme']['domain_visible']['text'] == 'true') { if (!empty($_SESSION['username']) && permission_exists('domain_select') && count($_SESSION['domains']) > 1 && $_SESSION['theme']['domain_visible']['text'] == 'true') {
$html .= "<span style='display: inline-block; padding-right: 10px; font-size: 90%;'>\n"; $html .= "<span style='display: inline-block; padding-right: 10px; font-size: 90%;'>\n";
$html .= " <a href='#' id='header_domain_selector_domain' title='".$this->text['theme-label-open_selector']."'><i class='fas fa-".($_SESSION['theme']['body_header_icon_domain']['text'] != '' ? $_SESSION['theme']['body_header_icon_domain']['text'] : 'globe-americas')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".escape($_SESSION['domain_name'])."</a>"; $html .= " <a href='#' id='header_domain_selector_domain' title='".$this->text['theme-label-open_selector']."'><i class='".(!empty($_SESSION['theme']['body_header_icon_domain']['text']) ? $_SESSION['theme']['body_header_icon_domain']['text'] : 'fa-solid fa-earth-americas')." fa-lg fa-fw' style='margin-top: 6px; margin-right: 5px;'></i>".escape($_SESSION['domain_name'])."</a>";
$html .= "</span>\n"; $html .= "</span>\n";
} }
//logout icon //logout icon
if (!empty($_SESSION['username']) && $_SESSION['theme']['logout_icon_visible']['text'] == "true") { if (!empty($_SESSION['username']) && $_SESSION['theme']['logout_icon_visible']['text'] == "true") {
$html .= "<a id='header_logout_icon' href='#' title=\"".$this->text['theme-label-logout']."\" onclick=\"modal_open('modal-logout','btn_logout');\"><span class='fas fa-sign-out-alt'></span></a>"; $html .= "<a id='header_logout_icon' href='#' title=\"".$this->text['theme-label-logout']."\" onclick=\"modal_open('modal-logout','btn_logout');\"><span class='fa-solid fa-right-from-bracket'></span></a>";
} }
$html .= "</div>"; $html .= "</div>";
$html .= " </div>\n"; $html .= " </div>\n";
//modal for logout icon (above) //modal for logout icon (above)
if (!empty($_SESSION['username']) && $_SESSION['theme']['logout_icon_visible']['text'] == "true") { if (!empty($_SESSION['username']) && $_SESSION['theme']['logout_icon_visible']['text'] == "true") {
$html .= modal::create(['id'=>'modal-logout','type'=>'general','message'=>$this->text['theme-confirm-logout'],'actions'=>button::create(['type'=>'button','label'=>$this->text['theme-label-logout'],'icon'=>'sign-out-alt','id'=>'btn_logout','style'=>'float: right; margin-left: 15px;','collapse'=>'never','link'=>PROJECT_PATH.'/logout.php','onclick'=>"modal_close();"])]); $html .= modal::create(['id'=>'modal-logout','type'=>'general','message'=>$this->text['theme-confirm-logout'],'actions'=>button::create(['type'=>'button','label'=>$this->text['theme-label-logout'],'icon'=>'fa-solid fa-right-from-bracket','id'=>'btn_logout','style'=>'float: right; margin-left: 15px;','collapse'=>'never','link'=>PROJECT_PATH.'/logout.php','onclick'=>"modal_close();"])]);
} }
return $html; return $html;
@ -1206,4 +1206,4 @@ if (!class_exists('menu')) {
} }
} }
?> ?>

View File

@ -1,23 +1,151 @@
Fonticons, Inc. (https://fontawesome.com)
--------------------------------------------------------------------------------
Font Awesome Free License Font Awesome Free License
-------------------------
Font Awesome Free is free, open source, and GPL friendly. You can use it for Font Awesome Free is free, open source, and GPL friendly. You can use it for
commercial projects, open source projects, or really almost whatever you want. commercial projects, open source projects, or really almost whatever you want.
Full Font Awesome Free license: https://fontawesome.com/license/free. Full Font Awesome Free license: https://fontawesome.com/license/free.
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) --------------------------------------------------------------------------------
In the Font Awesome Free download, the CC BY 4.0 license applies to all icons
packaged as SVG and JS file types. # Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
The Font Awesome Free download is licensed under a Creative Commons
Attribution 4.0 International License and applies to all icons packaged
as SVG and JS file types.
--------------------------------------------------------------------------------
# Fonts: SIL OFL 1.1 License
# Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL)
In the Font Awesome Free download, the SIL OFL license applies to all icons In the Font Awesome Free download, the SIL OFL license applies to all icons
packaged as web and desktop font files. packaged as web and desktop font files.
Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com)
with Reserved Font Name: "Font Awesome".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE
Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting — in part or in whole — any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
--------------------------------------------------------------------------------
# Code: MIT License (https://opensource.org/licenses/MIT) # Code: MIT License (https://opensource.org/licenses/MIT)
In the Font Awesome Free download, the MIT license applies to all non-font and In the Font Awesome Free download, the MIT license applies to all non-font and
non-icon files. non-icon files.
Copyright 2024 Fonticons, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in the
Software without restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so, subject to the
following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
# Attribution # Attribution
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
Awesome Free files already contain embedded comments with sufficient Awesome Free files already contain embedded comments with sufficient
attribution, so you shouldn't need to do anything additional when using these attribution, so you shouldn't need to do anything additional when using these
@ -27,7 +155,10 @@ We've kept attribution comments terse, so we ask that you do not actively work
to remove them from files, especially code. They're a great way for folks to to remove them from files, especially code. They're a great way for folks to
learn about Font Awesome. learn about Font Awesome.
--------------------------------------------------------------------------------
# Brand Icons # Brand Icons
All brand icons are trademarks of their respective owners. The use of these All brand icons are trademarks of their respective owners. The use of these
trademarks does not indicate endorsement of the trademark holder by Font trademarks does not indicate endorsement of the trademark holder by Font
Awesome, nor vice versa. **Please do not use brand logos for any purpose except Awesome, nor vice versa. **Please do not use brand logos for any purpose except

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,15 +1,19 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Free';
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; }
@font-face { @font-face {
font-family: 'Font Awesome 5 Free'; font-family: 'Font Awesome 6 Free';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
font-display: auto; font-display: block;
src: url("../webfonts/fa-regular-400.eot"); src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); }
.far { .far,
font-family: 'Font Awesome 5 Free'; .fa-regular {
font-weight: 400; } font-weight: 400; }

View File

@ -1,5 +1,6 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:"Font Awesome 5 Free";font-weight:400} :host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}

View File

@ -1,16 +1,19 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Free';
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; }
@font-face { @font-face {
font-family: 'Font Awesome 5 Free'; font-family: 'Font Awesome 6 Free';
font-style: normal; font-style: normal;
font-weight: 900; font-weight: 900;
font-display: auto; font-display: block;
src: url("../webfonts/fa-solid-900.eot"); src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); }
.fa, .fas,
.fas { .fa-solid {
font-family: 'Font Awesome 5 Free';
font-weight: 900; } font-weight: 900; }

View File

@ -1,5 +1,6 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900} :host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}

View File

@ -1,70 +1,53 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
svg:not(:root).svg-inline--fa { :root, :host {
overflow: visible; } --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free';
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free';
--fa-font-light: normal 300 1em/1 'Font Awesome 6 Pro';
--fa-font-thin: normal 100 1em/1 'Font Awesome 6 Pro';
--fa-font-duotone: normal 900 1em/1 'Font Awesome 6 Duotone';
--fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands';
--fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-regular: normal 400 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-light: normal 300 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-thin: normal 100 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-duotone-solid: normal 900 1em/1 'Font Awesome 6 Sharp Duotone'; }
svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {
overflow: visible;
box-sizing: content-box; }
.svg-inline--fa { .svg-inline--fa {
display: inline-block; display: var(--fa-display, inline-block);
font-size: inherit;
height: 1em; height: 1em;
overflow: visible; overflow: visible;
vertical-align: -.125em; } vertical-align: -.125em; }
.svg-inline--fa.fa-2xs {
vertical-align: 0.1em; }
.svg-inline--fa.fa-xs {
vertical-align: 0em; }
.svg-inline--fa.fa-sm {
vertical-align: -0.07143em; }
.svg-inline--fa.fa-lg { .svg-inline--fa.fa-lg {
vertical-align: -.225em; } vertical-align: -0.2em; }
.svg-inline--fa.fa-w-1 { .svg-inline--fa.fa-xl {
width: 0.0625em; } vertical-align: -0.25em; }
.svg-inline--fa.fa-w-2 { .svg-inline--fa.fa-2xl {
width: 0.125em; } vertical-align: -0.3125em; }
.svg-inline--fa.fa-w-3 {
width: 0.1875em; }
.svg-inline--fa.fa-w-4 {
width: 0.25em; }
.svg-inline--fa.fa-w-5 {
width: 0.3125em; }
.svg-inline--fa.fa-w-6 {
width: 0.375em; }
.svg-inline--fa.fa-w-7 {
width: 0.4375em; }
.svg-inline--fa.fa-w-8 {
width: 0.5em; }
.svg-inline--fa.fa-w-9 {
width: 0.5625em; }
.svg-inline--fa.fa-w-10 {
width: 0.625em; }
.svg-inline--fa.fa-w-11 {
width: 0.6875em; }
.svg-inline--fa.fa-w-12 {
width: 0.75em; }
.svg-inline--fa.fa-w-13 {
width: 0.8125em; }
.svg-inline--fa.fa-w-14 {
width: 0.875em; }
.svg-inline--fa.fa-w-15 {
width: 0.9375em; }
.svg-inline--fa.fa-w-16 {
width: 1em; }
.svg-inline--fa.fa-w-17 {
width: 1.0625em; }
.svg-inline--fa.fa-w-18 {
width: 1.125em; }
.svg-inline--fa.fa-w-19 {
width: 1.1875em; }
.svg-inline--fa.fa-w-20 {
width: 1.25em; }
.svg-inline--fa.fa-pull-left { .svg-inline--fa.fa-pull-left {
margin-right: .3em; margin-right: var(--fa-pull-margin, 0.3em);
width: auto; } width: auto; }
.svg-inline--fa.fa-pull-right { .svg-inline--fa.fa-pull-right {
margin-left: .3em; margin-left: var(--fa-pull-margin, 0.3em);
width: auto; } width: auto; }
.svg-inline--fa.fa-border {
height: 1.5em; }
.svg-inline--fa.fa-li { .svg-inline--fa.fa-li {
width: 2em; } width: var(--fa-li-width, 2em);
top: 0.25em; }
.svg-inline--fa.fa-fw { .svg-inline--fa.fa-fw {
width: 1.25em; } width: var(--fa-fw-width, 1.25em); }
.fa-layers svg.svg-inline--fa { .fa-layers svg.svg-inline--fa {
bottom: 0; bottom: 0;
@ -74,6 +57,11 @@ svg:not(:root).svg-inline--fa {
right: 0; right: 0;
top: 0; } top: 0; }
.fa-layers-text, .fa-layers-counter {
display: inline-block;
position: absolute;
text-align: center; }
.fa-layers { .fa-layers {
display: inline-block; display: inline-block;
height: 1em; height: 1em;
@ -82,88 +70,57 @@ svg:not(:root).svg-inline--fa {
vertical-align: -.125em; vertical-align: -.125em;
width: 1em; } width: 1em; }
.fa-layers svg.svg-inline--fa { .fa-layers svg.svg-inline--fa {
-webkit-transform-origin: center center; transform-origin: center center; }
transform-origin: center center; }
.fa-layers-text, .fa-layers-counter {
display: inline-block;
position: absolute;
text-align: center; }
.fa-layers-text { .fa-layers-text {
left: 50%; left: 50%;
top: 50%; top: 50%;
-webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%);
transform: translate(-50%, -50%); transform-origin: center center; }
-webkit-transform-origin: center center;
transform-origin: center center; }
.fa-layers-counter { .fa-layers-counter {
background-color: #ff253a; background-color: var(--fa-counter-background-color, #ff253a);
border-radius: 1em; border-radius: var(--fa-counter-border-radius, 1em);
-webkit-box-sizing: border-box; box-sizing: border-box;
box-sizing: border-box; color: var(--fa-inverse, #fff);
color: #fff; line-height: var(--fa-counter-line-height, 1);
height: 1.5em; max-width: var(--fa-counter-max-width, 5em);
line-height: 1; min-width: var(--fa-counter-min-width, 1.5em);
max-width: 5em;
min-width: 1.5em;
overflow: hidden; overflow: hidden;
padding: .25em; padding: var(--fa-counter-padding, 0.25em 0.5em);
right: 0; right: var(--fa-right, 0);
text-overflow: ellipsis; text-overflow: ellipsis;
top: 0; top: var(--fa-top, 0);
-webkit-transform: scale(0.25); transform: scale(var(--fa-counter-scale, 0.25));
transform: scale(0.25); transform-origin: top right; }
-webkit-transform-origin: top right;
transform-origin: top right; }
.fa-layers-bottom-right { .fa-layers-bottom-right {
bottom: 0; bottom: var(--fa-bottom, 0);
right: 0; right: var(--fa-right, 0);
top: auto; top: auto;
-webkit-transform: scale(0.25); transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(0.25); transform-origin: bottom right; }
-webkit-transform-origin: bottom right;
transform-origin: bottom right; }
.fa-layers-bottom-left { .fa-layers-bottom-left {
bottom: 0; bottom: var(--fa-bottom, 0);
left: 0; left: var(--fa-left, 0);
right: auto; right: auto;
top: auto; top: auto;
-webkit-transform: scale(0.25); transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(0.25); transform-origin: bottom left; }
-webkit-transform-origin: bottom left;
transform-origin: bottom left; }
.fa-layers-top-right { .fa-layers-top-right {
right: 0; top: var(--fa-top, 0);
top: 0; right: var(--fa-right, 0);
-webkit-transform: scale(0.25); transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(0.25); transform-origin: top right; }
-webkit-transform-origin: top right;
transform-origin: top right; }
.fa-layers-top-left { .fa-layers-top-left {
left: 0; left: var(--fa-left, 0);
right: auto; right: auto;
top: 0; top: var(--fa-top, 0);
-webkit-transform: scale(0.25); transform: scale(var(--fa-layers-scale, 0.25));
transform: scale(0.25); transform-origin: top left; }
-webkit-transform-origin: top left;
transform-origin: top left; }
.fa-lg {
font-size: 1.33333em;
line-height: 0.75em;
vertical-align: -.0667em; }
.fa-xs {
font-size: .75em; }
.fa-sm {
font-size: .875em; }
.fa-1x { .fa-1x {
font-size: 1em; } font-size: 1em; }
@ -195,114 +152,241 @@ svg:not(:root).svg-inline--fa {
.fa-10x { .fa-10x {
font-size: 10em; } font-size: 10em; }
.fa-2xs {
font-size: 0.625em;
line-height: 0.1em;
vertical-align: 0.225em; }
.fa-xs {
font-size: 0.75em;
line-height: 0.08333em;
vertical-align: 0.125em; }
.fa-sm {
font-size: 0.875em;
line-height: 0.07143em;
vertical-align: 0.05357em; }
.fa-lg {
font-size: 1.25em;
line-height: 0.05em;
vertical-align: -0.075em; }
.fa-xl {
font-size: 1.5em;
line-height: 0.04167em;
vertical-align: -0.125em; }
.fa-2xl {
font-size: 2em;
line-height: 0.03125em;
vertical-align: -0.1875em; }
.fa-fw { .fa-fw {
text-align: center; text-align: center;
width: 1.25em; } width: 1.25em; }
.fa-ul { .fa-ul {
list-style-type: none; list-style-type: none;
margin-left: 2.5em; margin-left: var(--fa-li-margin, 2.5em);
padding-left: 0; } padding-left: 0; }
.fa-ul > li { .fa-ul > li {
position: relative; } position: relative; }
.fa-li { .fa-li {
left: -2em; left: calc(-1 * var(--fa-li-width, 2em));
position: absolute; position: absolute;
text-align: center; text-align: center;
width: 2em; width: var(--fa-li-width, 2em);
line-height: inherit; } line-height: inherit; }
.fa-border { .fa-border {
border: solid 0.08em #eee; border-color: var(--fa-border-color, #eee);
border-radius: .1em; border-radius: var(--fa-border-radius, 0.1em);
padding: .2em .25em .15em; } border-style: var(--fa-border-style, solid);
border-width: var(--fa-border-width, 0.08em);
padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }
.fa-pull-left { .fa-pull-left {
float: left; } float: left;
margin-right: var(--fa-pull-margin, 0.3em); }
.fa-pull-right { .fa-pull-right {
float: right; } float: right;
margin-left: var(--fa-pull-margin, 0.3em); }
.fa.fa-pull-left, .fa-beat {
.fas.fa-pull-left, animation-name: fa-beat;
.far.fa-pull-left, animation-delay: var(--fa-animation-delay, 0s);
.fal.fa-pull-left, animation-direction: var(--fa-animation-direction, normal);
.fab.fa-pull-left { animation-duration: var(--fa-animation-duration, 1s);
margin-right: .3em; } animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
.fa.fa-pull-right, .fa-bounce {
.fas.fa-pull-right, animation-name: fa-bounce;
.far.fa-pull-right, animation-delay: var(--fa-animation-delay, 0s);
.fal.fa-pull-right, animation-direction: var(--fa-animation-direction, normal);
.fab.fa-pull-right { animation-duration: var(--fa-animation-duration, 1s);
margin-left: .3em; } animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }
.fa-fade {
animation-name: fa-fade;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
.fa-beat-fade {
animation-name: fa-beat-fade;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
.fa-flip {
animation-name: fa-flip;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
.fa-shake {
animation-name: fa-shake;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, linear); }
.fa-spin { .fa-spin {
-webkit-animation: fa-spin 2s infinite linear; animation-name: fa-spin;
animation: fa-spin 2s infinite linear; } animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 2s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, linear); }
.fa-pulse { .fa-spin-reverse {
-webkit-animation: fa-spin 1s infinite steps(8); --fa-animation-direction: reverse; }
animation: fa-spin 1s infinite steps(8); }
@-webkit-keyframes fa-spin { .fa-pulse,
.fa-spin-pulse {
animation-name: fa-spin;
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, steps(8)); }
@media (prefers-reduced-motion: reduce) {
.fa-beat,
.fa-bounce,
.fa-fade,
.fa-beat-fade,
.fa-flip,
.fa-pulse,
.fa-shake,
.fa-spin,
.fa-spin-pulse {
animation-delay: -1ms;
animation-duration: 1ms;
animation-iteration-count: 1;
transition-delay: 0s;
transition-duration: 0s; } }
@keyframes fa-beat {
0%, 90% {
transform: scale(1); }
45% {
transform: scale(var(--fa-beat-scale, 1.25)); } }
@keyframes fa-bounce {
0% { 0% {
-webkit-transform: rotate(0deg); transform: scale(1, 1) translateY(0); }
transform: rotate(0deg); } 10% {
transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
30% {
transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
50% {
transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
57% {
transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
64% {
transform: scale(1, 1) translateY(0); }
100% { 100% {
-webkit-transform: rotate(360deg); transform: scale(1, 1) translateY(0); } }
transform: rotate(360deg); } }
@keyframes fa-fade {
50% {
opacity: var(--fa-fade-opacity, 0.4); } }
@keyframes fa-beat-fade {
0%, 100% {
opacity: var(--fa-beat-fade-opacity, 0.4);
transform: scale(1); }
50% {
opacity: 1;
transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
@keyframes fa-flip {
50% {
transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
@keyframes fa-shake {
0% {
transform: rotate(-15deg); }
4% {
transform: rotate(15deg); }
8%, 24% {
transform: rotate(-18deg); }
12%, 28% {
transform: rotate(18deg); }
16% {
transform: rotate(-22deg); }
20% {
transform: rotate(22deg); }
32% {
transform: rotate(-12deg); }
36% {
transform: rotate(12deg); }
40%, 100% {
transform: rotate(0deg); } }
@keyframes fa-spin { @keyframes fa-spin {
0% { 0% {
-webkit-transform: rotate(0deg); transform: rotate(0deg); }
transform: rotate(0deg); }
100% { 100% {
-webkit-transform: rotate(360deg); transform: rotate(360deg); } }
transform: rotate(360deg); } }
.fa-rotate-90 { .fa-rotate-90 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; transform: rotate(90deg); }
-webkit-transform: rotate(90deg);
transform: rotate(90deg); }
.fa-rotate-180 { .fa-rotate-180 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; transform: rotate(180deg); }
-webkit-transform: rotate(180deg);
transform: rotate(180deg); }
.fa-rotate-270 { .fa-rotate-270 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; transform: rotate(270deg); }
-webkit-transform: rotate(270deg);
transform: rotate(270deg); }
.fa-flip-horizontal { .fa-flip-horizontal {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; transform: scale(-1, 1); }
-webkit-transform: scale(-1, 1);
transform: scale(-1, 1); }
.fa-flip-vertical { .fa-flip-vertical {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; transform: scale(1, -1); }
-webkit-transform: scale(1, -1);
transform: scale(1, -1); }
.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { .fa-flip-both,
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; .fa-flip-horizontal.fa-flip-vertical {
-webkit-transform: scale(-1, -1); transform: scale(-1, -1); }
transform: scale(-1, -1); }
:root .fa-rotate-90, .fa-rotate-by {
:root .fa-rotate-180, transform: rotate(var(--fa-rotate-angle, 0)); }
:root .fa-rotate-270,
:root .fa-flip-horizontal,
:root .fa-flip-vertical,
:root .fa-flip-both {
-webkit-filter: none;
filter: none; }
.fa-stack { .fa-stack {
display: inline-block; display: inline-block;
vertical-align: middle;
height: 2em; height: 2em;
position: relative; position: relative;
width: 2.5em; } width: 2.5em; }
@ -314,7 +398,8 @@ svg:not(:root).svg-inline--fa {
margin: auto; margin: auto;
position: absolute; position: absolute;
right: 0; right: 0;
top: 0; } top: 0;
z-index: var(--fa-stack-z-index, auto); }
.svg-inline--fa.fa-stack-1x { .svg-inline--fa.fa-stack-1x {
height: 1em; height: 1em;
@ -325,47 +410,50 @@ svg:not(:root).svg-inline--fa {
width: 2.5em; } width: 2.5em; }
.fa-inverse { .fa-inverse {
color: #fff; } color: var(--fa-inverse, #fff); }
.sr-only { .sr-only,
border: 0; .fa-sr-only {
clip: rect(0, 0, 0, 0); position: absolute;
width: 1px;
height: 1px; height: 1px;
padding: 0;
margin: -1px; margin: -1px;
overflow: hidden; overflow: hidden;
padding: 0; clip: rect(0, 0, 0, 0);
position: absolute; white-space: nowrap;
width: 1px; } border-width: 0; }
.sr-only-focusable:active, .sr-only-focusable:focus { .sr-only-focusable:not(:focus),
clip: auto; .fa-sr-only-focusable:not(:focus) {
height: auto; position: absolute;
margin: 0; width: 1px;
overflow: visible; height: 1px;
position: static; padding: 0;
width: auto; } margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0; }
.svg-inline--fa .fa-primary { .svg-inline--fa .fa-primary {
fill: var(--fa-primary-color, currentColor); fill: var(--fa-primary-color, currentColor);
opacity: 1;
opacity: var(--fa-primary-opacity, 1); } opacity: var(--fa-primary-opacity, 1); }
.svg-inline--fa .fa-secondary { .svg-inline--fa .fa-secondary {
fill: var(--fa-secondary-color, currentColor); fill: var(--fa-secondary-color, currentColor);
opacity: 0.4;
opacity: var(--fa-secondary-opacity, 0.4); } opacity: var(--fa-secondary-opacity, 0.4); }
.svg-inline--fa.fa-swap-opacity .fa-primary { .svg-inline--fa.fa-swap-opacity .fa-primary {
opacity: 0.4;
opacity: var(--fa-secondary-opacity, 0.4); } opacity: var(--fa-secondary-opacity, 0.4); }
.svg-inline--fa.fa-swap-opacity .fa-secondary { .svg-inline--fa.fa-swap-opacity .fa-secondary {
opacity: 1;
opacity: var(--fa-primary-opacity, 1); } opacity: var(--fa-primary-opacity, 1); }
.svg-inline--fa mask .fa-primary, .svg-inline--fa mask .fa-primary,
.svg-inline--fa mask .fa-secondary { .svg-inline--fa mask .fa-secondary {
fill: black; } fill: black; }
.fad.fa-inverse { .fad.fa-inverse,
color: #fff; } .fa-duotone.fa-inverse {
color: var(--fa-inverse, #fff); }

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,26 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype");
unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype");
unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; }

View File

@ -0,0 +1,6 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,22 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face {
font-family: 'Font Awesome 5 Brands';
font-display: block;
font-weight: 400;
src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
@font-face {
font-family: 'Font Awesome 5 Free';
font-display: block;
font-weight: 900;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
@font-face {
font-family: 'Font Awesome 5 Free';
font-display: block;
font-weight: 400;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }

View File

@ -0,0 +1,6 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}

View File

@ -0,0 +1,48 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2024
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
//includes files
require_once dirname(__DIR__, 2) . "/resources/require.php";
//load icons
$font_awesome_icons = [];
if (file_exists($_SERVER["PROJECT_ROOT"].'/resources/fontawesome/metadata/icons.json')) {
$icons_json = file_get_contents($_SERVER["PROJECT_ROOT"].'/resources/fontawesome/metadata/icons.json');
if (!empty($icons_json)) {
$icons_array = json_decode($icons_json, true);
if (!empty($icons_array) && is_array($icons_array)) {
foreach ($icons_array as $icon_name => $properties) {
if (!empty($properties['free']) && is_array($properties['free'])) {
foreach ($properties['free'] as $icon_style) {
$font_awesome_icons[] = 'fa-'.$icon_style.' fa-'.$icon_name;
}
}
}
}
}
}
//view_array($font_awesome_icons, 0);

View File

@ -1,961 +0,0 @@
<?php
$fas[] = 'fa-ad';
$fas[] = 'fa-address-book';
$fas[] = 'fa-address-card';
$fas[] = 'fa-adjust';
$fas[] = 'fa-air-freshener';
$fas[] = 'fa-align-center';
$fas[] = 'fa-align-justify';
$fas[] = 'fa-align-left';
$fas[] = 'fa-align-right';
$fas[] = 'fa-allergies';
$fas[] = 'fa-ambulance';
$fas[] = 'fa-american-sign-language-interpreting';
$fas[] = 'fa-anchor';
$fas[] = 'fa-angle-double-down';
$fas[] = 'fa-angle-double-left';
$fas[] = 'fa-angle-double-right';
$fas[] = 'fa-angle-double-up';
$fas[] = 'fa-angle-down';
$fas[] = 'fa-angle-left';
$fas[] = 'fa-angle-right';
$fas[] = 'fa-angle-up';
$fas[] = 'fa-angry';
$fas[] = 'fa-ankh';
$fas[] = 'fa-apple-alt';
$fas[] = 'fa-archive';
$fas[] = 'fa-archway';
$fas[] = 'fa-arrow-alt-circle-down';
$fas[] = 'fa-arrow-alt-circle-left';
$fas[] = 'fa-arrow-alt-circle-right';
$fas[] = 'fa-arrow-alt-circle-up';
$fas[] = 'fa-arrow-circle-down';
$fas[] = 'fa-arrow-circle-left';
$fas[] = 'fa-arrow-circle-right';
$fas[] = 'fa-arrow-circle-up';
$fas[] = 'fa-arrow-down';
$fas[] = 'fa-arrow-left';
$fas[] = 'fa-arrow-right';
$fas[] = 'fa-arrow-up';
$fas[] = 'fa-arrows-alt';
$fas[] = 'fa-arrows-alt-h';
$fas[] = 'fa-arrows-alt-v';
$fas[] = 'fa-assistive-listening-systems';
$fas[] = 'fa-asterisk';
$fas[] = 'fa-at';
$fas[] = 'fa-atlas';
$fas[] = 'fa-atom';
$fas[] = 'fa-audio-description';
$fas[] = 'fa-award';
$fas[] = 'fa-baby';
$fas[] = 'fa-baby-carriage';
$fas[] = 'fa-backspace';
$fas[] = 'fa-backward';
$fas[] = 'fa-bacon';
$fas[] = 'fa-balance-scale';
$fas[] = 'fa-balance-scale-left';
$fas[] = 'fa-balance-scale-right';
$fas[] = 'fa-ban';
$fas[] = 'fa-band-aid';
$fas[] = 'fa-barcode';
$fas[] = 'fa-bars';
$fas[] = 'fa-baseball-ball';
$fas[] = 'fa-basketball-ball';
$fas[] = 'fa-bath';
$fas[] = 'fa-battery-empty';
$fas[] = 'fa-battery-full';
$fas[] = 'fa-battery-half';
$fas[] = 'fa-battery-quarter';
$fas[] = 'fa-battery-three-quarters';
$fas[] = 'fa-bed';
$fas[] = 'fa-beer';
$fas[] = 'fa-bell';
$fas[] = 'fa-bell-slash';
$fas[] = 'fa-bezier-curve';
$fas[] = 'fa-bible';
$fas[] = 'fa-bicycle';
$fas[] = 'fa-biking';
$fas[] = 'fa-binoculars';
$fas[] = 'fa-biohazard';
$fas[] = 'fa-birthday-cake';
$fas[] = 'fa-blender';
$fas[] = 'fa-blender-phone';
$fas[] = 'fa-blind';
$fas[] = 'fa-blog';
$fas[] = 'fa-bold';
$fas[] = 'fa-bolt';
$fas[] = 'fa-bomb';
$fas[] = 'fa-bone';
$fas[] = 'fa-bong';
$fas[] = 'fa-book';
$fas[] = 'fa-book-dead';
$fas[] = 'fa-book-medical';
$fas[] = 'fa-book-open';
$fas[] = 'fa-book-reader';
$fas[] = 'fa-bookmark';
$fas[] = 'fa-border-all';
$fas[] = 'fa-border-none';
$fas[] = 'fa-border-style';
$fas[] = 'fa-bowling-ball';
$fas[] = 'fa-box';
$fas[] = 'fa-box-open';
$fas[] = 'fa-boxes';
$fas[] = 'fa-braille';
$fas[] = 'fa-brain';
$fas[] = 'fa-bread-slice';
$fas[] = 'fa-briefcase';
$fas[] = 'fa-briefcase-medical';
$fas[] = 'fa-broadcast-tower';
$fas[] = 'fa-broom';
$fas[] = 'fa-brush';
$fas[] = 'fa-bug';
$fas[] = 'fa-building';
$fas[] = 'fa-bullhorn';
$fas[] = 'fa-bullseye';
$fas[] = 'fa-burn';
$fas[] = 'fa-bus';
$fas[] = 'fa-bus-alt';
$fas[] = 'fa-business-time';
$fas[] = 'fa-calculator';
$fas[] = 'fa-calendar';
$fas[] = 'fa-calendar-alt';
$fas[] = 'fa-calendar-check';
$fas[] = 'fa-calendar-day';
$fas[] = 'fa-calendar-minus';
$fas[] = 'fa-calendar-plus';
$fas[] = 'fa-calendar-times';
$fas[] = 'fa-calendar-week';
$fas[] = 'fa-camera';
$fas[] = 'fa-camera-retro';
$fas[] = 'fa-campground';
$fas[] = 'fa-candy-cane';
$fas[] = 'fa-cannabis';
$fas[] = 'fa-capsules';
$fas[] = 'fa-car';
$fas[] = 'fa-car-alt';
$fas[] = 'fa-car-battery';
$fas[] = 'fa-car-crash';
$fas[] = 'fa-car-side';
$fas[] = 'fa-caret-down';
$fas[] = 'fa-caret-left';
$fas[] = 'fa-caret-right';
$fas[] = 'fa-caret-square-down';
$fas[] = 'fa-caret-square-left';
$fas[] = 'fa-caret-square-right';
$fas[] = 'fa-caret-square-up';
$fas[] = 'fa-caret-up';
$fas[] = 'fa-carrot';
$fas[] = 'fa-cart-arrow-down';
$fas[] = 'fa-cart-plus';
$fas[] = 'fa-cash-register';
$fas[] = 'fa-cat';
$fas[] = 'fa-certificate';
$fas[] = 'fa-chair';
$fas[] = 'fa-chalkboard';
$fas[] = 'fa-chalkboard-teacher';
$fas[] = 'fa-charging-station';
$fas[] = 'fa-chart-area';
$fas[] = 'fa-chart-bar';
$fas[] = 'fa-chart-line';
$fas[] = 'fa-chart-pie';
$fas[] = 'fa-check';
$fas[] = 'fa-check-circle';
$fas[] = 'fa-check-double';
$fas[] = 'fa-check-square';
$fas[] = 'fa-cheese';
$fas[] = 'fa-chess';
$fas[] = 'fa-chess-bishop';
$fas[] = 'fa-chess-board';
$fas[] = 'fa-chess-king';
$fas[] = 'fa-chess-knight';
$fas[] = 'fa-chess-pawn';
$fas[] = 'fa-chess-queen';
$fas[] = 'fa-chess-rook';
$fas[] = 'fa-chevron-circle-down';
$fas[] = 'fa-chevron-circle-left';
$fas[] = 'fa-chevron-circle-right';
$fas[] = 'fa-chevron-circle-up';
$fas[] = 'fa-chevron-down';
$fas[] = 'fa-chevron-left';
$fas[] = 'fa-chevron-right';
$fas[] = 'fa-chevron-up';
$fas[] = 'fa-child';
$fas[] = 'fa-church';
$fas[] = 'fa-circle';
$fas[] = 'fa-circle-notch';
$fas[] = 'fa-city';
$fas[] = 'fa-clinic-medical';
$fas[] = 'fa-clipboard';
$fas[] = 'fa-clipboard-check';
$fas[] = 'fa-clipboard-list';
$fas[] = 'fa-clock';
$fas[] = 'fa-clone';
$fas[] = 'fa-closed-captioning';
$fas[] = 'fa-cloud';
$fas[] = 'fa-cloud-download-alt';
$fas[] = 'fa-cloud-meatball';
$fas[] = 'fa-cloud-moon';
$fas[] = 'fa-cloud-moon-rain';
$fas[] = 'fa-cloud-rain';
$fas[] = 'fa-cloud-showers-heavy';
$fas[] = 'fa-cloud-sun';
$fas[] = 'fa-cloud-sun-rain';
$fas[] = 'fa-cloud-upload-alt';
$fas[] = 'fa-cocktail';
$fas[] = 'fa-code';
$fas[] = 'fa-code-branch';
$fas[] = 'fa-coffee';
$fas[] = 'fa-cog';
$fas[] = 'fa-cogs';
$fas[] = 'fa-coins';
$fas[] = 'fa-columns';
$fas[] = 'fa-comment';
$fas[] = 'fa-comment-alt';
$fas[] = 'fa-comment-dollar';
$fas[] = 'fa-comment-dots';
$fas[] = 'fa-comment-medical';
$fas[] = 'fa-comment-slash';
$fas[] = 'fa-comments';
$fas[] = 'fa-comments-dollar';
$fas[] = 'fa-compact-disc';
$fas[] = 'fa-compass';
$fas[] = 'fa-compress';
$fas[] = 'fa-compress-arrows-alt';
$fas[] = 'fa-concierge-bell';
$fas[] = 'fa-cookie';
$fas[] = 'fa-cookie-bite';
$fas[] = 'fa-copy';
$fas[] = 'fa-copyright';
$fas[] = 'fa-couch';
$fas[] = 'fa-credit-card';
$fas[] = 'fa-crop';
$fas[] = 'fa-crop-alt';
$fas[] = 'fa-cross';
$fas[] = 'fa-crosshairs';
$fas[] = 'fa-crow';
$fas[] = 'fa-crown';
$fas[] = 'fa-crutch';
$fas[] = 'fa-cube';
$fas[] = 'fa-cubes';
$fas[] = 'fa-cut';
$fas[] = 'fa-database';
$fas[] = 'fa-deaf';
$fas[] = 'fa-democrat';
$fas[] = 'fa-desktop';
$fas[] = 'fa-dharmachakra';
$fas[] = 'fa-diagnoses';
$fas[] = 'fa-dice';
$fas[] = 'fa-dice-d20';
$fas[] = 'fa-dice-d6';
$fas[] = 'fa-dice-five';
$fas[] = 'fa-dice-four';
$fas[] = 'fa-dice-one';
$fas[] = 'fa-dice-six';
$fas[] = 'fa-dice-three';
$fas[] = 'fa-dice-two';
$fas[] = 'fa-digital-tachograph';
$fas[] = 'fa-directions';
$fas[] = 'fa-divide';
$fas[] = 'fa-dizzy';
$fas[] = 'fa-dna';
$fas[] = 'fa-dog';
$fas[] = 'fa-dollar-sign';
$fas[] = 'fa-dolly';
$fas[] = 'fa-dolly-flatbed';
$fas[] = 'fa-donate';
$fas[] = 'fa-door-closed';
$fas[] = 'fa-door-open';
$fas[] = 'fa-dot-circle';
$fas[] = 'fa-dove';
$fas[] = 'fa-download';
$fas[] = 'fa-drafting-compass';
$fas[] = 'fa-dragon';
$fas[] = 'fa-draw-polygon';
$fas[] = 'fa-drum';
$fas[] = 'fa-drum-steelpan';
$fas[] = 'fa-drumstick-bite';
$fas[] = 'fa-dumbbell';
$fas[] = 'fa-dumpster';
$fas[] = 'fa-dumpster-fire';
$fas[] = 'fa-dungeon';
$fas[] = 'fa-edit';
$fas[] = 'fa-egg';
$fas[] = 'fa-eject';
$fas[] = 'fa-ellipsis-h';
$fas[] = 'fa-ellipsis-v';
$fas[] = 'fa-envelope';
$fas[] = 'fa-envelope-open';
$fas[] = 'fa-envelope-open-text';
$fas[] = 'fa-envelope-square';
$fas[] = 'fa-equals';
$fas[] = 'fa-eraser';
$fas[] = 'fa-ethernet';
$fas[] = 'fa-euro-sign';
$fas[] = 'fa-exchange-alt';
$fas[] = 'fa-exclamation';
$fas[] = 'fa-exclamation-circle';
$fas[] = 'fa-exclamation-triangle';
$fas[] = 'fa-expand';
$fas[] = 'fa-expand-arrows-alt';
$fas[] = 'fa-external-link-alt';
$fas[] = 'fa-external-link-square-alt';
$fas[] = 'fa-eye';
$fas[] = 'fa-eye-dropper';
$fas[] = 'fa-eye-slash';
$fas[] = 'fa-fan';
$fas[] = 'fa-fast-backward';
$fas[] = 'fa-fast-forward';
$fas[] = 'fa-fax';
$fas[] = 'fa-feather';
$fas[] = 'fa-feather-alt';
$fas[] = 'fa-female';
$fas[] = 'fa-fighter-jet';
$fas[] = 'fa-file';
$fas[] = 'fa-file-alt';
$fas[] = 'fa-file-archive';
$fas[] = 'fa-file-audio';
$fas[] = 'fa-file-code';
$fas[] = 'fa-file-contract';
$fas[] = 'fa-file-csv';
$fas[] = 'fa-file-download';
$fas[] = 'fa-file-excel';
$fas[] = 'fa-file-export';
$fas[] = 'fa-file-image';
$fas[] = 'fa-file-import';
$fas[] = 'fa-file-invoice';
$fas[] = 'fa-file-invoice-dollar';
$fas[] = 'fa-file-medical';
$fas[] = 'fa-file-medical-alt';
$fas[] = 'fa-file-pdf';
$fas[] = 'fa-file-powerpoint';
$fas[] = 'fa-file-prescription';
$fas[] = 'fa-file-signature';
$fas[] = 'fa-file-upload';
$fas[] = 'fa-file-video';
$fas[] = 'fa-file-word';
$fas[] = 'fa-fill';
$fas[] = 'fa-fill-drip';
$fas[] = 'fa-film';
$fas[] = 'fa-filter';
$fas[] = 'fa-fingerprint';
$fas[] = 'fa-fire';
$fas[] = 'fa-fire-alt';
$fas[] = 'fa-fire-extinguisher';
$fas[] = 'fa-first-aid';
$fas[] = 'fa-fish';
$fas[] = 'fa-fist-raised';
$fas[] = 'fa-flag';
$fas[] = 'fa-flag-checkered';
$fas[] = 'fa-flag-usa';
$fas[] = 'fa-flask';
$fas[] = 'fa-flushed';
$fas[] = 'fa-folder';
$fas[] = 'fa-folder-minus';
$fas[] = 'fa-folder-open';
$fas[] = 'fa-folder-plus';
$fas[] = 'fa-font';
$fas[] = 'fa-font-awesome-logo-full';
$fas[] = 'fa-football-ball';
$fas[] = 'fa-forward';
$fas[] = 'fa-frog';
$fas[] = 'fa-frown';
$fas[] = 'fa-frown-open';
$fas[] = 'fa-funnel-dollar';
$fas[] = 'fa-futbol';
$fas[] = 'fa-gamepad';
$fas[] = 'fa-gas-pump';
$fas[] = 'fa-gavel';
$fas[] = 'fa-gem';
$fas[] = 'fa-genderless';
$fas[] = 'fa-ghost';
$fas[] = 'fa-gift';
$fas[] = 'fa-gifts';
$fas[] = 'fa-glass-cheers';
$fas[] = 'fa-glass-martini';
$fas[] = 'fa-glass-martini-alt';
$fas[] = 'fa-glass-whiskey';
$fas[] = 'fa-glasses';
$fas[] = 'fa-globe';
$fas[] = 'fa-globe-africa';
$fas[] = 'fa-globe-americas';
$fas[] = 'fa-globe-asia';
$fas[] = 'fa-globe-europe';
$fas[] = 'fa-golf-ball';
$fas[] = 'fa-gopuram';
$fas[] = 'fa-graduation-cap';
$fas[] = 'fa-greater-than';
$fas[] = 'fa-greater-than-equal';
$fas[] = 'fa-grimace';
$fas[] = 'fa-grin';
$fas[] = 'fa-grin-alt';
$fas[] = 'fa-grin-beam';
$fas[] = 'fa-grin-beam-sweat';
$fas[] = 'fa-grin-hearts';
$fas[] = 'fa-grin-squint';
$fas[] = 'fa-grin-squint-tears';
$fas[] = 'fa-grin-stars';
$fas[] = 'fa-grin-tears';
$fas[] = 'fa-grin-tongue';
$fas[] = 'fa-grin-tongue-squint';
$fas[] = 'fa-grin-tongue-wink';
$fas[] = 'fa-grin-wink';
$fas[] = 'fa-grip-horizontal';
$fas[] = 'fa-grip-lines';
$fas[] = 'fa-grip-lines-vertical';
$fas[] = 'fa-grip-vertical';
$fas[] = 'fa-guitar';
$fas[] = 'fa-h-square';
$fas[] = 'fa-hamburger';
$fas[] = 'fa-hammer';
$fas[] = 'fa-hamsa';
$fas[] = 'fa-hand-holding';
$fas[] = 'fa-hand-holding-heart';
$fas[] = 'fa-hand-holding-usd';
$fas[] = 'fa-hand-lizard';
$fas[] = 'fa-hand-middle-finger';
$fas[] = 'fa-hand-paper';
$fas[] = 'fa-hand-peace';
$fas[] = 'fa-hand-point-down';
$fas[] = 'fa-hand-point-left';
$fas[] = 'fa-hand-point-right';
$fas[] = 'fa-hand-point-up';
$fas[] = 'fa-hand-pointer';
$fas[] = 'fa-hand-rock';
$fas[] = 'fa-hand-scissors';
$fas[] = 'fa-hand-spock';
$fas[] = 'fa-hands';
$fas[] = 'fa-hands-helping';
$fas[] = 'fa-handshake';
$fas[] = 'fa-hanukiah';
$fas[] = 'fa-hard-hat';
$fas[] = 'fa-hashtag';
$fas[] = 'fa-hat-wizard';
$fas[] = 'fa-haykal';
$fas[] = 'fa-hdd';
$fas[] = 'fa-heading';
$fas[] = 'fa-headphones';
$fas[] = 'fa-headphones-alt';
$fas[] = 'fa-headset';
$fas[] = 'fa-heart';
$fas[] = 'fa-heart-broken';
$fas[] = 'fa-heartbeat';
$fas[] = 'fa-helicopter';
$fas[] = 'fa-highlighter';
$fas[] = 'fa-hiking';
$fas[] = 'fa-hippo';
$fas[] = 'fa-history';
$fas[] = 'fa-hockey-puck';
$fas[] = 'fa-holly-berry';
$fas[] = 'fa-home';
$fas[] = 'fa-horse';
$fas[] = 'fa-horse-head';
$fas[] = 'fa-hospital';
$fas[] = 'fa-hospital-alt';
$fas[] = 'fa-hospital-symbol';
$fas[] = 'fa-hot-tub';
$fas[] = 'fa-hotdog';
$fas[] = 'fa-hotel';
$fas[] = 'fa-hourglass';
$fas[] = 'fa-hourglass-end';
$fas[] = 'fa-hourglass-half';
$fas[] = 'fa-hourglass-start';
$fas[] = 'fa-house-damage';
$fas[] = 'fa-hryvnia';
$fas[] = 'fa-i-cursor';
$fas[] = 'fa-ice-cream';
$fas[] = 'fa-icicles';
$fas[] = 'fa-icons';
$fas[] = 'fa-id-badge';
$fas[] = 'fa-id-card';
$fas[] = 'fa-id-card-alt';
$fas[] = 'fa-igloo';
$fas[] = 'fa-image';
$fas[] = 'fa-images';
$fas[] = 'fa-inbox';
$fas[] = 'fa-indent';
$fas[] = 'fa-industry';
$fas[] = 'fa-infinity';
$fas[] = 'fa-info';
$fas[] = 'fa-info-circle';
$fas[] = 'fa-italic';
$fas[] = 'fa-jedi';
$fas[] = 'fa-joint';
$fas[] = 'fa-journal-whills';
$fas[] = 'fa-kaaba';
$fas[] = 'fa-key';
$fas[] = 'fa-keyboard';
$fas[] = 'fa-khanda';
$fas[] = 'fa-kiss';
$fas[] = 'fa-kiss-beam';
$fas[] = 'fa-kiss-wink-heart';
$fas[] = 'fa-kiwi-bird';
$fas[] = 'fa-landmark';
$fas[] = 'fa-language';
$fas[] = 'fa-laptop';
$fas[] = 'fa-laptop-code';
$fas[] = 'fa-laptop-medical';
$fas[] = 'fa-laugh';
$fas[] = 'fa-laugh-beam';
$fas[] = 'fa-laugh-squint';
$fas[] = 'fa-laugh-wink';
$fas[] = 'fa-layer-group';
$fas[] = 'fa-leaf';
$fas[] = 'fa-lemon';
$fas[] = 'fa-less-than';
$fas[] = 'fa-less-than-equal';
$fas[] = 'fa-level-down-alt';
$fas[] = 'fa-level-up-alt';
$fas[] = 'fa-life-ring';
$fas[] = 'fa-lightbulb';
$fas[] = 'fa-link';
$fas[] = 'fa-lira-sign';
$fas[] = 'fa-list';
$fas[] = 'fa-list-alt';
$fas[] = 'fa-list-ol';
$fas[] = 'fa-list-ul';
$fas[] = 'fa-location-arrow';
$fas[] = 'fa-lock';
$fas[] = 'fa-lock-open';
$fas[] = 'fa-long-arrow-alt-down';
$fas[] = 'fa-long-arrow-alt-left';
$fas[] = 'fa-long-arrow-alt-right';
$fas[] = 'fa-long-arrow-alt-up';
$fas[] = 'fa-low-vision';
$fas[] = 'fa-luggage-cart';
$fas[] = 'fa-magic';
$fas[] = 'fa-magnet';
$fas[] = 'fa-mail-bulk';
$fas[] = 'fa-male';
$fas[] = 'fa-map';
$fas[] = 'fa-map-marked';
$fas[] = 'fa-map-marked-alt';
$fas[] = 'fa-map-marker';
$fas[] = 'fa-map-marker-alt';
$fas[] = 'fa-map-pin';
$fas[] = 'fa-map-signs';
$fas[] = 'fa-marker';
$fas[] = 'fa-mars';
$fas[] = 'fa-mars-double';
$fas[] = 'fa-mars-stroke';
$fas[] = 'fa-mars-stroke-h';
$fas[] = 'fa-mars-stroke-v';
$fas[] = 'fa-mask';
$fas[] = 'fa-medal';
$fas[] = 'fa-medkit';
$fas[] = 'fa-meh';
$fas[] = 'fa-meh-blank';
$fas[] = 'fa-meh-rolling-eyes';
$fas[] = 'fa-memory';
$fas[] = 'fa-menorah';
$fas[] = 'fa-mercury';
$fas[] = 'fa-meteor';
$fas[] = 'fa-microchip';
$fas[] = 'fa-microphone';
$fas[] = 'fa-microphone-alt';
$fas[] = 'fa-microphone-alt-slash';
$fas[] = 'fa-microphone-slash';
$fas[] = 'fa-microscope';
$fas[] = 'fa-minus';
$fas[] = 'fa-minus-circle';
$fas[] = 'fa-minus-square';
$fas[] = 'fa-mitten';
$fas[] = 'fa-mobile';
$fas[] = 'fa-mobile-alt';
$fas[] = 'fa-money-bill';
$fas[] = 'fa-money-bill-alt';
$fas[] = 'fa-money-bill-wave';
$fas[] = 'fa-money-bill-wave-alt';
$fas[] = 'fa-money-check';
$fas[] = 'fa-money-check-alt';
$fas[] = 'fa-monument';
$fas[] = 'fa-moon';
$fas[] = 'fa-mortar-pestle';
$fas[] = 'fa-mosque';
$fas[] = 'fa-motorcycle';
$fas[] = 'fa-mountain';
$fas[] = 'fa-mouse-pointer';
$fas[] = 'fa-mug-hot';
$fas[] = 'fa-music';
$fas[] = 'fa-network-wired';
$fas[] = 'fa-neuter';
$fas[] = 'fa-newspaper';
$fas[] = 'fa-not-equal';
$fas[] = 'fa-notes-medical';
$fas[] = 'fa-object-group';
$fas[] = 'fa-object-ungroup';
$fas[] = 'fa-oil-can';
$fas[] = 'fa-om';
$fas[] = 'fa-otter';
$fas[] = 'fa-outdent';
$fas[] = 'fa-pager';
$fas[] = 'fa-paint-brush';
$fas[] = 'fa-paint-roller';
$fas[] = 'fa-palette';
$fas[] = 'fa-pallet';
$fas[] = 'fa-paper-plane';
$fas[] = 'fa-paperclip';
$fas[] = 'fa-parachute-box';
$fas[] = 'fa-paragraph';
$fas[] = 'fa-parking';
$fas[] = 'fa-passport';
$fas[] = 'fa-pastafarianism';
$fas[] = 'fa-paste';
$fas[] = 'fa-pause';
$fas[] = 'fa-pause-circle';
$fas[] = 'fa-paw';
$fas[] = 'fa-peace';
$fas[] = 'fa-pen';
$fas[] = 'fa-pen-alt';
$fas[] = 'fa-pen-fancy';
$fas[] = 'fa-pen-nib';
$fas[] = 'fa-pen-square';
$fas[] = 'fa-pencil-alt';
$fas[] = 'fa-pencil-ruler';
$fas[] = 'fa-people-carry';
$fas[] = 'fa-pepper-hot';
$fas[] = 'fa-percent';
$fas[] = 'fa-percentage';
$fas[] = 'fa-person-booth';
$fas[] = 'fa-phone';
$fas[] = 'fa-phone-alt';
$fas[] = 'fa-phone-slash';
$fas[] = 'fa-phone-square';
$fas[] = 'fa-phone-square-alt';
$fas[] = 'fa-phone-volume';
$fas[] = 'fa-photo-video';
$fas[] = 'fa-piggy-bank';
$fas[] = 'fa-pills';
$fas[] = 'fa-pizza-slice';
$fas[] = 'fa-place-of-worship';
$fas[] = 'fa-plane';
$fas[] = 'fa-plane-arrival';
$fas[] = 'fa-plane-departure';
$fas[] = 'fa-play';
$fas[] = 'fa-play-circle';
$fas[] = 'fa-plug';
$fas[] = 'fa-plus';
$fas[] = 'fa-plus-circle';
$fas[] = 'fa-plus-square';
$fas[] = 'fa-podcast';
$fas[] = 'fa-poll';
$fas[] = 'fa-poll-h';
$fas[] = 'fa-poo';
$fas[] = 'fa-poo-storm';
$fas[] = 'fa-poop';
$fas[] = 'fa-portrait';
$fas[] = 'fa-pound-sign';
$fas[] = 'fa-power-off';
$fas[] = 'fa-pray';
$fas[] = 'fa-praying-hands';
$fas[] = 'fa-prescription';
$fas[] = 'fa-prescription-bottle';
$fas[] = 'fa-prescription-bottle-alt';
$fas[] = 'fa-print';
$fas[] = 'fa-procedures';
$fas[] = 'fa-project-diagram';
$fas[] = 'fa-puzzle-piece';
$fas[] = 'fa-qrcode';
$fas[] = 'fa-question';
$fas[] = 'fa-question-circle';
$fas[] = 'fa-quidditch';
$fas[] = 'fa-quote-left';
$fas[] = 'fa-quote-right';
$fas[] = 'fa-quran';
$fas[] = 'fa-radiation';
$fas[] = 'fa-radiation-alt';
$fas[] = 'fa-rainbow';
$fas[] = 'fa-random';
$fas[] = 'fa-receipt';
$fas[] = 'fa-recycle';
$fas[] = 'fa-redo';
$fas[] = 'fa-redo-alt';
$fas[] = 'fa-registered';
$fas[] = 'fa-remove-format';
$fas[] = 'fa-reply';
$fas[] = 'fa-reply-all';
$fas[] = 'fa-republican';
$fas[] = 'fa-restroom';
$fas[] = 'fa-retweet';
$fas[] = 'fa-ribbon';
$fas[] = 'fa-ring';
$fas[] = 'fa-road';
$fas[] = 'fa-robot';
$fas[] = 'fa-rocket';
$fas[] = 'fa-route';
$fas[] = 'fa-rss';
$fas[] = 'fa-rss-square';
$fas[] = 'fa-ruble-sign';
$fas[] = 'fa-ruler';
$fas[] = 'fa-ruler-combined';
$fas[] = 'fa-ruler-horizontal';
$fas[] = 'fa-ruler-vertical';
$fas[] = 'fa-running';
$fas[] = 'fa-rupee-sign';
$fas[] = 'fa-sad-cry';
$fas[] = 'fa-sad-tear';
$fas[] = 'fa-satellite';
$fas[] = 'fa-satellite-dish';
$fas[] = 'fa-save';
$fas[] = 'fa-school';
$fas[] = 'fa-screwdriver';
$fas[] = 'fa-scroll';
$fas[] = 'fa-sd-card';
$fas[] = 'fa-search';
$fas[] = 'fa-search-dollar';
$fas[] = 'fa-search-location';
$fas[] = 'fa-search-minus';
$fas[] = 'fa-search-plus';
$fas[] = 'fa-seedling';
$fas[] = 'fa-server';
$fas[] = 'fa-shapes';
$fas[] = 'fa-share';
$fas[] = 'fa-share-alt';
$fas[] = 'fa-share-alt-square';
$fas[] = 'fa-share-square';
$fas[] = 'fa-shekel-sign';
$fas[] = 'fa-shield-alt';
$fas[] = 'fa-ship';
$fas[] = 'fa-shipping-fast';
$fas[] = 'fa-shoe-prints';
$fas[] = 'fa-shopping-bag';
$fas[] = 'fa-shopping-basket';
$fas[] = 'fa-shopping-cart';
$fas[] = 'fa-shower';
$fas[] = 'fa-shuttle-van';
$fas[] = 'fa-sign';
$fas[] = 'fa-sign-in-alt';
$fas[] = 'fa-sign-language';
$fas[] = 'fa-sign-out-alt';
$fas[] = 'fa-signal';
$fas[] = 'fa-signature';
$fas[] = 'fa-sim-card';
$fas[] = 'fa-sitemap';
$fas[] = 'fa-skating';
$fas[] = 'fa-skiing';
$fas[] = 'fa-skiing-nordic';
$fas[] = 'fa-skull';
$fas[] = 'fa-skull-crossbones';
$fas[] = 'fa-slash';
$fas[] = 'fa-sleigh';
$fas[] = 'fa-sliders-h';
$fas[] = 'fa-smile';
$fas[] = 'fa-smile-beam';
$fas[] = 'fa-smile-wink';
$fas[] = 'fa-smog';
$fas[] = 'fa-smoking';
$fas[] = 'fa-smoking-ban';
$fas[] = 'fa-sms';
$fas[] = 'fa-snowboarding';
$fas[] = 'fa-snowflake';
$fas[] = 'fa-snowman';
$fas[] = 'fa-snowplow';
$fas[] = 'fa-socks';
$fas[] = 'fa-solar-panel';
$fas[] = 'fa-sort';
$fas[] = 'fa-sort-alpha-down';
$fas[] = 'fa-sort-alpha-down-alt';
$fas[] = 'fa-sort-alpha-up';
$fas[] = 'fa-sort-alpha-up-alt';
$fas[] = 'fa-sort-amount-down';
$fas[] = 'fa-sort-amount-down-alt';
$fas[] = 'fa-sort-amount-up';
$fas[] = 'fa-sort-amount-up-alt';
$fas[] = 'fa-sort-down';
$fas[] = 'fa-sort-numeric-down';
$fas[] = 'fa-sort-numeric-down-alt';
$fas[] = 'fa-sort-numeric-up';
$fas[] = 'fa-sort-numeric-up-alt';
$fas[] = 'fa-sort-up';
$fas[] = 'fa-spa';
$fas[] = 'fa-space-shuttle';
$fas[] = 'fa-spell-check';
$fas[] = 'fa-spider';
$fas[] = 'fa-spinner';
$fas[] = 'fa-splotch';
$fas[] = 'fa-spray-can';
$fas[] = 'fa-square';
$fas[] = 'fa-square-full';
$fas[] = 'fa-square-root-alt';
$fas[] = 'fa-stamp';
$fas[] = 'fa-star';
$fas[] = 'fa-star-and-crescent';
$fas[] = 'fa-star-half';
$fas[] = 'fa-star-half-alt';
$fas[] = 'fa-star-of-david';
$fas[] = 'fa-star-of-life';
$fas[] = 'fa-step-backward';
$fas[] = 'fa-step-forward';
$fas[] = 'fa-stethoscope';
$fas[] = 'fa-sticky-note';
$fas[] = 'fa-stop';
$fas[] = 'fa-stop-circle';
$fas[] = 'fa-stopwatch';
$fas[] = 'fa-store';
$fas[] = 'fa-store-alt';
$fas[] = 'fa-stream';
$fas[] = 'fa-street-view';
$fas[] = 'fa-strikethrough';
$fas[] = 'fa-stroopwafel';
$fas[] = 'fa-subscript';
$fas[] = 'fa-subway';
$fas[] = 'fa-suitcase';
$fas[] = 'fa-suitcase-rolling';
$fas[] = 'fa-sun';
$fas[] = 'fa-superscript';
$fas[] = 'fa-surprise';
$fas[] = 'fa-swatchbook';
$fas[] = 'fa-swimmer';
$fas[] = 'fa-swimming-pool';
$fas[] = 'fa-synagogue';
$fas[] = 'fa-sync';
$fas[] = 'fa-sync-alt';
$fas[] = 'fa-syringe';
$fas[] = 'fa-table';
$fas[] = 'fa-table-tennis';
$fas[] = 'fa-tablet';
$fas[] = 'fa-tablet-alt';
$fas[] = 'fa-tablets';
$fas[] = 'fa-tachometer-alt';
$fas[] = 'fa-tag';
$fas[] = 'fa-tags';
$fas[] = 'fa-tape';
$fas[] = 'fa-tasks';
$fas[] = 'fa-taxi';
$fas[] = 'fa-teeth';
$fas[] = 'fa-teeth-open';
$fas[] = 'fa-temperature-high';
$fas[] = 'fa-temperature-low';
$fas[] = 'fa-tenge';
$fas[] = 'fa-terminal';
$fas[] = 'fa-text-height';
$fas[] = 'fa-text-width';
$fas[] = 'fa-th';
$fas[] = 'fa-th-large';
$fas[] = 'fa-th-list';
$fas[] = 'fa-theater-masks';
$fas[] = 'fa-thermometer';
$fas[] = 'fa-thermometer-empty';
$fas[] = 'fa-thermometer-full';
$fas[] = 'fa-thermometer-half';
$fas[] = 'fa-thermometer-quarter';
$fas[] = 'fa-thermometer-three-quarters';
$fas[] = 'fa-thumbs-down';
$fas[] = 'fa-thumbs-up';
$fas[] = 'fa-thumbtack';
$fas[] = 'fa-ticket-alt';
$fas[] = 'fa-times';
$fas[] = 'fa-times-circle';
$fas[] = 'fa-tint';
$fas[] = 'fa-tint-slash';
$fas[] = 'fa-tired';
$fas[] = 'fa-toggle-off';
$fas[] = 'fa-toggle-on';
$fas[] = 'fa-toilet';
$fas[] = 'fa-toilet-paper';
$fas[] = 'fa-toolbox';
$fas[] = 'fa-tools';
$fas[] = 'fa-tooth';
$fas[] = 'fa-torah';
$fas[] = 'fa-torii-gate';
$fas[] = 'fa-tractor';
$fas[] = 'fa-trademark';
$fas[] = 'fa-traffic-light';
$fas[] = 'fa-train';
$fas[] = 'fa-tram';
$fas[] = 'fa-transgender';
$fas[] = 'fa-transgender-alt';
$fas[] = 'fa-trash';
$fas[] = 'fa-trash-alt';
$fas[] = 'fa-trash-restore';
$fas[] = 'fa-trash-restore-alt';
$fas[] = 'fa-tree';
$fas[] = 'fa-trophy';
$fas[] = 'fa-truck';
$fas[] = 'fa-truck-loading';
$fas[] = 'fa-truck-monster';
$fas[] = 'fa-truck-moving';
$fas[] = 'fa-truck-pickup';
$fas[] = 'fa-tshirt';
$fas[] = 'fa-tty';
$fas[] = 'fa-tv';
$fas[] = 'fa-umbrella';
$fas[] = 'fa-umbrella-beach';
$fas[] = 'fa-underline';
$fas[] = 'fa-undo';
$fas[] = 'fa-undo-alt';
$fas[] = 'fa-universal-access';
$fas[] = 'fa-university';
$fas[] = 'fa-unlink';
$fas[] = 'fa-unlock';
$fas[] = 'fa-unlock-alt';
$fas[] = 'fa-upload';
$fas[] = 'fa-user';
$fas[] = 'fa-user-alt';
$fas[] = 'fa-user-alt-slash';
$fas[] = 'fa-user-astronaut';
$fas[] = 'fa-user-check';
$fas[] = 'fa-user-circle';
$fas[] = 'fa-user-clock';
$fas[] = 'fa-user-cog';
$fas[] = 'fa-user-edit';
$fas[] = 'fa-user-friends';
$fas[] = 'fa-user-graduate';
$fas[] = 'fa-user-injured';
$fas[] = 'fa-user-lock';
$fas[] = 'fa-user-md';
$fas[] = 'fa-user-minus';
$fas[] = 'fa-user-ninja';
$fas[] = 'fa-user-nurse';
$fas[] = 'fa-user-plus';
$fas[] = 'fa-user-secret';
$fas[] = 'fa-user-shield';
$fas[] = 'fa-user-slash';
$fas[] = 'fa-user-tag';
$fas[] = 'fa-user-tie';
$fas[] = 'fa-user-times';
$fas[] = 'fa-users';
$fas[] = 'fa-users-cog';
$fas[] = 'fa-utensil-spoon';
$fas[] = 'fa-utensils';
$fas[] = 'fa-vector-square';
$fas[] = 'fa-venus';
$fas[] = 'fa-venus-double';
$fas[] = 'fa-venus-mars';
$fas[] = 'fa-vial';
$fas[] = 'fa-vials';
$fas[] = 'fa-video';
$fas[] = 'fa-video-slash';
$fas[] = 'fa-vihara';
$fas[] = 'fa-voicemail';
$fas[] = 'fa-volleyball-ball';
$fas[] = 'fa-volume-down';
$fas[] = 'fa-volume-mute';
$fas[] = 'fa-volume-off';
$fas[] = 'fa-volume-up';
$fas[] = 'fa-vote-yea';
$fas[] = 'fa-vr-cardboard';
$fas[] = 'fa-walking';
$fas[] = 'fa-wallet';
$fas[] = 'fa-warehouse';
$fas[] = 'fa-water';
$fas[] = 'fa-wave-square';
$fas[] = 'fa-weight';
$fas[] = 'fa-weight-hanging';
$fas[] = 'fa-wheelchair';
$fas[] = 'fa-wifi';
$fas[] = 'fa-wind';
$fas[] = 'fa-window-close';
$fas[] = 'fa-window-maximize';
$fas[] = 'fa-window-minimize';
$fas[] = 'fa-window-restore';
$fas[] = 'fa-wine-bottle';
$fas[] = 'fa-wine-glass';
$fas[] = 'fa-wine-glass-alt';
$fas[] = 'fa-won-sign';
$fas[] = 'fa-wrench';
$fas[] = 'fa-x-ray';
$fas[] = 'fa-yen-sign';
$fas[] = 'fa-yin-yang';
$font_awesome_solid_icons = $fas;
unset($fas);
?>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,6 @@ header('Content-type: text/javascript; charset: UTF-8');
header('Cache-Control: must-revalidate'); header('Cache-Control: must-revalidate');
header('Expires: '.gmdate('D, d M Y H:i:s',time()+3600).' GMT'); header('Expires: '.gmdate('D, d M Y H:i:s',time()+3600).' GMT');
include_once 'solid.min.js'; include_once 'all.min.js';
?> ?>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,90 +1,40 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof exports === 'object' && typeof module !== 'undefined' ? factory() :
typeof define === 'function' && define.amd ? define(['exports'], factory) : typeof define === 'function' && define.amd ? define(factory) :
(factory((global['fontawesome-free-conflict-detection'] = {}))); (factory());
}(this, (function (exports) { 'use strict'; }(this, (function () { 'use strict';
function _typeof(obj) { let _WINDOW = {};
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { let _DOCUMENT = {};
_typeof = function (obj) {
return typeof obj;
};
} else {
_typeof = function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
}
return _typeof(obj);
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function (key) {
_defineProperty(target, key, source[key]);
});
}
return target;
}
var _WINDOW = {};
var _DOCUMENT = {};
try { try {
if (typeof window !== 'undefined') _WINDOW = window; if (typeof window !== 'undefined') _WINDOW = window;
if (typeof document !== 'undefined') _DOCUMENT = document; if (typeof document !== 'undefined') _DOCUMENT = document;
} catch (e) {} } catch (e) {}
var _ref = _WINDOW.navigator || {}, const {
_ref$userAgent = _ref.userAgent, userAgent = ''
userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent; } = _WINDOW.navigator || {};
const WINDOW = _WINDOW;
const DOCUMENT = _DOCUMENT;
const IS_BROWSER = !!WINDOW.document;
const IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';
const IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
var WINDOW = _WINDOW; const functions = [];
var DOCUMENT = _DOCUMENT;
var IS_BROWSER = !!WINDOW.document;
var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';
var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
var functions = []; const listener = function () {
var listener = function listener() {
DOCUMENT.removeEventListener('DOMContentLoaded', listener); DOCUMENT.removeEventListener('DOMContentLoaded', listener);
loaded = 1; loaded = 1;
functions.map(function (fn) { functions.map(fn => fn());
return fn();
});
}; };
var loaded = false; let loaded = false;
if (IS_DOM) { if (IS_DOM) {
loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState); loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);
@ -97,25 +47,27 @@
} }
function report (_ref) { function report (_ref) {
var nodesTested = _ref.nodesTested, let {
nodesFound = _ref.nodesFound; nodesTested,
var timedOutTests = {}; nodesFound
} = _ref;
const timedOutTests = {};
for (var key in nodesFound) { for (let key in nodesFound) {
if (!(nodesTested.conflict[key] || nodesTested.noConflict[key])) { if (!(nodesTested.conflict[key] || nodesTested.noConflict[key])) {
timedOutTests[key] = nodesFound[key]; timedOutTests[key] = nodesFound[key];
} }
} }
var conflictsCount = Object.keys(nodesTested.conflict).length; const conflictsCount = Object.keys(nodesTested.conflict).length;
if (conflictsCount > 0) { if (conflictsCount > 0) {
console.info("%cConflict".concat(conflictsCount > 1 ? 's' : '', " found:"), 'color: darkred; font-size: large'); console.info("%cConflict".concat(conflictsCount > 1 ? 's' : '', " found:"), 'color: darkred; font-size: large');
var data = {}; const data = {};
for (var _key in nodesTested.conflict) { for (let key in nodesTested.conflict) {
var item = nodesTested.conflict[_key]; const item = nodesTested.conflict[key];
data[_key] = { data[key] = {
'tagName': item.tagName, 'tagName': item.tagName,
'src/href': item.src || item.href || 'n/a', 'src/href': item.src || item.href || 'n/a',
'innerText excerpt': item.innerText && item.innerText !== '' ? item.innerText.slice(0, 200) + '...' : '(empty)' 'innerText excerpt': item.innerText && item.innerText !== '' ? item.innerText.slice(0, 200) + '...' : '(empty)'
@ -125,40 +77,40 @@
console.table(data); console.table(data);
} }
var noConflictsCount = Object.keys(nodesTested.noConflict).length; const noConflictsCount = Object.keys(nodesTested.noConflict).length;
if (noConflictsCount > 0) { if (noConflictsCount > 0) {
console.info("%cNo conflict".concat(noConflictsCount > 1 ? 's' : '', " found with ").concat(noConflictsCount == 1 ? 'this' : 'these', ":"), 'color: green; font-size: large'); console.info("%cNo conflict".concat(noConflictsCount > 1 ? 's' : '', " found with ").concat(noConflictsCount === 1 ? 'this' : 'these', ":"), 'color: green; font-size: large');
var _data = {}; const data = {};
for (var _key2 in nodesTested.noConflict) { for (let key in nodesTested.noConflict) {
var _item = nodesTested.noConflict[_key2]; const item = nodesTested.noConflict[key];
_data[_key2] = { data[key] = {
'tagName': _item.tagName, 'tagName': item.tagName,
'src/href': _item.src || _item.href || 'n/a', 'src/href': item.src || item.href || 'n/a',
'innerText excerpt': _item.innerText && _item.innerText !== '' ? _item.innerText.slice(0, 200) + '...' : '(empty)' 'innerText excerpt': item.innerText && item.innerText !== '' ? item.innerText.slice(0, 200) + '...' : '(empty)'
}; };
} }
console.table(_data); console.table(data);
} }
var timeOutCount = Object.keys(timedOutTests).length; const timeOutCount = Object.keys(timedOutTests).length;
if (timeOutCount > 0) { if (timeOutCount > 0) {
console.info("%cLeftovers--we timed out before collecting test results for ".concat(timeOutCount == 1 ? 'this' : 'these', ":"), 'color: blue; font-size: large'); console.info("%cLeftovers--we timed out before collecting test results for ".concat(timeOutCount === 1 ? 'this' : 'these', ":"), 'color: blue; font-size: large');
var _data2 = {}; const data = {};
for (var _key3 in timedOutTests) { for (let key in timedOutTests) {
var _item2 = timedOutTests[_key3]; const item = timedOutTests[key];
_data2[_key3] = { data[key] = {
'tagName': _item2.tagName, 'tagName': item.tagName,
'src/href': _item2.src || _item2.href || 'n/a', 'src/href': item.src || item.href || 'n/a',
'innerText excerpt': _item2.innerText && _item2.innerText !== '' ? _item2.innerText.slice(0, 200) + '...' : '(empty)' 'innerText excerpt': item.innerText && item.innerText !== '' ? item.innerText.slice(0, 200) + '...' : '(empty)'
}; };
} }
console.table(_data2); console.table(data);
} }
} }
@ -551,7 +503,7 @@
* *
* @param {string} string Input string * @param {string} string Input string
* @param {string} [key] HMAC key * @param {string} [key] HMAC key
* @param {boolean} raw Raw oytput switch * @param {boolean} [raw] Raw output switch
* @returns {string} MD5 output * @returns {string} MD5 output
*/ */
@ -581,7 +533,7 @@
}); });
function md5ForNode(node) { function md5ForNode(node) {
if (null === node || 'object' !== _typeof(node)) return undefined; if (null === node || 'object' !== typeof node) return undefined;
if (node.src) { if (node.src) {
return md5(node.src); return md5(node.src);
@ -595,30 +547,31 @@
} }
} }
var diagScriptId = 'fa-kits-diag'; const diagScriptId = 'fa-kits-diag';
var nodeUnderTestId = 'fa-kits-node-under-test'; const nodeUnderTestId = 'fa-kits-node-under-test';
var md5Attr = 'data-md5'; const md5Attr = 'data-md5';
var detectionIgnoreAttr = 'data-fa-detection-ignore'; const detectionIgnoreAttr = 'data-fa-detection-ignore';
var timeoutAttr = 'data-fa-detection-timeout'; const timeoutAttr = 'data-fa-detection-timeout';
var resultsCollectionMaxWaitAttr = 'data-fa-detection-results-collection-max-wait'; const resultsCollectionMaxWaitAttr = 'data-fa-detection-results-collection-max-wait';
const silenceErrors = e => {
e.preventDefault();
e.stopPropagation();
};
function pollUntil(_ref) { function pollUntil(_ref) {
var _ref$fn = _ref.fn, let {
fn = _ref$fn === void 0 ? function () { fn = () => true,
return true; initialDuration = 1,
} : _ref$fn, maxDuration = WINDOW.FontAwesomeDetection.timeout,
_ref$initialDuration = _ref.initialDuration, showProgress = false,
initialDuration = _ref$initialDuration === void 0 ? 1 : _ref$initialDuration, progressIndicator
_ref$maxDuration = _ref.maxDuration, } = _ref;
maxDuration = _ref$maxDuration === void 0 ? WINDOW.FontAwesomeDetection.timeout : _ref$maxDuration,
_ref$showProgress = _ref.showProgress,
showProgress = _ref$showProgress === void 0 ? false : _ref$showProgress,
progressIndicator = _ref.progressIndicator;
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
// eslint-disable-line compat/compat // eslint-disable-line compat/compat
function poll(duration, cumulativeDuration) { function poll(duration, cumulativeDuration) {
setTimeout(function () { setTimeout(function () {
var result = fn(); const result = fn();
if (showProgress) { if (showProgress) {
console.info(progressIndicator); console.info(progressIndicator);
@ -628,8 +581,8 @@
// eslint-disable-line no-extra-boolean-cast // eslint-disable-line no-extra-boolean-cast
resolve(result); resolve(result);
} else { } else {
var nextDuration = 250; const nextDuration = 250;
var nextCumulativeDuration = nextDuration + cumulativeDuration; const nextCumulativeDuration = nextDuration + cumulativeDuration;
if (nextCumulativeDuration <= maxDuration) { if (nextCumulativeDuration <= maxDuration) {
poll(nextDuration, nextCumulativeDuration); poll(nextDuration, nextCumulativeDuration);
@ -645,10 +598,8 @@
} }
function detectWebfontConflicts() { function detectWebfontConflicts() {
var linkTags = Array.from(DOCUMENT.getElementsByTagName('link')).filter(function (t) { const linkTags = Array.from(DOCUMENT.getElementsByTagName('link')).filter(t => !t.hasAttribute(detectionIgnoreAttr));
return !t.hasAttribute(detectionIgnoreAttr); const styleTags = Array.from(DOCUMENT.getElementsByTagName('style')).filter(t => {
});
var styleTags = Array.from(DOCUMENT.getElementsByTagName('style')).filter(function (t) {
if (t.hasAttribute(detectionIgnoreAttr)) { if (t.hasAttribute(detectionIgnoreAttr)) {
return false; return false;
} // If the browser has loaded the FA5 CSS, let's not test that <style> element. } // If the browser has loaded the FA5 CSS, let's not test that <style> element.
@ -664,15 +615,15 @@
}); });
function runDiag(scriptOrLinkTag, md5) { function runDiag(scriptOrLinkTag, md5) {
var diagFrame = DOCUMENT.createElement('iframe'); // Using "visibility: hidden; position: absolute" instead of "display: none;" because const diagFrame = DOCUMENT.createElement('iframe'); // Using "visibility: hidden; position: absolute" instead of "display: none;" because
// Firefox will not return the expected results for getComputedStyle if our iframe has display: none. // Firefox will not return the expected results for getComputedStyle if our iframe has display: none.
diagFrame.setAttribute('style', 'visibility: hidden; position: absolute; height: 0; width: 0;'); diagFrame.setAttribute('style', 'visibility: hidden; position: absolute; height: 0; width: 0;');
var testIconId = 'fa-test-icon-' + md5; const testIconId = 'fa-test-icon-' + md5;
var iTag = DOCUMENT.createElement('i'); const iTag = DOCUMENT.createElement('i');
iTag.setAttribute('class', 'fa fa-coffee'); iTag.setAttribute('class', 'fa fa-coffee');
iTag.setAttribute('id', testIconId); iTag.setAttribute('id', testIconId);
var diagScript = DOCUMENT.createElement('script'); const diagScript = DOCUMENT.createElement('script');
diagScript.setAttribute('id', diagScriptId); // WARNING: this function will be toString()'d and assigned to innerText of the diag script diagScript.setAttribute('id', diagScriptId); // WARNING: this function will be toString()'d and assigned to innerText of the diag script
// element that we'll be putting into a diagnostic iframe. // element that we'll be putting into a diagnostic iframe.
// That means that this code won't compile until after the outer script has run and injected // That means that this code won't compile until after the outer script has run and injected
@ -681,31 +632,31 @@
// will probably cause it to choke. Chrome will show an error like this: // will probably cause it to choke. Chrome will show an error like this:
// Uncaught SyntaxError: Unexpected end of input // Uncaught SyntaxError: Unexpected end of input
var diagScriptFun = function diagScriptFun(nodeUnderTestId, testIconId, md5, parentOrigin) { const diagScriptFun = (nodeUnderTestId, testIconId, md5, parentOrigin) => {
parent.FontAwesomeDetection.__pollUntil({ parent.FontAwesomeDetection.__pollUntil({
fn: function fn() { fn: () => {
var iEl = document.getElementById(testIconId); const iEl = document.getElementById(testIconId);
var computedStyle = window.getComputedStyle(iEl); const computedStyle = window.getComputedStyle(iEl);
var fontFamily = computedStyle.getPropertyValue('font-family'); const fontFamily = computedStyle.getPropertyValue('font-family');
if (!!fontFamily.match(/FontAwesome/) || !!fontFamily.match(/Font Awesome 5/)) { if (!!fontFamily.match(/FontAwesome/) || !!fontFamily.match(/Font Awesome [56]/)) {
return true; return true;
} else { } else {
return false; return false;
} }
} }
}).then(function () { }).then(() => {
var node = document.getElementById(nodeUnderTestId); const node = document.getElementById(nodeUnderTestId);
parent.postMessage({ parent.postMessage({
type: 'fontawesome-conflict', type: 'fontawesome-conflict',
technology: 'webfont', technology: 'webfont',
href: node.href, href: node.href,
innerText: node.innerText, innerText: node.innerText,
tagName: node.tagName, tagName: node.tagName,
md5: md5 md5
}, parentOrigin); }, parentOrigin);
}).catch(function (e) { }).catch(function (e) {
var node = document.getElementById(nodeUnderTestId); const node = document.getElementById(nodeUnderTestId);
if (e === 'timeout') { if (e === 'timeout') {
parent.postMessage({ parent.postMessage({
@ -714,7 +665,7 @@
href: node.src, href: node.src,
innerText: node.innerText, innerText: node.innerText,
tagName: node.tagName, tagName: node.tagName,
md5: md5 md5
}, parentOrigin); }, parentOrigin);
} else { } else {
console.error(e); console.error(e);
@ -722,40 +673,39 @@
}); });
}; };
var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin; const parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
diagScript.innerText = "(".concat(diagScriptFun.toString(), ")('").concat(nodeUnderTestId, "', '").concat(testIconId || 'foo', "', '").concat(md5, "', '").concat(parentOrigin, "');"); diagScript.innerText = "(".concat(diagScriptFun.toString(), ")('").concat(nodeUnderTestId, "', '").concat(testIconId || 'foo', "', '").concat(md5, "', '").concat(parentOrigin, "');");
diagFrame.onload = function () { diagFrame.onload = function () {
diagFrame.contentWindow.addEventListener('error', silenceErrors, true);
diagFrame.contentDocument.head.appendChild(diagScript); diagFrame.contentDocument.head.appendChild(diagScript);
diagFrame.contentDocument.head.appendChild(scriptOrLinkTag); diagFrame.contentDocument.head.appendChild(scriptOrLinkTag);
diagFrame.contentDocument.body.appendChild(iTag); diagFrame.contentDocument.body.appendChild(iTag);
}; };
domready(function () { domready(() => DOCUMENT.body.appendChild(diagFrame));
return DOCUMENT.body.appendChild(diagFrame);
});
} }
var cssByMD5 = {}; const cssByMD5 = {};
for (var i = 0; i < linkTags.length; i++) { for (let i = 0; i < linkTags.length; i++) {
var linkUnderTest = DOCUMENT.createElement('link'); const linkUnderTest = DOCUMENT.createElement('link');
linkUnderTest.setAttribute('id', nodeUnderTestId); linkUnderTest.setAttribute('id', nodeUnderTestId);
linkUnderTest.setAttribute('href', linkTags[i].href); linkUnderTest.setAttribute('href', linkTags[i].href);
linkUnderTest.setAttribute('rel', linkTags[i].rel); linkUnderTest.setAttribute('rel', linkTags[i].rel);
var md5ForLink = md5ForNode(linkTags[i]); const md5ForLink = md5ForNode(linkTags[i]);
linkUnderTest.setAttribute(md5Attr, md5ForLink); linkUnderTest.setAttribute(md5Attr, md5ForLink);
cssByMD5[md5ForLink] = linkTags[i]; cssByMD5[md5ForLink] = linkTags[i];
runDiag(linkUnderTest, md5ForLink); runDiag(linkUnderTest, md5ForLink);
} }
for (var _i = 0; _i < styleTags.length; _i++) { for (let i = 0; i < styleTags.length; i++) {
var styleUnderTest = DOCUMENT.createElement('style'); var styleUnderTest = DOCUMENT.createElement('style');
styleUnderTest.setAttribute('id', nodeUnderTestId); styleUnderTest.setAttribute('id', nodeUnderTestId);
var md5ForStyle = md5ForNode(styleTags[_i]); const md5ForStyle = md5ForNode(styleTags[i]);
styleUnderTest.setAttribute(md5Attr, md5ForStyle); styleUnderTest.setAttribute(md5Attr, md5ForStyle);
styleUnderTest.innerText = styleTags[_i].innerText; styleUnderTest.innerText = styleTags[i].innerText;
cssByMD5[md5ForStyle] = styleTags[_i]; cssByMD5[md5ForStyle] = styleTags[i];
runDiag(styleUnderTest, md5ForStyle); runDiag(styleUnderTest, md5ForStyle);
} }
@ -763,17 +713,15 @@
} }
function detectSvgConflicts(currentScript) { function detectSvgConflicts(currentScript) {
var scripts = Array.from(DOCUMENT.scripts).filter(function (t) { const scripts = Array.from(DOCUMENT.scripts).filter(t => !t.hasAttribute(detectionIgnoreAttr) && t !== currentScript);
return !t.hasAttribute(detectionIgnoreAttr) && t !== currentScript; const scriptsByMD5 = {};
});
var scriptsByMD5 = {};
var _loop = function _loop(scriptIdx) { for (let scriptIdx = 0; scriptIdx < scripts.length; scriptIdx++) {
var diagFrame = DOCUMENT.createElement('iframe'); const diagFrame = DOCUMENT.createElement('iframe');
diagFrame.setAttribute('style', 'display:none;'); diagFrame.setAttribute('style', 'display:none;');
var scriptUnderTest = DOCUMENT.createElement('script'); const scriptUnderTest = DOCUMENT.createElement('script');
scriptUnderTest.setAttribute('id', nodeUnderTestId); scriptUnderTest.setAttribute('id', nodeUnderTestId);
var md5ForScript = md5ForNode(scripts[scriptIdx]); const md5ForScript = md5ForNode(scripts[scriptIdx]);
scriptUnderTest.setAttribute(md5Attr, md5ForScript); scriptUnderTest.setAttribute(md5Attr, md5ForScript);
scriptsByMD5[md5ForScript] = scripts[scriptIdx]; scriptsByMD5[md5ForScript] = scripts[scriptIdx];
@ -786,24 +734,24 @@
} }
scriptUnderTest.async = true; scriptUnderTest.async = true;
var diagScript = DOCUMENT.createElement('script'); const diagScript = DOCUMENT.createElement('script');
diagScript.setAttribute('id', diagScriptId); diagScript.setAttribute('id', diagScriptId);
var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin; const parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
var diagScriptFun = function diagScriptFun(nodeUnderTestId, md5, parentOrigin) { const diagScriptFun = (nodeUnderTestId, md5, parentOrigin) => {
parent.FontAwesomeDetection.__pollUntil({ parent.FontAwesomeDetection.__pollUntil({
fn: function fn() { fn: () => {
return !!window.FontAwesomeConfig; return !!window.FontAwesomeConfig || !!window.FontAwesomeKitConfig;
} }
}).then(function () { }).then(function () {
var scriptNode = document.getElementById(nodeUnderTestId); const scriptNode = document.getElementById(nodeUnderTestId);
parent.postMessage({ parent.postMessage({
type: 'fontawesome-conflict', type: 'fontawesome-conflict',
technology: 'js', technology: 'js',
src: scriptNode.src, src: scriptNode.src,
innerText: scriptNode.innerText, innerText: scriptNode.innerText,
tagName: scriptNode.tagName, tagName: scriptNode.tagName,
md5: md5 md5
}, parentOrigin); }, parentOrigin);
}).catch(function (e) { }).catch(function (e) {
var scriptNode = document.getElementById(nodeUnderTestId); var scriptNode = document.getElementById(nodeUnderTestId);
@ -814,7 +762,7 @@
src: scriptNode.src, src: scriptNode.src,
innerText: scriptNode.innerText, innerText: scriptNode.innerText,
tagName: scriptNode.tagName, tagName: scriptNode.tagName,
md5: md5 md5
}, parentOrigin); }, parentOrigin);
} else { } else {
console.error(e); console.error(e);
@ -825,25 +773,22 @@
diagScript.innerText = "(".concat(diagScriptFun.toString(), ")('").concat(nodeUnderTestId, "', '").concat(md5ForScript, "', '").concat(parentOrigin, "');"); diagScript.innerText = "(".concat(diagScriptFun.toString(), ")('").concat(nodeUnderTestId, "', '").concat(md5ForScript, "', '").concat(parentOrigin, "');");
diagFrame.onload = function () { diagFrame.onload = function () {
diagFrame.contentWindow.addEventListener('error', silenceErrors, true);
diagFrame.contentDocument.head.appendChild(diagScript); diagFrame.contentDocument.head.appendChild(diagScript);
diagFrame.contentDocument.head.appendChild(scriptUnderTest); diagFrame.contentDocument.head.appendChild(scriptUnderTest);
}; };
domready(function () { domready(() => DOCUMENT.body.appendChild(diagFrame));
return DOCUMENT.body.appendChild(diagFrame);
});
};
for (var scriptIdx = 0; scriptIdx < scripts.length; scriptIdx++) {
_loop(scriptIdx);
} }
return scriptsByMD5; return scriptsByMD5;
} }
function setDoneResults(_ref2) { function setDoneResults(_ref2) {
var nodesTested = _ref2.nodesTested, let {
nodesFound = _ref2.nodesFound; nodesTested,
nodesFound
} = _ref2;
WINDOW.FontAwesomeDetection = WINDOW.FontAwesomeDetection || {}; WINDOW.FontAwesomeDetection = WINDOW.FontAwesomeDetection || {};
WINDOW.FontAwesomeDetection.nodesTested = nodesTested; WINDOW.FontAwesomeDetection.nodesTested = nodesTested;
WINDOW.FontAwesomeDetection.nodesFound = nodesFound; WINDOW.FontAwesomeDetection.nodesFound = nodesFound;
@ -851,8 +796,8 @@
} }
function conflictDetection() { function conflictDetection() {
var report$$1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; let report$$1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : () => {};
var nodesTested = { const nodesTested = {
conflict: {}, conflict: {},
noConflict: {} noConflict: {}
}; };
@ -869,19 +814,19 @@
} }
}; };
var scriptsToTest = detectSvgConflicts(DOCUMENT.currentScript); const scriptsToTest = detectSvgConflicts(DOCUMENT.currentScript);
var cssToTest = detectWebfontConflicts(); const cssToTest = detectWebfontConflicts();
const nodesFound = { ...scriptsToTest,
var nodesFound = _objectSpread({}, scriptsToTest, cssToTest); ...cssToTest
};
var testCount = Object.keys(scriptsToTest).length + Object.keys(cssToTest).length; // The resultsCollectionMaxWait allows for the time between when the tests running under const testCount = Object.keys(scriptsToTest).length + Object.keys(cssToTest).length; // The resultsCollectionMaxWait allows for the time between when the tests running under
// child iframes call postMessage with their results, and when the parent window // child iframes call postMessage with their results, and when the parent window
// receives and handles those events with window.onmessage. // receives and handles those events with window.onmessage.
// Making it configurable allows us to test the scenario where this timeout is exceeded. // Making it configurable allows us to test the scenario where this timeout is exceeded.
// Naming it something very different from "timeout" is to help avoid the potential ambiguity between // Naming it something very different from "timeout" is to help avoid the potential ambiguity between
// these two timeout-related settings. // these two timeout-related settings.
var masterTimeout = WINDOW.FontAwesomeDetection.timeout + WINDOW.FontAwesomeDetection.resultsCollectionMaxWait; const masterTimeout = WINDOW.FontAwesomeDetection.timeout + WINDOW.FontAwesomeDetection.resultsCollectionMaxWait;
console.group('Font Awesome Detector'); console.group('Font Awesome Detector');
if (testCount === 0) { if (testCount === 0) {
@ -898,41 +843,41 @@
maxDuration: masterTimeout, maxDuration: masterTimeout,
showProgress: true, showProgress: true,
progressIndicator: 'waiting...', progressIndicator: 'waiting...',
fn: function fn() { fn: () => {
return Object.keys(nodesTested.conflict).length + Object.keys(nodesTested.noConflict).length >= testCount; return Object.keys(nodesTested.conflict).length + Object.keys(nodesTested.noConflict).length >= testCount;
} }
}).then(function () { }).then(() => {
console.info('DONE!'); console.info('DONE!');
setDoneResults({ setDoneResults({
nodesTested: nodesTested, nodesTested,
nodesFound: nodesFound nodesFound
}); });
report$$1({ report$$1({
nodesTested: nodesTested, nodesTested,
nodesFound: nodesFound nodesFound
}); });
console.groupEnd(); console.groupEnd();
}).catch(function (e) { }).catch(e => {
if (e === 'timeout') { if (e === 'timeout') {
console.info('TIME OUT! We waited until we got tired. Here\'s what we found:'); console.info('TIME OUT! We waited until we got tired. Here\'s what we found:');
setDoneResults({ setDoneResults({
nodesTested: nodesTested, nodesTested,
nodesFound: nodesFound nodesFound
}); });
report$$1({ report$$1({
nodesTested: nodesTested, nodesTested,
nodesFound: nodesFound nodesFound
}); });
} else { } else {
console.info('Whoops! We hit an error:', e); console.info('Whoops! We hit an error:', e);
console.info('Here\'s what we\'d found up until that error:'); console.info('Here\'s what we\'d found up until that error:');
setDoneResults({ setDoneResults({
nodesTested: nodesTested, nodesTested,
nodesFound: nodesFound nodesFound
}); });
report$$1({ report$$1({
nodesTested: nodesTested, nodesTested,
nodesFound: nodesFound nodesFound
}); });
} }
@ -941,36 +886,230 @@
} }
} // Allow clients to access, and in some cases, override some properties } // Allow clients to access, and in some cases, override some properties
var initialConfig = WINDOW.FontAwesomeDetection || {}; // These can be overridden const initialConfig = WINDOW.FontAwesomeDetection || {}; // These can be overridden
var _default = { const _default = {
report: report, report,
timeout: +(DOCUMENT.currentScript.getAttribute(timeoutAttr) || "2000"), timeout: +(DOCUMENT.currentScript.getAttribute(timeoutAttr) || "2000"),
resultsCollectionMaxWait: +(DOCUMENT.currentScript.getAttribute(resultsCollectionMaxWaitAttr) || "5000") resultsCollectionMaxWait: +(DOCUMENT.currentScript.getAttribute(resultsCollectionMaxWaitAttr) || "5000")
}; };
const _config = { ..._default,
var _config = _objectSpread({}, _default, initialConfig, { ...initialConfig,
// These cannot be overridden // These cannot be overridden
__pollUntil: pollUntil, __pollUntil: pollUntil,
md5ForNode: md5ForNode, md5ForNode,
detectionDone: false, detectionDone: false,
nodesTested: null, nodesTested: null,
nodesFound: null nodesFound: null
}); };
WINDOW.FontAwesomeDetection = _config; WINDOW.FontAwesomeDetection = _config;
var PRODUCTION = function () { var a = "classic",
r = "sharp",
o = "sharp-duotone";
var et$1 = {
classic: {
900: "fas",
400: "far",
normal: "far",
300: "fal",
100: "fat"
},
sharp: {
900: "fass",
400: "fasr",
300: "fasl",
100: "fast"
},
"sharp-duotone": {
900: "fasds"
}
};
var bt = {
kit: {
fak: "kit",
"fa-kit": "kit"
},
"kit-duotone": {
fakd: "kit-duotone",
"fa-kit-duotone": "kit-duotone"
}
};
var lo = {
classic: {
"fa-brands": "fab",
"fa-duotone": "fad",
"fa-light": "fal",
"fa-regular": "far",
"fa-solid": "fas",
"fa-thin": "fat"
},
sharp: {
"fa-solid": "fass",
"fa-regular": "fasr",
"fa-light": "fasl",
"fa-thin": "fast"
},
"sharp-duotone": {
"fa-solid": "fasds"
}
},
no = {
classic: {
fab: "fa-brands",
fad: "fa-duotone",
fal: "fa-light",
far: "fa-regular",
fas: "fa-solid",
fat: "fa-thin"
},
sharp: {
fass: "fa-solid",
fasr: "fa-regular",
fasl: "fa-light",
fast: "fa-thin"
},
"sharp-duotone": {
fasds: "fa-solid"
}
},
fo = {
classic: {
solid: "fas",
regular: "far",
light: "fal",
thin: "fat",
duotone: "fad",
brands: "fab"
},
sharp: {
solid: "fass",
regular: "fasr",
light: "fasl",
thin: "fast"
},
"sharp-duotone": {
solid: "fasds"
}
},
ho = {
classic: {
fa: "solid",
fas: "solid",
"fa-solid": "solid",
far: "regular",
"fa-regular": "regular",
fal: "light",
"fa-light": "light",
fat: "thin",
"fa-thin": "thin",
fad: "duotone",
"fa-duotone": "duotone",
fab: "brands",
"fa-brands": "brands"
},
sharp: {
fa: "solid",
fass: "solid",
"fa-solid": "solid",
fasr: "regular",
"fa-regular": "regular",
fasl: "light",
"fa-light": "light",
fast: "thin",
"fa-thin": "thin"
},
"sharp-duotone": {
fa: "solid",
fasds: "solid",
"fa-solid": "solid"
}
};
var Io = {
kit: {
"fa-kit": "fak"
},
"kit-duotone": {
"fa-kit-duotone": "fakd"
}
},
Fo = {
kit: {
fak: "fa-kit"
},
"kit-duotone": {
fakd: "fa-kit-duotone"
}
},
So = {
kit: {
kit: "fak"
},
"kit-duotone": {
"kit-duotone": "fakd"
}
};
const PRODUCTION = (() => {
try { try {
return process.env.NODE_ENV === 'production'; return process.env.NODE_ENV === 'production';
} catch (e) { } catch (e$$1) {
return false; return false;
} }
}(); })();
function familyProxy(obj) {
// Defaults to the classic family if family is not available
return new Proxy(obj, {
get(target, prop) {
return prop in target ? target[prop] : target[a];
}
});
}
const _PREFIX_TO_STYLE = { ...ho
};
_PREFIX_TO_STYLE[a] = { ...ho[a],
...bt['kit'],
...bt['kit-duotone']
};
const PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);
const _STYLE_TO_PREFIX = { ...fo
};
_STYLE_TO_PREFIX[a] = { ..._STYLE_TO_PREFIX[a],
...So['kit'],
...So['kit-duotone']
};
const STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);
const _PREFIX_TO_LONG_STYLE = { ...no
};
_PREFIX_TO_LONG_STYLE[a] = { ..._PREFIX_TO_LONG_STYLE[a],
...Fo['kit']
};
const PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);
const _LONG_STYLE_TO_PREFIX = { ...lo
};
_LONG_STYLE_TO_PREFIX[a] = { ..._LONG_STYLE_TO_PREFIX[a],
...Io['kit']
};
const LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);
const _FONT_WEIGHT_TO_PREFIX = { ...et$1
};
const FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);
const prefixes = new Set();
Object.keys(STYLE_TO_PREFIX[a]).map(prefixes.add.bind(prefixes));
Object.keys(STYLE_TO_PREFIX[r]).map(prefixes.add.bind(prefixes));
Object.keys(STYLE_TO_PREFIX[o]).map(prefixes.add.bind(prefixes));
function bunker(fn) { function bunker(fn) {
try { try {
fn(); for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
fn(...args);
} catch (e) { } catch (e) {
if (!PRODUCTION) { if (!PRODUCTION) {
throw e; throw e;
@ -978,14 +1117,10 @@
} }
} }
bunker(function () { bunker(() => {
if (IS_BROWSER && IS_DOM) { if (IS_BROWSER && IS_DOM) {
conflictDetection(window.FontAwesomeDetection.report); conflictDetection(window.FontAwesomeDetection.report);
} }
}); });
exports.conflictDetection = conflictDetection;
Object.defineProperty(exports, '__esModule', { value: true });
}))); })));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,19 +1,152 @@
// Animated Icons // animating icons
// -------------------------- // --------------------------
.@{fa-css-prefix}-beat {
animation-name: ~'@{fa-css-prefix}-beat';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, ease-in-out)';
}
.@{fa-css-prefix}-bounce {
animation-name: ~'@{fa-css-prefix}-bounce';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(0.280, 0.840, 0.420, 1))';
}
.@{fa-css-prefix}-fade {
animation-name: ~'@{fa-css-prefix}-fade';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1))';
}
.@{fa-css-prefix}-beat-fade {
animation-name: ~'@{fa-css-prefix}-beat-fade';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1))';
}
.@{fa-css-prefix}-flip {
animation-name: ~'@{fa-css-prefix}-flip';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, ease-in-out)';
}
.@{fa-css-prefix}-shake {
animation-name: ~'@{fa-css-prefix}-shake';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, linear)';
}
.@{fa-css-prefix}-spin { .@{fa-css-prefix}-spin {
animation: fa-spin 2s infinite linear; animation-name: ~'@{fa-css-prefix}-spin';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 2s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, linear)';
} }
.@{fa-css-prefix}-pulse { .@{fa-css-prefix}-spin-reverse {
animation: fa-spin 1s infinite steps(8); --@{fa-css-prefix}-animation-direction: reverse;
} }
@keyframes fa-spin { .@{fa-css-prefix}-pulse,
0% { .@{fa-css-prefix}-spin-pulse {
transform: rotate(0deg); animation-name: ~'@{fa-css-prefix}-spin';
} animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
100% { animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
transform: rotate(360deg); animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, steps(8));';
}
// if agent or operating system prefers reduced motion, disable animations
// see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/
// see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion
@media (prefers-reduced-motion: reduce) {
.@{fa-css-prefix}-beat,
.@{fa-css-prefix}-bounce,
.@{fa-css-prefix}-fade,
.@{fa-css-prefix}-beat-fade,
.@{fa-css-prefix}-flip,
.@{fa-css-prefix}-pulse,
.@{fa-css-prefix}-shake,
.@{fa-css-prefix}-spin,
.@{fa-css-prefix}-spin-pulse {
animation-delay: -1ms;
animation-duration: 1ms;
animation-iteration-count: 1;
transition-delay: 0s;
transition-duration: 0s;
} }
} }
@keyframes ~'@{fa-css-prefix}-beat' {
0%, 90% { transform: scale(1); }
45% { transform: ~'scale(var(--@{fa-css-prefix}-beat-scale, 1.25))'; }
}
@keyframes ~'@{fa-css-prefix}-bounce' {
0% { transform: scale(1,1) translateY(0); }
10% { transform: ~'scale(var(--@{fa-css-prefix}-bounce-start-scale-x, 1.1),var(--@{fa-css-prefix}-bounce-start-scale-y, 0.9))' translateY(0); }
30% { transform: ~'scale(var(--@{fa-css-prefix}-bounce-jump-scale-x, 0.9),var(--@{fa-css-prefix}-bounce-jump-scale-y, 1.1))' ~'translateY(var(--@{fa-css-prefix}-bounce-height, -0.5em))'; }
50% { transform: ~'scale(var(--@{fa-css-prefix}-bounce-land-scale-x, 1.05),var(--@{fa-css-prefix}-bounce-land-scale-y, 0.95))' translateY(0); }
57% { transform: ~'scale(1,1) translateY(var(--@{fa-css-prefix}-bounce-rebound, -0.125em))'; }
64% { transform: scale(1,1) translateY(0); }
100% { transform: scale(1,1) translateY(0); }
}
@keyframes ~'@{fa-css-prefix}-fade' {
50% { opacity: ~'var(--@{fa-css-prefix}-fade-opacity, 0.4)'; }
}
@keyframes ~'@{fa-css-prefix}-beat-fade' {
0%, 100% {
opacity: ~'var(--@{fa-css-prefix}-beat-fade-opacity, 0.4)';
transform: scale(1);
}
50% {
opacity: 1;
transform: ~'scale(var(--@{fa-css-prefix}-beat-fade-scale, 1.125))';
}
}
@keyframes ~'@{fa-css-prefix}-flip' {
50% {
transform: ~'rotate3d(var(--@{fa-css-prefix}-flip-x, 0), var(--@{fa-css-prefix}-flip-y, 1), var(--@{fa-css-prefix}-flip-z, 0), var(--@{fa-css-prefix}-flip-angle, -180deg))';
}
}
@keyframes ~'@{fa-css-prefix}-shake' {
0% { transform: rotate(-15deg); }
4% { transform: rotate(15deg); }
8%, 24% { transform: rotate(-18deg); }
12%, 28% { transform: rotate(18deg); }
16% { transform: rotate(-22deg); }
20% { transform: rotate(22deg); }
32% { transform: rotate(-12deg); }
36% { transform: rotate(12deg); }
40%, 100% { transform: rotate(0deg); }
}
@keyframes ~'@{fa-css-prefix}-spin' {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}

View File

@ -1,16 +1,20 @@
// Bordered & Pulled // bordered + pulled icons
// ------------------------- // -------------------------
.@{fa-css-prefix}-border { .@{fa-css-prefix}-border {
border-radius: .1em; border-color: ~'var(--@{fa-css-prefix}-border-color, @{fa-border-color})';
border: solid .08em @fa-border-color; border-radius: ~'var(--@{fa-css-prefix}-border-radius, @{fa-border-radius})';
padding: .2em .25em .15em; border-style: ~'var(--@{fa-css-prefix}-border-style, @{fa-border-style})';
border-width: ~'var(--@{fa-css-prefix}-border-width, @{fa-border-width})';
padding: ~'var(--@{fa-css-prefix}-border-padding, @{fa-border-padding})';
} }
.@{fa-css-prefix}-pull-left { float: left; } .@{fa-css-prefix}-pull-left {
.@{fa-css-prefix}-pull-right { float: right; } float: left;
margin-right: ~'var(--@{fa-css-prefix}-pull-margin, @{fa-pull-margin})';
.@{fa-css-prefix}, .fas, .far, .fal, .fab { }
&.@{fa-css-prefix}-pull-left { margin-right: .3em; }
&.@{fa-css-prefix}-pull-right { margin-left: .3em; } .@{fa-css-prefix}-pull-right {
float: right;
margin-left: ~'var(--@{fa-css-prefix}-pull-margin, @{fa-pull-margin})';
} }

View File

@ -1,12 +1,36 @@
// Base Class Definition // base icon class definition
// ------------------------- // -------------------------
.@{fa-css-prefix}, .fas, .far, .fal, .fad, .fab { .@{fa-css-prefix} {
font-family: ~"var(--@{fa-css-prefix}-style-family, '@{fa-style-family}')";
font-weight: ~'var(--@{fa-css-prefix}-style, @{fa-style})';
}
.@{fa-css-prefix}-solid,
.@{fa-css-prefix}-regular,
.@{fa-css-prefix}-brands,
.fas,
.far,
.fab,
.@{fa-css-prefix} {
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
display: inline-block; display: ~'var(--@{fa-css-prefix}-display, @{fa-display})';
font-style: normal; font-style: normal;
font-variant: normal; font-variant: normal;
text-rendering: auto; text-rendering: auto;
line-height: 1;
} }
.fas,
.@{fa-css-prefix}-classic,
.@{fa-css-prefix}-solid,
.far,
.@{fa-css-prefix}-regular {
font-family: 'Font Awesome 6 Free';
}
.fab,
.@{fa-css-prefix}-brands {
font-family: 'Font Awesome 6 Brands';
}

View File

@ -1,6 +1,7 @@
// Fixed Width Icons // fixed-width icons
// ------------------------- // -------------------------
.@{fa-css-prefix}-fw { .@{fa-css-prefix}-fw {
text-align: center; text-align: center;
width: (20em / 16); width: @fa-fw-width;
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +0,0 @@
// Icon Sizes
// -------------------------
.larger(@factor) when (@factor > 0) {
.larger((@factor - 1));
.@{fa-css-prefix}-@{factor}x {
font-size: (@factor * 1em);
}
}
/* makes the font 33% larger relative to the icon container */
.@{fa-css-prefix}-lg {
font-size: (4em / 3);
line-height: (3em / 4);
vertical-align: -.0667em;
}
.@{fa-css-prefix}-xs {
font-size: .75em;
}
.@{fa-css-prefix}-sm {
font-size: .875em;
}
.larger(10);

View File

@ -1,18 +1,18 @@
// List Icons // icons in a list
// ------------------------- // -------------------------
.@{fa-css-prefix}-ul { .@{fa-css-prefix}-ul {
list-style-type: none; list-style-type: none;
margin-left: (@fa-li-width * 5/4); margin-left: ~'var(--@{fa-css-prefix}-li-margin, @{fa-li-margin})';
padding-left: 0; padding-left: 0;
> li { position: relative; } > li { position: relative; }
} }
.@{fa-css-prefix}-li { .@{fa-css-prefix}-li {
left: -@fa-li-width; left: calc(~'var(--@{fa-css-prefix}-li-width, @{fa-li-width})' * -1);
position: absolute; position: absolute;
text-align: center; text-align: center;
width: @fa-li-width; width: ~'var(--@{fa-css-prefix}-li-width, @{fa-li-width})';
line-height: inherit; line-height: inherit;
} }

View File

@ -1,6 +1,7 @@
// Mixins // mixins
// -------------------------- // --------------------------
// base rendering for an icon
.fa-icon() { .fa-icon() {
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
@ -11,46 +12,67 @@
line-height: 1; line-height: 1;
} }
.fa-icon-rotate(@degrees, @rotation) { // sets relative font-sizing and alignment (in _sizing)
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; .fa-size(@font-size) {
transform: rotate(@degrees); font-size: (@font-size / @fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base
line-height: (1 / @font-size) * 1em; // sets the line-height of the icon back to that of it's parent
vertical-align: ((6 / @font-size) - (3 / 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender
} }
.fa-icon-flip(@horiz, @vert, @rotation) { // only display content to screen readers
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; // see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
transform: scale(@horiz, @vert); // see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
} .fa-sr-only() {
// Only display content to screen readers. A la Bootstrap 4.
//
// See: http://a11yproject.com/posts/how-to-hide-content/
.sr-only() {
border: 0;
clip: rect(0,0,0,0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute; position: absolute;
width: 1px; width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
} }
// Use in conjunction with .sr-only to only display content when it's focused. // use in conjunction with .sr-only to only display content when it's focused
// .fa-sr-only-focusable() {
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 &:not(:focus) {
// .fa-sr-only();
// Credit: HTML5 Boilerplate
.sr-only-focusable() {
&:active,
&:focus {
clip: auto;
height: auto;
margin: 0;
overflow: visible;
position: static;
width: auto;
} }
} }
// sets a specific icon family to use alongside style + icon mixins
.fa-family-classic() {
font-family: 'Font Awesome 6 Free';
}
// convenience mixins for declaring pseudo-elements by CSS variable,
// including all style-specific font properties, and both the ::before
// and ::after elements in the duotone case.
.fa-icon-solid(@fa-var) {
.fa-icon;
.fa-solid;
&::before {
content: @fa-var;
}
}
.fa-icon-regular(@fa-var) {
.fa-icon;
.fa-regular;
&::before {
content: @fa-var;
}
}
.fa-icon-brands(@fa-var) {
.fa-icon;
.fa-brands;
&::before {
content: @fa-var;
}
}

View File

@ -1,24 +1,31 @@
// Rotated & Flipped Icons // rotating + flipping icons
// ------------------------- // -------------------------
.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } .@{fa-css-prefix}-rotate-90 {
.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } transform: rotate(90deg);
.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } }
.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } .@{fa-css-prefix}-rotate-180 {
.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } transform: rotate(180deg);
.@{fa-css-prefix}-flip-both, .@{fa-css-prefix}-flip-horizontal.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(-1, -1, 2); } }
// Hook for IE8-9 .@{fa-css-prefix}-rotate-270 {
// ------------------------- transform: rotate(270deg);
}
:root {
.@{fa-css-prefix}-rotate-90, .@{fa-css-prefix}-flip-horizontal {
.@{fa-css-prefix}-rotate-180, transform: scale(-1, 1);
.@{fa-css-prefix}-rotate-270, }
.@{fa-css-prefix}-flip-horizontal,
.@{fa-css-prefix}-flip-vertical, .@{fa-css-prefix}-flip-vertical {
.@{fa-css-prefix}-flip-both { transform: scale(1, -1);
filter: none; }
}
.@{fa-css-prefix}-flip-both,
.@{fa-css-prefix}-flip-horizontal.@{fa-css-prefix}-flip-vertical {
transform: scale(-1, -1);
}
.@{fa-css-prefix}-rotate-by {
transform: rotate(~'var(--@{fa-css-prefix}-rotate-angle, 0)');
} }

View File

@ -1,5 +1,14 @@
// Screen Readers // screen-reader utilities
// ------------------------- // -------------------------
.sr-only { .sr-only(); } // only display content to screen readers
.sr-only-focusable { .sr-only-focusable(); } .sr-only,
.@{fa-css-prefix}-sr-only {
.fa-sr-only();
}
// use in conjunction with .sr-only to only display content when it's focused
.sr-only-focusable,
.@{fa-css-prefix}-sr-only-focusable {
.fa-sr-only-focusable();
}

File diff suppressed because it is too large Load Diff

19
resources/fontawesome/less/_sizing.less vendored Normal file
View File

@ -0,0 +1,19 @@
// sizing icons
// -------------------------
// literal magnification scale
.sizes-literal(@factor) when (@factor > 0) {
.sizes-literal((@factor - 1));
.@{fa-css-prefix}-@{factor}x {
font-size: (@factor * 1em);
}
}
.sizes-literal(10);
// step-based scale (with alignment)
each(.fa-sizes(), {
.@{fa-css-prefix}-@{key} {
.fa-size(@value);
}
});

View File

@ -1,4 +1,4 @@
// Stacked Icons // stacking icons
// ------------------------- // -------------------------
.@{fa-css-prefix}-stack { .@{fa-css-prefix}-stack {
@ -6,8 +6,8 @@
height: 2em; height: 2em;
line-height: 2em; line-height: 2em;
position: relative; position: relative;
vertical-align: middle; vertical-align: @fa-stack-vertical-align;
width: 2em; width: @fa-stack-width;
} }
.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
@ -15,8 +15,17 @@
position: absolute; position: absolute;
text-align: center; text-align: center;
width: 100%; width: 100%;
z-index: ~'var(--@{fa-css-prefix}-stack-z-index, @{fa-stack-z-index})';
} }
.@{fa-css-prefix}-stack-1x { line-height: inherit; } .@{fa-css-prefix}-stack-1x {
.@{fa-css-prefix}-stack-2x { font-size: 2em; } line-height: inherit;
.@{fa-css-prefix}-inverse { color: @fa-inverse; } }
.@{fa-css-prefix}-stack-2x {
font-size: 2em;
}
.@{fa-css-prefix}-inverse {
color: ~'var(--@{fa-css-prefix}-inverse, @{fa-inverse})';
}

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,29 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
@import "_variables.less"; @import "_variables.less";
@font-face { :root, :host {
font-family: 'Font Awesome 5 Brands'; --@{fa-css-prefix}-style-family-brands: 'Font Awesome 6 Brands';
font-style: normal; --@{fa-css-prefix}-font-brands: normal 400 1em/1 'Font Awesome 6 Brands';
font-weight: normal;
font-display: @fa-font-display;
src: url('@{fa-font-path}/fa-brands-400.eot');
src: url('@{fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'),
url('@{fa-font-path}/fa-brands-400.woff2') format('woff2'),
url('@{fa-font-path}/fa-brands-400.woff') format('woff'),
url('@{fa-font-path}/fa-brands-400.ttf') format('truetype'),
url('@{fa-font-path}/fa-brands-400.svg#fontawesome') format('svg');
} }
.fab { @font-face {
font-family: 'Font Awesome 5 Brands'; font-family: 'Font Awesome 6 Brands';
font-style: normal;
font-weight: 400;
font-display: @fa-font-display;
src: url('@{fa-font-path}/fa-brands-400.woff2') format('woff2'),
url('@{fa-font-path}/fa-brands-400.ttf') format('truetype');
} }
.fab,
.@{fa-css-prefix}-brands {
font-weight: 400;
}
each(.fa-brand-icons(), {
.@{fa-css-prefix}-@{key}:before { content: @value; }
});

View File

@ -1,11 +1,15 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
// Font Awesome core compile (Web Fonts-based)
// -------------------------
@import "_variables.less"; @import "_variables.less";
@import "_mixins.less"; @import "_mixins.less";
@import "_core.less"; @import "_core.less";
@import "_larger.less"; @import "_sizing.less";
@import "_fixed-width.less"; @import "_fixed-width.less";
@import "_list.less"; @import "_list.less";
@import "_bordered-pulled.less"; @import "_bordered-pulled.less";

View File

@ -1,23 +1,25 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
@import "_variables.less"; @import "_variables.less";
:root, :host {
--@{fa-css-prefix}-style-family-classic: '@{fa-style-family}';
--@{fa-css-prefix}-font-regular: normal 400 1em/1 '@{fa-style-family}';
}
@font-face { @font-face {
font-family: 'Font Awesome 5 Free'; font-family: 'Font Awesome 6 Free';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
font-display: @fa-font-display; font-display: @fa-font-display;
src: url('@{fa-font-path}/fa-regular-400.eot'); src: url('@{fa-font-path}/fa-regular-400.woff2') format('woff2'),
src: url('@{fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'), url('@{fa-font-path}/fa-regular-400.ttf') format('truetype');
url('@{fa-font-path}/fa-regular-400.woff2') format('woff2'),
url('@{fa-font-path}/fa-regular-400.woff') format('woff'),
url('@{fa-font-path}/fa-regular-400.ttf') format('truetype'),
url('@{fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');
} }
.far { .far,
font-family: 'Font Awesome 5 Free'; .@{fa-css-prefix}-regular {
font-weight: 400; font-weight: 400;
} }

View File

@ -1,24 +1,25 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
@import "_variables.less"; @import "_variables.less";
:root, :host {
--@{fa-css-prefix}-style-family-classic: '@{fa-style-family}';
--@{fa-css-prefix}-font-solid: normal 900 1em/1 '@{fa-style-family}';
}
@font-face { @font-face {
font-family: 'Font Awesome 5 Free'; font-family: 'Font Awesome 6 Free';
font-style: normal; font-style: normal;
font-weight: 900; font-weight: 900;
font-display: @fa-font-display; font-display: @fa-font-display;
src: url('@{fa-font-path}/fa-solid-900.eot'); src: url('@{fa-font-path}/fa-solid-900.woff2') format('woff2'),
src: url('@{fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'), url('@{fa-font-path}/fa-solid-900.ttf') format('truetype');
url('@{fa-font-path}/fa-solid-900.woff2') format('woff2'),
url('@{fa-font-path}/fa-solid-900.woff') format('woff'),
url('@{fa-font-path}/fa-solid-900.ttf') format('truetype'),
url('@{fa-font-path}/fa-solid-900.svg#fontawesome') format('svg');
} }
.fa, .fas,
.fas { .@{fa-css-prefix}-solid {
font-family: 'Font Awesome 5 Free';
font-weight: 900; font-weight: 900;
} }

View File

@ -1,6 +1,10 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
// V4 shims compile (Web Fonts-based)
// -------------------------
@import '_variables.less'; @import '_variables.less';
@import '_shims.less'; @import '_shims.less';

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,294 +1,646 @@
area-chart: area-chart:
name: chart-area name: chart-area
arrow-circle-o-down: arrow-circle-o-down:
name: arrow-alt-circle-down
prefix: far prefix: far
name: circle-down
arrow-circle-o-left: arrow-circle-o-left:
name: arrow-alt-circle-left
prefix: far prefix: far
name: circle-left
arrow-circle-o-right: arrow-circle-o-right:
name: arrow-alt-circle-right
prefix: far prefix: far
name: circle-right
arrow-circle-o-up: arrow-circle-o-up:
name: arrow-alt-circle-up
prefix: far prefix: far
name: circle-up
arrows: arrows:
name: arrows-alt name: up-down-left-right
arrows-alt: arrows-alt:
name: expand-arrows-alt name: maximize
arrows-h: arrows-h:
name: arrows-alt-h name: left-right
arrows-v: arrows-v:
name: arrows-alt-v name: up-down
asl-interpreting:
name: hands-asl-interpreting
automobile:
name: car
bank:
name: building-columns
bar-chart: bar-chart:
name: chart-bar name: chart-column
prefix: far bar-chart-o:
bitbucket-square: name: chart-column
name: bitbucket bathtub:
name: bath
battery:
name: battery-full
battery-0:
name: battery-empty
battery-1:
name: battery-quarter
battery-2:
name: battery-half
battery-3:
name: battery-three-quarters
battery-4:
name: battery-full
behance-square:
prefix: fab prefix: fab
name: square-behance
bitbucket-square:
prefix: fab
name: bitbucket
bitcoin:
prefix: fab
name: btc
cab:
name: taxi
calendar: calendar:
name: calendar-alt name: calendar-days
calendar-o: calendar-times-o:
name: calendar
prefix: far prefix: far
name: calendar-xmark
caret-square-o-down: caret-square-o-down:
name: caret-square-down
prefix: far prefix: far
name: square-caret-down
caret-square-o-left: caret-square-o-left:
name: caret-square-left
prefix: far prefix: far
name: square-caret-left
caret-square-o-right: caret-square-o-right:
name: caret-square-right
prefix: far prefix: far
name: square-caret-right
caret-square-o-up: caret-square-o-up:
name: caret-square-up
prefix: far prefix: far
name: square-caret-up
cc: cc:
name: closed-captioning
prefix: far prefix: far
name: closed-captioning
chain:
name: link
chain-broken: chain-broken:
name: unlink name: link-slash
check-circle-o:
prefix: far
name: circle-check
check-square-o:
prefix: far
name: square-check
circle-o-notch: circle-o-notch:
name: circle-notch name: circle-notch
circle-thin: circle-thin:
prefix: far
name: circle name: circle
prefix: far
clipboard: clipboard:
prefix: far name: paste
clone: clone:
prefix: far prefix: far
close:
name: xmark
cloud-download: cloud-download:
name: cloud-download-alt name: cloud-arrow-down
cloud-upload: cloud-upload:
name: cloud-upload-alt name: cloud-arrow-up
cny:
name: yen-sign
code-fork: code-fork:
name: code-branch name: code-branch
comment-alt:
name: comment-dots
prefix: far
commenting: commenting:
name: comment-dots name: comment-dots
commenting-o:
prefix: far
name: comment-dots
compass: compass:
prefix: far prefix: far
compress:
name: down-left-and-up-right-to-center
copyright: copyright:
prefix: far prefix: far
creative-commons:
prefix: fab
credit-card: credit-card:
prefix: far prefix: far
credit-card-alt: credit-card-alt:
name: credit-card name: credit-card
cut:
name: scissors
cutlery: cutlery:
name: utensils name: utensils
dashboard:
name: gauge-high
deafness:
name: ear-deaf
dedent:
name: outdent
diamond: diamond:
name: gem
prefix: far prefix: far
name: gem
dollar:
name: dollar-sign
dot-circle-o:
prefix: far
name: circle-dot
drivers-license:
name: id-card
drivers-license-o:
prefix: far
name: id-card
edit:
prefix: far
name: pen-to-square
eercast: eercast:
name: sellcast
prefix: fab prefix: fab
name: sellcast
eur: eur:
name: euro-sign name: euro-sign
euro:
name: euro-sign
exchange: exchange:
name: exchange-alt name: right-left
expand:
name: up-right-and-down-left-from-center
external-link: external-link:
name: external-link-alt name: up-right-from-square
external-link-square: external-link-square:
name: external-link-square-alt name: square-up-right
eye: eye:
prefix: far prefix: far
eye-dropper:
name: eye-dropper
prefix: far
eye-slash: eye-slash:
prefix: far prefix: far
eyedropper: eyedropper:
name: eye-dropper name: eye-dropper
fa:
prefix: fab
name: font-awesome
facebook: facebook:
prefix: fab
name: facebook-f name: facebook-f
facebook-f:
prefix: fab prefix: fab
name: facebook-f
facebook-official: facebook-official:
prefix: fab
name: facebook name: facebook
facebook-square:
prefix: fab prefix: fab
name: square-facebook
feed:
name: rss
file-archive-o:
prefix: far
name: file-zipper
file-movie-o:
prefix: far
name: file-video
file-photo-o:
prefix: far
name: file-image
file-picture-o:
prefix: far
name: file-image
file-sound-o:
prefix: far
name: file-audio
file-text: file-text:
name: file-alt name: file-lines
file-text-o:
prefix: far
name: file-lines
file-zip-o:
prefix: far
name: file-zipper
files-o: files-o:
prefix: far
name: copy name: copy
prefix: far flash:
name: bolt
floppy-o: floppy-o:
name: save
prefix: far prefix: far
name: floppy-disk
frown-o:
prefix: far
name: face-frown
gbp: gbp:
name: pound-sign name: sterling-sign
ge:
prefix: fab
name: empire
gear:
name: gear
gears:
name: gears
git-square:
prefix: fab
name: square-git
github-square:
prefix: fab
name: square-github
gittip:
prefix: fab
name: gratipay
glass: glass:
name: glass-martini name: martini-glass-empty
globe:
name: earth-americas
google-plus: google-plus:
prefix: fab
name: google-plus-g name: google-plus-g
prefix: fab
google-plus-circle: google-plus-circle:
name: google-plus
prefix: fab prefix: fab
name: google-plus
google-plus-official: google-plus-official:
name: google-plus
prefix: fab prefix: fab
name: google-plus
google-plus-square:
prefix: fab
name: square-google-plus
group:
name: users
hand-grab-o:
prefix: far
name: hand-back-fist
hand-o-down: hand-o-down:
prefix: far
name: hand-point-down name: hand-point-down
prefix: far
hand-o-left: hand-o-left:
prefix: far
name: hand-point-left name: hand-point-left
prefix: far
hand-o-right: hand-o-right:
prefix: far
name: hand-point-right name: hand-point-right
prefix: far
hand-o-up: hand-o-up:
name: hand-point-up
prefix: far prefix: far
name: hand-point-up
hand-paper-o:
prefix: far
name: hand
hand-rock-o:
prefix: far
name: hand-back-fist
hand-stop-o:
prefix: far
name: hand
hard-of-hearing:
name: ear-deaf
hdd-o:
prefix: far
name: hard-drive
header: header:
name: heading name: heading
home:
name: house
hotel:
name: bed
hourglass-1:
name: hourglass-start
hourglass-2:
name: hourglass-half
hourglass-3:
name: hourglass-end
hourglass-o:
name: hourglass
id-badge: id-badge:
prefix: far prefix: far
ils: ils:
name: shekel-sign name: shekel-sign
image:
prefix: far
name: image
inr: inr:
name: rupee-sign name: indian-rupee-sign
institution:
name: building-columns
intersex: intersex:
name: transgender name: mars-and-venus
jpy: jpy:
name: yen-sign name: yen-sign
krw: krw:
name: won-sign name: won-sign
lastfm-square:
prefix: fab
name: square-lastfm
legal:
name: gavel
level-down: level-down:
name: level-down-alt name: turn-down
level-up: level-up:
name: level-up-alt name: turn-up
life-ring: life-bouy:
prefix: far name: life-ring
life-buoy:
name: life-ring
life-saver:
name: life-ring
line-chart: line-chart:
name: chart-line name: chart-line
linkedin: linkedin:
prefix: fab
name: linkedin-in name: linkedin-in
prefix: fab
linkedin-square: linkedin-square:
name: linkedin
prefix: fab prefix: fab
name: linkedin
list-alt: list-alt:
prefix: far prefix: far
name: rectangle-list
long-arrow-down: long-arrow-down:
name: long-arrow-alt-down name: down-long
long-arrow-left: long-arrow-left:
name: long-arrow-alt-left name: left-long
long-arrow-right: long-arrow-right:
name: long-arrow-alt-right name: right-long
long-arrow-up: long-arrow-up:
name: long-arrow-alt-up name: up-long
magic:
name: wand-magic-sparkles
mail-forward:
name: share
mail-reply:
name: reply
mail-reply-all:
name: reply-all
map-marker: map-marker:
name: map-marker-alt name: location-dot
meanpath: meh-o:
name: font-awesome
prefix: fab
mobile:
name: mobile-alt
money:
name: money-bill-alt
prefix: far prefix: far
name: face-meh
minus-square-o:
prefix: far
name: square-minus
mobile:
name: mobile-screen-button
mobile-phone:
name: mobile-screen-button
money:
name: money-bill-1
mortar-board:
name: graduation-cap
navicon:
name: bars
object-group: object-group:
prefix: far prefix: far
object-ungroup: object-ungroup:
prefix: far prefix: far
paste: odnoklassniki-square:
prefix: fab
name: square-odnoklassniki
pause-circle-o:
prefix: far prefix: far
pencil: name: circle-pause
name: pencil-alt
pencil-square: pencil-square:
name: pen-square name: square-pen
pencil-square-o: pencil-square-o:
name: edit
prefix: far prefix: far
picture: name: pen-to-square
photo:
prefix: far
name: image
picture-o:
prefix: far
name: image name: image
pie-chart: pie-chart:
name: chart-pie name: chart-pie
pinterest-square:
prefix: fab
name: square-pinterest
play-circle-o:
prefix: far
name: circle-play
plus-square-o:
prefix: far
name: square-plus
question-circle-o:
prefix: far
name: circle-question
ra:
prefix: fab
name: rebel
reddit-square:
prefix: fab
name: square-reddit
refresh: refresh:
name: sync name: arrows-rotate
registered: registered:
prefix: far prefix: far
remove:
name: xmark
reorder:
name: bars
repeat: repeat:
name: redo name: arrow-rotate-right
resistance:
prefix: fab
name: rebel
rmb:
name: yen-sign
rotate-left:
name: arrow-rotate-left
rotate-right:
name: arrow-rotate-right
rouble:
name: ruble-sign
rub: rub:
name: ruble-sign name: ruble-sign
scissors: ruble:
name: cut name: ruble-sign
shield: rupee:
name: shield-alt name: indian-rupee-sign
s15:
name: bath
save:
prefix: far
name: floppy-disk
send:
name: paper-plane
send-o:
prefix: far
name: paper-plane
share-square-o:
name: share-from-square
shekel:
name: shekel-sign
sheqel:
name: shekel-sign
sign-in: sign-in:
name: sign-in-alt name: right-to-bracket
sign-out: sign-out:
name: sign-out-alt name: right-from-bracket
sliders: signing:
name: sliders-h name: hands
smile-o:
prefix: far
name: face-smile
snapchat-ghost:
prefix: fab
name: snapchat
snapchat-square:
prefix: fab
name: square-snapchat
soccer-ball-o:
prefix: far
name: futbol
sort-alpha-asc: sort-alpha-asc:
name: sort-alpha-down name: arrow-down-a-z
sort-alpha-desc: sort-alpha-desc:
name: sort-alpha-down-alt name: arrow-down-z-a
sort-amount-asc: sort-amount-asc:
name: sort-amount-down name: arrow-down-short-wide
sort-amount-desc: sort-amount-desc:
name: sort-amount-down-alt name: arrow-down-wide-short
sort-asc: sort-asc:
name: sort-up name: sort-up
sort-desc: sort-desc:
name: sort-down name: sort-down
sort-numeric-asc: sort-numeric-asc:
name: sort-numeric-down name: arrow-down-1-9
sort-numeric-desc: sort-numeric-desc:
name: sort-numeric-down-alt name: arrow-down-9-1
spoon:
name: utensil-spoon
star-half-empty: star-half-empty:
name: star-half prefix: far
name: star-half-stroke
star-half-full: star-half-full:
name: star-half prefix: far
name: star-half-stroke
star-half-o:
prefix: far
name: star-half-stroke
steam-square:
prefix: fab
name: square-steam
sticky-note-o:
prefix: far
name: note-sticky
stop-circle-o:
prefix: far
name: circle-stop
support: support:
name: life-ring name: life-ring
prefix: far
tablet: tablet:
name: tablet-alt name: tablet-screen-button
tachometer: tachometer:
name: tachometer-alt name: gauge-high
tasks:
name: bars-progress
television: television:
name: tv name: tv
thermometer:
name: temperature-full
thermometer-0:
name: temperature-empty
thermometer-1:
name: temperature-quarter
thermometer-2:
name: temperature-half
thermometer-3:
name: temperature-three-quarters
thermometer-4:
name: temperature-full
thumb-tack: thumb-tack:
name: thumbtack name: thumbtack
thumbs-o-down: thumbs-o-down:
prefix: far
name: thumbs-down name: thumbs-down
prefix: far
thumbs-o-up: thumbs-o-up:
prefix: far
name: thumbs-up name: thumbs-up
times-circle-o:
prefix: far prefix: far
ticket: name: circle-xmark
name: ticket-alt times-rectangle:
name: rectangle-xmark
times-rectangle-o:
prefix: far
name: rectangle-xmark
toggle-down:
prefix: far
name: square-caret-down
toggle-left:
prefix: far
name: square-caret-left
toggle-right:
prefix: far
name: square-caret-right
toggle-up:
prefix: far
name: square-caret-up
transgender:
name: mars-and-venus
transgender-alt:
name: transgender
trash: trash:
name: trash-alt name: trash-can
trash-o: trash-o:
name: trash-alt
prefix: far prefix: far
name: trash-can
try: try:
name: lira-sign name: turkish-lira-sign
tumblr-square:
prefix: fab
name: square-tumblr
turkish-lira:
name: turkish-lira-sign
twitter-square:
prefix: fab
name: square-twitter
unlink:
name: link-slash
unlock-alt:
name: unlock
unsorted:
name: sort
usd: usd:
name: dollar-sign name: dollar-sign
user-circle-o:
prefix: far
name: circle-user
vcard:
name: address-card
vcard-o:
prefix: far
name: address-card
viadeo-square:
prefix: fab
name: square-viadeo
video-camera: video-camera:
name: video name: video
vimeo: vimeo:
name: vimeo-v
prefix: fab prefix: fab
name: vimeo-v
vimeo-square:
prefix: fab
name: square-vimeo
volume-control-phone: volume-control-phone:
name: phone-volume name: phone-volume
wheelchair-alt: warning:
name: accessible-icon name: triangle-exclamation
wechat:
prefix: fab prefix: fab
name: weixin
wheelchair-alt:
prefix: fab
name: accessible-icon
window-close-o:
prefix: far
name: rectangle-xmark
window-maximize: window-maximize:
prefix: far prefix: far
window-restore: window-restore:
prefix: far prefix: far
youtube-play: won:
name: youtube name: won-sign
xing-square:
prefix: fab prefix: fab
name: square-xing
y-combinator-square:
prefix: fab
name: hacker-news
yc:
prefix: fab
name: y-combinator
yc-square:
prefix: fab
name: hacker-news
yen:
name: yen-sign
youtube-play:
prefix: fab
name: youtube
youtube-square:
prefix: fab
name: square-youtube

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +1,152 @@
// Animated Icons // animating icons
// -------------------------- // --------------------------
.#{$fa-css-prefix}-beat {
animation-name: #{$fa-css-prefix}-beat;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);
}
.#{$fa-css-prefix}-bounce {
animation-name: #{$fa-css-prefix}-bounce;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(0.280, 0.840, 0.420, 1));
}
.#{$fa-css-prefix}-fade {
animation-name: #{$fa-css-prefix}-fade;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1));
}
.#{$fa-css-prefix}-beat-fade {
animation-name: #{$fa-css-prefix}-beat-fade;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1));
}
.#{$fa-css-prefix}-flip {
animation-name: #{$fa-css-prefix}-flip;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);
}
.#{$fa-css-prefix}-shake {
animation-name: #{$fa-css-prefix}-shake;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);
}
.#{$fa-css-prefix}-spin { .#{$fa-css-prefix}-spin {
animation: fa-spin 2s infinite linear; animation-name: #{$fa-css-prefix}-spin;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 2s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);
} }
.#{$fa-css-prefix}-pulse { .#{$fa-css-prefix}-spin-reverse {
animation: fa-spin 1s infinite steps(8); --#{$fa-css-prefix}-animation-direction: reverse;
} }
@keyframes fa-spin { .#{$fa-css-prefix}-pulse,
0% { .#{$fa-css-prefix}-spin-pulse {
transform: rotate(0deg); animation-name: #{$fa-css-prefix}-spin;
} animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, steps(8));
}
100% { // if agent or operating system prefers reduced motion, disable animations
transform: rotate(360deg); // see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/
// see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion
@media (prefers-reduced-motion: reduce) {
.#{$fa-css-prefix}-beat,
.#{$fa-css-prefix}-bounce,
.#{$fa-css-prefix}-fade,
.#{$fa-css-prefix}-beat-fade,
.#{$fa-css-prefix}-flip,
.#{$fa-css-prefix}-pulse,
.#{$fa-css-prefix}-shake,
.#{$fa-css-prefix}-spin,
.#{$fa-css-prefix}-spin-pulse {
animation-delay: -1ms;
animation-duration: 1ms;
animation-iteration-count: 1;
transition-delay: 0s;
transition-duration: 0s;
} }
} }
@keyframes #{$fa-css-prefix}-beat {
0%, 90% { transform: scale(1); }
45% { transform: scale(var(--#{$fa-css-prefix}-beat-scale, 1.25)); }
}
@keyframes #{$fa-css-prefix}-bounce {
0% { transform: scale(1,1) translateY(0); }
10% { transform: scale(var(--#{$fa-css-prefix}-bounce-start-scale-x, 1.1),var(--#{$fa-css-prefix}-bounce-start-scale-y, 0.9)) translateY(0); }
30% { transform: scale(var(--#{$fa-css-prefix}-bounce-jump-scale-x, 0.9),var(--#{$fa-css-prefix}-bounce-jump-scale-y, 1.1)) translateY(var(--#{$fa-css-prefix}-bounce-height, -0.5em)); }
50% { transform: scale(var(--#{$fa-css-prefix}-bounce-land-scale-x, 1.05),var(--#{$fa-css-prefix}-bounce-land-scale-y, 0.95)) translateY(0); }
57% { transform: scale(1,1) translateY(var(--#{$fa-css-prefix}-bounce-rebound, -0.125em)); }
64% { transform: scale(1,1) translateY(0); }
100% { transform: scale(1,1) translateY(0); }
}
@keyframes #{$fa-css-prefix}-fade {
50% { opacity: var(--#{$fa-css-prefix}-fade-opacity, 0.4); }
}
@keyframes #{$fa-css-prefix}-beat-fade {
0%, 100% {
opacity: var(--#{$fa-css-prefix}-beat-fade-opacity, 0.4);
transform: scale(1);
}
50% {
opacity: 1;
transform: scale(var(--#{$fa-css-prefix}-beat-fade-scale, 1.125));
}
}
@keyframes #{$fa-css-prefix}-flip {
50% {
transform: rotate3d(var(--#{$fa-css-prefix}-flip-x, 0), var(--#{$fa-css-prefix}-flip-y, 1), var(--#{$fa-css-prefix}-flip-z, 0), var(--#{$fa-css-prefix}-flip-angle, -180deg));
}
}
@keyframes #{$fa-css-prefix}-shake {
0% { transform: rotate(-15deg); }
4% { transform: rotate(15deg); }
8%, 24% { transform: rotate(-18deg); }
12%, 28% { transform: rotate(18deg); }
16% { transform: rotate(-22deg); }
20% { transform: rotate(22deg); }
32% { transform: rotate(-12deg); }
36% { transform: rotate(12deg); }
40%, 100% { transform: rotate(0deg); }
}
@keyframes #{$fa-css-prefix}-spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}

View File

@ -1,20 +1,20 @@
// Bordered & Pulled // bordered + pulled icons
// ------------------------- // -------------------------
.#{$fa-css-prefix}-border { .#{$fa-css-prefix}-border {
border: solid .08em $fa-border-color; border-color: var(--#{$fa-css-prefix}-border-color, #{$fa-border-color});
border-radius: .1em; border-radius: var(--#{$fa-css-prefix}-border-radius, #{$fa-border-radius});
padding: .2em .25em .15em; border-style: var(--#{$fa-css-prefix}-border-style, #{$fa-border-style});
border-width: var(--#{$fa-css-prefix}-border-width, #{$fa-border-width});
padding: var(--#{$fa-css-prefix}-border-padding, #{$fa-border-padding});
} }
.#{$fa-css-prefix}-pull-left { float: left; } .#{$fa-css-prefix}-pull-left {
.#{$fa-css-prefix}-pull-right { float: right; } float: left;
margin-right: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin});
.#{$fa-css-prefix}, }
.fas,
.far, .#{$fa-css-prefix}-pull-right {
.fal, float: right;
.fab { margin-left: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin});
&.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
&.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
} }

View File

@ -1,21 +1,43 @@
// Base Class Definition // base icon class definition
// ------------------------- // -------------------------
.#{$fa-css-prefix}, .#{$fa-css-prefix} {
font-family: var(--#{$fa-css-prefix}-style-family, '#{$fa-style-family}');
font-weight: var(--#{$fa-css-prefix}-style, #{$fa-style});
}
.#{$fa-css-prefix}-solid,
.#{$fa-css-prefix}-regular,
.#{$fa-css-prefix}-brands,
.fas, .fas,
.far, .far,
.fal, .fab,
.fad, .#{$fa-css-prefix}-sharp-solid,
.fab { .#{$fa-css-prefix}-classic,
.#{$fa-css-prefix} {
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
display: inline-block; display: var(--#{$fa-css-prefix}-display, #{$fa-display});
font-style: normal; font-style: normal;
font-variant: normal; font-variant: normal;
text-rendering: auto;
line-height: 1; line-height: 1;
text-rendering: auto;
} }
.fas,
.#{$fa-css-prefix}-classic,
.#{$fa-css-prefix}-solid,
.far,
.#{$fa-css-prefix}-regular {
font-family: 'Font Awesome 6 Free';
}
.fab,
.#{$fa-css-prefix}-brands {
font-family: 'Font Awesome 6 Brands';
}
%fa-icon { %fa-icon {
@include fa-icon; @include fa-icon;
} }

View File

@ -1,5 +1,6 @@
// Fixed Width Icons // fixed-width icons
// ------------------------- // -------------------------
.#{$fa-css-prefix}-fw { .#{$fa-css-prefix}-fw {
text-align: center; text-align: center;
width: $fa-fw-width; width: $fa-fw-width;

View File

@ -0,0 +1,57 @@
// functions
// --------------------------
// fa-content: convenience function used to set content property
@function fa-content($fa-var) {
@return unquote("\"#{ $fa-var }\"");
}
// fa-divide: Originally obtained from the Bootstrap https://github.com/twbs/bootstrap
//
// Licensed under: The MIT License (MIT)
//
// Copyright (c) 2011-2021 Twitter, Inc.
// Copyright (c) 2011-2021 The Bootstrap Authors
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
@function fa-divide($dividend, $divisor, $precision: 10) {
$sign: if($dividend > 0 and $divisor > 0, 1, -1);
$dividend: abs($dividend);
$divisor: abs($divisor);
$quotient: 0;
$remainder: $dividend;
@if $dividend == 0 {
@return 0;
}
@if $divisor == 0 {
@error "Cannot divide by 0";
}
@if $divisor == 1 {
@return $dividend;
}
@while $remainder >= $divisor {
$quotient: $quotient + 1;
$remainder: $remainder - $divisor;
}
@if $remainder > 0 and $precision > 0 {
$remainder: fa-divide($remainder * 10, $divisor, $precision - 1) * .1;
}
@return ($quotient + $remainder) * $sign;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +0,0 @@
// Icon Sizes
// -------------------------
// makes the font 33% larger relative to the icon container
.#{$fa-css-prefix}-lg {
font-size: (4em / 3);
line-height: (3em / 4);
vertical-align: -.0667em;
}
.#{$fa-css-prefix}-xs {
font-size: .75em;
}
.#{$fa-css-prefix}-sm {
font-size: .875em;
}
@for $i from 1 through 10 {
.#{$fa-css-prefix}-#{$i}x {
font-size: $i * 1em;
}
}

View File

@ -1,18 +1,18 @@
// List Icons // icons in a list
// ------------------------- // -------------------------
.#{$fa-css-prefix}-ul { .#{$fa-css-prefix}-ul {
list-style-type: none; list-style-type: none;
margin-left: $fa-li-width * 5/4; margin-left: var(--#{$fa-css-prefix}-li-margin, #{$fa-li-margin});
padding-left: 0; padding-left: 0;
> li { position: relative; } > li { position: relative; }
} }
.#{$fa-css-prefix}-li { .#{$fa-css-prefix}-li {
left: -$fa-li-width; left: calc(-1 * var(--#{$fa-css-prefix}-li-width, #{$fa-li-width}));
position: absolute; position: absolute;
text-align: center; text-align: center;
width: $fa-li-width; width: var(--#{$fa-css-prefix}-li-width, #{$fa-li-width});
line-height: inherit; line-height: inherit;
} }

View File

@ -1,6 +1,7 @@
// Mixins // mixins
// -------------------------- // --------------------------
// base rendering for an icon
@mixin fa-icon { @mixin fa-icon {
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
@ -11,46 +12,61 @@
line-height: 1; line-height: 1;
} }
@mixin fa-icon-rotate($degrees, $rotation) { // sets relative font-sizing and alignment (in _sizing)
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; @mixin fa-size ($font-size) {
transform: rotate($degrees); font-size: fa-divide($font-size, $fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base
line-height: fa-divide(1, $font-size) * 1em; // sets the line-height of the icon back to that of it's parent
vertical-align: (fa-divide(6, $font-size) - fa-divide(3, 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender
} }
@mixin fa-icon-flip($horiz, $vert, $rotation) { // only display content to screen readers
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; // see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
transform: scale($horiz, $vert); // see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
} @mixin fa-sr-only() {
// Only display content to screen readers. A la Bootstrap 4.
//
// See: http://a11yproject.com/posts/how-to-hide-content/
@mixin sr-only {
border: 0;
clip: rect(0, 0, 0, 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute; position: absolute;
width: 1px; width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
} }
// Use in conjunction with .sr-only to only display content when it's focused. // use in conjunction with .sr-only to only display content when it's focused
// @mixin fa-sr-only-focusable() {
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 &:not(:focus) {
// @include fa-sr-only();
// Credit: HTML5 Boilerplate }
}
@mixin sr-only-focusable {
&:active, // sets a specific icon family to use alongside style + icon mixins
&:focus {
clip: auto; // convenience mixins for declaring pseudo-elements by CSS variable,
height: auto; // including all style-specific font properties, and both the ::before
margin: 0; // and ::after elements in the duotone case.
overflow: visible; @mixin fa-icon-solid($fa-var) {
position: static; @extend %fa-icon;
width: auto; @extend .fa-solid;
&::before {
content: unquote("\"#{ $fa-var }\"");
}
}
@mixin fa-icon-regular($fa-var) {
@extend %fa-icon;
@extend .fa-regular;
&::before {
content: unquote("\"#{ $fa-var }\"");
}
}
@mixin fa-icon-brands($fa-var) {
@extend %fa-icon;
@extend .fa-brands;
&::before {
content: unquote("\"#{ $fa-var }\"");
} }
} }

View File

@ -1,24 +1,31 @@
// Rotated & Flipped Icons // rotating + flipping icons
// ------------------------- // -------------------------
.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } .#{$fa-css-prefix}-rotate-90 {
.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } transform: rotate(90deg);
.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } }
.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } .#{$fa-css-prefix}-rotate-180 {
.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } transform: rotate(180deg);
.#{$fa-css-prefix}-flip-both, .#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(-1, -1, 2); } }
// Hook for IE8-9 .#{$fa-css-prefix}-rotate-270 {
// ------------------------- transform: rotate(270deg);
}
:root {
.#{$fa-css-prefix}-rotate-90, .#{$fa-css-prefix}-flip-horizontal {
.#{$fa-css-prefix}-rotate-180, transform: scale(-1, 1);
.#{$fa-css-prefix}-rotate-270, }
.#{$fa-css-prefix}-flip-horizontal,
.#{$fa-css-prefix}-flip-vertical, .#{$fa-css-prefix}-flip-vertical {
.#{$fa-css-prefix}-flip-both { transform: scale(1, -1);
filter: none; }
}
.#{$fa-css-prefix}-flip-both,
.#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical {
transform: scale(-1, -1);
}
.#{$fa-css-prefix}-rotate-by {
transform: rotate(var(--#{$fa-css-prefix}-rotate-angle, 0));
} }

View File

@ -1,5 +1,14 @@
// Screen Readers // screen-reader utilities
// ------------------------- // -------------------------
.sr-only { @include sr-only; } // only display content to screen readers
.sr-only-focusable { @include sr-only-focusable; } .sr-only,
.#{$fa-css-prefix}-sr-only {
@include fa-sr-only;
}
// use in conjunction with .sr-only to only display content when it's focused
.sr-only-focusable,
.#{$fa-css-prefix}-sr-only-focusable {
@include fa-sr-only-focusable;
}

File diff suppressed because it is too large Load Diff

16
resources/fontawesome/scss/_sizing.scss vendored Normal file
View File

@ -0,0 +1,16 @@
// sizing icons
// -------------------------
// literal magnification scale
@for $i from 1 through 10 {
.#{$fa-css-prefix}-#{$i}x {
font-size: $i * 1em;
}
}
// step-based scale (with alignment)
@each $size, $value in $fa-sizes {
.#{$fa-css-prefix}-#{$size} {
@include fa-size($value);
}
}

View File

@ -1,4 +1,4 @@
// Stacked Icons // stacking icons
// ------------------------- // -------------------------
.#{$fa-css-prefix}-stack { .#{$fa-css-prefix}-stack {
@ -6,8 +6,8 @@
height: 2em; height: 2em;
line-height: 2em; line-height: 2em;
position: relative; position: relative;
vertical-align: middle; vertical-align: $fa-stack-vertical-align;
width: ($fa-fw-width*2); width: $fa-stack-width;
} }
.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-1x,
@ -16,6 +16,7 @@
position: absolute; position: absolute;
text-align: center; text-align: center;
width: 100%; width: 100%;
z-index: var(--#{$fa-css-prefix}-stack-z-index, #{$fa-stack-z-index});
} }
.#{$fa-css-prefix}-stack-1x { .#{$fa-css-prefix}-stack-1x {
@ -27,5 +28,5 @@
} }
.#{$fa-css-prefix}-inverse { .#{$fa-css-prefix}-inverse {
color: $fa-inverse; color: var(--#{$fa-css-prefix}-inverse, #{$fa-inverse});
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,30 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
@import 'functions';
@import 'variables'; @import 'variables';
@font-face { :root, :host {
font-family: 'Font Awesome 5 Brands'; --#{$fa-css-prefix}-style-family-brands: 'Font Awesome 6 Brands';
font-style: normal; --#{$fa-css-prefix}-font-brands: normal 400 1em/1 'Font Awesome 6 Brands';
font-weight: normal;
font-display: $fa-font-display;
src: url('#{$fa-font-path}/fa-brands-400.eot');
src: url('#{$fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'),
url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'),
url('#{$fa-font-path}/fa-brands-400.woff') format('woff'),
url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype'),
url('#{$fa-font-path}/fa-brands-400.svg#fontawesome') format('svg');
} }
.fab { @font-face {
font-family: 'Font Awesome 5 Brands'; font-family: 'Font Awesome 6 Brands';
font-style: normal;
font-weight: 400;
font-display: $fa-font-display;
src: url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'),
url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype');
}
.fab,
.#{$fa-css-prefix}-brands {
font-weight: 400;
}
@each $name, $icon in $fa-brand-icons {
.#{$fa-css-prefix}-#{$name}:before { content: unquote("\"#{ $icon }\""); }
} }

View File

@ -1,11 +1,16 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
// Font Awesome core compile (Web Fonts-based)
// -------------------------
@import 'functions';
@import 'variables'; @import 'variables';
@import 'mixins'; @import 'mixins';
@import 'core'; @import 'core';
@import 'larger'; @import 'sizing';
@import 'fixed-width'; @import 'fixed-width';
@import 'list'; @import 'list';
@import 'bordered-pulled'; @import 'bordered-pulled';

View File

@ -1,23 +1,27 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
@import 'functions';
@import 'variables'; @import 'variables';
:root, :host {
--#{$fa-css-prefix}-style-family-classic: '#{ $fa-style-family }';
--#{$fa-css-prefix}-font-regular: normal 400 1em/1 '#{ $fa-style-family }';
}
@font-face { @font-face {
font-family: 'Font Awesome 5 Free'; font-family: 'Font Awesome 6 Free';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
font-display: $fa-font-display; font-display: $fa-font-display;
src: url('#{$fa-font-path}/fa-regular-400.eot'); src: url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'), url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype');
url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
url('#{$fa-font-path}/fa-regular-400.woff') format('woff'),
url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'),
url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');
} }
.far { .far,
font-family: 'Font Awesome 5 Free'; .#{$fa-css-prefix}-regular {
font-weight: 400; font-weight: 400;
} }

View File

@ -1,24 +1,27 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
@import 'functions';
@import 'variables'; @import 'variables';
:root, :host {
--#{$fa-css-prefix}-style-family-classic: '#{ $fa-style-family }';
--#{$fa-css-prefix}-font-solid: normal 900 1em/1 '#{ $fa-style-family }';
}
@font-face { @font-face {
font-family: 'Font Awesome 5 Free'; font-family: 'Font Awesome 6 Free';
font-style: normal; font-style: normal;
font-weight: 900; font-weight: 900;
font-display: $fa-font-display; font-display: $fa-font-display;
src: url('#{$fa-font-path}/fa-solid-900.eot'); src: url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
src: url('#{$fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'), url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype');
url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
url('#{$fa-font-path}/fa-solid-900.woff') format('woff'),
url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'),
url('#{$fa-font-path}/fa-solid-900.svg#fontawesome') format('svg');
} }
.fa, .fas,
.fas { .#{$fa-css-prefix}-solid {
font-family: 'Font Awesome 5 Free';
font-weight: 900; font-weight: 900;
} }

View File

@ -1,6 +1,11 @@
/*! /*!
* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/ */
// V4 shims compile (Web Fonts-based)
// -------------------------
@import 'functions';
@import 'variables'; @import 'variables';
@import 'shims'; @import 'shims';

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 431 KiB

After

Width:  |  Height:  |  Size: 496 KiB

Some files were not shown because too many files have changed in this diff Show More