Merge branch 'divite_services'
modified: .env modified: .gitignore modified: Makefile modified: README.md deleted: api/Makefile deleted: certbot/Dockerfile deleted: certbot/scripts/init-certbot.sh modified: docker-compose.yaml new file: easySite/easy-site/README.md new file: easySite/easy-site/build/asset-manifest.json new file: easySite/easy-site/build/index.html new file: easySite/easy-site/build/static/js/main.9a8f7abd.js new file: easySite/easy-site/build/static/js/main.9a8f7abd.js.LICENSE.txt new file: easySite/easy-site/build/static/js/main.9a8f7abd.js.map new file: easySite/easy-site/package-lock.json new file: easySite/easy-site/package.json new file: easySite/easy-site/postcss.config.js new file: easySite/easy-site/public/index.html new file: easySite/easy-site/src/App.css new file: easySite/easy-site/src/App.js new file: easySite/easy-site/src/App.test.js new file: easySite/easy-site/src/contexts/AuthContext.js new file: easySite/easy-site/src/contexts/useAuth.js new file: easySite/easy-site/src/index.css new file: easySite/easy-site/src/index.js new file: easySite/easy-site/src/logo.svg new file: easySite/easy-site/src/pages/AddObject.js new file: easySite/easy-site/src/pages/Dashboard.js new file: easySite/easy-site/src/pages/EditObject.js new file: easySite/easy-site/src/pages/Home.js new file: easySite/easy-site/src/pages/Login.js new file: easySite/easy-site/src/pages/Register.js new file: easySite/easy-site/src/reportWebVitals.js new file: easySite/easy-site/src/setupTests.js new file: easySite/easy-site/tailwind.config.js deleted: nginx/nginx-ssl.conf new file: node_servers/authserver.js new file: node_servers/feedbackserver.js new file: node_servers/techsupportserver.js new file: serv_certbot/certbot/Dockerfile renamed: certbot/config/certbot.ini -> serv_certbot/certbot/config/certbot.ini renamed: certbot/scripts/checkRenewCerts.sh -> serv_certbot/certbot/scripts/checkRenewCerts.sh new file: serv_certbot/certbot/scripts/crontab.txt new file: serv_certbot/certbot/scripts/init-certbot.sh new file: serv_certbot/certbot/scripts/renewEasysite102.sh renamed: certbot/scripts/renewValitovGazizCert.sh -> serv_certbot/certbot/scripts/renewValitovGazizCert.sh renamed: certbot/scripts/renewYalarbaCert.sh -> serv_certbot/certbot/scripts/renewYalarbaCert.sh new file: serv_certbot/docker-compose.yml new file: serv_migration/docker-compose.yml renamed: migrator/Dockerfile -> serv_migration/migrator/Dockerfile renamed: migrator/go.mod -> serv_migration/migrator/go.mod renamed: migrator/go.sum -> serv_migration/migrator/go.sum renamed: migrator/migrations/20240819162009_create_users_table.sql -> serv_migration/migrator/migrations/20240819162009_create_users_table.sql renamed: migrator/migrations/20240825004755_add_column_role_to_users.sql -> serv_migration/migrator/migrations/20240825004755_add_column_role_to_users.sql new file: serv_nginx/docker-compose.yml renamed: nginx/Dockerfile -> serv_nginx/nginx/Dockerfile renamed: nginx/nginx-http.conf -> serv_nginx/nginx/nginx-http.conf new file: serv_nginx/nginx/nginx-ssl.conf renamed: nginx/switch-config.sh -> serv_nginx/nginx/switch-config.sh renamed: api/Dockerfile -> serv_rest_api/api/Dockerfile renamed: api/bin/api.exe -> serv_rest_api/api/bin/api.exe renamed: api/cmd/main.go -> serv_rest_api/api/cmd/main.go renamed: api/go.mod -> serv_rest_api/api/go.mod renamed: api/go.sum -> serv_rest_api/api/go.sum renamed: api/src/configs/APIserver.go -> serv_rest_api/api/src/configs/APIserver.go renamed: api/src/configs/DBconfig.go -> serv_rest_api/api/src/configs/DBconfig.go renamed: api/src/initializers/PGQL_DB.go -> serv_rest_api/api/src/initializers/PGQL_DB.go renamed: api/src/initializers/Routing.go -> serv_rest_api/api/src/initializers/Routing.go renamed: api/src/models/Contacts.go -> serv_rest_api/api/src/models/Contacts.go renamed: api/src/models/Essence.go -> serv_rest_api/api/src/models/Essence.go renamed: api/src/models/Point.go -> serv_rest_api/api/src/models/Point.go renamed: api/src/models/authDataStructs.go -> serv_rest_api/api/src/models/authDataStructs.go renamed: api/src/models/user.go -> serv_rest_api/api/src/models/user.go renamed: api/src/rt/admin/users.go -> serv_rest_api/api/src/rt/admin/users.go renamed: api/src/rt/auth/Login.go -> serv_rest_api/api/src/rt/auth/Login.go renamed: api/src/rt/auth/Registr.go -> serv_rest_api/api/src/rt/auth/Registr.go renamed: api/src/rt/auth/authAdminMiddlware.go -> serv_rest_api/api/src/rt/auth/authAdminMiddlware.go renamed: api/src/rt/auth/authMiddleware.go -> serv_rest_api/api/src/rt/auth/authMiddleware.go renamed: api/src/rt/auth/auth_test.go -> serv_rest_api/api/src/rt/auth/auth_test.go renamed: api/src/rt/prf/AuthUserMiddleWare.go -> serv_rest_api/api/src/rt/prf/AuthUserMiddleWare.go renamed: api/src/rt/prf/profile.go -> serv_rest_api/api/src/rt/prf/profile.go renamed: api/src/rt/srch/search.go -> serv_rest_api/api/src/rt/srch/search.go renamed: api/src/storages/psql/psql.go -> serv_rest_api/api/src/storages/psql/psql.go new file: serv_rest_api/docker-compose.yml new file: serv_spa/docker-compose.yml new file: serv_spa/spa/Dockerfile new file: serv_spa/spa/app/assets/bage_logo.png new file: serv_spa/spa/app/index.html new file: serv_spa/spa/app/styles/mainStyle.css new file: serv_spa/spa/vue/README.md new file: serv_spa/spa/vue/advices.txt
@@ -0,0 +1,8 @@
|
||||
services:
|
||||
spa:
|
||||
container_name: spa
|
||||
build:
|
||||
context: ./spa
|
||||
dockerfile: Dockerfile
|
||||
env_file:
|
||||
- .env
|
||||
@@ -0,0 +1,11 @@
|
||||
# Используем Node.js для сборки
|
||||
FROM node:18-alpine as builde
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Копируем package.json и package-lock.json для установки зависимостей
|
||||
COPY vue/package*.json ./
|
||||
|
||||
RUN npm install
|
||||
|
||||
copy ./vue .
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,135 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>ЯлАрба - Туристический агрегатор</title>
|
||||
<link rel="stylesheet" href="styles/mainStyle.css" />
|
||||
<link rel="icon" href="assets/bage_logo.png" type="img/png" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- Yandex.Metrika counter -->
|
||||
<script type="text/javascript">
|
||||
(function (m, e, t, r, i, k, a) {
|
||||
m[i] =
|
||||
m[i] ||
|
||||
function () {
|
||||
(m[i].a = m[i].a || []).push(arguments);
|
||||
};
|
||||
m[i].l = 1 * new Date();
|
||||
for (var j = 0; j < document.scripts.length; j++) {
|
||||
if (document.scripts[j].src === r) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
(k = e.createElement(t)),
|
||||
(a = e.getElementsByTagName(t)[0]),
|
||||
(k.async = 1),
|
||||
(k.src = r),
|
||||
a.parentNode.insertBefore(k, a);
|
||||
})(
|
||||
window,
|
||||
document,
|
||||
"script",
|
||||
"https://mc.yandex.ru/metrika/tag.js",
|
||||
"ym"
|
||||
);
|
||||
|
||||
ym(103321366, "init", {
|
||||
clickmap: true,
|
||||
trackLinks: true,
|
||||
accurateTrackBounce: true,
|
||||
});
|
||||
</script>
|
||||
<noscript
|
||||
><div>
|
||||
<img
|
||||
src="https://mc.yandex.ru/watch/103321366"
|
||||
style="position: absolute; left: -9999px"
|
||||
alt="yandex metrika is disabled"
|
||||
/></div
|
||||
></noscript>
|
||||
<!-- /Yandex.Metrika counter -->
|
||||
|
||||
<header>
|
||||
<h1>ЯлАрба</h1>
|
||||
<p>Инновационный агрегатор мест отдыха с ИИ-планировщиком маршрутов</p>
|
||||
</header>
|
||||
|
||||
<section>
|
||||
<h2>О проекте</h2>
|
||||
<p>
|
||||
ЯлАрба — это супер-приложение для путешественников, объединяющее в себе:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Агрегатор мест отдыха (отели, экскурсии, рестораны)</li>
|
||||
<li>Маркетплейс туров и локальных сувениров</li>
|
||||
<li>ИИ-планировщик маршрутов с учетом здоровья пользователя</li>
|
||||
<li>Систему бронирования и покупки билетов</li>
|
||||
</ul>
|
||||
<p>
|
||||
Наша миссия — сделать планирование путешествий простым,
|
||||
персонализированным и доступным.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<div class="developer">
|
||||
<h2>Разработчик</h2>
|
||||
<p><strong>Валитов Газиз</strong></p>
|
||||
<p>
|
||||
Full-stack разработчик с опытом в travel-tech проектах. Специализация:
|
||||
Python/Django, React, системы рекомендаций на основе ИИ.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<section class="roadmap">
|
||||
<h2>План разработки</h2>
|
||||
|
||||
<div class="phase">
|
||||
<h3>Этап 1: MVP (0-6 месяцев)</h3>
|
||||
<ul>
|
||||
<li>База мест отдыха (1000+ позиций)</li>
|
||||
<li>Интеграция с API бронирования (Booking.com, Ostrovok)</li>
|
||||
<li>Прототип ИИ-рекомендаций</li>
|
||||
<li>Мобильная версия (PWA)</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="phase">
|
||||
<h3>Этап 2: Монетизация (6-12 месяцев)</h3>
|
||||
<ul>
|
||||
<li>Система комиссий (10-15% с бронирований)</li>
|
||||
<li>Платные подписки (PRO-аккаунт)</li>
|
||||
<li>Партнерская программа для гидов</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="phase">
|
||||
<h3>Этап 3: Масштабирование (12-24 месяца)</h3>
|
||||
<ul>
|
||||
<li>Выход на рынки СНГ (Казахстан, Узбекистан)</li>
|
||||
<li>Полноценный ИИ-ассистент с рекомендациями по здоровью</li>
|
||||
<li>Интеграция с сервисами аренды авто</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Технологический стек</h2>
|
||||
<ul>
|
||||
<li><strong>Frontend:</strong> React.js, TypeScript, PWA</li>
|
||||
<li><strong>Backend:</strong> Python/Django, PostgreSQL</li>
|
||||
<li>
|
||||
<strong>AI:</strong> NLP-модели для обработки запросов,
|
||||
рекомендательные системы
|
||||
</li>
|
||||
<li><strong>DevOps:</strong> Docker, Kubernetes, Yandex Cloud</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<p>© 2024 ЯлАрба. Все права защищены.</p>
|
||||
<p>Контакты: gaziz.valitov@yalarba.travel</p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,53 @@
|
||||
body {
|
||||
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
background-color: #f5f7fa;
|
||||
}
|
||||
header {
|
||||
background-color: #1e88e5;
|
||||
color: white;
|
||||
padding: 20px;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 30px;
|
||||
text-align: center;
|
||||
}
|
||||
h1 {
|
||||
margin: 0;
|
||||
font-size: 2.2em;
|
||||
}
|
||||
h2 {
|
||||
color: #1e88e5;
|
||||
border-bottom: 2px solid #1e88e5;
|
||||
padding-bottom: 5px;
|
||||
margin-top: 30px;
|
||||
}
|
||||
.developer {
|
||||
background-color: #e3f2fd;
|
||||
padding: 15px;
|
||||
border-radius: 8px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.roadmap {
|
||||
background-color: white;
|
||||
padding: 20px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.phase {
|
||||
margin-bottom: 20px;
|
||||
padding-bottom: 20px;
|
||||
border-bottom: 1px dashed #ccc;
|
||||
}
|
||||
.phase:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
footer {
|
||||
text-align: center;
|
||||
margin-top: 40px;
|
||||
color: #666;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
### Есть задания для фрилансеров. Каждое задание 1000 рублей.
|
||||
|
||||
1. Задача настроить авторизацию через coocky no javaScript.
|
||||
2. Хранение состояния через vuex.
|
||||
3. Создать Makefile для работы со сборкой деплоем.
|
||||
|
||||
|
||||
## Project Setup
|
||||
|
||||
```sh
|
||||
npm install
|
||||
```
|
||||
|
||||
### Compile and Hot-Reload for Development
|
||||
|
||||
```sh
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### Compile and Minify for Production
|
||||
|
||||
```sh
|
||||
npm run build
|
||||
```
|
||||
@@ -0,0 +1,30 @@
|
||||
Выбор шрифтов и размеров для мобильных устройств и десктопа зависит от множества факторов, таких как целевая аудитория, дизайн сайта/приложения и цели использования. Тем не менее, есть несколько общих рекомендаций, которые помогут обеспечить хорошую читаемость текста на разных устройствах.
|
||||
|
||||
### Шрифты
|
||||
|
||||
#### Для мобильных устройств:
|
||||
- **Roboto**: Один из самых популярных шрифтов для Android. Он имеет четкий и чистый вид, хорошо подходит для чтения на небольших экранах.
|
||||
- **San Francisco**: Стандартный шрифт для iOS. Хорошо сбалансирован и удобен для чтения.
|
||||
- **Open Sans**: Универсальный шрифт, который отлично смотрится на любых устройствах благодаря своей нейтральной стилистике.
|
||||
|
||||
#### Для десктопных устройств:
|
||||
- **Georgia**: Классический шрифт с засечками, который идеально подходит для длинных текстов. Обеспечивает комфортное чтение даже на больших экранах.
|
||||
- **Lato**: Современный шрифт без засечек, легкий и элегантный. Подходит для заголовков и основного текста.
|
||||
- **Merriweather**: Отличный выбор для длинных статей и блогов. Имеет хорошие пропорции и контрастность.
|
||||
|
||||
### Размеры шрифта
|
||||
|
||||
#### Мобильные устройства:
|
||||
- **Основной текст**: 16px–18px. Это оптимальный размер для комфортного чтения на маленьких экранах.
|
||||
- **Заголовки**: 20px–24px для h2, 18px–22px для h3, 16px–20px для h4.
|
||||
|
||||
#### Десктопные устройства:
|
||||
- **Основной текст**: 18px–20px. Такой размер обеспечивает удобство чтения на больших экранах.
|
||||
- **Заголовки**: 28px–32px для h2, 24px–28px для h3, 20px–24px для h4.
|
||||
|
||||
### Дополнительные советы:
|
||||
- Используйте **относительные единицы измерения** (em, rem) вместо абсолютных (px), чтобы шрифт масштабировался вместе с изменением размера экрана.
|
||||
- Следите за **межстрочным интервалом** (line-height). Оптимальное значение — около 1.5–1.6 для основного текста.
|
||||
- Убедитесь, что у вас достаточно **контраста между текстом и фоном**. Черный текст на белом фоне — классический пример хорошего сочетания.
|
||||
|
||||
Эти рекомендации помогут создать удобный интерфейс как для мобильных пользователей, так и для тех, кто работает за компьютером.
|
||||
@@ -0,0 +1 @@
|
||||
import{_ as m,F as g,a as v}from"./footerB-DAi6c01a.js";import{u as p,o,c as n,b as c,t,r as b,a as l,d as k,F as u,e as f}from"./index-DccGIixi.js";const $={setup(){const{t:e}=p();return{t:e}}},x={class:"container"};function F(e,r,_,a,i,d){return o(),n("div",x,[c("h1",null,t(a.t("messages.tripFreedomAdventure.name")),1),c("p",null,t(a.t("messages.tripFreedomAdventure.text")),1)])}const w=m($,[["render",F],["__scopeId","data-v-aa005713"]]),y="/assets/photo_2025-01-25_05-57-24-BwgIchq6.jpg",A={setup(){const{t:e}=p();return{t:e}},methods:{donat(){window.open("https://www.tinkoff.ru/rm/r_fFXNVwPxmH.VMEQXkfWxO/Ho4MN83486","_blank")}},components:{FTA:w}},z={class:"about"};function C(e,r,_,a,i,d){const s=b("FTA");return o(),n("div",z,[l(s),c("p",null,t(a.t("messages.aboutL.donat-request")),1),c("button",{onClick:r[0]||(r[0]=(...h)=>d.donat&&d.donat(...h)),class:"donat-coffee"},t(a.t("messages.aboutL.donat-coffee")),1),r[1]||(r[1]=c("img",{src:y,alt:"Донат QRcod",class:"QRcod"},null,-1))])}const I=m(A,[["render",C],["__scopeId","data-v-6a219422"]]),B={setup(){const{t:e}=p();return{t:e}},data(){return{loading:!0,commits:[],error:null}},mounted(){this.fetchCommits()},methods:{async fetchCommits(){try{const e=await k.get("https://api.github.com/repos/valitovgaziz/spa_/commits",{headers:{Accept:"application/vnd.github.v3+json"}});this.commits=e.data}catch(e){this.error=e.message||"Произошла неизвестная ошибка"}finally{this.loading=!1}}}},L={key:0},V={key:1},N={key:2};function D(e,r,_,a,i,d){return i.loading?(o(),n("div",L,t(a.t("messages.commits.download")),1)):i.error?(o(),n("ul",V,t(a.t("messages.commits.errorOc"))+": "+t(i.error),1)):(o(),n("ul",N,[r[0]||(r[0]=c("h2",null,"Commits",-1)),(o(!0),n(u,null,f(i.commits,s=>(o(),n("li",{key:s.sha},[c("i",null,t(s.author.login)+" "+t(s.commit.author.date.slice(0,10))+" "+t(s.commit.message),1)]))),128))]))}const H=m(B,[["render",D],["__scopeId","data-v-ab2221db"]]),Q={setup(){const{t:e}=p();return{t:e}},name:"DevelopersList",data(){return{developers:[{nickname:"valitovgaziz",name:"Валитов Газиз",profileUrl:"https://github.com/valitovgaziz"}]}}},T={class:"developers"},j={class:"title"},q={class:"developer-list"},E=["href"];function M(e,r,_,a,i,d){return o(),n("div",T,[c("h1",j,t(a.t("messages.aboutL.developers")),1),c("ul",q,[(o(!0),n(u,null,f(i.developers,s=>(o(),n("li",{key:s.name,class:"developer-item"},[c("a",{href:s.profileUrl,target:"_blank",rel:"noopener noreferrer"},t(s.nickname)+" ("+t(s.name)+") ",9,E)]))),128))])])}const O=m(Q,[["render",M],["__scopeId","data-v-948e9ec5"]]),X={__name:"AboutView",setup(e){return(r,_)=>(o(),n(u,null,[l(g),l(I),l(O),l(H),l(v)],64))}};export{X as default};
|
||||
@@ -0,0 +1 @@
|
||||
.container[data-v-aa005713]{max-width:800px;margin:0 auto;padding:20px}h1[data-v-aa005713]{text-align:center;font-size:32px;margin-bottom:30px}p[data-v-aa005713]{line-height:1.6;font-size:18px}.additional-content[data-v-aa005713]{margin-top:40px}@media screen and (max-width: 600px){.container[data-v-aa005713]{padding:10px}h1[data-v-aa005713]{font-size:24px}p[data-v-aa005713]{font-size:16px}}.about[data-v-6a219422]{height:fit-content;display:flex;flex-direction:column;align-items:center;filter:none;padding:1rem;border-radius:1rem;margin:1rem}.donat-coffee[data-v-6a219422]{margin:1rem;background-color:#59db6d;box-shadow:1px 4px 8px #1b2d2533;border-radius:1rem}.donat-coffee[data-v-6a219422]:hover{cursor:pointer;background-color:#0a9632;color:#fff;box-shadow:1px 4px 8px #0a9632}.QRcod[data-v-6a219422]{height:200px;display:flexbox;border-radius:.5rem}ul[data-v-ab2221db]{max-width:1024px;list-style-type:none;padding:0}li[data-v-ab2221db]{margin:.5rem 0;white-space:pre-wrap;width:100%}.developers[data-v-948e9ec5]{max-width:600px;margin:0 auto;padding:20px}.title[data-v-948e9ec5]{text-align:center;font-size:24px;margin-bottom:20px}.developer-list[data-v-948e9ec5]{list-style-type:none;padding-left:0}.developer-item[data-v-948e9ec5]{margin-bottom:10px}.developer-item a[data-v-948e9ec5]{color:#007bff;text-decoration:none}.developer-item a[data-v-948e9ec5]:hover{text-decoration:underline}
|
||||
@@ -0,0 +1 @@
|
||||
import{_ as u,F as m,a as _}from"./footerB-DAi6c01a.js";import{u as p,d as v,o as n,c as w,b as r,t as l,w as g,v as b,F as h,e as R,a as c}from"./index-DccGIixi.js";const f={setup(){const{t:e}=p();return{t:e}},data(){return{reviews:[],newReview:"",showAll:!1}},computed:{displayedReviews(){return this.showAll?this.reviews:this.reviews.slice(0,5)}},mounted(){this.loadReviews()},methods:{async loadReviews(){try{const e=await v.get("https://yalarba.ru/api/reviews/reviews");this.reviews=e.data.sort((s,d)=>new Date(d.created_at)-new Date(s.created_at))}catch(e){console.error("Ошибка при загрузке отзывов:",e)}},async submitReview(){if(this.newReview.trim())try{const e=await v.post("https://yalarba.ru/api/reviews/reviews",{text:this.newReview});this.reviews.unshift(e.data),this.newReview=""}catch(e){console.error("Ошибка при отправке отзыва:",e)}},formatDate(e){return new Date(e).toLocaleString()},toggleShowAll(){this.showAll=!this.showAll}}},x={class:"reviews-container"},y={class:"add-review"},A=["placeholder"],k=["disabled"],D=["disabled"],F={class:"reviews-list"};function S(e,s,d,a,o,i){return n(),w("div",x,[r("h2",null,l(a.t("messages.reviews.h2review")),1),r("h4",null,l(a.t("messages.reviews.h4review")),1),r("div",y,[g(r("textarea",{"onUpdate:modelValue":s[0]||(s[0]=t=>o.newReview=t),placeholder:a.t("messages.reviews.textareaplaceholder"),rows:"4"},null,8,A),[[b,o.newReview]]),r("button",{onClick:s[1]||(s[1]=(...t)=>i.submitReview&&i.submitReview(...t)),disabled:!o.newReview.trim()},l(a.t("messages.reviews.button")),9,k),r("button",{onClick:s[2]||(s[2]=(...t)=>i.toggleShowAll&&i.toggleShowAll(...t)),disabled:o.reviews.length===0},l(o.showAll?a.t("messages.reviews.hide"):a.t("messages.reviews.viewAll")),9,D)]),r("div",F,[(n(!0),w(h,null,R(i.displayedReviews,t=>(n(),w("div",{key:t.id,class:"review-item"},[r("p",null,l(t.text),1),r("small",null,l(i.formatDate(t.created_at)),1)]))),128))])])}const B=u(f,[["render",S],["__scopeId","data-v-d1550644"]]),I={__name:"FeetbackView",setup(e){return(s,d)=>(n(),w(h,null,[c(m),c(B),c(_)],64))}};export{I as default};
|
||||
@@ -0,0 +1 @@
|
||||
.reviews-container[data-v-d1550644]{max-width:600px;margin:0 auto;padding:20px}.add-review textarea[data-v-d1550644]{width:90%;padding:10px;margin-bottom:10px;border-radius:5px;border:1px solid #ccc;background-color:var(--light-dark-background-color);box-shadow:1px 2px 3px #3d9a60}.add-review textarea[data-v-d1550644]::placeholder{color:var(--light-dark-text-color)}.add-review button[data-v-d1550644]{padding:10px 20px;background-color:var(--button-dark-background-color);color:var(--text-color);border:none;border-radius:.7rem;cursor:pointer;margin-right:10px;box-shadow:1px 2px 3px #3d9a60}.add-review button[data-v-d1550644]:disabled{background-color:var(--disabled-dark-background-color);cursor:not-allowed}.reviews-list[data-v-d1550644]{margin-top:2rem;width:90%}.review-item[data-v-d1550644]{background:var(--light-dark-background-color);padding:15px;border-radius:5px;margin-bottom:10px;box-shadow:1px 2px 3px #3d9a60}.review-item p[data-v-d1550644]{margin:0}.review-item small[data-v-d1550644]{color:var(--light-dark-text-color);font-size:.9em}
|
||||
@@ -0,0 +1 @@
|
||||
@font-face{font-family:OpenSansVariableFont;src:url(/assets/hinted-OpenSans-Regular-DZwYhniE.ttf) format("truetype-variations"),url(/assets/OpenSans-Regular-C74AleX8.woff) format("woff"),url(/assets/OpenSans-Regular-BT0WUJf-.woff2) format("woff2");font-weight:100 900;font-stretch:50% 200%}@font-face{font-family:OpenSansItalicVariableFont;src:url(/assets/hinted-OpenSans-Italic-BD2qe0ib.ttf) format("truetype-variations"),url(/assets/OpenSans-Italic-Cv5d4RQ-.woff) format("woff"),url(/assets/OpenSans-Italic-DNMplG0v.woff2) format("woff2");font-style:italic;font-weight:100 900;font-stretch:50% 200%}@font-face{font-family:RobotoVariableFont;src:url(/assets/hinted-Roboto-Regular-CFXqJ5DR.ttf) format("truetype-variations"),url(/assets/Roboto-Regular-n8vMMKqC.woff) format("woff"),url(/assets/Roboto-Regular-jtJqKL8A.woff2) format("woff2");font-weight:100 900;font-stretch:50% 200%}@font-face{font-family:RobotoItalicVarFont;src:url(/assets/hinted-Roboto-Italic-CDlkg4IH.ttf) format("truetype-variations"),url(/assets/Roboto-Italic-uZr_9iaA.woff) format("woff"),url(/assets/Roboto-Italic-DS1crIJz.woff2) format("woff2");font-style:italic;font-weight:100 900;font-stretch:50% 200%}:root{--font-primary: "OpenSansVariableFont", Arial, sans-serif;--font-secondary: "RobotoItalicVarFont", Arial, sans-serif;--weight-light: 300;--weight-normal: 400;--weight-bold: 700}body{font-family:var(--font-primary);font-weight:var(--weight-normal)}h1,h2,h3{font-family:var(--font-secondary);font-weight:var(--weight-light)}:root{--background-color: #ffffff;--text-color: #1c1d1d;--light-dark-background-color: #ffffff;--light-dark-text-color: #273f2c;--disabled-backgroud-color: rgba(23, 62, 31, .281);--button-text-color: #bac677;--disabled-dark-background-color: rgba(55, 64, 62, .2);--button-dark-background-color: #3cbf40;--light-dark-background-color: #8cd68f}[data-theme=dark]{--background-color: #282828;--text-color: #3cb756;--light-dark-background-color: #4e5e49;--light-dark-text-color: #59f37b;--disabled-dark-background-color: rgba(159, 193, 185, .2);--button-dark-background-color: #395e3a}a{color:inherit;text-decoration:none}a:visited{color:inherit}a:hover{text-decoration:none}a:active{color:inherit}html,body{background-color:var(--background-color);color:var(--text-color);margin:0;padding:0;height:fit-content;width:100%;font-family:Arial,sans-serif;transition:background-color .3s,color .3s;min-width:320px}body{display:flex;flex-direction:column;align-items:center;justify-content:center}.main{margin:2rem;min-height:90vh;min-width:320px;max-width:1024px;height:100%;width:100%;border-radius:1rem;display:flex;align-items:center;flex-direction:column;justify-content:space-between;padding:1rem 0 0}@media only screen and (max-width: 600px){.main{margin:.5rem;min-height:80vh;min-width:auto;max-width:90vw;width:90%;border-radius:.5rem}}
|
||||
@@ -0,0 +1 @@
|
||||
import{F as a,a as r}from"./footerB-DAi6c01a.js";import{S as o}from"./searchLine-3vDx-8Ye.js";import{c as t,a as e,F as s,o as c}from"./index-DccGIixi.js";const f={__name:"HomeView",setup(m){return(n,p)=>(c(),t(s,null,[e(a),e(o),e(r)],64))}};export{f as default};
|
||||
@@ -0,0 +1 @@
|
||||
import{_ as x,F as V,a as F}from"./footerB-DAi6c01a.js";import{i as d,u as S,j as B,k as I,l as L,m as s,o as c,c as m,t as n,b as e,w as h,v as g,f as A,a as p,F as M}from"./index-DccGIixi.js";const R={key:0},q={key:1,class:"logout"},C={key:2,class:"login-form"},D={class:"form-group"},E={for:"email"},N=["placeholder"],U={class:"form-group"},$={for:"password"},j=["placeholder"],G={type:"submit"},H={__name:"inout",setup(v){const l=d("");d(!0);const a=d("");d(!0);const{t:r}=S(),_=B(),i=I();let t=d(!1);L(async()=>{t=!0,i.checkAuth().catch(o=>console.error("Check auth failed",o)),t=!1});async function w(){if(t=!0,!b(l.value)||!y(a.value)){alert("Пожалуйста, заполните все поля корректно."),t=!1;return}try{await i.login({email:l.value,password:a.value}),t=!1,_.push("/")}catch(o){console.error(o),alert("Неверный email или пароль. Попробуйте снова.")}}function y(o){return!(a.length===0||a.length<6)}function b(o){return!(o.length===0||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o))}function k(){t=!0,i.logout(),t=!1,_.push("/")}return(o,u)=>s(t)?(c(),m("div",R,n(s(r)("messages.load"))+" . . .",1)):s(i).isAuthenticated?(c(),m("div",q,[e("div",null,[e("p",null,"Good by "+n(s(i).user.name)+"!",1),e("button",{onClick:k},"Logout")])])):(c(),m("div",C,[e("h1",null,n(s(r)("messages.inout.login")),1),e("form",{onSubmit:A(w,["prevent"])},[e("div",D,[e("label",E,n(s(r)("messages.inout.email"))+": ",1),h(e("input",{"onUpdate:modelValue":u[0]||(u[0]=f=>l.value=f),type:"email",id:"email",required:"",placeholder:s(r)("messages.inout.email")},null,8,N),[[g,l.value,void 0,{trim:!0}]])]),e("div",U,[e("label",$,n(s(r)("messages.inout.password"))+": ",1),h(e("input",{"onUpdate:modelValue":u[1]||(u[1]=f=>a.value=f),type:"password",id:"password",required:"",placeholder:s(r)("messages.inout.password")},null,8,j),[[g,a.value,void 0,{trim:!0}]])]),e("button",G,n(s(r)("messages.inout.login")),1)],32)]))}},P=x(H,[["__scopeId","data-v-1bd59691"]]),J={__name:"LogInView",setup(v){return(l,a)=>(c(),m(M,null,[p(V),p(P),p(F)],64))}};export{J as default};
|
||||
@@ -0,0 +1 @@
|
||||
.login-form[data-v-1bd59691]{padding:0 2rem 2rem;border:1px solid #ccc;border-radius:1rem;box-shadow:1px 2px 3px #609f7d}.form-group[data-v-1bd59691]{margin-bottom:1rem}.form-group label[data-v-1bd59691]{display:block}.form-group input[data-v-1bd59691]{padding:.7rem;border:none;border-radius:1rem;background-color:var(--light-dark-background-color);color:var(--text-color);box-shadow:1px 2px 3px #609f7d}button[data-v-1bd59691]{margin-top:.7rem;padding:.7rem 1.7rem;background-color:var(--button-dark-background-color);color:var(--text-color);border:none;border-radius:1rem;cursor:pointer;box-shadow:1px 2px 3px #609f7d}button[data-v-1bd59691]:hover{box-shadow:0 0 6px #609f7d}
|
||||
@@ -0,0 +1 @@
|
||||
import{_ as m,F as p,a as _}from"./footerB-DAi6c01a.js";import{o as r,c as l,b as e,t as n,w as v,v as y,f as P,F as u,e as d,g as h,a as c}from"./index-DccGIixi.js";const k={name:"Profile",data(){return{user:{avatar:"https://via.placeholder.com/150",name:"Иван Иванов",email:"ivan@example.com",places:[{id:1,title:"Место 1",description:"Описание места 1",editUrl:"/edit-place/1"},{id:2,title:"Место 2",description:"Описание места 2",editUrl:"/edit-place/2"}]},searchQuery:""}},computed:{filteredPlaces(){return this.searchQuery?this.user.places.filter(o=>o.title.toLowerCase().includes(this.searchQuery.toLowerCase())):this.user.places}},methods:{editUserInfo(){alert("Редактируем информацию о пользователе...")},searchPlaces(){console.log(`Поиск мест по запросу: ${this.searchQuery}`)}}},g={class:"profile"},x={class:"profile-header"},Q=["src"],U={class:"name"},w={class:"email"},b={class:"search-form"},C={key:0,class:"search-results"},F=["href"],V={key:1,class:"places-list"},B=["href"];function I(o,s,f,N,i,a){return r(),l("div",g,[e("header",x,[e("img",{src:i.user.avatar,alt:"Avatar",class:"avatar"},null,8,Q),e("h1",U,n(i.user.name),1),e("p",w,n(i.user.email),1)]),e("button",{onClick:s[0]||(s[0]=t=>a.editUserInfo()),class:"edit-profile-btn"},"Редактировать профиль"),e("form",b,[v(e("input",{type:"text",placeholder:"Поиск...","onUpdate:modelValue":s[1]||(s[1]=t=>i.searchQuery=t)},null,512),[[y,i.searchQuery,void 0,{trim:!0}]]),e("button",{onClick:s[2]||(s[2]=P(t=>a.searchPlaces(),["prevent"]))},"Найти")]),a.filteredPlaces.length>0&&i.searchQuery!==""?(r(),l("section",C,[s[3]||(s[3]=e("h2",null,"Результаты поиска",-1)),e("ul",null,[(r(!0),l(u,null,d(a.filteredPlaces,t=>(r(),l("li",{key:t.id,class:"place-item"},[e("h3",null,[e("a",{href:t.editUrl},n(t.title),9,F)]),e("p",null,n(t.description),1)]))),128))])])):h("",!0),a.filteredPlaces.length>0?(r(),l("section",V,[s[4]||(s[4]=e("h2",null,"Места",-1)),e("ul",null,[(r(!0),l(u,null,d(a.filteredPlaces,t=>(r(),l("li",{key:t.id,class:"place-item"},[e("h3",null,[e("a",{href:t.editUrl},n(t.title),9,B)]),e("p",null,n(t.description),1)]))),128))])])):h("",!0)])}const L=m(k,[["render",I],["__scopeId","data-v-f0c15aba"]]),A={__name:"ProfileView",setup(o){return(s,f)=>(r(),l(u,null,[c(p),c(L),c(_)],64))}};export{A as default};
|
||||
@@ -0,0 +1 @@
|
||||
.profile[data-v-f0c15aba]{display:flex;flex-direction:column;align-items:center}.profile-header[data-v-f0c15aba]{text-align:center;margin-bottom:20px}.avatar[data-v-f0c15aba]{width:100px;height:100px;border-radius:50%;object-fit:cover;margin-bottom:10px}.name[data-v-f0c15aba]{font-size:24px;margin-top:0}.email[data-v-f0c15aba]{color:#666;font-size:16px}.edit-profile-btn[data-v-f0c15aba]{padding:8px 12px;background-color:#4caf50;color:#fff;border:none;cursor:pointer;margin-bottom:20px}.places-list h2[data-v-f0c15aba],.search-results h2[data-v-f0c15aba]{margin-top:30px;margin-bottom:10px}.place-item[data-v-f0c15aba]{margin-bottom:15px}.search-form[data-v-f0c15aba]{max-width:300px;width:100%;margin-bottom:20px}.search-form input[data-v-f0c15aba]{width:calc(100% - 80px);padding:8px;border:1px solid #ccc;border-right:none;border-top-left-radius:5px;border-bottom-left-radius:5px}.search-form button[data-v-f0c15aba]{width:70px;padding:8px;background-color:#2196f3;color:#fff;border:none;border-top-right-radius:5px;border-bottom-right-radius:5px;cursor:pointer}@media (max-width: 600px){.profile[data-v-f0c15aba]{width:90%}.search-form[data-v-f0c15aba]{width:100%}}
|
||||
@@ -0,0 +1 @@
|
||||
.form-name-h3[data-v-cf5dfe80]{margin-top:0;padding-top:0;height:1.5rem}.register-form[data-v-cf5dfe80]{max-width:fit-content;padding:1rem 2rem 2rem;border-radius:1rem;box-shadow:1px 2px 5px #609f7d}.form-group[data-v-cf5dfe80]{margin-bottom:1rem}.form-group label[data-v-cf5dfe80]{display:block}.form-group input[data-v-cf5dfe80]{padding:.7rem;border-radius:1rem;border:1px solid #439c5f;background-color:var(--light-dark-background-color);color:var(--texgt-color);box-shadow:1px 2px 3px #439c5f}button[data-v-cf5dfe80]{margin-top:1rem;padding:.7rem 1.4rem;background-color:var(--button-dark-background-color);color:#fff;border:none;border-radius:1rem;cursor:pointer;box-shadow:1px 2px 3px #a1c3ab;border:1px solid rgb(124,171,156)}button[data-v-cf5dfe80]:hover{box-shadow:0 0 6px #4b675e}
|
||||
@@ -0,0 +1 @@
|
||||
import{_,F as m,a as f}from"./footerB-DAi6c01a.js";import{o as n,c as o,b as e,t as a,F as i,e as p,a as r,n as g,r as b,p as c}from"./index-DccGIixi.js";const k="/assets/restObject-CcS1cBol.jpg",h={name:"PlaceDetails",props:{place:Object}},x={class:"place-details"},j={class:"place-header"},v={class:"place-info"},y={class:"place-name"},B={class:"place-type"},F={class:"place-coordinates"},O={class:"place-contacts"},V={class:"place-reviews"},C={class:"place-actions"};function N(d,s,t,D,P,R){const u=b("router-link");return n(),o("div",x,[e("header",j,[s[0]||(s[0]=e("img",{src:k,alt:"Фото места",class:"place-image"},null,-1)),e("div",v,[e("h1",y,a(t.place.name),1),e("span",B,"Тип: "+a(t.place.type),1),e("span",F,"Координаты: "+a(t.place.coordinates),1)])]),e("section",O,[s[1]||(s[1]=e("h2",null,"Контакты",-1)),e("ul",null,[(n(!0),o(i,null,p(t.place.contacts,l=>(n(),o("li",{key:l.id},[e("strong",null,a(l.label)+":",1),c(" "+a(l.value),1)]))),128))])]),e("section",V,[s[4]||(s[4]=e("h2",null,"Отзывы",-1)),e("ul",null,[(n(!0),o(i,null,p(t.place.reviews,l=>(n(),o("li",{key:l.id},[e("p",null,[s[2]||(s[2]=e("strong",null,"Автор:",-1)),c(" "+a(l.author),1)]),e("p",null,[s[3]||(s[3]=e("strong",null,"Отзыв:",-1)),c(" "+a(l.text),1)])]))),128))])]),e("footer",C,[r(u,{to:`/edit/${t.place.id}`,class:"btn-edit"},{default:g(()=>s[5]||(s[5]=[c("Редактировать")])),_:1},8,["to"])])])}const w=_(h,[["render",N],["__scopeId","data-v-4f7fe9ca"]]),H={__name:"RestObjectView",setup(d){return(s,t)=>(n(),o(i,null,[r(m),r(w,{place:s.mockPlace},null,8,["place"]),r(f)],64))}};export{H as default};
|
||||
@@ -0,0 +1 @@
|
||||
.place-details[data-v-4f7fe9ca]{display:flex;flex-direction:column;gap:20px;padding:20px}.place-header[data-v-4f7fe9ca]{display:flex;gap:20px;align-items:center}.place-image[data-v-4f7fe9ca]{width:200px;height:200px;object-fit:cover;border-radius:10px}.place-info[data-v-4f7fe9ca]{display:flex;flex-direction:column;gap:10px}.place-name[data-v-4f7fe9ca]{font-size:24px;margin:0}.place-type[data-v-4f7fe9ca],.place-coordinates[data-v-4f7fe9ca]{font-size:18px;color:#555}.place-contacts[data-v-4f7fe9ca],.place-reviews[data-v-4f7fe9ca]{border:1px solid #ddd;padding:20px;border-radius:10px}.place-contacts li[data-v-4f7fe9ca],.place-reviews li[data-v-4f7fe9ca]{margin-bottom:10px}.btn-edit[data-v-4f7fe9ca]{padding:10px 20px;background-color:#4caf50;color:#fff;text-decoration:none;border-radius:5px;display:inline-block;text-align:center}@media (min-width: 768px){.place-details[data-v-4f7fe9ca]{gap:40px;padding:40px}.place-header[data-v-4f7fe9ca]{gap:40px}.place-image[data-v-4f7fe9ca]{width:300px;height:300px}.place-name[data-v-4f7fe9ca]{font-size:32px}.place-type[data-v-4f7fe9ca],.place-coordinates[data-v-4f7fe9ca]{font-size:22px}.place-contacts[data-v-4f7fe9ca],.place-reviews[data-v-4f7fe9ca]{padding:30px}.place-contacts li[data-v-4f7fe9ca],.place-reviews li[data-v-4f7fe9ca]{margin-bottom:15px}.btn-edit[data-v-4f7fe9ca]{padding:15px 30px}}
|
||||
@@ -0,0 +1 @@
|
||||
import{_ as o,F as n,a as c}from"./footerB-DAi6c01a.js";import{o as t,c as r,b as _,a as e,F as l}from"./index-DccGIixi.js";import{S as u}from"./searchLine-3vDx-8Ye.js";const m={},i={class:"results"};function f(a,s){return t(),r("div",i,s[0]||(s[0]=[_("h1",null,"Results",-1)]))}const p=o(m,[["render",f]]),h={__name:"ResultsView",setup(a){return(s,d)=>(t(),r(l,null,[e(n),e(u),e(p),e(c)],64))}};export{h as default};
|
||||
@@ -0,0 +1 @@
|
||||
.results{background-color:#2f4f4f}
|
||||
@@ -0,0 +1 @@
|
||||
import{_ as r,F as c,a as _}from"./footerB-DAi6c01a.js";import{o as s,c as n,b as i,a as t,F as p}from"./index-DccGIixi.js";const m={name:"Settings"},d={class:"settings"};function l(a,e,o,f,g,F){return s(),n("div",d,e[0]||(e[0]=[i("h1",null,"Settings",-1)]))}const u=r(m,[["render",l]]),B={__name:"SettingsView",setup(a){return(e,o)=>(s(),n(p,null,[t(c),t(u),t(_)],64))}};export{B as default};
|
||||
@@ -0,0 +1 @@
|
||||
.settings{background-color:#856565}
|
||||
@@ -0,0 +1 @@
|
||||
import{_ as c,F as g,a as _}from"./footerB-DAi6c01a.js";import{d as h,o,c as a,b as t,w as u,v as p,t as l,g as d,f as b,a as m,F as M}from"./index-DccGIixi.js";const x={data(){return{formData:{email:"",text:""},isLoading:!1,successMessage:"",errorMessage:""}},methods:{async submitForm(){this.isLoading=!0,this.successMessage="",this.errorMessage="";try{console.log(this.formData),(await h.post("https://yalarba.ru/api/support/support",this.formData)).status===201?(this.successMessage="Сообщение успешно отправлено!",this.formData.email="",this.formData.text=""):this.errorMessage="Произошла ошибка при отправке сообщения."}catch{this.errorMessage="Произошла ошибка при отправке сообщения."}finally{this.isLoading=!1}}}},D={class:"support-form"},y={class:"form-group"},v={class:"form-group"},F=["disabled"],V={key:0,class:"success-message"},w={key:1,class:"error-message"};function L(i,s,f,B,e,n){return o(),a("div",D,[s[5]||(s[5]=t("h2",null,"Техническая поддержка",-1)),t("form",{onSubmit:s[2]||(s[2]=b((...r)=>n.submitForm&&n.submitForm(...r),["prevent"]))},[t("div",y,[s[3]||(s[3]=t("label",{for:"email"},"Ваш email:",-1)),u(t("input",{type:"email",id:"email","onUpdate:modelValue":s[0]||(s[0]=r=>e.formData.email=r),required:"",placeholder:"Введите ваш email"},null,512),[[p,e.formData.email]])]),t("div",v,[s[4]||(s[4]=t("label",{for:"message"},"Сообщение:",-1)),u(t("textarea",{id:"message","onUpdate:modelValue":s[1]||(s[1]=r=>e.formData.text=r),required:"",placeholder:"Опишите вашу проблему"},null,512),[[p,e.formData.text]])]),t("button",{type:"submit",disabled:e.isLoading},l(e.isLoading?"Отправка...":"Отправить"),9,F),e.successMessage?(o(),a("p",V,l(e.successMessage),1)):d("",!0),e.errorMessage?(o(),a("p",w,l(e.errorMessage),1)):d("",!0)],32)])}const k=c(x,[["render",L],["__scopeId","data-v-ba31f826"]]),q={__name:"SupportView",setup(i){return(s,f)=>(o(),a(M,null,[m(g),m(k),m(_)],64))}};export{q as default};
|
||||
@@ -0,0 +1 @@
|
||||
.support-form[data-v-ba31f826]{max-width:700px;margin:0 auto;padding:1rem;border-radius:1rem}h2[data-v-ba31f826]{text-align:center;margin-bottom:2rem}.form-group[data-v-ba31f826]{margin-bottom:1rem}label[data-v-ba31f826]{display:block;margin-bottom:5px;font-weight:700}input[data-v-ba31f826],textarea[data-v-ba31f826]{width:100%;padding:10px;border:none;border-radius:1rem;font-size:16px;background-color:var(--light-dark-background-color);box-shadow:1px 2px 3px #00ffa2}input[data-v-ba31f826]::placeholder,textarea[data-v-ba31f826]::placeholder{color:var(--light-dark-text-color)}textarea[data-v-ba31f826]{resize:vertical;min-height:150px}button[data-v-ba31f826]{width:50%;padding:10px;color:var(--light-dark-text-color);background-color:var(--light-dark-background-color);border:none;border-radius:.5rem;font-size:16px;cursor:pointer;box-shadow:1px 2px 3px #64c799}button[data-v-ba31f826]:disabled{background-color:#ccc;cursor:not-allowed}.success-message[data-v-ba31f826]{color:green;text-align:center;margin-top:10px}.error-message[data-v-ba31f826]{color:red;text-align:center;margin-top:10px}@media (max-width: 600px){.support-form[data-v-ba31f826]{padding:15px}input[data-v-ba31f826],textarea[data-v-ba31f826],button[data-v-ba31f826]{font-size:14px}}
|
||||
|
After Width: | Height: | Size: 40 KiB |
@@ -0,0 +1 @@
|
||||
.hamburger[data-v-e4c072fc]{cursor:pointer;display:flex;flex-direction:column;justify-content:space-around;height:24px;width:24px;padding:.6rem;border-radius:50%;box-shadow:1px 2px 3px #b3d2d8;background-color:var(--background-color)}.hamburger[data-v-e4c072fc]:hover{box-shadow:0 0 6px #92abb0}.line[data-v-e4c072fc]{width:100%;height:3px;background-color:var(--text-color);transition:all .3s ease}.line-1[data-v-e4c072fc]{transform:rotate(45deg) translate(5px,5px)}.line-2[data-v-e4c072fc]{opacity:0}.line-3[data-v-e4c072fc]{transform:rotate(-45deg) translate(5px,-5px)}.menuH[data-v-d5d87da0]{height:100%;position:relative;display:flex;flex-direction:column;align-items:flex-end;justify-content:center}#ul-m[data-v-d5d87da0]{position:absolute;top:3rem;right:1rem;width:25vw;min-width:300px;visibility:hidden;border-radius:1rem;box-shadow:1px 2px 3px #8de1d6;padding:.5rem;list-style-type:none;background-color:var(--background-color)}li[data-v-d5d87da0]{width:100%;padding:.3rem;text-decoration:none}li[data-v-d5d87da0] *{text-decoration:none}li[data-v-d5d87da0]:hover{cursor:pointer;background-color:#5c7171;border-radius:.3rem}.visible[data-v-d5d87da0]{visibility:visible!important}#rl-about[data-v-da10bb5b]{display:flex;flex-direction:row;align-items:center;justify-content:center;border-radius:50%;padding:1rem;height:1rem;width:1rem;box-shadow:1px 2px 3px #b3d2d8}#rl-about[data-v-da10bb5b]:hover{cursor:pointer;box-shadow:0 0 6px #b3d2d8}img[data-v-da10bb5b]{height:2rem;border-radius:50%;padding:.4rem}.language-selector[data-v-f5abd657]{position:relative;display:inline-block;background-color:var(--light-dark-background-clor);color:var(--text-color);box-shadow:1px 2px 3px #75c2d0;border-radius:50%;padding:.5rem}.language-selector[data-v-f5abd657]:hover{border-radius:50%;box-shadow:0 0 6px #75c2d0;box-shadow:0 0 7px #75c2d0;box-shadow:0 0 8px #75c2d0}.lang-icon[data-v-f5abd657]{cursor:pointer;font-size:1.5em}.dropdown-menu[data-v-f5abd657]{position:absolute;top:100%;right:0;border:1px solid #ccc;border-radius:4px;z-index:1000;box-shadow:1px 2px 3px #75c2d0;background-color:var(--background-color)}.dropdown-item[data-v-f5abd657]{padding:8px 16px;cursor:pointer;color:var(--text-color);border-radius:1rem}.dropdown-item[data-v-f5abd657]:hover{background-color:var(--light-dark-background-color)}.theme-toggle[data-v-0d1e5383]{display:flex;align-items:center;justify-content:center;box-shadow:1px 2px 3px #b3d2d8;border-radius:50%;height:2rem;width:2rem;padding:.5rem}.theme-toggle[data-v-0d1e5383]:hover{box-shadow:0 0 6px #b3d2d8}.theme-toggle__label[data-v-0d1e5383]{display:flex;align-items:center;cursor:pointer}.theme-toggle__input[data-v-0d1e5383]{display:none}.theme-toggle__slider[data-v-0d1e5383]{width:40px;height:20px;background-color:#ccc;border-radius:20px;position:relative;transition:background-color .3s}.theme-toggle__slider[data-v-0d1e5383]:before{content:"";position:absolute;width:16px;height:16px;border-radius:50%;background-color:#fff;top:2px;left:2px;transition:transform .3s}.theme-toggle__input:checked+.theme-toggle__slider[data-v-0d1e5383]{background-color:#4caf50}.theme-toggle__input:checked+.theme-toggle__slider[data-v-0d1e5383]:before{transform:translate(20px)}.header[data-v-681057a5]{max-width:1024px;width:50%;min-width:400px;height:100%;margin:0;padding:0;border-radius:1rem;display:flex;flex-direction:row;align-items:center;justify-content:space-between;height:3rem}.footer[data-v-0fdbac37]{height:3rem;width:100%;max-width:500px;display:flex;flex-direction:row;align-items:center;align-content:center;justify-content:space-between;padding:0 2rem;margin:0 0 .5rem}.navigation[data-v-0fdbac37]{height:100%;width:100%;margin:.3rem;border:1px solid;display:flex;flex-direction:column;align-items:center;justify-content:center;border:1px solid rgb(197,214,216);border-radius:1rem;box-shadow:1px 2px 3px #80c7d3}.navigation[data-v-0fdbac37]:hover{cursor:pointer;box-shadow:0 0 7px #80c7d3}img[data-v-0fdbac37]{height:100%}
|
||||
@@ -0,0 +1 @@
|
||||
@font-face{font-family:OpenSansVariableFont;src:url(/assets/hinted-OpenSans-Regular-DZwYhniE.ttf) format("truetype-variations"),url(/assets/OpenSans-Regular-C74AleX8.woff) format("woff"),url(/assets/OpenSans-Regular-BT0WUJf-.woff2) format("woff2");font-weight:100 900;font-stretch:50% 200%}@font-face{font-family:OpenSansItalicVariableFont;src:url(/assets/hinted-OpenSans-Italic-BD2qe0ib.ttf) format("truetype-variations"),url(/assets/OpenSans-Italic-Cv5d4RQ-.woff) format("woff"),url(/assets/OpenSans-Italic-DNMplG0v.woff2) format("woff2");font-style:italic;font-weight:100 900;font-stretch:50% 200%}@font-face{font-family:RobotoVariableFont;src:url(/assets/hinted-Roboto-Regular-CFXqJ5DR.ttf) format("truetype-variations"),url(/assets/Roboto-Regular-n8vMMKqC.woff) format("woff"),url(/assets/Roboto-Regular-jtJqKL8A.woff2) format("woff2");font-weight:100 900;font-stretch:50% 200%}@font-face{font-family:RobotoItalicVarFont;src:url(/assets/hinted-Roboto-Italic-CDlkg4IH.ttf) format("truetype-variations"),url(/assets/Roboto-Italic-uZr_9iaA.woff) format("woff"),url(/assets/Roboto-Italic-DS1crIJz.woff2) format("woff2");font-style:italic;font-weight:100 900;font-stretch:50% 200%}:root{--background-color: #ffffff;--text-color: #1c1d1d;--light-dark-background-color: #ffffff;--light-dark-text-color: #273f2c;--disabled-backgroud-color: rgba(23, 62, 31, .281);--button-text-color: #bac677;--disabled-dark-background-color: rgba(55, 64, 62, .2);--button-dark-background-color: #3cbf40;--light-dark-background-color: #8cd68f}[data-theme=dark]{--background-color: #282828;--text-color: #3cb756;--light-dark-background-color: #4e5e49;--light-dark-text-color: #59f37b;--disabled-dark-background-color: rgba(159, 193, 185, .2);--button-dark-background-color: #395e3a}a{color:inherit;text-decoration:none}a:visited{color:inherit}a:hover{text-decoration:none}a:active{color:inherit}html,body{background-color:var(--background-color);color:var(--text-color);margin:0;padding:0;height:fit-content;width:100%;font-family:Arial,sans-serif;transition:background-color .3s,color .3s;min-width:320px}body{display:flex;flex-direction:column;align-items:center;justify-content:center}.main{margin:2rem;min-height:90vh;min-width:320px;max-width:1024px;height:100%;width:100%;border-radius:1rem;display:flex;align-items:center;flex-direction:column;justify-content:space-between;padding:1rem 0 0}@media only screen and (max-width: 600px){.main{margin:.5rem;min-height:80vh;min-width:auto;max-width:90vw;width:90%;border-radius:.5rem}}@font-face{font-family:OpenSansVariableFont;src:url(/assets/hinted-OpenSans-Regular-DZwYhniE.ttf) format("truetype-variations"),url(/assets/OpenSans-Regular-C74AleX8.woff) format("woff"),url(/assets/OpenSans-Regular-BT0WUJf-.woff2) format("woff2");font-weight:100 900;font-stretch:50% 200%}@font-face{font-family:OpenSansItalicVariableFont;src:url(/assets/hinted-OpenSans-Italic-BD2qe0ib.ttf) format("truetype-variations"),url(/assets/OpenSans-Italic-Cv5d4RQ-.woff) format("woff"),url(/assets/OpenSans-Italic-DNMplG0v.woff2) format("woff2");font-style:italic;font-weight:100 900;font-stretch:50% 200%}@font-face{font-family:RobotoVariableFont;src:url(/assets/hinted-Roboto-Regular-CFXqJ5DR.ttf) format("truetype-variations"),url(/assets/Roboto-Regular-n8vMMKqC.woff) format("woff"),url(/assets/Roboto-Regular-jtJqKL8A.woff2) format("woff2");font-weight:100 900;font-stretch:50% 200%}@font-face{font-family:RobotoItalicVarFont;src:url(/assets/hinted-Roboto-Italic-CDlkg4IH.ttf) format("truetype-variations"),url(/assets/Roboto-Italic-uZr_9iaA.woff) format("woff"),url(/assets/Roboto-Italic-DS1crIJz.woff2) format("woff2");font-style:italic;font-weight:100 900;font-stretch:50% 200%}:root{--font-primary: "OpenSansVariableFont", Arial, sans-serif;--font-secondary: "RobotoItalicVarFont", Arial, sans-serif;--weight-light: 300;--weight-normal: 400;--weight-bold: 700}body{font-family:var(--font-primary);font-weight:var(--weight-normal)}h1,h2,h3{font-family:var(--font-secondary);font-weight:var(--weight-light)}
|
||||
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 88 KiB |
@@ -0,0 +1 @@
|
||||
import{u as h,o as a,c as o,b as r,F as u,e as c,t as d,g as m,w as p,v,h as f}from"./index-DccGIixi.js";import{_ as g}from"./footerB-DAi6c01a.js";const y={setup(){const{t:i}=h();return{t:i}},data(){return{searchQuery:"",isMenuVisible:!1,searchOptions:["Пляжи","Горы","Отели","Рестораны"]}},methods:{performSearch(){this.searchQuery.trim()&&this.$router.push({name:"results",query:{q:this.searchQuery}})},toggleMenu(){this.isMenuVisible=!this.isMenuVisible},selectOption(i){this.searchQuery=i,this.isMenuVisible=!1,this.performSearch()}}},M={class:"search-container"},S={class:"search-input-container"},V={key:0,class:"search-menu"},_=["onClick"],b=["placeholder"];function k(i,e,w,l,n,t){return a(),o("div",M,[r("div",S,[r("div",{class:"menu-icon",onClick:e[0]||(e[0]=(...s)=>t.toggleMenu&&t.toggleMenu(...s))},e[4]||(e[4]=[r("svg",{viewBox:"0 0 24 24",width:"24",height:"24"},[r("path",{d:"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z",fill:"currentColor"})],-1)])),n.isMenuVisible?(a(),o("div",V,[(a(!0),o(u,null,c(n.searchOptions,s=>(a(),o("div",{class:"menu-item",key:s,onClick:C=>t.selectOption(s)},d(s),9,_))),128))])):m("",!0),p(r("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>n.searchQuery=s),onKeyup:e[2]||(e[2]=f((...s)=>t.performSearch&&t.performSearch(...s),["enter"])),class:"search-input",placeholder:l.t("messages.searchPlaceholder")},null,40,b),[[v,n.searchQuery]]),r("button",{onClick:e[3]||(e[3]=(...s)=>t.performSearch&&t.performSearch(...s)),class:"search-button"},e[5]||(e[5]=[r("svg",{viewBox:"0 0 24 24",width:"24",height:"24"},[r("path",{d:"M10 18a8 8 0 1 1 0-16 8 8 0 0 1 0 16zm8-8a7.95 7.95 0 0 1-1.757 4.95l4.95 4.95-1.414 1.414-4.95-4.95A7.95 7.95 0 0 1 10 18z",fill:"currentColor"})],-1)]))])])}const z=g(y,[["render",k],["__scopeId","data-v-a8d17828"]]);export{z as S};
|
||||
@@ -0,0 +1 @@
|
||||
.search-container[data-v-a8d17828]{position:relative;width:100%;max-width:600px;margin:auto;border-radius:25px;background-color:var(--light-dark-background-color);color:var(--light-dark-text-color);box-shadow:0 2px 5px #0003}.search-input-container[data-v-a8d17828]{display:flex;align-items:center;padding:.5rem}.menu-icon[data-v-a8d17828]{cursor:pointer;margin-right:10px;height:100%}.search-input[data-v-a8d17828]{flex-grow:1;border:none;outline:none;border-radius:2rem;background-color:var(--light-dark-background-color);color:var(--light-dark-text-color)}.search-input[data-v-a8d17828]::placeholder{color:var(--light-dark-text-color)}.search-button[data-v-a8d17828]{background:none;border:none;cursor:pointer}.search-menu[data-v-a8d17828]{position:absolute;top:60px;left:0;right:0;background:none;border-radius:10px;box-shadow:0 4px 6px #0000001a;z-index:1000}.menu-item[data-v-a8d17828]{cursor:pointer}.menu-item[data-v-a8d17828]:hover{background-color:none}
|
||||
@@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="icon" href="/assets/YalArbaLogo300-BGWtRO6S.png">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<title>YalArba</title>
|
||||
<script type="module" crossorigin src="/assets/index-DccGIixi.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-B44ZMC8Y.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="icon" href="/src/components/images/YalArbaLogo300.png">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="/src/assets/main.css">
|
||||
<title>YalArba</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"paths": {
|
||||
"@/*": ["./src/*"]
|
||||
},
|
||||
},
|
||||
"exclude": ["node_modules", "dist"],
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"name": "spa",
|
||||
"version": "0.0.1",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.7.9",
|
||||
"body-parser": "^1.20.3",
|
||||
"cors": "^2.8.5",
|
||||
"express": "^4.21.2",
|
||||
"jwt-decode": "^4.0.0",
|
||||
"pg": "^8.13.1",
|
||||
"pinia": "^2.3.1",
|
||||
"vue": "^3.5.13",
|
||||
"vue-i18n": "^11.1.0",
|
||||
"vue-material-design-icons": "^5.3.1",
|
||||
"vue-router": "^4.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^5.2.1",
|
||||
"vite": "^6.0.5",
|
||||
"vite-plugin-vue-devtools": "^7.6.8"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<script setup>
|
||||
import { RouterLink, RouterView } from 'vue-router'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="main">
|
||||
<RouterView />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
@@ -0,0 +1,23 @@
|
||||
/* Светлая тема (по умолчанию) */
|
||||
:root {
|
||||
--background-color: #ffffff;
|
||||
--text-color: #1c1d1d;
|
||||
--light-dark-background-color: #ffffff;
|
||||
--light-dark-text-color: #273f2c;
|
||||
--disabled-backgroud-color: rgba(23, 62, 31, 0.281);
|
||||
--button-text-color: #bac677;
|
||||
--disabled-dark-background-color: rgba(55, 64, 62, 0.2);
|
||||
--button-dark-background-color: #3cbf40;
|
||||
--light-dark-background-color: #8cd68f;
|
||||
}
|
||||
|
||||
/* Темная тема */
|
||||
[data-theme="dark"] {
|
||||
--background-color: #282828;
|
||||
--text-color: #3cb756;
|
||||
--light-dark-background-color: #4e5e49;
|
||||
--light-dark-text-color: #59f37b;
|
||||
--disabled-dark-background-color: rgba(159, 193, 185, 0.2);
|
||||
--button-dark-background-color: #395e3a;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
@font-face {
|
||||
font-family: 'OpenSansVariableFont';
|
||||
src: url('./fonts/Open_Sans/hinted-OpenSans-Regular.ttf') format('truetype-variations'),
|
||||
url('./fonts/Open_Sans/OpenSans-Regular.woff') format('woff'),
|
||||
url('./fonts/Open_Sans/OpenSans-Regular.woff2') format('woff2');
|
||||
font-weight: 100 900;
|
||||
font-stretch: 50% 200%;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'OpenSansItalicVariableFont';
|
||||
src: url('./fonts/Open_Sans/hinted-OpenSans-Italic.ttf') format('truetype-variations'),
|
||||
url('./fonts/Open_Sans/OpenSans-Italic.woff') format('woff'),
|
||||
url('./fonts/Open_Sans/OpenSans-Italic.woff2') format('woff2');
|
||||
font-style: italic;
|
||||
font-weight: 100 900;
|
||||
font-stretch: 50% 200%;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'RobotoVariableFont';
|
||||
src: url('./fonts/Roboto/hinted-Roboto-Regular.ttf') format('truetype-variations'),
|
||||
url('./fonts/Roboto/Roboto-Regular.woff') format('woff'),
|
||||
url('./fonts/Roboto/Roboto-Regular.woff2') format('woff2');
|
||||
font-weight: 100 900;
|
||||
font-stretch: 50% 200%;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'RobotoItalicVarFont';
|
||||
src: url('./fonts/Roboto/hinted-Roboto-Italic.ttf') format('truetype-variations'),
|
||||
url('./fonts/Roboto/Roboto-Italic.woff') format('woff'),
|
||||
url('./fonts/Roboto/Roboto-Italic.woff2') format('woff2');
|
||||
font-style: italic;
|
||||
font-weight: 100 900;
|
||||
font-stretch: 50% 200%;
|
||||
}
|
||||
|
||||
:root {
|
||||
--font-primary: 'OpenSansVariableFont', Arial, sans-serif;
|
||||
--font-secondary: 'RobotoItalicVarFont', Arial, sans-serif;
|
||||
|
||||
--weight-light: 300;
|
||||
--weight-normal: 400;
|
||||
--weight-bold: 700;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: var(--font-primary);
|
||||
font-weight: var(--weight-normal);
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
font-family: var(--font-secondary);
|
||||
font-weight: var(--weight-light);
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
Copyright 2020 The Open Sans Project Authors (https://github.com/googlefonts/opensans)
|
||||
|
||||
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:
|
||||
https://openfontlicense.org
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
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.
|
||||
@@ -0,0 +1,100 @@
|
||||
Open Sans Variable Font
|
||||
=======================
|
||||
|
||||
This download contains Open Sans as both variable fonts and static fonts.
|
||||
|
||||
Open Sans is a variable font with these axes:
|
||||
wdth
|
||||
wght
|
||||
|
||||
This means all the styles are contained in these files:
|
||||
OpenSans-VariableFont_wdth,wght.ttf
|
||||
OpenSans-Italic-VariableFont_wdth,wght.ttf
|
||||
|
||||
If your app fully supports variable fonts, you can now pick intermediate styles
|
||||
that aren’t available as static fonts. Not all apps support variable fonts, and
|
||||
in those cases you can use the static font files for Open Sans:
|
||||
static/OpenSans_Condensed-Light.ttf
|
||||
static/OpenSans_Condensed-Regular.ttf
|
||||
static/OpenSans_Condensed-Medium.ttf
|
||||
static/OpenSans_Condensed-SemiBold.ttf
|
||||
static/OpenSans_Condensed-Bold.ttf
|
||||
static/OpenSans_Condensed-ExtraBold.ttf
|
||||
static/OpenSans_SemiCondensed-Light.ttf
|
||||
static/OpenSans_SemiCondensed-Regular.ttf
|
||||
static/OpenSans_SemiCondensed-Medium.ttf
|
||||
static/OpenSans_SemiCondensed-SemiBold.ttf
|
||||
static/OpenSans_SemiCondensed-Bold.ttf
|
||||
static/OpenSans_SemiCondensed-ExtraBold.ttf
|
||||
static/OpenSans-Light.ttf
|
||||
static/OpenSans-Regular.ttf
|
||||
static/OpenSans-Medium.ttf
|
||||
static/OpenSans-SemiBold.ttf
|
||||
static/OpenSans-Bold.ttf
|
||||
static/OpenSans-ExtraBold.ttf
|
||||
static/OpenSans_Condensed-LightItalic.ttf
|
||||
static/OpenSans_Condensed-Italic.ttf
|
||||
static/OpenSans_Condensed-MediumItalic.ttf
|
||||
static/OpenSans_Condensed-SemiBoldItalic.ttf
|
||||
static/OpenSans_Condensed-BoldItalic.ttf
|
||||
static/OpenSans_Condensed-ExtraBoldItalic.ttf
|
||||
static/OpenSans_SemiCondensed-LightItalic.ttf
|
||||
static/OpenSans_SemiCondensed-Italic.ttf
|
||||
static/OpenSans_SemiCondensed-MediumItalic.ttf
|
||||
static/OpenSans_SemiCondensed-SemiBoldItalic.ttf
|
||||
static/OpenSans_SemiCondensed-BoldItalic.ttf
|
||||
static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf
|
||||
static/OpenSans-LightItalic.ttf
|
||||
static/OpenSans-Italic.ttf
|
||||
static/OpenSans-MediumItalic.ttf
|
||||
static/OpenSans-SemiBoldItalic.ttf
|
||||
static/OpenSans-BoldItalic.ttf
|
||||
static/OpenSans-ExtraBoldItalic.ttf
|
||||
|
||||
Get started
|
||||
-----------
|
||||
|
||||
1. Install the font files you want to use
|
||||
|
||||
2. Use your app's font picker to view the font family and all the
|
||||
available styles
|
||||
|
||||
Learn more about variable fonts
|
||||
-------------------------------
|
||||
|
||||
https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
|
||||
https://variablefonts.typenetwork.com
|
||||
https://medium.com/variable-fonts
|
||||
|
||||
In desktop apps
|
||||
|
||||
https://theblog.adobe.com/can-variable-fonts-illustrator-cc
|
||||
https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
|
||||
|
||||
Online
|
||||
|
||||
https://developers.google.com/fonts/docs/getting_started
|
||||
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
|
||||
https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
|
||||
|
||||
Installing fonts
|
||||
|
||||
MacOS: https://support.apple.com/en-us/HT201749
|
||||
Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
|
||||
Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
|
||||
|
||||
Android Apps
|
||||
|
||||
https://developers.google.com/fonts/docs/android
|
||||
https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
|
||||
|
||||
License
|
||||
-------
|
||||
Please read the full license text (OFL.txt) to understand the permissions,
|
||||
restrictions and requirements for usage, redistribution, and modification.
|
||||
|
||||
You can use them in your products & projects – print or digital,
|
||||
commercial or otherwise.
|
||||
|
||||
This isn't legal advice, please consider consulting a lawyer and see the full
|
||||
license for all details.
|
||||
|
After Width: | Height: | Size: 460 KiB |
|
After Width: | Height: | Size: 406 KiB |