diff --git a/.gitignore b/.gitignore index 58b6e881..83463ccc 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,14 @@ wwwroot/dist/ @mf-types.zip @mf-types/ .mf/ + +# Playwright MCP artifacts +.playwright-mcp/ +*.png +smoke-page*.png +angular-start.png +react-*.png +onlineboard-*.png + +# Coverage output +coverage/ diff --git a/docs/flight-map.md b/docs/flight-map.md new file mode 100644 index 00000000..0178a859 --- /dev/null +++ b/docs/flight-map.md @@ -0,0 +1,316 @@ + + +**ФУНКЦИОНАЛЬНЫЕ ТРЕБОВАНИЯ** + +Раздел «Карта полетов» в системе «Онлайн-Табло и Расписание + +**1.**       **Термины и** **определения** + +| | | +|---|---| +|**Сокращение**|**Определение**| +|Заказчик|ПАО «Аэрофлот»| +|Исполнитель|ООО «ТИМ»| +|Категория города|Классификация городов по определённым признакам, используемая для их отображения на карте в зависимости от масштаба| +|ОС|Операционная система| +|ПАО «Аэрофлот»|Публичное акционерное общество «Аэрофлот – российские авиалинии», он же Заказчик| +|ПО|Программное обеспечение| +|Пользователь|Физическое лицо, осуществляющее бронирование авиабилета и дополнительных услуг через основной сайт| +|Сайт|Основной сайт ПАО «Аэрофлот» http://www.aeroflot.ru| +|Система|Система сбора, обработки и предоставления актуальной информации о фактическом выполнении рейсов ПАО «Аэрофлот» в режиме реального времени, а также представление информации о движении (расписание) рейсов ПАО «Аэрофлот».| +|Тайл|Квадратный фрагмент цифровой карты фиксированного масштаба| +|ФТ|Функциональные требования| +|API|Интерфейс программирования приложений, интерфейс прикладного программирования) — набор готовых классов, процедур, функций, структур и констант, предоставляемых приложением (библиотекой, сервисом) или операционной системой для использования во внешних программных продуктах| +|IATA|Международная ассоциация воздушного транспорта (International Air Transport Association)| +|QGIS|Геоинформационная система для подготовки картографических тайлов| +|S3 (Simple Storage Service)|Сервис, где хранятся цифровые данные большого объема. Работает по одноименному протоколу. S3 – это вариант «плоского» (не иерархического) хранилища. С точки зрения системы все объекты равнозначны, поэтому в S3-хранилище удобно долго хранить разнородную информацию и быстро получать к ней доступ| + +**2.**       **Основные положения** + +**Цель изменений** + +Карта полетов предназначена для наглядного отображения маршрутной сети авиакомпании ПАО «Аэрофлот». С её помощью пользователи смогут визуально оценить географическое покрытие рейсов, узнать, какие города доступны для вылета и прилёта, а также перейти к бронированию на интересующее направление. + +Внедрение интерактивной карты полётов на сайте авиакомпании повысит прозрачность маршрутной сети для клиентов, улучшит взаимодействие с пользователями и станет дополнительным элементом продвижения доступных направлений. + +В рамках задачи будет разработан и добавлен новый раздел «Карта полетов» в Систему «Онлайн-Табло и Расписание». + +## Описание целевых бизнес-процессов + +## Бизнес-процесс «Первое открытие раздела» + +Пользователь открывает раздел «Карта полетов». + +Система запрашивает разрешение на определение местоположения. + +Пользователь разрешает определить свое местоположение: + +Система автоматически определяет ближайший к пользователю аэропорт, из которого выполняются рейсы авиакомпании Аэрофлот, и заполняет поле «Город вылета». + +На карте строятся дуги маршрутов. Поле «Город прилета» заполнено плейсхолдером «Куда». + +Переключатели «Внутренние рейсы» и «Международные внутренние рейсы» не выбраны. + +Переключатель «Показать только рейсы с пересадкой» заблокирован. + +Поле «Дата рейса» заполняется ближайшим днем выполнения рейсов, начиная с текущей даты. + +Пользователь запрещает определить свое местоположение: + +Поля «Город вылета» и «Город прилета» заполнены плейсхолдерами «Откуда» и «Куда» соответственно. + +Переключатели «Внутренние рейсы», «Международные регулярные рейсы» и «Показать только рейсы с пересадкой» заблокированы. + +Поле «Дата рейса» заполнено плейсхолдером «ДД.ММ.ГГГГ». + +## Бизнес-процесс «Выбор маршрута с помощью карты» + +Пользователь открывает раздел «Карта полетов». Поля «Город вылета» и «Город прилета» пусты. + +Первый клик: Пользователь нажимает на город на карте (например, Москва). Система заполняет поле «Город вылета» значением «Москва», выделяет город на карте оранжевой точкой, отображая дуги ко всем доступным для прилета городам. Переключатели «Внутренние рейсы» и «Международные регулярные рейсы» становятся доступны. Поле «Дата рейса» заполняется ближайшим днем выполнения рейсов из города вылета, начиная с текущей даты. + +Второй клик: Пользователь нажимает на другой город на карте (например, Самара). Система заполняет поле «Город прилета» значением «Самара», строит дугу маршрута «Москва - Самара», переключатель «Показать только рейсы с пересадкой» становится доступен, поле «Дата рейса» заполняется ближайшим днем выполнения рейсов по выбранному маршруту, начиная с текущей даты. Над городом прилета отображает окно с кнопкой «Купить билет». + +Третий клик: Пользователь нажимает на город на карте (например, Санкт-Петербург). Система очищает поля «Город вылета» и «Город прилета», после чего заполняет поле «Город вылета» значением «Санкт-Петербург» и снова отображает дуги ко всем доступным городам. Переключатели «Внутренние рейсы» и «Международные регулярные рейсы» становятся доступны, переключатель «Показать только рейсы с пересадкой» блокируется. Поле «Дата рейса» заполняется ближайшим днем выполнения рейсов для заданного города вылета, начиная с текущей даты. + +## Бизнес-процесс «Масштабирование и навигация» + +Пользователь открывает раздел «Карта полетов». + +Пользователь масштабирует карту колесом мыши, кнопками «+» и «-», расположенными в левом верхнем углу карты или жестами на мобильном устройстве. + +При изменении масштаба система отображает города в соответствии с их категорией (см. Раздел 3.2 Требования к визуальной интерактивной карте). + +## Бизнес-процесс «Фильтрация рейсов» + +Пользователь открывает раздел «Карта полетов». + +Пользователь заполняет поле «Город вылета». + +Становятся доступны переключатели: + +«Внутренние рейсы» – при активации отображаются только маршруты, выполняемые внутри территории России. Международные направления скрываются. + +«Международные регулярные рейсы» – отображаются маршруты, имеющие в качестве одного из пунктов за пределами России. Внутренние направления скрываются. + +Пользователь заполняет поле «Город прилета». + +Становится доступен переключатель: + +«Показать только рейсы с пересадкой» – система скрывает прямые маршруты и показывает рейсы с возможной стыковкой, отображая такие рейсы на карте пунктирными линиями. + +Если между городами нет прямых рейсов, то переключатель «Показать только рейсы с пересадкой» включается автоматически. + +## Бизнес-процесс «Выбор даты рейса» + +Пользователь открывает раздел «Карта полетов». Поля «Город вылета» и «Город прилета» пусты, поле «Дата рейса» заполнено плейсхолдером «ДД.ММ.ГГГГ», выбор дней в календаре заблокирован. + +Пользователь заполняет поле «Город вылета» или выбирает маршрут. Поле «Дата рейса» заполняется ближайшим днем выполнения рейсов. Выбор дней в календаре становится доступен. + +Пользователь может изменить автоматически подставленную дату, выбрав другую из календаря или введя её вручную. В календаре недоступны для выбора дни, в которые не выполняются рейсы (см. Раздел Ограничения для задачи). + +Система отображает выбранную дату в формате ДД.ММ.ГГГГ. + +Если дата совпадает с текущей – поле «Дата рейса» заполняется значением «Сегодня»; если с завтрашней – «Завтра». + +Пользователь может очистить поле посимвольно или целиком (нажатие на крестик). + +## Ограничения для задачи:    + +Дни в календаре атрибута «Дата вылета» не должны быть доступны для выбора пока пользователь не заполнит атрибут «Город вылета» или маршрут полностью. + +Если пользователь сменил местами значение «Город вылета» и «Горд прилета» и при этом значение «Город вылета» стало не заполнено – то дни в календаре атрибута «Дата вылета» не должны быть доступны для выбора. Аналогичное поведение должно распространятся на кнопки-дни «Сегодня», «Завтра», «Послезавтра» мобильной версии. + +Диапазон дат для выбора в календаре в поле «Дата вылета» ограничен от -1 дня до +6 месяцев от текущей даты. + +На календаре в поле «Дата вылета» дни, в которых не выполняются рейсы из заданного города вылета или маршрута, блокируются. + +Фильтры «Внутренние рейсы» и «Международные регулярные рейсы» взаимоисключающие. + +Фильтр «Показать только рейсы с пересадкой» активируется только после выбора городов вылета и прилета. + +Фильтр «Показать только рейсы с пересадкой» должен отображать только рейсы с пересадкой, прямые рейсы при этом перестают отображаться на карте. + +Города на карте должны отображаться в зависимости от категории города и уровня масштабирования (см. Раздел 3.2 Требования к визуальной интерактивной карте). + +При выборе маршрута на карте остаются видны только названия городов вылета, прилета и города с возможной стыковкой, остальные названия городов скрываются. + +## Направления работ: + +Дополнение Системы «Онлайн-Табло и Расписание» новым разделом «Карта полетов» согласно целевым бизнес-процессам и требованиям к их реализации, описанным в соответствующих пунктах данного документа. + +**3.**       **Требования** + +## 3.1 Требования к API + +Сервис будет работать на основе внутреннего API с архитектурным стилем REST. Вызов сервисов будет осуществляться с помощью GET запросов по протоколу HTTPS, необходимые параметры передаются в строке запроса. Для работы раздела будет использовано несколько сервисов: API тайлов, API для получения координат городов, API маршрутов и API календаря. + +·       API тайлов карты. + +Сервис, который отдает изображения карты с помощью метода GET /map/api/tiles/{z}/{x}/{y}.jpg, где z, x, y это координаты и уровень масштабирования тайла. Данный сервис кэширует тайлы на 6 часов для ускорения повторной отдачи. + +·       API координат городов. + +Отдельный внутренний API, из которого фронтенд получает координаты городов по их IATA-коду для отрисовки точек на карте. + +·       API маршрутов. + +Для работы данного сервиса будет переиспользоваться существующее API от «Онлайн-Табло и Расписание». Метод GET /api/flights/1/ru/destinations возвращает список доступных направлений из указанного города вылета, выполняет проверку наличия прямых рейсов между городами вылета и прилета, а также возвращает список маршрутов при поиске рейсов с пересадкой. + +В качестве параметров запроса передаются: + +-      departure – IATA-код города или аэропорта вылета; + +-      arrival – IATA-код города или аэропорта прилета; + +-      dateFrom/dateTo – Диапазон дат для поиска маршрутов в формате yyyy-MM-dd, где yyyy - год, MM – месяц, dd – день. Даты заполняются от -1 дня до +6 месяцев от текущей даты; + +-      connections – количество пересадок. + +В качестве ответа поступает массив routes, содержащий проверку наличия прямых рейсов и IATA-коды аэропортов городов маршрута. + +·       API календаря. + +Для работы данного сервиса будет переиспользоваться существующее API от «Онлайн-Табло и Расписание». Метод GET /api/flights/v1/ru/days возвращает список дней выполнения рейсов для заданного города вылета или маршрута. + +В запросе передается дата для поиска в формате от -1 дня до +6 месяцев от текущей даты, а также параметры: + +-      departure – IATA-код города или аэропорта вылета (когда заполнено только поле «Город вылета»); + +-      route – IATA- коды городов или аэропортов заданного маршрута. + +В качестве ответа поступает строка, отражающая наличие рейсов на полгода вперёд, где каждый символ соответствует дню: «1» - рейсы есть, «0» - рейсов нет. + +**3.2** **Требования к визуальной интерактивной карте** + +  + +Для выбора города вылета или прилета должна быть реализована возможность выбора необходимого города как на карте, так и в специальных полях «Город вылета» и «Город прилета» в интерфейсе раздела, доступного рядом с картой. На карте предусмотрена цветовая дифференциация выбранных и доступных направлений: + +·               Оранжевый – выбранный на карте или в поле «Город вылета». + +·               Синий – доступный для выбора на карте или в поле «Город прилета». + +Дуги, показывающие маршрут между городами, бывают двух видов: сплошные – для прямых рейсов (многоплечевые рейсы также отображаются прямыми) и пунктирные – для стыковочных рейсов. + +При первом открытии раздела «Карта полетов» в рамках одной сессии и после подтверждения разрешения на определение местоположения, система должна автоматически определить город пользователя и заполнить поле «Город вылета». Город пользователя определяется на основе ближайшего аэропорта, из которого выполняются рейсы авиакомпании Аэрофлот. + +Тайлы для карты должны подготавливаться с помощью сервиса QGIS, в который будут загружены данные из открытых источников. Для отображения карты на фронтенде и обеспечения её интерактивности будет использована библиотека Leaflet.js. Сами тайлы загружены в хранилище S3 и берутся оттуда для отображения карты. Для изменения тайлов необходимо произвести повторную их подготовку через сервис QGIS и загрузку в S3. Для их удаления требуется произвести ручное удаление тайлов из S3 и повторно загрузить при необходимости. Поверх карты будут наложены города по координатам, полученным через внутреннее API. + +**Логика отображения городов по уровням масштабирования** + +Города разделены на категории и отображаются на карте в зависимости от текущего уровня масштабирования и категории. + +Категории городов: + +·      Города-миллионники. + +·      Города с населением от 500 тысяч до 1 миллиона. + +·      Города с населением менее 500 тысяч. + +·      Популярные курорты. + +Правила отображения: + +·      Минимальное приближение – отображаются города-миллионники и популярные курорты + +·      Среднее приближение – дополнительно появляются города с населением от 500 тысяч до 1 миллиона. + +·      Максимальное приближение – отображаются все категории городов. + +**Интерактивные возможности карты:** + +·               При клике на город вылета на карте, поле «Город вылета» автоматически заполняется этим городом. + +·               После выбора города вылета на карте отображаются дуги маршрута, указывающие на доступные города прилета. Количество направлений ограничено категориями городов в зависимости от масштаба карты. + +·               При нажатии на город на карте, когда поле «Город вылета» уже заполнено, поле «Город прилета» будет заполнено выбранным городом. Между городами будет построена дуга маршрута: сплошная, если рейс прямой или пунктирная, если рейс со стыковкой. + +·               После выбора города прилета над ним на карте появится всплывающее окно с названием города и кнопкой покупки билета. По нажатию кнопки «Купить билет» в систему бронирования передаются город вылета и прилёта. Если поле «Дата рейса» заполнено, оно также передаётся в систему бронирования, если пустое – не передаётся. + +·               После выбора городов вылета и прилёта названия остальных городов на карте скрываются для упрощения восприятия маршрута. + +·               Если маршрут включает пересадку, то название города, в котором происходит стыковка, также остаётся видимым на карте. + +·               При нажатии на город на карте, когда поля «Город вылета» и «Город прилета» заполнены конкретными значениями, данные поля будут очищены и поле «Город вылета» будет заполнено выбранным городом. Из этого города будут отображены дуги маршрута, указывающие на доступные города прилета. + +**3.3 Требования к реализации работы фильтров** + +Для упрощения поиска маршрутов и повышения удобства взаимодействия пользователя с разделом «Карта полетов» реализуется блок фильтров с возможностью настройки параметров отображения направлений. Фильтры расположены в интерфейсе рядом картой. + +·      Поля выбора городов вылета и прилета. + +Данные фильтры представлены в виде полей с возможностью ручного ввода названия города, а также выпадающего списка городов, взятых из справочника. Поле также заполняется при выборе города на карте. Между полями есть кнопка, при нажатии которой города вылета и прилета меняются местами. + +По умолчанию поля «Город вылета» и «Город прилета» содержат плейсхолдеры с текстом «Откуда» и «Куда» соответственно. После заполнения данных полей значениями в каждом из них должна появиться возможность удаления текста посимвольно или целиком (нажатие на крестик). + +Для выбора типа рейса предусмотрены три переключателя: + +·      Внутренние рейсы. + +При активации отображаются только маршруты, выполняемые внутри территории России. Международные направления скрываются. + +·      Международные регулярные рейсы. + +Отображаются маршруты, имеющие в качестве одного из пунктов за пределами России. Внутренние направления при этом скрываются. + +·      Показать только рейсы с пересадкой. + +Активация этого фильтра заменяет отображение прямых маршрутов на рейсы с возможной стыковкой. Фильтр становится доступен после выбора городов вылета и прилета. Визуально такие маршруты представлены пунктирной дугой. Если между городами вылета и прилета нет прямого маршрута для диапазона дат от -1 дня до +6 месяцев от текущей даты, то данный фильтр активируется автоматически. + +Фильтр «Показать только рейсы с пересадкой» можно комбинировать с другими: например, можно одновременно включить «Международные регулярные рейсы» и «Показать только рейсы с пересадкой», чтобы отобразить только международные маршруты с пересадками. + +Фильтры «Внутренние рейсы» и «Международные регулярные рейсы» являются взаимоисключающими, то есть возможно выбрать только один из них. + +Также доступен фильтр «Дата рейса». + +Допускается выбор даты из календаря или ручной ввод даты в формате ДД.ММ.ГГГГ. В мобильной версии сайта доступны кнопки-дни «Сегодня», «Завтра» и «Послезавтра», по нажатию которых, поле «Дата рейса» заполняется датой, соответствующей данным значениям. + +При заполнении поля значениями должен появиться крестик. + +Должна предусматриваться возможность очищения введённых значений посимвольно или сразу всего значения (нажатие на крестик). + +Работа календаря должна соответствовать следующим правилам: + +·      Диапазон дат для выбора в календаре от -1 дня до +6 месяцев от текущей даты; + +·      Если выбрана дата текущего дня, то заполнять атрибут «Дата рейса» значением «Сегодня». + +·      Если выбрана дата завтрашнего дня, то заполнять атрибут «Дата рейса» значением «Завтра». + +·      На календаре дни, в которых не выполняются рейсы для заданного города вылета или маршрута, блокируются. Блокировка происходит в два этапа: сперва после выбора города вылета, а затем дополнительно после выбора города прилёта. + +·      Дни в календаре атрибута «Дата вылета» не должны быть доступны для выбора пока пользователь не заполнит атрибут «Город вылета» или маршрут полностью. Если пользователь сменил местами значение «Город вылета» и «Город прилета» и при этом значение «Город вылета» стало не заполнено – то дни в календаре атрибута «Дата вылета» не должны быть доступны для выбора. Аналогичное поведение должно распространятся на кнопки–дни «Сегодня», «Завтра», «Послезавтра» мобильной версии + +·      Логика работы календаря должна быть идентичной вне зависимости от способа выбора городов: кликом на карте, ручным вводом в поле или выбором из справочника. + +**3.4 Требования к микроразметке раздела «Карта полетов»** + +На странице раздела «Карта полетов» должна присутствовать следующая информация в разметке страниц: + +·      Title: Карта полетов авиакомпании Аэрофлот. +·      Description: Карта полетов авиакомпании "Аэрофлот". Информация о направлениях рейсов. + +В файле Robot.txt будет содержаться перечень агентов и разрешения для них по контенту раздела «Карта полетов», см. Таблица 1. + +Таблица 1 + +| | | | +|---|---|---| +|**Агент**|**Страница**

**Контент**|**Разрешено/**

**Не разрешено**| +|User-agent: Yandex|Канонические страницы Карты полетов|allow| +|User-agent: Googlebot|Канонические страницы Карты полетов|allow| +|User-agent: *|Канонические страницы Карты полетов|allow| + +Пример канонических страниц для титульной страницы на русском: + + + +**3.5 Требования к сбору статистики** + +Добавление параметров для возможности сбора статистики в «Яндекс.Метрика» по разделу «Карта полетов» будет работать аналогично всей Системе «Онлайн-Табло и Расписание». + +**3.6 Требования к макетам и верстке** + +Выполняемая в рамках задачи работа отразится на внешнем виде сайта ПАО «Аэрофлот». Макеты планируемых изменений представлены заказчиком для десктопной (рисунок 1), планшетной (рисунок 2) и мобильной версии сайта (рисунок 3). \ No newline at end of file diff --git a/docs/tech.md b/docs/tech.md new file mode 100644 index 00000000..2c86706f --- /dev/null +++ b/docs/tech.md @@ -0,0 +1,41 @@ +1. Технологический стек +Компонент должен представлять собой remote-компонент, встраиваемый в канальные приложения Заказчика (WEB, PWA) и быть реализован на следующем технологическом стеке: +1.1.1. ModernJS +Frontend должен быть реализован на ModernJS (SSR). +1.1.2. Module Federation 2.0 и сборщики +Допускается использование любого сборщика с поддержкой Module Federation 2.0: Webpack 5, Rsbuild, Rspack или Vite +Для экспонирования компонентов и логики должен генерироваться файл: https://ваш-домен/mf-manifest.json. +Пример для webpack https://module-federation.io/guide/basic/webpack.html. +1.1.3. React 18+ совместимость +Компонент должен работать с React 18 Concurrent Mode +Должна быть обеспечена поддержка (если используется асинхронная загрузка). +В теле компонента не должно быть побочных эффектов (никаких fetch вне useEffect). +Динамические импорты должны использовать React.lazy(): +2. Источники данных и интеграции +Frontend-компонент должен использовать данные, получаемые из REST API Заказчика, формат данных JSON. +2. Актуальность и консистентность данных +Отображаемые во Frontend-компоненте данные должны соответствовать полученным из REST API Заказчика. +3. Производительность и нагрузка +Компонент должен выдерживать 100 обращений в секунду. +4. Отказоустойчивость +Виртуальные машины, на которых размещен Компонент, должны быть географически разнесеныдля обеспечения отказоустойчивости решения. +5. Безопасность +Компонент должен быть изолированным и не представлять собой угрозы другим компонентам Сайта Заказчика. +6. SEO и доступность +Компонент должен быть доступен 24 часа в сутки, 7 дней в неделю, 365 дней в году без запланированных и незапланированных простоев при нормальном функционировании технических средств и общего программного обеспечения. Время восстановления программного обеспечения после отказов не должно превышать 6 часов с момента восстановления работоспособности технических средств и общего программного обеспечения. +В компоненте должны быть реализованы: +SEO-оптимизация; +Рендеринг, отображение микро-разметки (JsonLD, OpenGraph). +Web-аналитика (Яндекс.Метрика, CTM, Вариокуб, Ключ-Астром). +7. Кросс-платформенность +Компонент должен поддерживать встраивание в несколько канальных приложений (Web, PWA). +В компоненте должна быть реализована адаптивность («резиновая вёрстка») - отображение страницы на любых экранах. +8. Логирование и мониторинг +В компоненте должно быть реализовано логирование путём сбора данных с frontend, формирования файла установленного образца (будет предоставлено Заказчиком отдельно), передачи в систему журналирования Заказчика. +В компоненте должен быть реализован мониторинг системных событий с последующей отправкой в агрегатор метрик. +9. Обновления и поддержка +Структура модуля должна соответствовать типовой структуре удалённого frontend-модуля Заказчика для универсализации развёртывания. +10. Дизайн +Компонент должен быть реализован в соответствии с предоставляемыми Заказчиком макетами и с использованием принятой у Заказчика Дизайн-системы. +Компонент должен встраивать элементы других remote-компонентов Заказчика, если необходимые таковые реализованы в рамках компонентов. + diff --git a/modern.config.ts b/modern.config.ts index df3918f1..769fffa7 100644 --- a/modern.config.ts +++ b/modern.config.ts @@ -21,28 +21,8 @@ export default defineConfig({ distPath: { root: isRemote ? "dist/remote" : "dist/standalone" }, }, tools: { - rspack: (config) => { - // Tell css-loader NOT to resolve url() references in SCSS/CSS. - // The browser will fetch them at runtime from the public/ directory. - const rules = config.module?.rules; - if (Array.isArray(rules)) { - const walk = (items: unknown[]): void => { - for (const item of items) { - if (item && typeof item === "object") { - const rule = item as Record; - if (rule.loader && typeof rule.loader === "string" && rule.loader.includes("css-loader")) { - const opts = (rule.options ?? {}) as Record; - opts.url = false; - rule.options = opts; - } - if (Array.isArray(rule.use)) walk(rule.use); - if (Array.isArray(rule.oneOf)) walk(rule.oneOf); - if (Array.isArray(rule.rules)) walk(rule.rules); - } - } - }; - walk(rules); - } + cssLoader: { + url: false, }, }, }); diff --git a/public/assets/fonts/cyrillic-300.woff2 b/public/assets/fonts/cyrillic-300.woff2 new file mode 100644 index 00000000..ed8d746e Binary files /dev/null and b/public/assets/fonts/cyrillic-300.woff2 differ diff --git a/public/assets/fonts/cyrillic-400.woff2 b/public/assets/fonts/cyrillic-400.woff2 new file mode 100644 index 00000000..3cab0b76 Binary files /dev/null and b/public/assets/fonts/cyrillic-400.woff2 differ diff --git a/public/assets/fonts/cyrillic-500.woff2 b/public/assets/fonts/cyrillic-500.woff2 new file mode 100644 index 00000000..fb557ab6 Binary files /dev/null and b/public/assets/fonts/cyrillic-500.woff2 differ diff --git a/public/assets/fonts/cyrillic-700.woff2 b/public/assets/fonts/cyrillic-700.woff2 new file mode 100644 index 00000000..0fc1eeda Binary files /dev/null and b/public/assets/fonts/cyrillic-700.woff2 differ diff --git a/public/assets/fonts/cyrillic-ext-300.woff2 b/public/assets/fonts/cyrillic-ext-300.woff2 new file mode 100644 index 00000000..e4794ef5 Binary files /dev/null and b/public/assets/fonts/cyrillic-ext-300.woff2 differ diff --git a/public/assets/fonts/cyrillic-ext-400.woff2 b/public/assets/fonts/cyrillic-ext-400.woff2 new file mode 100644 index 00000000..75cbf07a Binary files /dev/null and b/public/assets/fonts/cyrillic-ext-400.woff2 differ diff --git a/public/assets/fonts/cyrillic-ext-500.woff2 b/public/assets/fonts/cyrillic-ext-500.woff2 new file mode 100644 index 00000000..0e4dfbd1 Binary files /dev/null and b/public/assets/fonts/cyrillic-ext-500.woff2 differ diff --git a/public/assets/fonts/cyrillic-ext-700.woff2 b/public/assets/fonts/cyrillic-ext-700.woff2 new file mode 100644 index 00000000..dff3ff02 Binary files /dev/null and b/public/assets/fonts/cyrillic-ext-700.woff2 differ diff --git a/public/assets/fonts/greek-300.woff2 b/public/assets/fonts/greek-300.woff2 new file mode 100644 index 00000000..c94372ce Binary files /dev/null and b/public/assets/fonts/greek-300.woff2 differ diff --git a/public/assets/fonts/greek-400.woff2 b/public/assets/fonts/greek-400.woff2 new file mode 100644 index 00000000..6dc3dff1 Binary files /dev/null and b/public/assets/fonts/greek-400.woff2 differ diff --git a/public/assets/fonts/greek-500.woff2 b/public/assets/fonts/greek-500.woff2 new file mode 100644 index 00000000..d416132b Binary files /dev/null and b/public/assets/fonts/greek-500.woff2 differ diff --git a/public/assets/fonts/greek-700.woff2 b/public/assets/fonts/greek-700.woff2 new file mode 100644 index 00000000..47526751 Binary files /dev/null and b/public/assets/fonts/greek-700.woff2 differ diff --git a/public/assets/fonts/greek-ext-300.woff2 b/public/assets/fonts/greek-ext-300.woff2 new file mode 100644 index 00000000..a621cf01 Binary files /dev/null and b/public/assets/fonts/greek-ext-300.woff2 differ diff --git a/public/assets/fonts/greek-ext-400.woff2 b/public/assets/fonts/greek-ext-400.woff2 new file mode 100644 index 00000000..7b005e44 Binary files /dev/null and b/public/assets/fonts/greek-ext-400.woff2 differ diff --git a/public/assets/fonts/greek-ext-500.woff2 b/public/assets/fonts/greek-ext-500.woff2 new file mode 100644 index 00000000..0940e080 Binary files /dev/null and b/public/assets/fonts/greek-ext-500.woff2 differ diff --git a/public/assets/fonts/greek-ext-700.woff2 b/public/assets/fonts/greek-ext-700.woff2 new file mode 100644 index 00000000..c51cfa14 Binary files /dev/null and b/public/assets/fonts/greek-ext-700.woff2 differ diff --git a/public/assets/fonts/latin-300.woff2 b/public/assets/fonts/latin-300.woff2 new file mode 100644 index 00000000..f20acc7f Binary files /dev/null and b/public/assets/fonts/latin-300.woff2 differ diff --git a/public/assets/fonts/latin-400.woff2 b/public/assets/fonts/latin-400.woff2 new file mode 100644 index 00000000..b6fdbb66 Binary files /dev/null and b/public/assets/fonts/latin-400.woff2 differ diff --git a/public/assets/fonts/latin-500.woff2 b/public/assets/fonts/latin-500.woff2 new file mode 100644 index 00000000..e66ca587 Binary files /dev/null and b/public/assets/fonts/latin-500.woff2 differ diff --git a/public/assets/fonts/latin-700.woff2 b/public/assets/fonts/latin-700.woff2 new file mode 100644 index 00000000..04ec78aa Binary files /dev/null and b/public/assets/fonts/latin-700.woff2 differ diff --git a/public/assets/fonts/latin-ext-300.woff2 b/public/assets/fonts/latin-ext-300.woff2 new file mode 100644 index 00000000..f8763082 Binary files /dev/null and b/public/assets/fonts/latin-ext-300.woff2 differ diff --git a/public/assets/fonts/latin-ext-400.woff2 b/public/assets/fonts/latin-ext-400.woff2 new file mode 100644 index 00000000..4d32c678 Binary files /dev/null and b/public/assets/fonts/latin-ext-400.woff2 differ diff --git a/public/assets/fonts/latin-ext-500.woff2 b/public/assets/fonts/latin-ext-500.woff2 new file mode 100644 index 00000000..09eedf81 Binary files /dev/null and b/public/assets/fonts/latin-ext-500.woff2 differ diff --git a/public/assets/fonts/latin-ext-700.woff2 b/public/assets/fonts/latin-ext-700.woff2 new file mode 100644 index 00000000..d4a196dd Binary files /dev/null and b/public/assets/fonts/latin-ext-700.woff2 differ diff --git a/public/assets/fonts/vietnamese-300.woff2 b/public/assets/fonts/vietnamese-300.woff2 new file mode 100644 index 00000000..7f805296 Binary files /dev/null and b/public/assets/fonts/vietnamese-300.woff2 differ diff --git a/public/assets/fonts/vietnamese-400.woff2 b/public/assets/fonts/vietnamese-400.woff2 new file mode 100644 index 00000000..bca64c6c Binary files /dev/null and b/public/assets/fonts/vietnamese-400.woff2 differ diff --git a/public/assets/fonts/vietnamese-500.woff2 b/public/assets/fonts/vietnamese-500.woff2 new file mode 100644 index 00000000..9cb2bbe2 Binary files /dev/null and b/public/assets/fonts/vietnamese-500.woff2 differ diff --git a/public/assets/fonts/vietnamese-700.woff2 b/public/assets/fonts/vietnamese-700.woff2 new file mode 100644 index 00000000..4966270e Binary files /dev/null and b/public/assets/fonts/vietnamese-700.woff2 differ diff --git a/public/assets/img/airlines-logo/aeroflot/large/en.png b/public/assets/img/airlines-logo/aeroflot/large/en.png new file mode 100644 index 00000000..b3e8655d Binary files /dev/null and b/public/assets/img/airlines-logo/aeroflot/large/en.png differ diff --git a/public/assets/img/airlines-logo/aeroflot/large/ru.png b/public/assets/img/airlines-logo/aeroflot/large/ru.png new file mode 100644 index 00000000..f94412e9 Binary files /dev/null and b/public/assets/img/airlines-logo/aeroflot/large/ru.png differ diff --git a/public/assets/img/airlines-logo/aeroflot/round.png b/public/assets/img/airlines-logo/aeroflot/round.png new file mode 100644 index 00000000..6ceef98d Binary files /dev/null and b/public/assets/img/airlines-logo/aeroflot/round.png differ diff --git a/public/assets/img/airlines-logo/aerolineas-argentinas/large.png b/public/assets/img/airlines-logo/aerolineas-argentinas/large.png new file mode 100644 index 00000000..0f648ca2 Binary files /dev/null and b/public/assets/img/airlines-logo/aerolineas-argentinas/large.png differ diff --git a/public/assets/img/airlines-logo/aerolineas-argentinas/round.svg b/public/assets/img/airlines-logo/aerolineas-argentinas/round.svg new file mode 100644 index 00000000..bebc6761 --- /dev/null +++ b/public/assets/img/airlines-logo/aerolineas-argentinas/round.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/aeromexico/large.svg b/public/assets/img/airlines-logo/aeromexico/large.svg new file mode 100644 index 00000000..d10b5fcf --- /dev/null +++ b/public/assets/img/airlines-logo/aeromexico/large.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/assets/img/airlines-logo/aeromexico/round.svg b/public/assets/img/airlines-logo/aeromexico/round.svg new file mode 100644 index 00000000..c2522890 --- /dev/null +++ b/public/assets/img/airlines-logo/aeromexico/round.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/air-baltic/large.svg b/public/assets/img/airlines-logo/air-baltic/large.svg new file mode 100644 index 00000000..609d4b7e --- /dev/null +++ b/public/assets/img/airlines-logo/air-baltic/large.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/air-baltic/round.svg b/public/assets/img/airlines-logo/air-baltic/round.svg new file mode 100644 index 00000000..2c690b4c --- /dev/null +++ b/public/assets/img/airlines-logo/air-baltic/round.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/air-europa/large.svg b/public/assets/img/airlines-logo/air-europa/large.svg new file mode 100644 index 00000000..781eac70 --- /dev/null +++ b/public/assets/img/airlines-logo/air-europa/large.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/assets/img/airlines-logo/air-europa/round.svg b/public/assets/img/airlines-logo/air-europa/round.svg new file mode 100644 index 00000000..14f365f5 --- /dev/null +++ b/public/assets/img/airlines-logo/air-europa/round.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/air-serbia/large.svg b/public/assets/img/airlines-logo/air-serbia/large.svg new file mode 100644 index 00000000..50581739 --- /dev/null +++ b/public/assets/img/airlines-logo/air-serbia/large.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/air-serbia/round.svg b/public/assets/img/airlines-logo/air-serbia/round.svg new file mode 100644 index 00000000..0f22b582 --- /dev/null +++ b/public/assets/img/airlines-logo/air-serbia/round.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/img/airlines-logo/airfrance/large.svg b/public/assets/img/airlines-logo/airfrance/large.svg new file mode 100644 index 00000000..6c2f06b7 --- /dev/null +++ b/public/assets/img/airlines-logo/airfrance/large.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/airmalta/large.svg b/public/assets/img/airlines-logo/airmalta/large.svg new file mode 100644 index 00000000..b493a020 --- /dev/null +++ b/public/assets/img/airlines-logo/airmalta/large.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/alitalia/large.svg b/public/assets/img/airlines-logo/alitalia/large.svg new file mode 100644 index 00000000..45277d12 --- /dev/null +++ b/public/assets/img/airlines-logo/alitalia/large.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/assets/img/airlines-logo/aurora/large/en.svg b/public/assets/img/airlines-logo/aurora/large/en.svg new file mode 100644 index 00000000..7cbe06a0 --- /dev/null +++ b/public/assets/img/airlines-logo/aurora/large/en.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/assets/img/airlines-logo/aurora/large/ru.svg b/public/assets/img/airlines-logo/aurora/large/ru.svg new file mode 100644 index 00000000..78f689a4 --- /dev/null +++ b/public/assets/img/airlines-logo/aurora/large/ru.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/img/airlines-logo/aurora/round.png b/public/assets/img/airlines-logo/aurora/round.png new file mode 100644 index 00000000..cc3c7c47 Binary files /dev/null and b/public/assets/img/airlines-logo/aurora/round.png differ diff --git a/public/assets/img/airlines-logo/bangkok-airways/large.png b/public/assets/img/airlines-logo/bangkok-airways/large.png new file mode 100644 index 00000000..e5258125 Binary files /dev/null and b/public/assets/img/airlines-logo/bangkok-airways/large.png differ diff --git a/public/assets/img/airlines-logo/brussels-airlines/large.png b/public/assets/img/airlines-logo/brussels-airlines/large.png new file mode 100644 index 00000000..fa3fa7b4 Binary files /dev/null and b/public/assets/img/airlines-logo/brussels-airlines/large.png differ diff --git a/public/assets/img/airlines-logo/bulgaria-air/large.png b/public/assets/img/airlines-logo/bulgaria-air/large.png new file mode 100644 index 00000000..8e46d81e Binary files /dev/null and b/public/assets/img/airlines-logo/bulgaria-air/large.png differ diff --git a/public/assets/img/airlines-logo/china-airlines/large.png b/public/assets/img/airlines-logo/china-airlines/large.png new file mode 100644 index 00000000..c89dc0f3 Binary files /dev/null and b/public/assets/img/airlines-logo/china-airlines/large.png differ diff --git a/public/assets/img/airlines-logo/china-eastern/large.svg b/public/assets/img/airlines-logo/china-eastern/large.svg new file mode 100644 index 00000000..a9be4ead --- /dev/null +++ b/public/assets/img/airlines-logo/china-eastern/large.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/china-southern/large.svg b/public/assets/img/airlines-logo/china-southern/large.svg new file mode 100644 index 00000000..df21866b --- /dev/null +++ b/public/assets/img/airlines-logo/china-southern/large.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/assets/img/airlines-logo/czech-airline/large.png b/public/assets/img/airlines-logo/czech-airline/large.png new file mode 100644 index 00000000..de4e0fcd Binary files /dev/null and b/public/assets/img/airlines-logo/czech-airline/large.png differ diff --git a/public/assets/img/airlines-logo/czech-airline/round.svg b/public/assets/img/airlines-logo/czech-airline/round.svg new file mode 100644 index 00000000..6138e02f --- /dev/null +++ b/public/assets/img/airlines-logo/czech-airline/round.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/delta/large.svg b/public/assets/img/airlines-logo/delta/large.svg new file mode 100644 index 00000000..d417a3b0 --- /dev/null +++ b/public/assets/img/airlines-logo/delta/large.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/assets/img/airlines-logo/delta/round.png b/public/assets/img/airlines-logo/delta/round.png new file mode 100644 index 00000000..a09d03e8 Binary files /dev/null and b/public/assets/img/airlines-logo/delta/round.png differ diff --git a/public/assets/img/airlines-logo/finnair/large.svg b/public/assets/img/airlines-logo/finnair/large.svg new file mode 100644 index 00000000..b949776a --- /dev/null +++ b/public/assets/img/airlines-logo/finnair/large.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/finnair/round.png b/public/assets/img/airlines-logo/finnair/round.png new file mode 100644 index 00000000..5e317124 Binary files /dev/null and b/public/assets/img/airlines-logo/finnair/round.png differ diff --git a/public/assets/img/airlines-logo/garuda-indonesia/large.png b/public/assets/img/airlines-logo/garuda-indonesia/large.png new file mode 100644 index 00000000..81ea26a2 Binary files /dev/null and b/public/assets/img/airlines-logo/garuda-indonesia/large.png differ diff --git a/public/assets/img/airlines-logo/icelandair/large.svg b/public/assets/img/airlines-logo/icelandair/large.svg new file mode 100644 index 00000000..ef6b54eb --- /dev/null +++ b/public/assets/img/airlines-logo/icelandair/large.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/japan-airlines/large.svg b/public/assets/img/airlines-logo/japan-airlines/large.svg new file mode 100644 index 00000000..7cf75f37 --- /dev/null +++ b/public/assets/img/airlines-logo/japan-airlines/large.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/assets/img/airlines-logo/kenya-airways/large.svg b/public/assets/img/airlines-logo/kenya-airways/large.svg new file mode 100644 index 00000000..af91dcab --- /dev/null +++ b/public/assets/img/airlines-logo/kenya-airways/large.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/klm/large.png b/public/assets/img/airlines-logo/klm/large.png new file mode 100644 index 00000000..3014aec2 Binary files /dev/null and b/public/assets/img/airlines-logo/klm/large.png differ diff --git a/public/assets/img/airlines-logo/klm/round.png b/public/assets/img/airlines-logo/klm/round.png new file mode 100644 index 00000000..85a13094 Binary files /dev/null and b/public/assets/img/airlines-logo/klm/round.png differ diff --git a/public/assets/img/airlines-logo/korean-air/large.svg b/public/assets/img/airlines-logo/korean-air/large.svg new file mode 100644 index 00000000..4dd26466 --- /dev/null +++ b/public/assets/img/airlines-logo/korean-air/large.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/public/assets/img/airlines-logo/mea/large.png b/public/assets/img/airlines-logo/mea/large.png new file mode 100644 index 00000000..85666ef2 Binary files /dev/null and b/public/assets/img/airlines-logo/mea/large.png differ diff --git a/public/assets/img/airlines-logo/miat/large.svg b/public/assets/img/airlines-logo/miat/large.svg new file mode 100644 index 00000000..3085afe2 --- /dev/null +++ b/public/assets/img/airlines-logo/miat/large.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/airlines-logo/miat/round.svg b/public/assets/img/airlines-logo/miat/round.svg new file mode 100644 index 00000000..9046d3cf --- /dev/null +++ b/public/assets/img/airlines-logo/miat/round.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/pobeda/large.svg b/public/assets/img/airlines-logo/pobeda/large.svg new file mode 100644 index 00000000..9114a85f --- /dev/null +++ b/public/assets/img/airlines-logo/pobeda/large.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/pobeda/round.png b/public/assets/img/airlines-logo/pobeda/round.png new file mode 100644 index 00000000..a06dfe3c Binary files /dev/null and b/public/assets/img/airlines-logo/pobeda/round.png differ diff --git a/public/assets/img/airlines-logo/polish-airlines/large.png b/public/assets/img/airlines-logo/polish-airlines/large.png new file mode 100644 index 00000000..6f8c1cbc Binary files /dev/null and b/public/assets/img/airlines-logo/polish-airlines/large.png differ diff --git a/public/assets/img/airlines-logo/rossiya/large/en.svg b/public/assets/img/airlines-logo/rossiya/large/en.svg new file mode 100644 index 00000000..0f9e797a --- /dev/null +++ b/public/assets/img/airlines-logo/rossiya/large/en.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/airlines-logo/rossiya/large/ru.svg b/public/assets/img/airlines-logo/rossiya/large/ru.svg new file mode 100644 index 00000000..ab9c5a52 --- /dev/null +++ b/public/assets/img/airlines-logo/rossiya/large/ru.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/img/airlines-logo/rossiya/round.png b/public/assets/img/airlines-logo/rossiya/round.png new file mode 100644 index 00000000..a69a1387 Binary files /dev/null and b/public/assets/img/airlines-logo/rossiya/round.png differ diff --git a/public/assets/img/airlines-logo/s7/large.svg b/public/assets/img/airlines-logo/s7/large.svg new file mode 100644 index 00000000..66dbb8cf --- /dev/null +++ b/public/assets/img/airlines-logo/s7/large.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/saudi-arabian-airlines/large.png b/public/assets/img/airlines-logo/saudi-arabian-airlines/large.png new file mode 100644 index 00000000..4cb2a974 Binary files /dev/null and b/public/assets/img/airlines-logo/saudi-arabian-airlines/large.png differ diff --git a/public/assets/img/airlines-logo/tarom/large.png b/public/assets/img/airlines-logo/tarom/large.png new file mode 100644 index 00000000..d1aa7344 Binary files /dev/null and b/public/assets/img/airlines-logo/tarom/large.png differ diff --git a/public/assets/img/airlines-logo/tarom/round.svg b/public/assets/img/airlines-logo/tarom/round.svg new file mode 100644 index 00000000..203bd52e --- /dev/null +++ b/public/assets/img/airlines-logo/tarom/round.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/airlines-logo/vietnam-airlines/large.png b/public/assets/img/airlines-logo/vietnam-airlines/large.png new file mode 100644 index 00000000..1fca4292 Binary files /dev/null and b/public/assets/img/airlines-logo/vietnam-airlines/large.png differ diff --git a/public/assets/img/airlines-logo/xiamen-air/large.svg b/public/assets/img/airlines-logo/xiamen-air/large.svg new file mode 100644 index 00000000..53e17ab0 --- /dev/null +++ b/public/assets/img/airlines-logo/xiamen-air/large.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/assets/img/apple-touch-icon.png b/public/assets/img/apple-touch-icon.png new file mode 100644 index 00000000..15a173a4 Binary files /dev/null and b/public/assets/img/apple-touch-icon.png differ diff --git a/public/assets/img/arr-down.svg b/public/assets/img/arr-down.svg new file mode 100644 index 00000000..f9a5c95c --- /dev/null +++ b/public/assets/img/arr-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/img/arrow-left.svg b/public/assets/img/arrow-left.svg new file mode 100644 index 00000000..4c2bb0f8 --- /dev/null +++ b/public/assets/img/arrow-left.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/img/arrow-right.svg b/public/assets/img/arrow-right.svg new file mode 100644 index 00000000..66496ea0 --- /dev/null +++ b/public/assets/img/arrow-right.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/img/arrow-up.svg b/public/assets/img/arrow-up.svg new file mode 100644 index 00000000..3d1413f9 --- /dev/null +++ b/public/assets/img/arrow-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/img/background.jpg b/public/assets/img/background.jpg new file mode 100644 index 00000000..e97c8ed8 Binary files /dev/null and b/public/assets/img/background.jpg differ diff --git a/public/assets/img/board.svg b/public/assets/img/board.svg new file mode 100644 index 00000000..45a43056 --- /dev/null +++ b/public/assets/img/board.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/img/calendar.svg b/public/assets/img/calendar.svg new file mode 100644 index 00000000..6b8a27b9 --- /dev/null +++ b/public/assets/img/calendar.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/assets/img/check-white.svg b/public/assets/img/check-white.svg new file mode 100644 index 00000000..3c24d591 --- /dev/null +++ b/public/assets/img/check-white.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/img/check.svg b/public/assets/img/check.svg new file mode 100644 index 00000000..8c6ef2ef --- /dev/null +++ b/public/assets/img/check.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/img/close.svg b/public/assets/img/close.svg new file mode 100644 index 00000000..f9d6d076 --- /dev/null +++ b/public/assets/img/close.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/img/deboard.svg b/public/assets/img/deboard.svg new file mode 100644 index 00000000..25e4221f --- /dev/null +++ b/public/assets/img/deboard.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/img/expand.svg b/public/assets/img/expand.svg new file mode 100644 index 00000000..b45e9a80 --- /dev/null +++ b/public/assets/img/expand.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/assets/img/favicon-16x16.png b/public/assets/img/favicon-16x16.png new file mode 100644 index 00000000..34303f1c Binary files /dev/null and b/public/assets/img/favicon-16x16.png differ diff --git a/public/assets/img/favicon-192x192.png b/public/assets/img/favicon-192x192.png new file mode 100644 index 00000000..763ec399 Binary files /dev/null and b/public/assets/img/favicon-192x192.png differ diff --git a/public/assets/img/favicon-32x32.png b/public/assets/img/favicon-32x32.png new file mode 100644 index 00000000..e904334f Binary files /dev/null and b/public/assets/img/favicon-32x32.png differ diff --git a/public/assets/img/favicon-48x48.png b/public/assets/img/favicon-48x48.png new file mode 100644 index 00000000..224cb94e Binary files /dev/null and b/public/assets/img/favicon-48x48.png differ diff --git a/public/assets/img/favicon-57x57.png b/public/assets/img/favicon-57x57.png new file mode 100644 index 00000000..5a23612c Binary files /dev/null and b/public/assets/img/favicon-57x57.png differ diff --git a/public/assets/img/favicon-touch.png b/public/assets/img/favicon-touch.png new file mode 100644 index 00000000..d78c5384 Binary files /dev/null and b/public/assets/img/favicon-touch.png differ diff --git a/public/assets/img/favicon.ico b/public/assets/img/favicon.ico new file mode 100644 index 00000000..3b1abcc7 Binary files /dev/null and b/public/assets/img/favicon.ico differ diff --git a/public/assets/img/favicon.png b/public/assets/img/favicon.png new file mode 100644 index 00000000..702c0474 Binary files /dev/null and b/public/assets/img/favicon.png differ diff --git a/public/assets/img/header-test.html b/public/assets/img/header-test.html new file mode 100644 index 00000000..512c899d --- /dev/null +++ b/public/assets/img/header-test.html @@ -0,0 +1,25 @@ + + + + + Авиакомпания Аэрофлот + + + + + + + + + + + + + + 1111 + + + + + + diff --git a/public/assets/img/icon--search-blue.svg b/public/assets/img/icon--search-blue.svg new file mode 100644 index 00000000..acea30c1 --- /dev/null +++ b/public/assets/img/icon--search-blue.svg @@ -0,0 +1,14 @@ + + + + Shape + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/public/assets/img/icon--search.svg b/public/assets/img/icon--search.svg new file mode 100644 index 00000000..75493189 --- /dev/null +++ b/public/assets/img/icon--search.svg @@ -0,0 +1,14 @@ + + + + Shape + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/public/assets/img/icon-not-found.svg b/public/assets/img/icon-not-found.svg new file mode 100644 index 00000000..41f824ba --- /dev/null +++ b/public/assets/img/icon-not-found.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/assets/img/lady404.png b/public/assets/img/lady404.png new file mode 100644 index 00000000..4e829f4d Binary files /dev/null and b/public/assets/img/lady404.png differ diff --git a/public/assets/img/lady500.png b/public/assets/img/lady500.png new file mode 100644 index 00000000..4e829f4d Binary files /dev/null and b/public/assets/img/lady500.png differ diff --git a/public/assets/img/leaflet/marker-blue-shadow.png b/public/assets/img/leaflet/marker-blue-shadow.png new file mode 100644 index 00000000..3294105c Binary files /dev/null and b/public/assets/img/leaflet/marker-blue-shadow.png differ diff --git a/public/assets/img/leaflet/marker-blue-small.png b/public/assets/img/leaflet/marker-blue-small.png new file mode 100644 index 00000000..65684d65 Binary files /dev/null and b/public/assets/img/leaflet/marker-blue-small.png differ diff --git a/public/assets/img/leaflet/marker-blue.png b/public/assets/img/leaflet/marker-blue.png new file mode 100644 index 00000000..57c45aaa Binary files /dev/null and b/public/assets/img/leaflet/marker-blue.png differ diff --git a/public/assets/img/leaflet/marker-orange.png b/public/assets/img/leaflet/marker-orange.png new file mode 100644 index 00000000..66b93e72 Binary files /dev/null and b/public/assets/img/leaflet/marker-orange.png differ diff --git a/public/assets/img/list-remove.svg b/public/assets/img/list-remove.svg new file mode 100644 index 00000000..9553ad8e --- /dev/null +++ b/public/assets/img/list-remove.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/assets/img/loader.gif b/public/assets/img/loader.gif new file mode 100644 index 00000000..7f3d64cc Binary files /dev/null and b/public/assets/img/loader.gif differ diff --git a/public/assets/img/not-found-location.svg b/public/assets/img/not-found-location.svg new file mode 100644 index 00000000..a7eb6c5e --- /dev/null +++ b/public/assets/img/not-found-location.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/pin-24.svg b/public/assets/img/pin-24.svg new file mode 100644 index 00000000..a6281bcf --- /dev/null +++ b/public/assets/img/pin-24.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/assets/img/print.svg b/public/assets/img/print.svg new file mode 100644 index 00000000..33ae1338 --- /dev/null +++ b/public/assets/img/print.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/img/schedule-title-icon-1.svg b/public/assets/img/schedule-title-icon-1.svg new file mode 100644 index 00000000..96a39c8a --- /dev/null +++ b/public/assets/img/schedule-title-icon-1.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/assets/img/schedule-title-icon-2.svg b/public/assets/img/schedule-title-icon-2.svg new file mode 100644 index 00000000..370607a2 --- /dev/null +++ b/public/assets/img/schedule-title-icon-2.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/assets/img/schedule-title-icon-3.svg b/public/assets/img/schedule-title-icon-3.svg new file mode 100644 index 00000000..d3be8727 --- /dev/null +++ b/public/assets/img/schedule-title-icon-3.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/assets/img/schedule-title-icon-4.svg b/public/assets/img/schedule-title-icon-4.svg new file mode 100644 index 00000000..69fe0c56 --- /dev/null +++ b/public/assets/img/schedule-title-icon-4.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/assets/img/schedule-title-icon-5.svg b/public/assets/img/schedule-title-icon-5.svg new file mode 100644 index 00000000..ebd71c7f --- /dev/null +++ b/public/assets/img/schedule-title-icon-5.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/schedule-title-icon-6.svg b/public/assets/img/schedule-title-icon-6.svg new file mode 100644 index 00000000..49bf07db --- /dev/null +++ b/public/assets/img/schedule-title-icon-6.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/business.svg b/public/assets/img/service-and-food-icons/business.svg new file mode 100644 index 00000000..e9864385 --- /dev/null +++ b/public/assets/img/service-and-food-icons/business.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/class.svg b/public/assets/img/service-and-food-icons/class.svg new file mode 100644 index 00000000..422bb751 --- /dev/null +++ b/public/assets/img/service-and-food-icons/class.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/comfort-plus.svg b/public/assets/img/service-and-food-icons/comfort-plus.svg new file mode 100644 index 00000000..aada0d7d --- /dev/null +++ b/public/assets/img/service-and-food-icons/comfort-plus.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/comfort.svg b/public/assets/img/service-and-food-icons/comfort.svg new file mode 100644 index 00000000..4dfbe939 --- /dev/null +++ b/public/assets/img/service-and-food-icons/comfort.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/econom.svg b/public/assets/img/service-and-food-icons/econom.svg new file mode 100644 index 00000000..57efb435 --- /dev/null +++ b/public/assets/img/service-and-food-icons/econom.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/entertaiment-system.svg b/public/assets/img/service-and-food-icons/entertaiment-system.svg new file mode 100644 index 00000000..13d5b143 --- /dev/null +++ b/public/assets/img/service-and-food-icons/entertaiment-system.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/entertaintment.svg b/public/assets/img/service-and-food-icons/entertaintment.svg new file mode 100644 index 00000000..04ecb468 --- /dev/null +++ b/public/assets/img/service-and-food-icons/entertaintment.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/food.svg b/public/assets/img/service-and-food-icons/food.svg new file mode 100644 index 00000000..ef9c9df0 --- /dev/null +++ b/public/assets/img/service-and-food-icons/food.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/gsm.svg b/public/assets/img/service-and-food-icons/gsm.svg new file mode 100644 index 00000000..15d0e246 --- /dev/null +++ b/public/assets/img/service-and-food-icons/gsm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/internet.svg b/public/assets/img/service-and-food-icons/internet.svg new file mode 100644 index 00000000..e7659ef8 --- /dev/null +++ b/public/assets/img/service-and-food-icons/internet.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/menu.svg b/public/assets/img/service-and-food-icons/menu.svg new file mode 100644 index 00000000..3fcd4be7 --- /dev/null +++ b/public/assets/img/service-and-food-icons/menu.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/plate.svg b/public/assets/img/service-and-food-icons/plate.svg new file mode 100644 index 00000000..81a58476 --- /dev/null +++ b/public/assets/img/service-and-food-icons/plate.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/schield.svg b/public/assets/img/service-and-food-icons/schield.svg new file mode 100644 index 00000000..4b6327db --- /dev/null +++ b/public/assets/img/service-and-food-icons/schield.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/seat.svg b/public/assets/img/service-and-food-icons/seat.svg new file mode 100644 index 00000000..16d6c1f6 --- /dev/null +++ b/public/assets/img/service-and-food-icons/seat.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/seat_reservation.svg b/public/assets/img/service-and-food-icons/seat_reservation.svg new file mode 100644 index 00000000..83e1122e --- /dev/null +++ b/public/assets/img/service-and-food-icons/seat_reservation.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/service-and-food-icons.zip b/public/assets/img/service-and-food-icons/service-and-food-icons.zip new file mode 100644 index 00000000..2bec6b3c Binary files /dev/null and b/public/assets/img/service-and-food-icons/service-and-food-icons.zip differ diff --git a/public/assets/img/service-and-food-icons/shopping.svg b/public/assets/img/service-and-food-icons/shopping.svg new file mode 100644 index 00000000..5e84cb17 --- /dev/null +++ b/public/assets/img/service-and-food-icons/shopping.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/space.svg b/public/assets/img/service-and-food-icons/space.svg new file mode 100644 index 00000000..982a632a --- /dev/null +++ b/public/assets/img/service-and-food-icons/space.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/special-food.svg b/public/assets/img/service-and-food-icons/special-food.svg new file mode 100644 index 00000000..6cbd3635 --- /dev/null +++ b/public/assets/img/service-and-food-icons/special-food.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/taxi.svg b/public/assets/img/service-and-food-icons/taxi.svg new file mode 100644 index 00000000..ac506d06 --- /dev/null +++ b/public/assets/img/service-and-food-icons/taxi.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/upgrade_class.svg b/public/assets/img/service-and-food-icons/upgrade_class.svg new file mode 100644 index 00000000..92e1ef8d --- /dev/null +++ b/public/assets/img/service-and-food-icons/upgrade_class.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/assets/img/service-and-food-icons/vegetables.svg b/public/assets/img/service-and-food-icons/vegetables.svg new file mode 100644 index 00000000..14763dac --- /dev/null +++ b/public/assets/img/service-and-food-icons/vegetables.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/video.svg b/public/assets/img/service-and-food-icons/video.svg new file mode 100644 index 00000000..05028883 --- /dev/null +++ b/public/assets/img/service-and-food-icons/video.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/assets/img/service-and-food-icons/wifi.svg b/public/assets/img/service-and-food-icons/wifi.svg new file mode 100644 index 00000000..c1f08a68 --- /dev/null +++ b/public/assets/img/service-and-food-icons/wifi.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/assets/img/share.svg b/public/assets/img/share.svg new file mode 100644 index 00000000..85936b4f --- /dev/null +++ b/public/assets/img/share.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/assets/img/share/copy.svg b/public/assets/img/share/copy.svg new file mode 100644 index 00000000..16d182a2 --- /dev/null +++ b/public/assets/img/share/copy.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/share/facebook.svg b/public/assets/img/share/facebook.svg new file mode 100644 index 00000000..22981aa6 --- /dev/null +++ b/public/assets/img/share/facebook.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/assets/img/share/twitter.svg b/public/assets/img/share/twitter.svg new file mode 100644 index 00000000..896498e9 --- /dev/null +++ b/public/assets/img/share/twitter.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/assets/img/share/vk.svg b/public/assets/img/share/vk.svg new file mode 100644 index 00000000..922afae0 --- /dev/null +++ b/public/assets/img/share/vk.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/assets/img/share/weibo.svg b/public/assets/img/share/weibo.svg new file mode 100644 index 00000000..33e6e1c5 --- /dev/null +++ b/public/assets/img/share/weibo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/img/sprite.svg b/public/assets/img/sprite.svg new file mode 100644 index 00000000..bfa1131d --- /dev/null +++ b/public/assets/img/sprite.svg @@ -0,0 +1,849 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/img/tabs-shadow-left.svg b/public/assets/img/tabs-shadow-left.svg new file mode 100644 index 00000000..7ca44283 --- /dev/null +++ b/public/assets/img/tabs-shadow-left.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/tabs-shadow-right.svg b/public/assets/img/tabs-shadow-right.svg new file mode 100644 index 00000000..1ddef166 --- /dev/null +++ b/public/assets/img/tabs-shadow-right.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/time-blue.svg b/public/assets/img/time-blue.svg new file mode 100644 index 00000000..a07435b1 --- /dev/null +++ b/public/assets/img/time-blue.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/assets/img/time-orange.svg b/public/assets/img/time-orange.svg new file mode 100644 index 00000000..bab1a384 --- /dev/null +++ b/public/assets/img/time-orange.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/assets/img/title-icon-1.svg b/public/assets/img/title-icon-1.svg new file mode 100644 index 00000000..1ba27616 --- /dev/null +++ b/public/assets/img/title-icon-1.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/public/assets/img/title-icon-2.svg b/public/assets/img/title-icon-2.svg new file mode 100644 index 00000000..dfe94881 --- /dev/null +++ b/public/assets/img/title-icon-2.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/assets/img/title-icon-3.svg b/public/assets/img/title-icon-3.svg new file mode 100644 index 00000000..23d317b4 --- /dev/null +++ b/public/assets/img/title-icon-3.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/img/title-icon-4.svg b/public/assets/img/title-icon-4.svg new file mode 100644 index 00000000..b3d2c674 --- /dev/null +++ b/public/assets/img/title-icon-4.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/test-results/.last-run.json b/test-results/.last-run.json new file mode 100644 index 00000000..cbcc1fba --- /dev/null +++ b/test-results/.last-run.json @@ -0,0 +1,4 @@ +{ + "status": "passed", + "failedTests": [] +} \ No newline at end of file