Skip to content

Commit 029a0b9

Browse files
committed
Merge branch 'main' into checkBox
2 parents 20fcc64 + ca97c41 commit 029a0b9

6 files changed

Lines changed: 116 additions & 104 deletions

File tree

README.md

Lines changed: 80 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,83 @@
1-
# Пример приложения
1+
# Viribus Unitis UI kit
22

3-
В этом репозитории представлен пример простейшего фронтенд-сервиса с Vue.js.
3+
Здесь мы разрабатываем компоненты, общие для интерфейсов
4+
<a href="https://app.profcomff.com" target="_blank">Твой ФФ</a> и всех
5+
<a href="https://app.profcomff.com/apps" target="_blank">миниприложений</a>. База компонентов и стилей
6+
берется из <a href="https://vuetifyjs.com/en/components/all/" target="_blank">Vuetify</a>, а дизайн-система
7+
описана в нашей
8+
[Фигме](https://www.figma.com/design/gfvuDN9x7I7sFCJQ7b1bIz/%D0%A2%D0%B2%D0%BE%D0%B9-%D0%A4%D0%A4--%7C-Viribus?node-id=5399-18531&t=gqJoSlE0UHgEkayo-0).
49

10+
_Большая часть команд и инструкций написаны для операционных систем Linux и MacOS._
511

6-
*Большая часть команд и инструкций написаны для операционных систем Linux и MacOS.*
12+
## Использование
713

8-
## Зависимости
9-
- Node.js v18 – среда исполнения на языке JavaScript/TypeScript
10-
- NPM – консольный менеджер пакетов для установки библиотек (идет в поставке с Node.js)
11-
- Vue.js – фраемворк для разработки фронтенда
12-
- Vite – консольный менеджер для удобства работы с Vue.js
13-
- Storybook - фреймворк для разраобтки и документации компонентов и экранов.
14-
15-
## Frontend разработка на Vue.js
14+
TODO: Библиотека можно будет установить из npm под скоупом @profcomff. Она будет устанавливаться как плагин, и внедрять в глобальный скоуп приложения все компоненты -- по аналогии с vuetify. Все наши компоненты будут иметь приставку `Vu` (Viribus Unitis): `VuButton`, `VuTag` и т.д.
1615

17-
Фронтенд (англ. front end, frontend) — презентационная часть web приложения, её пользовательский
18-
интерфейс и связанные с ним компоненты.
16+
TODO: Для референса нужно будет захостить собранный сторибук.
1917

20-
В данном примере используется популярный фраемворк [Vue.js](https://vuejs.org/). Разработка ведется
21-
на языке TypeScript.
18+
## Зависимости
2219

20+
- Node.js >= v18 – среда исполнения на языке JavaScript/TypeScript
21+
- NPM – консольный менеджер пакетов для установки библиотек (идет в поставке с Node.js)
22+
- Vue.js – фреймворк для разработки фронтенда
23+
- Vite – консольный менеджер и инструмент сборки для удобства работы с Vue.js
24+
- Storybook – фреймворк для разраобтки и документации компонентов и экранов.
2325

2426
## Разработка
2527

2628
Для удобства разработки в VS Code создан [workspace](../frontend.code-workspace) с преднастроенными
2729
командами и рекомендованными расширениями для работы.
2830

31+
### Начало работы
32+
2933
Перед началом работы нужно установить зависимости командой
34+
3035
```
3136
pnpm install
3237
```
3338

34-
Для локального запуска необходимо выполнить команду
39+
Если используешь VS Code, то следует настроить автоформатирование:
40+
41+
1. Открыть файл с расширением `.vue`.
42+
2. Открыть палитру команд (Help > Show All Commands или `Ctrl+Shift+P`)
43+
3. Ввести и выбрать `Format document with`.
44+
4. Выбрать `Configure Default Formatter`.
45+
5. Выбрать `Prettier`.
46+
47+
Теперь можно форматировать файлы с помощью `Shift+Alt+F`. Еще можно настроить автоформатирование при сохранении файла (File > Preferences > Settings, Format on save).
48+
49+
### Работа со Storybook
50+
51+
Для локального запуска Storybook необходимо выполнить команду
52+
53+
```
54+
pnpm sb
55+
```
56+
57+
На localhost порте 6006 откроется storybook. Он поддерживает перезагрузку при изменении кода (hot module replacement), но иногда может что-то кешировать -- тогда лучше перезапустить.
58+
59+
В левой вкладке будут перечислены все истории -- это могут быть компоненты, наборы компонентов или целые экраны. При нажатии на них можно посмотреть на то, как компонент выглядит, попробовать поменять какие-то его параметры и посмотреть, как он реагирует на события (например, нажатие).
60+
61+
Создание компонента:
62+
63+
1. В папке `/src/components/` создай папку с названием компонента (например, `button`).
64+
2. Создай в этой папке файл `Vu{НазваниеКомпонента}.vue` и в нем описываем шаблон компонента.
65+
3. Стилизуй компонент с помощью классов vuetify.
66+
4. Опиши модели и пропы, которые может принимать компонент. С помощью /\*\* \*/ опиши пропы и модели (так автоматически генерируется документация).
67+
5. В этой же папке создай `Vu{НазваниеКомпонента}.stories.ts`.
68+
6. В этом файле опиши meta, а потом истории -- различные состояния и опции компонента. Подробнее смотри в туториале Storybook или в уже написанных компонентах.
69+
70+
### Пулл-реквест
71+
72+
- Перед отправкой проверь стили: `pnpm check`
73+
- _Опционально_: более строгая проверка `pnpm check:hard`.
74+
- Заполни шаблон пулл-реквеста: что, как и зачем сделал
75+
- Запроси ревью
76+
77+
### Запуск приложения (опционально)
78+
79+
Для локального запуска приложения (чтобы проверять компоненты вне сторибука) необходимо выполнить команду
80+
3581
```
3682
pnpm dev
3783
```
@@ -43,50 +89,36 @@ pnpm sb
4389

4490

4591
## Инструкции
92+
4693
### Получение кода на свой компьютер
47-
Для работы с данным примером необходимо забрать его к себе на ПК. Для этого нужно:
48-
1. *(Опционально)* Если вы хотите далее опубликовать код на GitHub полезно сначала скопировать
49-
репозиторий к себе кнопкой Fork на GitHub. Кнопка доступна в правом верхнем углу
50-
[страницы репозитория](https://github.com/profcomff/app-template).
51-
2. Создайте папку в удобном вам расположении.
52-
- *Удобно создать папку на рабочем столе с названием вашего приложения.*
53-
3. Откройте приложение "Командная строка" или "Терминал", в зависимости от операционной системы.
54-
4. Прейдите в папку проекта командой `cd /путь/к/папке`.
55-
- Если вы пользователь windows и создали на рабочем столе папку `my_app`, то команда будет
56-
выглядеть так: `cd %userprofile%/Desktop/my_app`
57-
- Если вы пользователь linux или MacOS и создали на рабочем столе папку `my_app`, то команда
58-
будет выглядеть сделующим образом: `cd ~/Desktop/my_app`
59-
5. Склонируйте код репозитория к себе на ПК командой
60-
`git clone https://github.com/profcomff/app-template.git .` (точка в конце означает скачивание
61-
кода в текущую папку). Если вы выполнили пункт 1 используйте в команде ссылку из зеленой кнопки
62-
"Code" в правом верхнем углу вашего репозитория.
63-
6. Откройте код в удобной среде разработки. Рекомендуем использовать VSCode, который можно открыть
64-
из терминала командой `code .`
6594

66-
### Сборка и запуск приложения для публикации
67-
Сборка исходного кода в один пакет производится с помощью Docker. В этом случае создается
68-
независимый от операционной системы пакет, который можно без проблем разместить на любом сервере.
95+
1. Открой приложение "Командная строка" или "Терминал", в зависимости от операционной системы.
96+
2. Прейди в папку, где хочешь создать папку проекта, командой `cd /путь/к/папке`.
97+
- Если ты пользователь windows и хотите создать папку на рабочем столе, то команда будет
98+
выглядеть так: `cd %userprofile%/Desktop`
99+
- Если ты пользователь linux или MacOS и хочещб создать папку на рабочем столе, то команда
100+
будет выглядеть сделующим образом: `cd ~/Desktop/`
101+
3. Склонируй код репозитория к себе на ПК командой
102+
`git clone https://github.com/profcomff/ui-kit.git myapp` (вместо `myapp` подставь название папки, которая будет создана).
103+
4. Открой код в удобной среде разработки. Рекомендуем использовать VSCode, который можно открыть
104+
из терминала командой `code .`
69105

70-
Выполните команду `make` для сборки приложения. После окончания выполнения этой команды будет создан
71-
новый Docker образ с названием `my_app`, который можно запустить командой `make run`
106+
### Сборка библиотеки
72107

108+
TODO: Здесь будет описание сборки и публикации библиотеки на npm.
73109

74110
### Автосборка
111+
112+
TODO: Настроить на релиз.
113+
75114
Коммит в main запускает автоматическую сборку проекта средствами GitHub Actions. Настройки автосборки находятся в
76115
файле [.github/workflows/build_and_publish.yml](.github/workflows/build_and_publish.yml).
77116

78117
### Тесты на Pull Request
118+
79119
При создании запроса на слияние, автоматически создаются проверки кода юниттестами и на стили.
80120
Следующие тесты будут запущены:
121+
81122
- Проверки стилей `eslint`, `prettier`, `stylelint` на код в папке `frontend`
82123

83124
Настройки автотестов находятся в файле[.github/workflows/checks.yml](.github/workflows/checks.yml).
84-
85-
### Публикация готового приложения
86-
На данном этапе вам необходимо разместить приложение на каком-либо хостинге, поддерживающем протокол https.
87-
88-
Для этого подойдет любой VPS сервер, который вы можете найти в интернете. Мы рекомендуем использовать VPS сервера на операционной системе linux, для удобства размещения приложений и компонентов использовать Docker.
89-
90-
Чтобы получить SSL сертификаы для поддержки https можно использовать letsencrypt.com, предоставляющий SSL сертификаты бесплатно. Для удобства работы можно использовать веб сервер с встроенной поддержкой этих сертификатов, например Traefik или Caddy.
91-
92-
Шаблон приложения имеет уже готовые [Dockerfile](cicd/Dockerfile) для сборки вашего приложения, файл [docker-compose.production.yml](cicd/docker-compose.production.yml) с настройками развертывания приложения с Caddy Server и включенным https, а также базой данных PostgreSQL.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"format": "prettier src/ --write",
1414
"stylelint": "stylelint 'src/**/*.{vue,css}' --fix",
1515
"check": "vue-tsc && pnpm format && pnpm lint && pnpm stylelint",
16+
"check:hard": "vue-tsc && pnpm lint && pnpm lint:deadcode && pnpm lint:circular && pnpm format && pnpm stylelint",
1617
"test": "echo ok",
1718
"sb": "storybook dev -p 6006",
1819
"build-storybook": "storybook build"
@@ -74,4 +75,4 @@
7475
"vue-tsc": "^2.2.6",
7576
"vuetify": "^3.7.14"
7677
}
77-
}
78+
}

src/App.vue

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
<script setup lang="ts"></script>
22

33
<template>
4-
<main class="container">
5-
<RouterView />
4+
<main class="container mt-8">
5+
<h1>Это репозиторий UI-kit Viribus Unitis</h1>
6+
<p class="mt-4">
7+
Здесь мы разрабатываем компоненты, общие для интерфейсов
8+
<a href="https://app.profcomff.com" target="_blank">Твой ФФ</a> и всех
9+
<a href="https://app.profcomff.com/apps" target="_blank">миниприложений</a>. База компонентов и стилей
10+
берется из <a href="https://vuetifyjs.com/en/components/all/" target="_blank">Vuetify</a>, а дизайн-система
11+
описана в нашей
12+
<a
13+
href="https://www.figma.com/design/gfvuDN9x7I7sFCJQ7b1bIz/%D0%A2%D0%B2%D0%BE%D0%B9-%D0%A4%D0%A4--%7C-Viribus?node-id=5399-18531&t=gqJoSlE0UHgEkayo-0"
14+
target="_blank"
15+
>Фигме</a
16+
>.
17+
</p>
18+
<p class="mt-2">
19+
В данном репозитории все немного отличается. Само приложение здесь может служить для отладки кода -- можешь
20+
добавить в App.vue свой компонент и посмотреть, как он работает. Сами компоненты и их документацию мы пишем
21+
в <a href="https://storybook.js.org/" target="_blank">Storybook</a> -- для локального запуска введи
22+
<code class="ml-1">pnpm sb</code>.
23+
</p>
624
</main>
7-
<footer>
8-
Made by
9-
<a href="https://app.profcomff.com"><img src="https://app.profcomff.com/favicon.png" class="logo" /></a>
10-
in association with
11-
<a href="https://dyakov.space"><img src="https://dyakov.space/files/Icon.svg" class="logo" /></a>
12-
</footer>
1325
</template>
1426

1527
<style scoped>
1628
.container {
17-
width: 100%;
29+
width: min(100%, 900px);
30+
margin: auto;
1831
height: 100%;
1932
}
20-
21-
footer {
22-
position: sticky;
23-
bottom: 0;
24-
width: 100%;
25-
color: gray;
26-
text-align: center;
27-
28-
& .logo {
29-
height: 30px;
30-
vertical-align: middle;
31-
}
32-
}
3333
</style>

src/components/button/VuButton.stories.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { Meta, StoryObj } from '@storybook/vue3-vite';
2+
import { fn } from 'storybook/test';
23
import VuButton from './VuButton.vue';
34

45
const meta = {
@@ -7,6 +8,7 @@ const meta = {
78
tags: ['autodocs'],
89
args: {
910
text: 'Привет',
11+
onClick: fn(),
1012
},
1113
} satisfies Meta<typeof VuButton>;
1214

src/components/button/VuButton.vue

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,19 @@ interface Props {
66
77
// Объявляем пропсы
88
defineProps<Props>();
9+
10+
defineEmits<{
11+
click: [];
12+
}>();
913
</script>
1014

1115
<template>
12-
<v-btn class="text-body-1 font-weight-bold" color="brand-orange-4-notif" :text="text"></v-btn>
16+
<v-btn
17+
class="text-body-1 font-weight-bold"
18+
color="brand-orange-4-notif"
19+
text="Привет"
20+
@click="$emit('click')"
21+
></v-btn>
1322
</template>
1423

1524
<style lang="css" scoped></style>

vite.config.ts

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@ import svgLoader from 'vite-svg-loader';
66
import vue from '@vitejs/plugin-vue';
77
import vuetify, { transformAssetUrls } from 'vite-plugin-vuetify';
88
import { fileURLToPath } from 'url';
9-
import path from 'node:path';
10-
import tailwindcss from '@tailwindcss/vite'
11-
import { storybookTest } from '@storybook/addon-vitest/vitest-plugin';
12-
const dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));
139

1410
// More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon
1511
export default defineConfig({
@@ -55,32 +51,4 @@ export default defineConfig({
5551
},
5652
],
5753
},
58-
test: {
59-
projects: [
60-
{
61-
extends: true,
62-
plugins: [
63-
// The plugin will run tests for the stories defined in your Storybook config
64-
// See options at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon#storybooktest
65-
storybookTest({
66-
configDir: path.join(dirname, '.storybook'),
67-
}),
68-
],
69-
test: {
70-
name: 'storybook',
71-
browser: {
72-
enabled: true,
73-
headless: true,
74-
provider: 'playwright',
75-
instances: [
76-
{
77-
browser: 'chromium',
78-
},
79-
],
80-
},
81-
setupFiles: ['.storybook/vitest.setup.ts'],
82-
},
83-
},
84-
],
85-
},
8654
});

0 commit comments

Comments
 (0)