Compare commits
83 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| df88416247 | |||
| b948e5a433 | |||
| dfebbc3c45 | |||
| 37d1f1f17e | |||
| 968dc9de10 | |||
| d126d05f4d | |||
| 3c441310a4 | |||
| f5d44a3f8f | |||
| 386e89f8f3 | |||
| ba4d5e80e2 | |||
| 8eb2c67453 | |||
| 36ba0c1f0a | |||
| a42f281613 | |||
| e3cf876ccc | |||
| f83c928c47 | |||
| f17badaa68 | |||
| 32731bda89 | |||
| 4afd915f49 | |||
| 54e7130488 | |||
| f66984ced0 | |||
| b3a8881074 | |||
| 96e7b4827a | |||
| 4019438a48 | |||
| 0ad71bd579 | |||
| a7e57c575d | |||
| 4270668c7c | |||
| 9432e755e6 | |||
| 5e284757e7 | |||
| bd08e437b6 | |||
| 49a7b5e0b4 | |||
| 81ee62ef52 | |||
| 601bec1af2 | |||
| efbdef87fa | |||
| b794e5aebd | |||
| 9e3bf98788 | |||
| ef38318ce8 | |||
| 6619c5cc7f | |||
| 70553ded2f | |||
| 184fe5eb1b | |||
| f6111628b0 | |||
| 94bc0035d3 | |||
| d2e654bf25 | |||
| 36f291aba4 | |||
| 41840e657a | |||
| 64bbd09f15 | |||
| 18ad8159cd | |||
| 872b9d519f | |||
| 702190b65a | |||
| ee6b50cb82 | |||
| de75b64133 | |||
| 07052a4160 | |||
| 99e30cda4a | |||
| 2b489b529f | |||
| 4b32ec3950 | |||
| 24116b1633 | |||
| 6bcd90f9bc | |||
| 46ed947331 | |||
| 1a600b7851 | |||
| 64d75d9aef | |||
| 4fdbff209f | |||
| 63e55b74e2 | |||
| f6865fbfe4 | |||
| 8775794f64 | |||
| 510114e1db | |||
| 00edb34a9d | |||
| afd3407309 | |||
| 81bc33a1e9 | |||
| 2495d86655 | |||
| 712f7ddbc0 | |||
| d4888e088e | |||
| 8dbbe46636 | |||
| 4186722ab9 | |||
| 184acc6485 | |||
| 1e42c41971 | |||
| 3331da2399 | |||
| ec841dff60 | |||
| e429ff9a47 | |||
| aa3a35b840 | |||
| 4c2d28fb37 | |||
| 322d7af231 | |||
| 77f37ea74c | |||
| 3194088e94 | |||
| d8020505c3 |
@@ -17,4 +17,4 @@ packages-list.json
|
|||||||
/.vale
|
/.vale
|
||||||
/.vscode
|
/.vscode
|
||||||
/.vale.ini
|
/.vale.ini
|
||||||
/VimpelcomCAG2.pem
|
/.markdownlint.json
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
deploy-prod:
|
||||||
|
stage: deploy
|
||||||
|
image: harbor.vimpelcom.ru/dockerhub/library/alpine:3.21.2
|
||||||
|
variables:
|
||||||
|
stand: beecloud-docs.beecloud-docs.cloud.vimpelcom.ru
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH && $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||||
|
when: never
|
||||||
|
- if: $CI_PIPELINE_SOURCE == "push"
|
||||||
|
when: manual
|
||||||
|
before_script:
|
||||||
|
- |
|
||||||
|
sed -i s%https://dl-cdn.alpinelinux.org/%http://rhrepo.vimpelcom.ru/ext/ya/mirrors/% /etc/apk/repositories && \
|
||||||
|
apk --no-cache add tzdata ca-certificates curl openssh-client yq jq && \
|
||||||
|
rm -rf /var/cache/apk/*
|
||||||
|
- which ssh-agent || (apt-get update -y && apt-get install openssh-client -y)
|
||||||
|
- eval $(ssh-agent -s)
|
||||||
|
- mkdir -p ~/.ssh
|
||||||
|
- echo -n "$TECH_SSH_KEY" | tr -d '\r' > ~/.ssh/id_rsa
|
||||||
|
- chmod 700 ~/.ssh
|
||||||
|
- chmod 600 ~/.ssh/id_rsa
|
||||||
|
- >
|
||||||
|
echo "stand: ${stand}"
|
||||||
|
ssh-keyscan "${stand}" >> ~/.ssh/known_hosts
|
||||||
|
- chmod 644 ~/.ssh/known_hosts
|
||||||
|
- PRODUCT="$PRODUCT_DMZ"
|
||||||
|
script:
|
||||||
|
- >
|
||||||
|
echo -e "Connect to ${stand}..." &&
|
||||||
|
scp -o StrictHostKeyChecking=no ci/deploy/deploy.sh "dorootless@${stand}:~/deploy.sh" &&
|
||||||
|
ssh "dorootless@${stand}" "export CONTAINER_REGISTRY=$CONTAINER_REGISTRY &&
|
||||||
|
export PRODUCT=$PRODUCT &&
|
||||||
|
export PRODUCT_VERSION=$PRODUCT_VERSION &&
|
||||||
|
export IMAGE_NAME=$IMAGE_NAME &&
|
||||||
|
chmod 700 ~/deploy.sh &&
|
||||||
|
~/deploy.sh ${IMAGE_NAME} &&
|
||||||
|
rm -f ~/deploy.sh"
|
||||||
|
needs:
|
||||||
|
- job: build-image
|
||||||
|
optional: true
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "docs",
|
"name": "docs",
|
||||||
"version": "0.6.4",
|
"version": "0.6.5-main",
|
||||||
"description": "Beeline Cloud docs",
|
"description": "Beeline Cloud docs",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -15,16 +15,17 @@
|
|||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@beeline/design-tokens": "^1.31.0",
|
"@beeline/design-tokens": "^1.31.6",
|
||||||
"vue": "3.4.7"
|
"vue": "^3.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@docsearch/css": "3.3.0",
|
"@docsearch/css": "4.1.0",
|
||||||
"@types/node": "20.10.7",
|
"@types/node": "^22.0.0",
|
||||||
"@vitejs/plugin-vue": "4.3.4",
|
"@vitejs/plugin-vue": "^6.0.3",
|
||||||
"sass": "1.69.7",
|
"sass": "^1.70.0",
|
||||||
"typescript": "^5.8.3",
|
"typescript": "^5.9.3",
|
||||||
"vitepress": "1.0.0-rc.40",
|
"vite-plugin-static-copy": "^3.1.4",
|
||||||
"vitepress-plugin-tabs": "0.5.0"
|
"vitepress": "^1.6.4",
|
||||||
|
"vitepress-plugin-tabs": "^0.7.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
import { defineConfig } from 'vitepress'
|
import { defineConfig } from 'vitepress'
|
||||||
import { tabsMarkdownPlugin } from 'vitepress-plugin-tabs'
|
import { tabsMarkdownPlugin } from 'vitepress-plugin-tabs'
|
||||||
|
import { viteStaticCopy } from 'vite-plugin-static-copy'
|
||||||
import { overrideComponents } from './override-components'
|
import { overrideComponents } from './override-components'
|
||||||
|
import { resolve } from 'node:path'
|
||||||
|
import { fileURLToPath, URL } from 'node:url'
|
||||||
|
|
||||||
const gitlab = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
const gitlab = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<svg
|
<svg
|
||||||
@@ -43,10 +46,11 @@ console.log({ base: typeof new_version !== 'undefined' ? '/' : '/docs/' })
|
|||||||
// https://vitepress.dev/reference/site-config
|
// https://vitepress.dev/reference/site-config
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
srcDir: ".",
|
srcDir: ".",
|
||||||
title: "cloud",
|
title: " ",
|
||||||
description: "Документация Beeline Cloud",
|
description: "Документация Beeline Cloud",
|
||||||
head: [['link', { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/bee-favicon.png' }]],
|
head: [['link', { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/bee-favicon.png' }]],
|
||||||
base: typeof new_version !== 'undefined' ? '/' : '/docs/',
|
base: typeof new_version !== 'undefined' ? '/' : '/docs/',
|
||||||
|
appearance: false,
|
||||||
markdown: {
|
markdown: {
|
||||||
config(md) {
|
config(md) {
|
||||||
md.use(tabsMarkdownPlugin)
|
md.use(tabsMarkdownPlugin)
|
||||||
@@ -54,8 +58,31 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
vite: {
|
vite: {
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: overrideComponents(),
|
alias: [
|
||||||
}
|
...overrideComponents(),
|
||||||
|
{
|
||||||
|
find: '@',
|
||||||
|
replacement: fileURLToPath(new URL('./theme', import.meta.url))
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
viteStaticCopy({
|
||||||
|
targets: [
|
||||||
|
{
|
||||||
|
src: resolve(__dirname, '../../node_modules/@beeline/design-tokens/assets/fonts'),
|
||||||
|
dest: 'assets',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
css: {
|
||||||
|
preprocessorOptions: {
|
||||||
|
scss: {
|
||||||
|
api: 'modern-compiler',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
locales: {
|
locales: {
|
||||||
root: {
|
root: {
|
||||||
@@ -65,9 +92,9 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
themeConfig: {
|
themeConfig: {
|
||||||
logo: {
|
logo: {
|
||||||
light: '/logo-light-theme.svg',
|
light: '/img/logo-cloud.svg',
|
||||||
dark: '/logo-dark-theme.svg',
|
dark: '/img/logo-cloud.svg',
|
||||||
alt: 'cloud',
|
alt: '',
|
||||||
},
|
},
|
||||||
search: {
|
search: {
|
||||||
provider: 'local',
|
provider: 'local',
|
||||||
@@ -80,14 +107,8 @@ export default defineConfig({
|
|||||||
buttonAriaLabel: 'Поиск'
|
buttonAriaLabel: 'Поиск'
|
||||||
},
|
},
|
||||||
modal: {
|
modal: {
|
||||||
noResultsText: 'Не удалось загрузить данные',
|
noResultsText: 'По вашему запросу ничего не найдено',
|
||||||
resetButtonTitle: 'Сбросить',
|
resetButtonTitle: 'Сбросить',
|
||||||
displayDetails: 'Показать расширенный список',
|
|
||||||
footer: {
|
|
||||||
selectText: 'Выбрать',
|
|
||||||
closeText: 'Закрыть',
|
|
||||||
navigateText: 'Перейти',
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -138,14 +159,26 @@ export default defineConfig({
|
|||||||
{text: 'Бесплатный период', link: '/start/trial.md'},
|
{text: 'Бесплатный период', link: '/start/trial.md'},
|
||||||
{text: 'Платное использование', link: '/start/organization.md'},
|
{text: 'Платное использование', link: '/start/organization.md'},
|
||||||
],
|
],
|
||||||
'/ai/': [
|
// '/billing/': [
|
||||||
{ text: 'AI платформа', link: '/ai/index.md' },
|
|
||||||
{ text: 'Обзор сервиса', link: '/ai/ai-overview-platform.md' },
|
// ],
|
||||||
{ text: 'Быстрый старт', link: '/ai/ai-getting-started.md' },
|
'/backups/': [
|
||||||
{ text: 'Управление сервисом', link: '/ai/ai-setting.md' },
|
{
|
||||||
{ text: 'Чат с LLM', link: '/ai/ai-chat-llm.md' },
|
text: 'Резервное копирование', link: '/backups/index.md',
|
||||||
{ text: 'Концепции', link: '/ai/ai-glossary.md' },
|
},
|
||||||
],
|
{
|
||||||
|
text: 'Обзор сервиса', link: '/backups/backups-overview.md',
|
||||||
|
collapsed: true,
|
||||||
|
items: [
|
||||||
|
{text: 'О сервисе', link: '/backups/about.md'},
|
||||||
|
{text: 'Квоты и лимиты', link: '/backups/backup-quatos.md'},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{text: 'Резервное копирование виртуальных машин Beeline Cloud', link: '/backups/backup-internal-infra.md'},
|
||||||
|
{text: 'Резервное копирование собственной инфраструктуры в Beeline Cloud', link: '/backups/backup-external-infra.md'},
|
||||||
|
{text: 'Каталог резервных копий', link: '/backups/view-backups.md'},
|
||||||
|
|
||||||
|
],
|
||||||
'/vdc/': [
|
'/vdc/': [
|
||||||
{
|
{
|
||||||
text: 'Виртуальные дата-центры на VMware', link: '/vdc/index.md',
|
text: 'Виртуальные дата-центры на VMware', link: '/vdc/index.md',
|
||||||
@@ -154,8 +187,9 @@ export default defineConfig({
|
|||||||
text: 'Обзор сервиса', link: '/vdc/vdc-overview.md',
|
text: 'Обзор сервиса', link: '/vdc/vdc-overview.md',
|
||||||
collapsed: true,
|
collapsed: true,
|
||||||
items: [
|
items: [
|
||||||
{ text: 'Техническое описание', link: '/vdc/vdc-tech.md' },
|
{ text: 'О сервисе', link: '/vdc/vdc-about.md' },
|
||||||
{ text: 'Квоты и лимиты', link: '/vdc/vdc-quatos.md' },
|
{ text: 'Техническое описание', link: '/vdc/vdc-tech.md' },
|
||||||
|
{ text: 'Квоты и лимиты', link: '/vdc/vdc-quatos.md' },
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -175,21 +209,47 @@ export default defineConfig({
|
|||||||
items: [
|
items: [
|
||||||
{text: 'Создание ВМ', link: '/vdc/vdc-how-to/vm/create-vm.md'},
|
{text: 'Создание ВМ', link: '/vdc/vdc-how-to/vm/create-vm.md'},
|
||||||
{text: 'Создание vApp', link: '/vdc/vdc-how-to/vm/create-vapp.md'},
|
{text: 'Создание vApp', link: '/vdc/vdc-how-to/vm/create-vapp.md'},
|
||||||
|
{text: 'Управление состоянием ВМ', link: '/vdc/vdc-how-to/vm/manage-vm.md'},
|
||||||
{text: 'Клонирование ВМ', link: '/vdc/vdc-how-to/vm/clone-vm.md'},
|
{text: 'Клонирование ВМ', link: '/vdc/vdc-how-to/vm/clone-vm.md'},
|
||||||
{text: 'Изменение конфигурации ВМ', link: '/vdc/vdc-how-to/vm/edit-vm.md'},
|
{text: 'Изменение конфигурации ВМ', link: '/vdc/vdc-how-to/vm/edit-vm.md'},
|
||||||
{text: 'Удаление ВМ', link: '/vdc/vdc-how-to/vm/delete-vm.md'},
|
{text: 'Удаление ВМ', link: '/vdc/vdc-how-to/vm/delete-vm.md'},
|
||||||
{text: 'Группы размещения', link: '/vdc/vdc-how-to/vm/create-affinity-rules.md'},
|
{text: 'Группы размещения', link: '/vdc/vdc-how-to/vm/create-affinity-rules.md'},
|
||||||
{ text: 'Снимки ВМ', link: '/vdc/vdc-how-to/vm/create-snapshot.md'},
|
{text: 'Снимки ВМ', link: '/vdc/vdc-how-to/vm/create-snapshot.md'},
|
||||||
|
{text: 'VMware Tools', link: '/vdc/vdc-how-to/vm/vmware-tools.md'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{ text: 'Диски', link: '/vdc/vdc-how-to/disks/disks-index.md',
|
||||||
|
collapsed: true,
|
||||||
|
items: [
|
||||||
|
{text: 'Обзор', link: '/vdc/vdc-how-to/disks/about.md'},
|
||||||
|
{text: 'Создание диска', link: '/vdc/vdc-how-to/disks/create-disk.md'},
|
||||||
|
{text: 'Проверка состояния диска', link: '/vdc/vdc-how-to/disks/view-disk.md'},
|
||||||
|
{text: 'Управление выделенными дисками', link: '/vdc/vdc-how-to/disks/attach-disk.md'},
|
||||||
|
{text: 'Изменение политики хранения дисков ВМ', link: '/vdc/vdc-how-to/disks/change-storage-policy-of-vm.md'},
|
||||||
|
{text: 'Редактирование параметров диска', link: '/vdc/vdc-how-to/disks/edit-disk.md'},
|
||||||
|
{text: 'Удаление диска', link: '/vdc/vdc-how-to/disks/delete-disk.md'},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{ text: 'Сети', link: '/vdc/vdc-how-to/networks/networks-index.md',
|
{ text: 'Сети', link: '/vdc/vdc-how-to/networks/networks-index.md',
|
||||||
collapsed: true,
|
collapsed: true,
|
||||||
items: [
|
items: [
|
||||||
|
{text: 'Обзор', link: '/vdc/vdc-how-to/networks/about.md'},
|
||||||
{text: 'Настройка доступа к ВМ из интернета', link: '/vdc/vdc-how-to/networks/allow-external-connections-to-vm.md'},
|
{text: 'Настройка доступа к ВМ из интернета', link: '/vdc/vdc-how-to/networks/allow-external-connections-to-vm.md'},
|
||||||
{text: 'Подключение ВМ в vApp к сети', link: '/vdc/vdc-how-to/networks/connect-vapp-to-network.md'},
|
{text: 'Подключение ВМ в vApp к сети', link: '/vdc/vdc-how-to/networks/connect-vapp-to-network.md'},
|
||||||
{text: 'Подключение ВМ к интернету', link: '/vdc/vdc-how-to/networks/connect-vm-to-network.md'},
|
{text: 'Подключение ВМ к интернету', link: '/vdc/vdc-how-to/networks/connect-vm-to-network.md'},
|
||||||
{text: 'Создание сети в организации и подключение к Edge Gateway', link: '/vdc/vdc-how-to/networks/create-network.md'},
|
{text: 'Создание сети в организации и подключение к Edge Gateway', link: '/vdc/vdc-how-to/networks/create-network.md'},
|
||||||
{text: 'Подключение сети к Edge Gateway', link: '/vdc/vdc-how-to/networks/isolated-to-routed.md'},
|
{text: 'Подключение сети к Edge Gateway', link: '/vdc/vdc-how-to/networks/connect-to-edge-gateway.md'},
|
||||||
|
{text: 'Создание Pre-Shared Key', link: '/vdc/vdc-how-to/networks/create-psk.md'},
|
||||||
|
{ text: 'Настройка site-to-site подключения с помощью IPSec', link: '/vdc/vdc-how-to/networks/how-to-setup-ipsec-vpn.md',
|
||||||
|
collapsed: true,
|
||||||
|
items: [
|
||||||
|
{text: 'Настройка IPSec VPN', link: '/vdc/vdc-how-to/networks/ipsec/setup-ipsec-vpn.md'},
|
||||||
|
{text: 'Настройка ASAv', link: '/vdc/vdc-how-to/networks/ipsec/asav.md'},
|
||||||
|
{text: 'Настройка CSR 1000v', link: '/vdc/vdc-how-to/networks/ipsec/csr1000v.md'},
|
||||||
|
{text: 'Настройка Fortigate', link: '/vdc/vdc-how-to/networks/ipsec/fortigate.md'},
|
||||||
|
{text: 'Проверить сетевую связанность', link: '/vdc/vdc-how-to/networks/ipsec/check-vpn-status.md'},
|
||||||
|
],
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{ text: 'Пользователи и роли', link: '/vdc/vdc-how-to/users/users-index.md',
|
{ text: 'Пользователи и роли', link: '/vdc/vdc-how-to/users/users-index.md',
|
||||||
@@ -215,25 +275,58 @@ export default defineConfig({
|
|||||||
{
|
{
|
||||||
text: 'Виртуальные машины', link: '/compute/index.md',
|
text: 'Виртуальные машины', link: '/compute/index.md',
|
||||||
},
|
},
|
||||||
{ text: 'Обзор сервиса', link: '/compute/compute-overview.md' },
|
{ text: 'Обзор сервиса', link: '/compute/compute-overview-index.md' ,
|
||||||
|
collapsed: true,
|
||||||
|
items: [
|
||||||
|
{ text: 'Техническое описание', link: '/compute/compute-overview.md' },
|
||||||
|
{ text: 'Квоты и лимиты', link: '/compute/compute-quatos.md' },
|
||||||
|
]
|
||||||
|
},
|
||||||
{text: 'Быстрый старт', link: '/compute/compute-getting-started.md'},
|
{text: 'Быстрый старт', link: '/compute/compute-getting-started.md'},
|
||||||
{ text: 'Виртуальные машины', link: '/compute/compute-how-to/compute-index.md',
|
{ text: 'Виртуальные машины', link: '/compute/compute-how-to/compute-index.md',
|
||||||
collapsed: true,
|
collapsed: true,
|
||||||
items: [
|
items: [
|
||||||
{ text: 'Создание ВМ', link: '/compute/compute-how-to/compute-servers-create.md' },
|
{ text: 'Создание ВМ', link: '/compute/compute-how-to/compute-servers-create.md' },
|
||||||
|
{ text: 'Создание ВМ джамп-хоста', link: '/compute/compute-how-to/compute-servers-jump-create.md' },
|
||||||
{ text: 'Подключение к ВМ', link: '/compute/compute-how-to/compute-connect-index.md',
|
{ text: 'Подключение к ВМ', link: '/compute/compute-how-to/compute-connect-index.md',
|
||||||
collapsed: true,
|
collapsed: true,
|
||||||
items: [
|
items: [
|
||||||
{ text: 'Подключение по SSH к ВМ по внешнему IP-адресу', link: '/compute/compute-how-to/compute-connect-public.md'},
|
{ text: 'Подключение по SSH по внешнему IP-адресу с помощью ключевой пары', link: '/compute/compute-how-to/compute-connect-public.md'},
|
||||||
{ text: 'Подключение по SSH к ВМ по внутреннему IP-адресу', link: '/compute/compute-how-to/compute-connect-inside.md' },
|
{ text: 'Подключение по SSH по внутреннему IP-адресу с помощью ключевой пары', link: '/compute/compute-how-to/compute-connect-inside.md' },
|
||||||
|
{ text: 'Подключение по SSH по логину и паролю', link: '/compute/compute-how-to/compute-connect-pwd.md' },
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{ text: 'Управление ВМ', link: '/compute/compute-how-to/compute-servers-manage.md' },
|
{ text: 'Управление ВМ', link: '/compute/compute-how-to/compute-servers-manage.md' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{ text: 'Диски', link: '/compute/compute-how-to/compute-disks.md' },
|
{ text: 'Диски', link: '/compute/compute-how-to/compute-disks/compute-disk-index.md',
|
||||||
{ text: 'IP-адреса', link: '/compute/compute-how-to/compute-ip.md' },
|
collapsed: true,
|
||||||
{ text: 'Группы размещения', link: '/compute/compute-how-to/compute-affinity.md' },
|
items: [
|
||||||
|
{ text: 'Обзор', link: '/compute/compute-how-to/compute-disks/compute-disk-about.md' },
|
||||||
|
{ text: 'Создание диска', link: '/compute/compute-how-to/compute-disks/compute-disk-create.md' },
|
||||||
|
{ text: 'Управление дисками', link: '/compute/compute-how-to/compute-disks/compute-disk-manage.md' },
|
||||||
|
{ text: 'Удаление диска', link: '/compute/compute-how-to/compute-disks/compute-disk-del.md' },
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ text: 'IP-адреса', link: '/compute/compute-how-to/compute-ip/compute-ip-index.md',
|
||||||
|
collapsed: true,
|
||||||
|
items: [
|
||||||
|
{ text: 'Обзор', link: '/compute/compute-how-to/compute-ip/compute-ip-about.md' },
|
||||||
|
{ text: 'Просмотр IP-адресов', link: '/compute/compute-how-to/compute-ip/compute-ip-view.md' },
|
||||||
|
{ text: 'Создание IP-адреса', link: '/compute/compute-how-to/compute-ip/compute-ip-create.md' },
|
||||||
|
{ text: 'Управление IP-адресами', link: '/compute/compute-how-to/compute-ip/compute-ip-manager.md' },
|
||||||
|
{ text: 'Удаление IP-адреса', link: '/compute/compute-how-to/compute-ip/compute-ip-del.md' },
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ text: 'Группы размещения', link: '/compute/compute-how-to/compute-placement-groups/compute-placement-groups-index.md',
|
||||||
|
collapsed: true,
|
||||||
|
items: [
|
||||||
|
{ text: 'Обзор', link: '/compute/compute-how-to/compute-placement-groups/compute-placement-groups-about.md'},
|
||||||
|
{ text: 'Создание группы размещения', link: '/compute/compute-how-to/compute-placement-groups/compute-placement-groups-create.md'},
|
||||||
|
{ text: 'Управление группами размещения', link: '/compute/compute-how-to/compute-placement-groups/compute-placement-groups-manager.md' },
|
||||||
|
{ text: 'Удаление группы размещения', link: '/compute/compute-how-to/compute-placement-groups/compute-placement-groups-del.md' },
|
||||||
|
]
|
||||||
|
},
|
||||||
{ text: 'Сети', link: '/compute/compute-how-to/compute-network/compute-network-index.md',
|
{ text: 'Сети', link: '/compute/compute-how-to/compute-network/compute-network-index.md',
|
||||||
collapsed: true,
|
collapsed: true,
|
||||||
items: [
|
items: [
|
||||||
@@ -247,29 +340,39 @@ export default defineConfig({
|
|||||||
text: 'Администрирование', link: '/admin/index.md',
|
text: 'Администрирование', link: '/admin/index.md',
|
||||||
},
|
},
|
||||||
{text: 'Управление ключевыми парами', link: '/admin/ssh.md'},
|
{text: 'Управление ключевыми парами', link: '/admin/ssh.md'},
|
||||||
],
|
],
|
||||||
'/billing/': [
|
'/vdi/': [
|
||||||
{ text: 'Биллинг', link: '/billing/about.md',
|
{
|
||||||
|
text: 'Виртуальные рабочие столы', link: '/vdi/index.md',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Обзор сервиса', link: '/vdi/vdi-overview.md',
|
||||||
collapsed: true,
|
collapsed: true,
|
||||||
items: [
|
items: [
|
||||||
{ text: 'Аналитика потребления', link: '/billing/usage-analytics.md' },
|
{ text: 'О сервисе', link: '/vdi/vdi-about.md' },
|
||||||
],
|
{ text: 'Техническое описание', link: '/vdi/vdi-tech.md' },
|
||||||
},
|
{ text: 'Квоты и лимиты', link: '/vdi/vdi-quatos.md' },
|
||||||
],
|
{ text: 'Тарификация', link: '/vdi/vdi-tarif.md' },
|
||||||
'/concepts/': [
|
]
|
||||||
{text: 'Виртуальные дата-центры', link: '/concepts/datacenters.md'},
|
},
|
||||||
{text: 'DNS', link: '/concepts/dns.md'},
|
{
|
||||||
{text: 'Edge Gateway', link: '/concepts/edge-gateway.md'},
|
text: 'Заказ виртуальных рабочих столов', link: '/vdi/vdi-how-to/vdi-create.md'
|
||||||
{text: 'NAT', link: '/concepts/nat.md'},
|
},
|
||||||
{text: 'Типы сетей в vDC', link: '/concepts/network-types.md'},
|
{
|
||||||
{text: 'Ролевая модель', link: '/concepts/roles.md'},
|
text: 'Настройка сервиса', link: '/vdi/vdi-how-to/vdi-nastroika.md',
|
||||||
{text: 'vApp', link: '/concepts/vApp.md'},
|
collapsed: true,
|
||||||
],
|
items: [
|
||||||
'/monitoring/': [
|
{ text: 'Настройка интеграции с Active Directory', link: '/vdi/vdi-how-to/vdi-connect-to-ad.md' },
|
||||||
{
|
{ text: 'Настройка сети', link: '/vdi/vdi-how-to/vdi-interconnect.md' },
|
||||||
text: 'Мониторинг', link: '/monitoring/about.md',
|
]
|
||||||
},
|
},
|
||||||
],
|
// {
|
||||||
|
// text: 'Gold-образ', link: '/vdi/vdi-how-to/vdi-gold.md'
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
text: 'Подключение к виртуальному рабочему месту', link: '/vdi/vdi-how-to/vdi-connect.md'
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,10 +54,12 @@ const pageName = computed(() =>
|
|||||||
<div class="content-container">
|
<div class="content-container">
|
||||||
<slot name="doc-before" />
|
<slot name="doc-before" />
|
||||||
<main class="main">
|
<main class="main">
|
||||||
<Content class="vp-doc" :class="[
|
<div class="vp-doc" :class="[
|
||||||
pageName,
|
pageName,
|
||||||
theme.externalLinkIcon && 'external-link-icon-enabled'
|
theme.externalLinkIcon && 'external-link-icon-enabled'
|
||||||
]" />
|
]">
|
||||||
|
<Content />
|
||||||
|
</div>
|
||||||
<SectionLinkList v-if="frontmatter.section_links" :links="frontmatter.section_links" />
|
<SectionLinkList v-if="frontmatter.section_links" :links="frontmatter.section_links" />
|
||||||
</main>
|
</main>
|
||||||
<VPDocFooter>
|
<VPDocFooter>
|
||||||
@@ -74,7 +76,7 @@ const pageName = computed(() =>
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@use 'src/assets/scss/app/helpers/media';
|
@use '@/scss/helpers/media';
|
||||||
|
|
||||||
.VPDoc {
|
.VPDoc {
|
||||||
padding: 32px 24px 96px;
|
padding: 32px 24px 96px;
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import { usePrevNext } from 'vitepress/dist/client/theme-default/composables/pre
|
|||||||
import VPIconEdit from 'vitepress/dist/client/theme-default/components/icons/VPIconEdit.vue'
|
import VPIconEdit from 'vitepress/dist/client/theme-default/components/icons/VPIconEdit.vue'
|
||||||
import VPLink from 'vitepress/dist/client/theme-default/components/VPLink.vue'
|
import VPLink from 'vitepress/dist/client/theme-default/components/VPLink.vue'
|
||||||
import VPDocFooterLastUpdated from 'vitepress/dist/client/theme-default/components/VPDocFooterLastUpdated.vue'
|
import VPDocFooterLastUpdated from 'vitepress/dist/client/theme-default/components/VPDocFooterLastUpdated.vue'
|
||||||
|
import CustomIcon from './CustomIcon.vue'
|
||||||
|
import { Icons } from '@beeline/design-tokens/js/iconfont/icons'
|
||||||
|
|
||||||
const { theme, page, frontmatter } = useData()
|
const { theme, page, frontmatter } = useData()
|
||||||
|
|
||||||
@@ -43,14 +45,14 @@ const showFooter = computed(() => {
|
|||||||
<nav v-if="control.prev?.link || control.next?.link" class="prev-next">
|
<nav v-if="control.prev?.link || control.next?.link" class="prev-next">
|
||||||
<div class="pager">
|
<div class="pager">
|
||||||
<VPLink v-if="control.prev?.link" class="pager-link prev" :href="control.prev.link">
|
<VPLink v-if="control.prev?.link" class="pager-link prev" :href="control.prev.link">
|
||||||
<span class="desc" v-html="theme.docFooter?.prev || 'Previous page'"></span>
|
<CustomIcon class="desc-prev" :icon="Icons.ArrowRight" />
|
||||||
<span class="title" v-html="control.prev.text"></span>
|
<span class="title" v-html="control.prev.text"></span>
|
||||||
</VPLink>
|
</VPLink>
|
||||||
</div>
|
</div>
|
||||||
<div class="pager">
|
<div class="pager">
|
||||||
<VPLink v-if="control.next?.link" class="pager-link next" :href="control.next.link">
|
<VPLink v-if="control.next?.link" class="pager-link next" :href="control.next.link">
|
||||||
<span class="desc" v-html="theme.docFooter?.next || 'Next page'"></span>
|
|
||||||
<span class="title" v-html="control.next.text"></span>
|
<span class="title" v-html="control.next.text"></span>
|
||||||
|
<CustomIcon class="desc-next" :icon="Icons.ArrowRight" />
|
||||||
</VPLink>
|
</VPLink>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -59,7 +61,7 @@ const showFooter = computed(() => {
|
|||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.VPDocFooter {
|
.VPDocFooter {
|
||||||
margin-top: 64px;
|
margin-top: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.edit-info {
|
.edit-info {
|
||||||
@@ -98,8 +100,6 @@ const showFooter = computed(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.prev-next {
|
.prev-next {
|
||||||
border-top: 1px solid var(--vp-c-divider);
|
|
||||||
padding-top: 24px;
|
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-row-gap: 8px;
|
grid-row-gap: 8px;
|
||||||
}
|
}
|
||||||
@@ -115,10 +115,19 @@ const showFooter = computed(() => {
|
|||||||
display: block;
|
display: block;
|
||||||
border: 1px solid var(--vp-c-divider);
|
border: 1px solid var(--vp-c-divider);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 11px 16px 13px;
|
padding: 10px 16px 10px 12px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
transition: border-color 0.25s;
|
transition: border-color 0.25s;
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
|
||||||
|
color: #1a73e8;
|
||||||
|
|
||||||
|
&.next {
|
||||||
|
padding: 10px 12px 10px 16px;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.pager-link:hover {
|
.pager-link:hover {
|
||||||
@@ -136,6 +145,14 @@ const showFooter = computed(() => {
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: var(--vp-c-text-2);
|
color: var(--vp-c-text-2);
|
||||||
|
|
||||||
|
&-next {
|
||||||
|
rotate: -270deg;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-prev {
|
||||||
|
rotate: -90deg;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ import { escapeRegExp } from 'vitepress/dist/client/shared'
|
|||||||
import { useData } from 'vitepress/dist/client/theme-default/composables/data'
|
import { useData } from 'vitepress/dist/client/theme-default/composables/data'
|
||||||
import { LRUCache } from 'vitepress/dist/client/theme-default/support/lru'
|
import { LRUCache } from 'vitepress/dist/client/theme-default/support/lru'
|
||||||
import { createSearchTranslate } from 'vitepress/dist/client/theme-default/support/translation'
|
import { createSearchTranslate } from 'vitepress/dist/client/theme-default/support/translation'
|
||||||
|
import CustomIcon from './CustomIcon.vue';
|
||||||
|
import { Icons } from '@beeline/design-tokens/js/iconfont/icons';
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: 'close'): void
|
(e: 'close'): void
|
||||||
@@ -496,21 +498,7 @@ function formMarkRegex(terms: Set<string>) {
|
|||||||
:title="$t('modal.resetButtonTitle')"
|
:title="$t('modal.resetButtonTitle')"
|
||||||
@click="resetSearch"
|
@click="resetSearch"
|
||||||
>
|
>
|
||||||
<svg
|
<CustomIcon :icon="Icons.Close" size="large" style="padding: 12px 0;" />
|
||||||
width="18"
|
|
||||||
height="18"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
stroke-width="2"
|
|
||||||
d="M20 5H9l-7 7l7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2Zm-2 4l-6 6m0-6l6 6"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@@ -576,12 +564,6 @@ function formMarkRegex(terms: Set<string>) {
|
|||||||
<p class="no-results-text">
|
<p class="no-results-text">
|
||||||
{{ $t('modal.noResultsText') }}
|
{{ $t('modal.noResultsText') }}
|
||||||
</p>
|
</p>
|
||||||
<button
|
|
||||||
class="no-results-button"
|
|
||||||
@click="retrySearch(searchIndex, filterText)"
|
|
||||||
>
|
|
||||||
Попробовать еще раз
|
|
||||||
</button>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -610,7 +592,6 @@ function formMarkRegex(terms: Set<string>) {
|
|||||||
background: var(--vp-local-search-bg);
|
background: var(--vp-local-search-bg);
|
||||||
width: min(100vw - 60px, 900px);
|
width: min(100vw - 60px, 900px);
|
||||||
height: min-content;
|
height: min-content;
|
||||||
max-height: min(100vh - 128px, 900px);
|
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -679,7 +660,7 @@ function formMarkRegex(terms: Set<string>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.search-actions button {
|
.search-actions button {
|
||||||
padding: 8px;
|
padding: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-actions button:not([disabled]):hover,
|
.search-actions button:not([disabled]):hover,
|
||||||
@@ -728,11 +709,11 @@ function formMarkRegex(terms: Set<string>) {
|
|||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overscroll-behavior: contain;
|
overscroll-behavior: contain;
|
||||||
box-shadow: var(--vp-c-shadow-3);
|
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
border: 1px solid rgba(25, 28, 52, 0.18);
|
border: 1px solid rgba(25, 28, 52, 0.18);
|
||||||
padding: 8px 0;
|
padding: 8px 0;
|
||||||
max-height: min(100vh - 214px, 900px);
|
max-height: min(100vh - 214px, 900px);
|
||||||
|
box-shadow: 0px 6px 38px rgba(0, 0, 0, 0.16), 0px 0px 10px rgba(0, 0, 0, 0.08);
|
||||||
|
|
||||||
li:hover {
|
li:hover {
|
||||||
background-color: rgba(25, 28, 52, 0.08);
|
background-color: rgba(25, 28, 52, 0.08);
|
||||||
@@ -745,7 +726,7 @@ function formMarkRegex(terms: Set<string>) {
|
|||||||
gap: 8px;
|
gap: 8px;
|
||||||
transition: none;
|
transition: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
height: 66px;
|
min-height: 66px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.result > div {
|
.result > div {
|
||||||
@@ -858,17 +839,18 @@ function formMarkRegex(terms: Set<string>) {
|
|||||||
gap: 24px;
|
gap: 24px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
z-index: 100;
|
z-index: 100;
|
||||||
box-shadow: 0 0 10 0 rgba(0, 0, 0, 0.16);
|
box-shadow: 0px 6px 38px rgba(0, 0, 0, 0.16), 0px 0px 10px rgba(0, 0, 0, 0.08);
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
border: 1px solid rgba(25, 28, 52, 0.18);
|
border: 1px solid rgba(25, 28, 52, 0.18);
|
||||||
background-color: rgb(255, 255, 255);
|
background-color: rgb(255, 255, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
.no-results-text {
|
.no-results-text {
|
||||||
font-weight: 700;
|
font-weight: 400;
|
||||||
font-size: 17px;
|
font-size: 17px;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
letter-spacing: 0.2px;
|
letter-spacing: 0.2px;
|
||||||
|
color: rgba(25, 28, 52, 0.48);
|
||||||
}
|
}
|
||||||
|
|
||||||
.no-results-button {
|
.no-results-button {
|
||||||
@@ -879,6 +861,7 @@ function formMarkRegex(terms: Set<string>) {
|
|||||||
font-size: 17px;
|
font-size: 17px;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
letter-spacing: 0.2px;
|
letter-spacing: 0.2px;
|
||||||
|
color: rgba(9, 11, 22, 0.94);
|
||||||
}
|
}
|
||||||
|
|
||||||
svg {
|
svg {
|
||||||
|
|||||||
@@ -1,11 +1,329 @@
|
|||||||
.custom-block {
|
@use "@beeline/design-tokens/scss/tokens/globals/colors";
|
||||||
padding: 24px;
|
@use "@beeline/design-tokens/scss/tokens/themes";
|
||||||
|
@use '@beeline/design-tokens/scss/tokens/themes/theme-variables' as *;
|
||||||
|
|
||||||
&-title {
|
.custom-block {
|
||||||
font-size: 18px;
|
padding: 24px;
|
||||||
line-height: 22px;
|
|
||||||
font-weight: 500;
|
&-title {
|
||||||
letter-spacing: .2px;
|
font-size: 17px !important;
|
||||||
margin-bottom: 12px;
|
line-height: 22px !important;
|
||||||
|
font-weight: 700 !important;
|
||||||
|
letter-spacing: .2px !important;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.tip a {
|
||||||
|
color: #1a73e8;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #1a73e8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 24px 24px 24px 64px;
|
||||||
|
line-height: 24px;
|
||||||
|
font-size: var(--vp-custom-block-font-size);
|
||||||
|
color: var(--vp-c-text-2);
|
||||||
|
|
||||||
|
&.custom-block.details {
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.info {
|
||||||
|
border-color: var(--vp-custom-block-info-border);
|
||||||
|
color: var(--vp-custom-block-info-text);
|
||||||
|
background-color: var(--vp-custom-block-info-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.info a,
|
||||||
|
.custom-block.info code {
|
||||||
|
color: var(--vp-c-brand-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.info a:hover,
|
||||||
|
.custom-block.info a:hover > code {
|
||||||
|
color: var(--vp-c-brand-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.info code {
|
||||||
|
background-color: var(--vp-custom-block-info-code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.note {
|
||||||
|
border-color: var(--vp-custom-block-note-border);
|
||||||
|
color: var(--vp-custom-block-note-text);
|
||||||
|
background-color: var(--vp-custom-block-note-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.note a,
|
||||||
|
.custom-block.note code {
|
||||||
|
color: var(--vp-c-brand-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.note a:hover,
|
||||||
|
.custom-block.note a:hover > code {
|
||||||
|
color: var(--vp-c-brand-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.note code {
|
||||||
|
background-color: var(--vp-custom-block-note-code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.tip {
|
||||||
|
border-color: var(--vp-custom-block-tip-border);
|
||||||
|
color: var(--vp-custom-block-tip-text);
|
||||||
|
background-color: var(--vp-custom-block-tip-bg);
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
height: 24px;
|
||||||
|
width: 24px;
|
||||||
|
background-image: var(--vp-icon-clock);
|
||||||
|
position: absolute;
|
||||||
|
left: 24px;
|
||||||
|
content: '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.tip a,
|
||||||
|
.custom-block.tip code {
|
||||||
|
color: var(--vp-c-tip-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.tip a:hover,
|
||||||
|
.custom-block.tip a:hover > code {
|
||||||
|
color: var(--vp-c-tip-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.tip code {
|
||||||
|
background-color: var(--vp-custom-block-tip-code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.important {
|
||||||
|
border-color: var(--vp-custom-block-important-border);
|
||||||
|
color: var(--vp-custom-block-important-text);
|
||||||
|
background-color: var(--vp-custom-block-important-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.important a,
|
||||||
|
.custom-block.important code {
|
||||||
|
color: var(--vp-c-important-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.important a:hover,
|
||||||
|
.custom-block.important a:hover > code {
|
||||||
|
color: var(--vp-c-important-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.important code {
|
||||||
|
background-color: var(--vp-custom-block-important-code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.warning {
|
||||||
|
border-color: var(--vp-custom-block-warning-border);
|
||||||
|
color: var(--vp-custom-block-warning-text);
|
||||||
|
background-color: var(--vp-custom-block-warning-bg);
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
height: 24px;
|
||||||
|
width: 24px;
|
||||||
|
background-image: var(--vp-icon-info-circled);
|
||||||
|
position: absolute;
|
||||||
|
left: 24px;
|
||||||
|
content: '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.warning a,
|
||||||
|
.custom-block.warning code {
|
||||||
|
color: $color-text-link;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.warning a:hover,
|
||||||
|
.custom-block.warning a:hover > code {
|
||||||
|
color: $color-text-link;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.warning code {
|
||||||
|
background-color: var(--vp-custom-block-warning-code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.danger {
|
||||||
|
border-color: var(--vp-custom-block-danger-border);
|
||||||
|
color: var(--vp-custom-block-danger-text);
|
||||||
|
background-color: var(--vp-custom-block-danger-bg);
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
height: 24px;
|
||||||
|
width: 24px;
|
||||||
|
background-image: var(--vp-icon-warning-triangle);
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.danger a,
|
||||||
|
.custom-block.danger code {
|
||||||
|
color: var(--vp-c-danger-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.danger a:hover,
|
||||||
|
.custom-block.danger a:hover > code {
|
||||||
|
color: var(--vp-c-danger-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.danger code {
|
||||||
|
background-color: var(--vp-custom-block-danger-code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.caution {
|
||||||
|
border-color: var(--vp-custom-block-caution-border);
|
||||||
|
color: var(--vp-custom-block-caution-text);
|
||||||
|
background-color: var(--vp-custom-block-caution-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.caution a,
|
||||||
|
.custom-block.caution code {
|
||||||
|
color: var(--vp-c-caution-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.caution a:hover,
|
||||||
|
.custom-block.caution a:hover > code {
|
||||||
|
color: var(--vp-c-caution-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.caution code {
|
||||||
|
background-color: var(--vp-custom-block-caution-code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.details {
|
||||||
|
border-color: var(--vp-custom-block-details-border);
|
||||||
|
color: var(--vp-custom-block-details-text);
|
||||||
|
background-color: transparent;
|
||||||
|
border-radius: 12px;
|
||||||
|
border: 1px solid $color-border;
|
||||||
|
|
||||||
|
pre {
|
||||||
|
border: none !important;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
div {
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:open {
|
||||||
|
&.custom-block.details summary {
|
||||||
|
background-color: $color-background-base-hover;
|
||||||
|
border-top-left-radius: 12px;
|
||||||
|
border-top-right-radius: 12px;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
background-image: var(--vp-icon-nav-arrow-up);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.details a {
|
||||||
|
color: var(--vp-c-brand-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.details a:hover,
|
||||||
|
.custom-block.details a:hover > code {
|
||||||
|
color: var(--vp-c-brand-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.details code {
|
||||||
|
background-color: var(--vp-custom-block-details-code-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block-title {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block p + p {
|
||||||
|
margin: 8px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.details summary {
|
||||||
|
margin: 0;
|
||||||
|
padding: 24px;
|
||||||
|
font-weight: 500;
|
||||||
|
cursor: pointer;
|
||||||
|
user-select: none;
|
||||||
|
font-size: 19px;
|
||||||
|
line-height: 24px;
|
||||||
|
letter-spacing: 0.2px;
|
||||||
|
display: block;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
position: absolute;
|
||||||
|
right: 24px;
|
||||||
|
content: '';
|
||||||
|
background-image: var(--vp-icon-nav-arrow-down);
|
||||||
|
height: 24px;
|
||||||
|
width: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.details {
|
||||||
|
h1, h2, h3, h4, h5, ul, p {
|
||||||
|
margin: 0 24px;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 24px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
margin-top: 24px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ol {
|
||||||
|
padding: 0 24px;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 24px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
margin-top: 24px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.details summary + p {
|
||||||
|
padding: 24px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block a {
|
||||||
|
color: inherit;
|
||||||
|
font-weight: 600;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
transition: opacity 0.25s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block a:hover {
|
||||||
|
opacity: 0.75;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block code {
|
||||||
|
font-size: var(--vp-custom-block-code-font-size);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-block.custom-block th,
|
||||||
|
.custom-block.custom-block blockquote > p {
|
||||||
|
font-size: var(--vp-custom-block-font-size);
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
.VPDocAside {
|
.VPDocAside {
|
||||||
.outline-link {
|
.outline-link {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 17px;
|
font-size: 15px;
|
||||||
line-height: 22px;
|
line-height: 18px;
|
||||||
letter-spacing: 0.2px;
|
letter-spacing: 0.2px;
|
||||||
padding-top: 8px;
|
padding-top: 8px;
|
||||||
padding-bottom: 8px;
|
padding-bottom: 8px;
|
||||||
@@ -19,10 +19,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.outline-title {
|
.outline-title {
|
||||||
font-size: 17px;
|
font-size: 15px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
line-height: 22px;
|
line-height: 18px;
|
||||||
padding-bottom: 16px;
|
padding-bottom: 16px;
|
||||||
|
color: colors.$color-text-black-active;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
|
|||||||
@@ -1,135 +1,566 @@
|
|||||||
@use "@beeline/design-tokens/scss/tokens/globals/colors";
|
@use "@beeline/design-tokens/scss/tokens/globals/colors";
|
||||||
@use "@beeline/design-tokens/scss/tokens/themes";
|
@use "@beeline/design-tokens/scss/tokens/themes";
|
||||||
|
@use '@beeline/design-tokens/scss/tokens/themes/theme-variables' as *;
|
||||||
|
|
||||||
@mixin font_style($fontSize, $fontWeight, $lineHeight, $letterSpacing) {
|
@mixin font_style($fontSize, $fontWeight, $lineHeight, $letterSpacing) {
|
||||||
font-size: $fontSize;
|
font-size: $fontSize;
|
||||||
font-weight: $fontWeight;
|
font-weight: $fontWeight;
|
||||||
line-height: $lineHeight;
|
line-height: $lineHeight;
|
||||||
letter-spacing: $letterSpacing;
|
letter-spacing: $letterSpacing;
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin generate-numbered-list-styles($start, $end) {
|
@mixin generate-numbered-list-styles($start, $end) {
|
||||||
@for $counter from $start through $end {
|
@for $counter from $start through $end {
|
||||||
$counter-name: list + ' ' + ($counter - 1);
|
$counter-name: list + ' ' + ($counter - 1);
|
||||||
ol[start*="#{$counter}"] {
|
ol[start*="#{$counter}"] {
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
counter-reset: $counter-name;
|
counter-reset: $counter-name;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.vp-doc {
|
.vp-doc {
|
||||||
font-size: 17px;
|
font-size: 17px;
|
||||||
|
|
||||||
// Titles
|
// Titles
|
||||||
h1 {
|
h1 {
|
||||||
@include font_style(44px, 500, 46px, 0.3px);
|
@include font_style(44px, 500, 56px, 0.3px);
|
||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
@include font_style(34px, 400, 36px, 0.3px);
|
@include font_style(26px, 500, 32px, 0.2px);
|
||||||
margin-bottom: 12px;
|
margin: 40px 0 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
@include font_style(26px, 500, 32px, 0.2px);
|
@include font_style(26px, 500, 32px, 0.2px);
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
h4 {
|
h4 {
|
||||||
@include font_style(20px, 700, 28px, 0.2px);
|
@include font_style(20px, 700, 28px, 0.2px);
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
h5 {
|
h5 {
|
||||||
@include font_style(17px, 500, 22px, 0.2px);
|
@include font_style(17px, 500, 22px, 0.2px);
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Text
|
// Text
|
||||||
ol {
|
ol {
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
counter-reset: list;
|
counter-reset: list;
|
||||||
margin: 0 0 0 50px;
|
margin: 0 0 0 50px;
|
||||||
padding: 0 0 5px 0;
|
padding: 0;
|
||||||
font-size: 16px;
|
font-size: 15px;
|
||||||
|
|
||||||
& > * + * {
|
& > * + * {
|
||||||
margin-top: 50px;
|
margin-top: 50px;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include generate-numbered-list-styles(2, 50);
|
||||||
|
|
||||||
|
ol li {
|
||||||
|
position: relative;
|
||||||
|
padding: 8px 0 0 0;
|
||||||
|
line-height: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
li + li {
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul li {
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
margin-top: 8px;
|
||||||
|
@include font_style(15px, 400, 18px, 0.2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
ol li:nth-last-of-type(n+2)::after {
|
||||||
|
content: '';
|
||||||
|
border-left: 1px solid rgb(201, 197, 197);
|
||||||
|
position: absolute;
|
||||||
|
line-height: 100%;
|
||||||
|
left: -30px;
|
||||||
|
top: 43px;
|
||||||
|
bottom: -25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol li::before {
|
||||||
|
content: counter(list);
|
||||||
|
counter-increment: list;
|
||||||
|
display: inline-flex;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: -48px;
|
||||||
|
width: 35px;
|
||||||
|
height: 35px;
|
||||||
|
background-color: colors.$color-background-brand;
|
||||||
|
color: themes.$color-text-active;
|
||||||
|
@include font_style(15px, 400, 18px, 0.2px);
|
||||||
|
border-radius: 50%;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul li:nth-last-of-type(n):after {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol ul li::before {
|
||||||
|
counter-increment: list;
|
||||||
|
content: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol li:last-child {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul li:last-child {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol li p {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
@include font_style(15px, 400, 18px, 0.2px);
|
||||||
|
margin: 24px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Links
|
||||||
|
a {
|
||||||
|
color: #1a73e8;
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
&:hover, &:focus-visible, &:focus, &:active {
|
||||||
|
color: #1a73e8;
|
||||||
}
|
}
|
||||||
|
|
||||||
@include generate-numbered-list-styles(2, 50);
|
&:visited {
|
||||||
|
color: #7e00ed;
|
||||||
ol li {
|
|
||||||
position: relative;
|
|
||||||
padding: 5px 0 0 0;
|
|
||||||
line-height: 1.4;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
li + li {
|
// Tabs
|
||||||
margin-top: 34px;
|
.plugin-tabs {
|
||||||
|
border-radius: 12px;
|
||||||
|
border: 1px solid $color-border;
|
||||||
|
background-color: revert-layer !important;
|
||||||
|
|
||||||
|
&--tab {
|
||||||
|
border-bottom: 1px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
&--content {
|
||||||
|
padding: 24px !important;
|
||||||
|
|
||||||
|
.language- {
|
||||||
|
border: none;
|
||||||
|
padding: 0px !important;
|
||||||
|
overflow-y: hidden !important;
|
||||||
|
overflow-x: hidden !important;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ul li {
|
// Code
|
||||||
padding-bottom: 0;
|
.vp-doc :not(pre, h1, h2, h3, h4, h5, h6) > code {
|
||||||
padding-top: 0;
|
font-size: var(--vp-code-font-size);
|
||||||
margin-top: 8px;
|
color: var(--vp-code-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
ol li::before {
|
|
||||||
content: counter(list);
|
|
||||||
counter-increment: list;
|
|
||||||
display: inline-flex;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: -48px;
|
|
||||||
width: 35px;
|
|
||||||
height: 35px;
|
|
||||||
background-color: colors.$color-background-brand;
|
|
||||||
color: themes.$color-text-active;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 25px;
|
|
||||||
font-size: 16px;
|
|
||||||
border-radius: 50%;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul li:nth-last-of-type(n):after {
|
.vp-doc :not(pre) > code {
|
||||||
content: none;
|
border-radius: 4px;
|
||||||
}
|
padding: 3px 6px;
|
||||||
|
background-color: var(--vp-code-bg);
|
||||||
|
transition:
|
||||||
|
color 0.25s,
|
||||||
|
background-color 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
ol ul li::before {
|
.vp-doc a > code {
|
||||||
counter-increment: list;
|
color: var(--vp-code-link-color);
|
||||||
content: none;
|
}
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol li:last-child, ul li:last-child {
|
.vp-doc a:hover > code {
|
||||||
margin-bottom: 40px;
|
color: var(--vp-code-link-hover-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
ol li p {
|
.vp-doc h1 > code,
|
||||||
margin-top: 0;
|
.vp-doc h2 > code,
|
||||||
}
|
.vp-doc h3 > code {
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
||||||
|
|
||||||
p {
|
.vp-doc div[class*='language-'],
|
||||||
line-height: 22px;
|
.vp-block {
|
||||||
}
|
position: relative;
|
||||||
|
margin: 16px -24px;
|
||||||
|
background-color: transparent;
|
||||||
|
overflow-x: auto;
|
||||||
|
transition: background-color 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
// Links
|
@media (min-width: 640px) {
|
||||||
a {
|
.vp-doc div[class*='language-'],
|
||||||
color: #1a73e8;
|
.vp-block {
|
||||||
|
border-radius: 12px;
|
||||||
|
margin: 16px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&:hover, &:focus-visible, &:focus, &:active {
|
@media (max-width: 639px) {
|
||||||
color: #1a73e8;
|
.vp-doc li div[class*='language-'] {
|
||||||
}
|
border-radius: 8px 0 0 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&:visited {
|
.vp-doc div[class*='language-'] + div[class*='language-'],
|
||||||
color: #7e00ed;
|
.vp-doc div[class$='-api'] + div[class*='language-'],
|
||||||
}
|
.vp-doc div[class*='language-'] + div[class$='-api'] > div[class*='language-'] {
|
||||||
}
|
margin-top: -8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] pre,
|
||||||
|
.vp-doc [class*='language-'] code {
|
||||||
|
/*rtl:ignore*/
|
||||||
|
direction: ltr;
|
||||||
|
/*rtl:ignore*/
|
||||||
|
text-align: left;
|
||||||
|
white-space: pre;
|
||||||
|
word-spacing: normal;
|
||||||
|
word-break: normal;
|
||||||
|
word-wrap: normal;
|
||||||
|
-moz-tab-size: 4;
|
||||||
|
-o-tab-size: 4;
|
||||||
|
tab-size: 4;
|
||||||
|
-webkit-hyphens: none;
|
||||||
|
-moz-hyphens: none;
|
||||||
|
-ms-hyphens: none;
|
||||||
|
hyphens: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] pre {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
margin: 0;
|
||||||
|
padding: 24px;
|
||||||
|
overflow-x: auto;
|
||||||
|
border-radius: 12px;
|
||||||
|
border: 1px solid $color-border;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] code {
|
||||||
|
display: block;
|
||||||
|
padding: 0px;
|
||||||
|
width: fit-content;
|
||||||
|
min-width: 100%;
|
||||||
|
line-height: var(--vp-code-line-height);
|
||||||
|
font-size: var(--vp-code-font-size);
|
||||||
|
color: var(--vp-code-color);
|
||||||
|
transition: color 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] code .highlighted {
|
||||||
|
background-color: var(--vp-code-line-highlight-color);
|
||||||
|
transition: background-color 0.5s;
|
||||||
|
margin: 0 -24px;
|
||||||
|
padding: 0 24px;
|
||||||
|
width: calc(100% + 2 * 24px);
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] code .highlighted.error {
|
||||||
|
background-color: var(--vp-code-line-error-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] code .highlighted.warning {
|
||||||
|
background-color: var(--vp-code-line-warning-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] code .diff {
|
||||||
|
transition: background-color 0.5s;
|
||||||
|
margin: 0 -24px;
|
||||||
|
padding: 0 24px;
|
||||||
|
width: calc(100% + 2 * 24px);
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] code .diff::before {
|
||||||
|
position: absolute;
|
||||||
|
left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] .has-focused-lines .line:not(.has-focus) {
|
||||||
|
filter: blur(0.095rem);
|
||||||
|
opacity: 0.4;
|
||||||
|
transition:
|
||||||
|
filter 0.35s,
|
||||||
|
opacity 0.35s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] .has-focused-lines .line:not(.has-focus) {
|
||||||
|
opacity: 0.7;
|
||||||
|
transition:
|
||||||
|
filter 0.35s,
|
||||||
|
opacity 0.35s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-']:hover .has-focused-lines .line:not(.has-focus) {
|
||||||
|
filter: blur(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] code .diff.remove {
|
||||||
|
background-color: var(--vp-code-line-diff-remove-color);
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] code .diff.remove::before {
|
||||||
|
content: '-';
|
||||||
|
color: var(--vp-code-line-diff-remove-symbol-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] code .diff.add {
|
||||||
|
background-color: var(--vp-code-line-diff-add-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] code .diff.add::before {
|
||||||
|
content: '+';
|
||||||
|
color: var(--vp-code-line-diff-add-symbol-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc div[class*='language-'].line-numbers-mode {
|
||||||
|
/*rtl:ignore*/
|
||||||
|
padding-left: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc .line-numbers-wrapper {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
/*rtl:ignore*/
|
||||||
|
left: 0;
|
||||||
|
z-index: 3;
|
||||||
|
/*rtl:ignore*/
|
||||||
|
border-right: 1px solid var(--vp-code-block-divider-color);
|
||||||
|
padding-top: 20px;
|
||||||
|
width: 32px;
|
||||||
|
text-align: center;
|
||||||
|
font-family: var(--vp-font-family-mono);
|
||||||
|
line-height: var(--vp-code-line-height);
|
||||||
|
font-size: var(--vp-code-font-size);
|
||||||
|
color: var(--vp-code-line-number-color);
|
||||||
|
transition:
|
||||||
|
border-color 0.5s,
|
||||||
|
color 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] > button.copy {
|
||||||
|
/*rtl:ignore*/
|
||||||
|
direction: ltr;
|
||||||
|
position: absolute;
|
||||||
|
top: 12px;
|
||||||
|
/*rtl:ignore*/
|
||||||
|
right: 12px;
|
||||||
|
z-index: 3;
|
||||||
|
border: none;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
background-color: transparent;
|
||||||
|
opacity: 1;
|
||||||
|
cursor: pointer;
|
||||||
|
background-image: var(--vp-icon-copy);
|
||||||
|
background-position: 50%;
|
||||||
|
background-size: 20px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
transition:
|
||||||
|
border-color 0.25s,
|
||||||
|
background-color 0.25s,
|
||||||
|
opacity 0.25s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-']:hover > button.copy,
|
||||||
|
.vp-doc [class*='language-'] > button.copy:focus {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] > button.copy:hover,
|
||||||
|
.vp-doc [class*='language-'] > button.copy.copied {
|
||||||
|
border: none;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] > button.copy.copied,
|
||||||
|
.vp-doc [class*='language-'] > button.copy:hover.copied {
|
||||||
|
/*rtl:ignore*/
|
||||||
|
background-color: transparent;
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] > button.copy.copied::before,
|
||||||
|
.vp-doc [class*='language-'] > button.copy:hover.copied::before {
|
||||||
|
position: relative;
|
||||||
|
top: -1px;
|
||||||
|
/*rtl:ignore*/
|
||||||
|
transform: translateX(calc(-100% - 1px));
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
border: none;
|
||||||
|
/*rtl:ignore*/
|
||||||
|
border-right: 0;
|
||||||
|
padding: 0 10px;
|
||||||
|
width: fit-content;
|
||||||
|
height: 40px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--vp-code-copy-code-active-text);
|
||||||
|
white-space: nowrap;
|
||||||
|
content: '';
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-'] > span.lang {
|
||||||
|
position: absolute;
|
||||||
|
top: 2px;
|
||||||
|
/*rtl:ignore*/
|
||||||
|
right: 8px;
|
||||||
|
z-index: 2;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--vp-code-lang-color);
|
||||||
|
transition:
|
||||||
|
color 0.4s,
|
||||||
|
opacity 0.4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc [class*='language-']:hover > button.copy + span.lang,
|
||||||
|
.vp-doc [class*='language-'] > button.copy:focus + span.lang {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Banner
|
||||||
|
.vp-doc .custom-block {
|
||||||
|
margin: 40px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc .custom-block p {
|
||||||
|
margin: 8px 0;
|
||||||
|
line-height: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc .custom-block p:first-child {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc .custom-block div[class*='language-'] {
|
||||||
|
margin: 8px 0;
|
||||||
|
border-radius: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc .custom-block div[class*='language-'] code {
|
||||||
|
font-weight: 400;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc .custom-block .vp-code-group .tabs {
|
||||||
|
margin: 0;
|
||||||
|
border-radius: 8px 8px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Table
|
||||||
|
.vp-doc table {
|
||||||
|
display: block;
|
||||||
|
border-collapse: collapse;
|
||||||
|
overflow-x: auto;
|
||||||
|
border-radius: 12px;
|
||||||
|
border: 1px solid $color-border;
|
||||||
|
// width: 100%;
|
||||||
|
margin: 24px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc tr {
|
||||||
|
border-top: hidden;
|
||||||
|
transition: background-color 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc tr:nth-child(2n) {
|
||||||
|
background-color: var(--vp-c-bg-soft);
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc th,
|
||||||
|
.vp-doc td {
|
||||||
|
padding: 18px 16px;
|
||||||
|
padding: 18px 16px;
|
||||||
|
width: 100vh;
|
||||||
|
background-color: var(--vp-c-bg);
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc tbody tr {
|
||||||
|
border-top: 1px solid $color-border;
|
||||||
|
|
||||||
|
&:last-child{
|
||||||
|
border-bottom: hidden;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc th {
|
||||||
|
@include font_style(15px, 500, 20px, 0.2px);
|
||||||
|
color: $color-text-active;
|
||||||
|
background-color: var(--vp-c-bg);
|
||||||
|
border-top: 1px solid $color-border;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc td {
|
||||||
|
@include font_style(15px, 400, 18px, 0.2px);
|
||||||
|
padding: 18px 16px;
|
||||||
|
background-color: var(--vp-c-bg);
|
||||||
|
border-right: hidden;
|
||||||
|
border-left: hidden;
|
||||||
|
color: $color-text-active;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Block
|
||||||
|
.vp-doc .custom-block {
|
||||||
|
margin: 16px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc .custom-block p {
|
||||||
|
margin: 8px 0;
|
||||||
|
line-height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc .custom-block p:first-child {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc .custom-block div[class*='language-'] {
|
||||||
|
margin: 40px 0;
|
||||||
|
border-radius: 12px;
|
||||||
|
|
||||||
|
&.vp-doc .custom-block {
|
||||||
|
margin: 0;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc .custom-block div[class*='language-'] code {
|
||||||
|
font-weight: 400;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc .custom-block .vp-code-group .tabs {
|
||||||
|
margin: 0;
|
||||||
|
border-radius: 8px 8px 0 0;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
@use '@beeline/design-tokens/scss/tokens/components/navigationDrawer';
|
@use '@beeline/design-tokens/scss/tokens/components/navigationDrawer';
|
||||||
@use '@beeline/design-tokens/scss/tokens/themes/theme-variables' as theme;
|
@use '@beeline/design-tokens/scss/tokens/themes/theme-variables' as theme;
|
||||||
@use 'src/assets/scss/app/helpers/media';
|
@use '@/scss/helpers/media';
|
||||||
|
|
||||||
.VPSidebar {
|
.VPSidebar {
|
||||||
--vp-sidebar-bg-color: var(--vp-c-bg);
|
--vp-sidebar-bg-color: var(--vp-c-bg);
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
@use '@beeline/design-tokens/scss/font-face';
|
||||||
|
@use "@beeline/design-tokens/scss/iconfont/iconfont" with (
|
||||||
|
$font-path-iconfont: '../assets/fonts/iconfont'
|
||||||
|
);
|
||||||
|
@use "@beeline/design-tokens/scss/iconfont/icons";
|
||||||
@use '@beeline/design-tokens/scss/tokens/themes/dark';
|
@use '@beeline/design-tokens/scss/tokens/themes/dark';
|
||||||
@use '@beeline/design-tokens/scss/tokens/themes';
|
@use '@beeline/design-tokens/scss/tokens/themes';
|
||||||
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
@use "@beeline/design-tokens/scss/iconfont/iconfont" with (
|
|
||||||
$font-path-iconfont: '/fonts/iconfont'
|
|
||||||
);
|
|
||||||
@use "@beeline/design-tokens/scss/iconfont/icons";
|
|
||||||
|
|
||||||
$font-path-beeline-sans: '/fonts/beeline-sans' !default;
|
|
||||||
|
|
||||||
@mixin beeline-sans-font($type, $weight, $style: normal) {
|
|
||||||
@font-face {
|
|
||||||
font-family: "Beeline Sans";
|
|
||||||
src:url('#{$font-path-beeline-sans}/BeelineSans-#{$type}.woff2') format('woff2'),
|
|
||||||
url('#{$font-path-beeline-sans}/BeelineSans-#{$type}.woff') format('woff'),
|
|
||||||
url('#{$font-path-beeline-sans}/BeelineSans-#{$type}.ttf') format('truetype');
|
|
||||||
font-weight: $weight;
|
|
||||||
font-style: $style;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin beeline-sans-font-pair($type, $weight) {
|
|
||||||
@include beeline-sans-font($type, $weight);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@include beeline-sans-font-pair(Regular, 400);
|
|
||||||
|
|
||||||
@include beeline-sans-font-pair(Medium, 500);
|
|
||||||
|
|
||||||
@include beeline-sans-font-pair(Bold, 700);
|
|
||||||
|
|
||||||
@include beeline-sans-font-pair(Black, 900);
|
|
||||||
|
|
||||||
$font-path-roboto-mono: '/fonts/roboto-mono' !default;
|
|
||||||
|
|
||||||
@mixin roboto-mono-font($type, $weight, $style: normal) {
|
|
||||||
@font-face {
|
|
||||||
font-family: "Roboto Mono";
|
|
||||||
src:url('#{$font-path-roboto-mono}/RobotoMono-#{$type}.woff2') format('woff2'),
|
|
||||||
url('#{$font-path-roboto-mono}/RobotoMono-#{$type}.woff') format('woff'),
|
|
||||||
url('#{$font-path-roboto-mono}/RobotoMono-#{$type}.ttf') format('truetype');
|
|
||||||
font-weight: $weight;
|
|
||||||
font-style: $style;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin roboto-mono-font-pair($type, $weight) {
|
|
||||||
@include roboto-mono-font($type, $weight);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@include roboto-mono-font-pair(Light, 300);
|
|
||||||
|
|
||||||
@include roboto-mono-font-pair(Regular, 400);
|
|
||||||
|
|
||||||
@include roboto-mono-font-pair(Medium, 500);
|
|
||||||
|
|
||||||
@include roboto-mono-font-pair(Bold, 700);
|
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
@forward "media";
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
@use "sass:map";
|
||||||
|
|
||||||
// @deprecated
|
// @deprecated
|
||||||
@mixin media($minWidth, $maxWidth) {
|
@mixin media($minWidth, $maxWidth) {
|
||||||
@media (min-width: $minWidth) and (max-width: $maxWidth) {
|
@media (min-width: $minWidth) and (max-width: $maxWidth) {
|
||||||
@@ -27,7 +29,7 @@ $breakpoints: (
|
|||||||
);
|
);
|
||||||
|
|
||||||
@mixin max($breakpoint) {
|
@mixin max($breakpoint) {
|
||||||
$value: map-get($breakpoints, $breakpoint);
|
$value: map.get($breakpoints, $breakpoint);
|
||||||
|
|
||||||
@if $value {
|
@if $value {
|
||||||
@media (max-width: $value) {
|
@media (max-width: $value) {
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
@use "fonts";
|
@use "design-tokens";
|
||||||
@use "design-system";
|
|
||||||
@use "vars";
|
@use "vars";
|
||||||
@use "components";
|
@use "components";
|
||||||
@@ -111,7 +111,7 @@
|
|||||||
|
|
||||||
:root {
|
:root {
|
||||||
--vp-font-family-base: 'Beeline Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
--vp-font-family-base: 'Beeline Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
--vp-font-family-mono: 'Roboto Mono', monospace;
|
--vp-font-family-mono: 'JetBrains Mono', monospace;
|
||||||
|
|
||||||
// Code
|
// Code
|
||||||
// --vp-code-font-size: ;
|
// --vp-code-font-size: ;
|
||||||
@@ -183,16 +183,18 @@
|
|||||||
--vp-custom-block-code-font-size: 17px;
|
--vp-custom-block-code-font-size: 17px;
|
||||||
--vp-custom-block-tip-border: transparent;
|
--vp-custom-block-tip-border: transparent;
|
||||||
--vp-custom-block-tip-text: var(--vp-c-text-1);
|
--vp-custom-block-tip-text: var(--vp-c-text-1);
|
||||||
--vp-custom-block-tip-bg: #f1f1f3;
|
--vp-custom-block-tip-bg: #f9f9f9;
|
||||||
--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);
|
--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);
|
||||||
--vp-custom-block-warning-bg: #fff4e1;
|
--vp-custom-block-warning-bg: #e3f2ff;
|
||||||
--vp-custom-block-danger-bg: #ffecef;
|
--vp-custom-block-warning-icon: #1a73e8;
|
||||||
|
--vp-custom-block-danger-bg: #fff4e1;
|
||||||
|
--vp-custom-block-danger-icon: #ff9419;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark {
|
.dark {
|
||||||
--vp-custom-block-warning-bg: #3d392a;
|
--vp-custom-block-warning-bg: #132338;
|
||||||
--vp-custom-block-tip-bg: #36383c;
|
--vp-custom-block-tip-bg: #36383c;
|
||||||
--vp-custom-block-danger-bg: #371313;
|
--vp-custom-block-danger-bg: #3d392a;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -204,5 +206,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
|
--vp-icon-copy: url('../../../public/icons/copy.svg');
|
||||||
|
--vp-icon-clock: url('../../../public/icons/clock.svg');
|
||||||
|
--vp-icon-info-circled: url('../../../public/icons/info_circled.svg');
|
||||||
|
--vp-icon-warning-triangle: url('../../../public/icons/warning_triangle.svg');
|
||||||
|
--vp-icon-nav-arrow-down: url('../../../public/icons/nav_arrow_down.svg');
|
||||||
|
--vp-icon-nav-arrow-up: url('../../../public/icons/nav_arrow_up.svg');
|
||||||
--vp-sidebar-width: 320px;
|
--vp-sidebar-width: 320px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
# Матрица региональной доступности
|
|
||||||
|
|
||||||
Регион доступности — это один или несколько центров обработки данных (ЦОД), в которых могут быть размещены компоненты облачной инфраструктуры.
|
|
||||||
|
|
||||||
| Регион | Статус | Гипервизор | Процессор | HDD| SSD | NVME|
|
|
||||||
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
||||||
| **ДатаФорт 1** | Доступен | OpenStack | Intel® Xeon® Gold 6248R | ✘ | ✘ | ✅ |
|
|
||||||
|
|
||||||
Условные обозначения:
|
|
||||||
|
|
||||||
✅ — есть возможность выдачи ресурсов.
|
|
||||||
|
|
||||||
✘ — нет возможности выдачи ресурсов.
|
|
||||||
@@ -10,5 +10,3 @@ section_links:
|
|||||||
При [регистрации пользователя](../start/getting-started.md#1-регистрация-в-beeline-cloud) в Beeline Cloud создается аккаунт и проект в Beeline Cloud.
|
При [регистрации пользователя](../start/getting-started.md#1-регистрация-в-beeline-cloud) в Beeline Cloud создается аккаунт и проект в Beeline Cloud.
|
||||||
|
|
||||||
С помощью аккаунта можно управлять профилем пользователя - добавлять SSH-ключи, чтобы подключаться к виртуальным машинам без ввода пароля.
|
С помощью аккаунта можно управлять профилем пользователя - добавлять SSH-ключи, чтобы подключаться к виртуальным машинам без ввода пароля.
|
||||||
|
|
||||||
В проекте можно создавать ресурсы, добавлять пользователей в проект и управлять доступом к ресурсам.
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
# Квоты и лимиты
|
|
||||||
|
|
||||||
Ограничения включают в себя лимиты и квоты на потребление ресурсов в проекте.
|
|
||||||
|
|
||||||
Квоты ограничивают потребление ресурсов в проекте. В проекте на каждый ресурс выделяется квота, не превышающая лимит.
|
|
||||||
|
|
||||||
После создания проекту становятся доступны базовые квоты. Для них установлены значения по умолчанию.
|
|
||||||
|
|
||||||
**Базовые квоты**
|
|
||||||
|
|
||||||
| Название квоты | Количество |
|
|
||||||
|---------------------|------------|
|
|
||||||
| Количество виртуальных ВМов | 3 штуки|
|
|
||||||
| ЦПУ | 200 |
|
|
||||||
| ОЗУ | 200 Гбайт |
|
|
||||||
| Хранилище NVME | 5000 Гбайт |
|
|
||||||
| Объектное хранилище | 100 Гбайт |
|
|
||||||
|
|
||||||
## Просмотр квот проекта
|
|
||||||
|
|
||||||
1. Перейдите в консоль управления.
|
|
||||||
2. В шапке выберите **Проекты**.
|
|
||||||
3. Откроется список проектов, в которых вы являетесь участником.
|
|
||||||
4. Нажмите на имя нужного проекта.
|
|
||||||
5. Откройте раздел **Обзор**.
|
|
||||||
|
|
||||||
## Редактирование квот проекта
|
|
||||||
|
|
||||||
::: tip Информация
|
|
||||||
Изменить квоты проекта может пользователь с ролью **Владелец проекта**.
|
|
||||||
:::
|
|
||||||
|
|
||||||
1. Перейдите в консоль управления.
|
|
||||||
2. В шапке выберите **Проекты**.
|
|
||||||
3. Откроется список проектов, в которых вы являетесь участником.
|
|
||||||
4. Нажмите на имя нужного проекта.
|
|
||||||
5. Откройте раздел **Обзор**.
|
|
||||||
6. В правом верхнем углу нажмите **Изменить квоты**.
|
|
||||||
7. Увеличите или уменьшите квоты для ресурсов.
|
|
||||||
8. Нажмите **Сохранить**.
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
# Управление проектами
|
|
||||||
|
|
||||||
Проект — это структурная единица публичного облака, в которой содержатся ресурсы: виртуальные машины, хранилища, IP-адреса и др.
|
|
||||||
|
|
||||||
Ресурсы могут быть вычислительными и аппаратными.
|
|
||||||
|
|
||||||
Вычислительные ресурсы:
|
|
||||||
- оперативная память (ОЗУ);
|
|
||||||
- ядра процессора (ЦПУ);
|
|
||||||
- локальные диски;
|
|
||||||
- сетевые диски;
|
|
||||||
- IP-адреса.
|
|
||||||
|
|
||||||
Аппаратные ресурсы (ВМы, сети, диски) размещены в центрах обработки данных (ЦОД). Каждый дата-центр разделен на модули. Модули оснащены независимыми системами электропитания и охлаждения.
|
|
||||||
|
|
||||||
При получении доступа в публичное облако текущий пользователь становится менеджера проектов. Менеджер проектов может создавать новые проекты, в которых он получает роль владельца проекта. Владелец проекта может добавлять пользователей в проект, назначая им роли.
|
|
||||||
|
|
||||||
Доступ к проекту осуществляется из консоли управления.
|
|
||||||
|
|
||||||
## Создать проект
|
|
||||||
|
|
||||||
1. Перейдите в консоль управления.
|
|
||||||
2. Нажмите кнопку **Создать → Проект** в правом верхнем углу.
|
|
||||||
3. Заполните информацию о проекте:
|
|
||||||
- **Название**: введите наименование проекта.
|
|
||||||
- **Идентификатор**: введите идентификатор проекта:
|
|
||||||
- допустимы строчные и прописные буквы латинского алфавита, цифры и дефис;
|
|
||||||
- длина не более 64 символов;
|
|
||||||
- не должно начинаться или заканчиваться дефисом.
|
|
||||||
- **Описание**: введите краткое описание проекта.
|
|
||||||
4. Нажмите **Создать**.
|
|
||||||
|
|
||||||
## Изменить имя проекта
|
|
||||||
|
|
||||||
::: tip Информация
|
|
||||||
Изменить имя и описание проекта может только пользователь с ролью **Владелец проекта**.
|
|
||||||
:::
|
|
||||||
|
|
||||||
1. Перейдите в консоль управления.
|
|
||||||
2. В шапке выберите **Проекты**.
|
|
||||||
3. Откроется список проектов, в которых вы являетесь участником.
|
|
||||||
4. Нажмите на имя нужного проекта.
|
|
||||||
5. Откройте раздел **Настройки → Основное**.
|
|
||||||
6. Измените имя, описание проекта.
|
|
||||||
7. Нажмите **Сохранить**.
|
|
||||||
|
|
||||||
## Удаление проекта
|
|
||||||
|
|
||||||
Функциональность не предусмотрена в публичном облаке.
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
# Ролевая модель
|
|
||||||
|
|
||||||
Управление проектом основано на ролевой модели.
|
|
||||||
|
|
||||||
**Базовые роли**
|
|
||||||
|
|
||||||
В проекте предусмотрен базовый набор ролей:
|
|
||||||
|
|
||||||
- **Владелец продукта** — управление пользователями проекта, просмотр ресурсов.
|
|
||||||
- **DevOps-инженер** — управление инфраструктурой, стандартное администрирование ОС UNIX по протоколу ssh и права управления виртуальными ВМами и дисками в консоли управления.
|
|
||||||
|
|
||||||
## Матрица ролей
|
|
||||||
|
|
||||||
| Действие | Владелец проекта | DevOps-инженер |
|
|
||||||
|---|---|---|
|
|
||||||
| Обзор проекта<br> (квоты и количество использованных ресурсов)| ✅ | ✅ |
|
|
||||||
| ВМы: обзор | ✅ | ✅ |
|
|
||||||
| ВМы: мониторинг | ✅ | ✅ |
|
|
||||||
| ВМы: создать ВМ |✘ | ✅ |
|
|
||||||
| ВМы: подключить диск | ✘ | ✅ |
|
|
||||||
| ВМы: отключить диск | ✘ | ✅ |
|
|
||||||
| ВМы: добавить диск | ✘ | ✅ |
|
|
||||||
| ВМы: теги | ✘ |✅ |
|
|
||||||
| ВМы: масштабирование ВМа | ✘ | ✅ |
|
|
||||||
| ВМы: выключить ВМ | ✘ | ✅ |
|
|
||||||
| ВМы: включить ВМ | ✘ | ✅ |
|
|
||||||
| ВМы: перезагрузить ВМ | ✘ | ✅ |
|
|
||||||
| ВМы: принудительно перезагрузить ВМ | ✘ | ✅ |
|
|
||||||
| ВМы: удалить ВМ | ✘ | ✅ |
|
|
||||||
| ВМы: группы размещения | ✘ | ✅ |
|
|
||||||
| ВМы: IP-адреса | ✘ | ✅ |
|
|
||||||
| Диски: просмотр дисков | ✅ | ✅ |
|
|
||||||
| Диски: добавление дискового пространства | ✘ | ✅ |
|
|
||||||
| Диски: удалить диск| ✘ | ✅ |
|
|
||||||
| Объектное хранилище: просмотр| ✅ | ✅ |
|
|
||||||
| Объектное хранилище: добавить хранилище | ✘ | ✅ |
|
|
||||||
| Объектное хранилище: удалить хранилище | ✘ | ✅|
|
|
||||||
| DNS: добавить зону | ✘ | ✅ |
|
|
||||||
| DNS: редактировать зону | ✘ | ✅ |
|
|
||||||
| DNS: удалить зону |✘ | ✅ |
|
|
||||||
| Настройки проекта: просмотр| ✅ | ✅ |
|
|
||||||
| Настройки проекта: изменить описание проекта |✅ | ✘ |
|
|
||||||
| Участники: просмотр | ✅ | ✅ |
|
|
||||||
| Участники: добавить участника | ✅ | ✘ |
|
|
||||||
| Участники: удалить участника | ✅ | ✘ |
|
|
||||||
| Участники: назначить роль | ✅| ✘ |
|
|
||||||
| Квоты: просмотр | ✅ | ✅ |
|
|
||||||
| Веб-обработчики | ✘ | ✅ |
|
|
||||||
| Наблюдаемость | ✅ | ✅ |
|
|
||||||
@@ -10,7 +10,7 @@ SSH-ключ добавляется на этапе [создания вирту
|
|||||||
|
|
||||||
## Добавить SSH-ключ
|
## Добавить SSH-ключ
|
||||||
|
|
||||||
1. Войдите в [личный кабинет](https://lk.cloud.beeline.ru/).
|
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||||
2. Перейдите в профиль пользователя в правом верхнем углу.
|
2. Перейдите в профиль пользователя в правом верхнем углу.
|
||||||
3. Перейдите в раздел **SSH-ключи**.
|
3. Перейдите в раздел **SSH-ключи**.
|
||||||
4. Нажмите **Добавить ключ**.
|
4. Нажмите **Добавить ключ**.
|
||||||
@@ -31,14 +31,14 @@ SSH-ключ добавляется на этапе [создания вирту
|
|||||||
|
|
||||||
## Посмотреть SSH-ключи
|
## Посмотреть SSH-ключи
|
||||||
|
|
||||||
1. Войдите в [личный кабинет](https://lk.cloud.beeline.ru/).
|
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||||
2. Перейдите в профиль пользователя в правом верхнем углу.
|
2. Перейдите в профиль пользователя в правом верхнем углу.
|
||||||
3. Перейдите в раздел **SSH-ключи**.
|
3. Перейдите в раздел **SSH-ключи**.
|
||||||
4. В таблице показаны SSH-ключи пользователя.
|
4. В таблице показаны SSH-ключи пользователя.
|
||||||
|
|
||||||
## Изменить название SSH-ключа
|
## Изменить название SSH-ключа
|
||||||
|
|
||||||
1. Войдите в [личный кабинет](https://lk.cloud.beeline.ru/).
|
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||||
2. Перейдите в профиль пользователя в правом верхнем углу.
|
2. Перейдите в профиль пользователя в правом верхнем углу.
|
||||||
3. Перейдите в раздел **SSH-ключи**.
|
3. Перейдите в раздел **SSH-ключи**.
|
||||||
4. Выберите нужный ключ.
|
4. Выберите нужный ключ.
|
||||||
@@ -48,7 +48,7 @@ SSH-ключ добавляется на этапе [создания вирту
|
|||||||
|
|
||||||
## Удалить SSH-ключ
|
## Удалить SSH-ключ
|
||||||
|
|
||||||
1. Войдите в [личный кабинет](https://lk.cloud.beeline.ru/).
|
1. Войдите в [личный кабинет](https://console.cloud.beeline.ru/).
|
||||||
2. Перейдите в профиль пользователя в правом верхнем углу.
|
2. Перейдите в профиль пользователя в правом верхнем углу.
|
||||||
3. Перейдите в раздел **SSH-ключи**.
|
3. Перейдите в раздел **SSH-ключи**.
|
||||||
4. Выберите нужный ключ.
|
4. Выберите нужный ключ.
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
# Управление пользователями в проекте
|
|
||||||
|
|
||||||
В консоли управления можно добавлять пользователей, управлять ролями пользователей в проекте. Один пользователей может участвовать в нескольких проектах и иметь в них разные роли.
|
|
||||||
|
|
||||||
::: tip Информация
|
|
||||||
Добавлять и удалять пользователей, изменять права пользователей в проекте может только владелец проекта.
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Добавить пользователя
|
|
||||||
|
|
||||||
1. Перейдите в консоль управления.
|
|
||||||
2. Откройте **Настройки → Участники**.
|
|
||||||
3. Нажмите **Добавить пользователя**.
|
|
||||||
4. Найдите пользователя по ФИО или email.
|
|
||||||
5. Назначьте [роль](../admin/roles.md) пользователю.
|
|
||||||
6. Нажмите **Добавить**.
|
|
||||||
|
|
||||||
## Назначить права пользователю
|
|
||||||
|
|
||||||
Каждому пользователю проекта должна быть выдана хотя бы одна роль. У пользователя может быть несколько ролей в одном проекте.
|
|
||||||
|
|
||||||
1. Перейдите в консоль управления.
|
|
||||||
2. Откройте **Настройки → Участники**.
|
|
||||||
3. Найдите пользователя.
|
|
||||||
4. Нажмите ⠇ в строке с именем пользователя и выберите **Редактировать**.
|
|
||||||
5. Назначьте [роль](../admin/roles.md) пользователю: установите флажок напротив роли.
|
|
||||||
6. Нажмите **Сохранить**.
|
|
||||||
|
|
||||||
Права на существующие ОС применятся в течение 10 минут.
|
|
||||||
|
|
||||||
## Отозвать права у пользователя
|
|
||||||
|
|
||||||
1. Перейдите в консоль управления.
|
|
||||||
2. Откройте **Настройки → Участники**.
|
|
||||||
3. Найдите пользователя.
|
|
||||||
4. Нажмите ⠇ в строке с именем пользователя и выберите **Редактировать**.
|
|
||||||
5. Отзовите роль у пользователя: уберите флажок напротив роли. Оставьте пользователю хотя бы одну роль в проекте.
|
|
||||||
6. Нажмите кнопку **Сохранить**.
|
|
||||||
|
|
||||||
## Удалить пользователя
|
|
||||||
|
|
||||||
1. Перейдите в консоль управления.
|
|
||||||
2. Откройте **Настройки → Участники**.
|
|
||||||
3. Найдите пользователя.
|
|
||||||
4. Нажмите ⠇ в строке с именем пользователя и выберите **Удалить**.
|
|
||||||
|
|
||||||
Пользователь будет удален из списка участников проекта. Ресурсы проекта станут недоступны пользователю.
|
|
||||||
@@ -1,178 +0,0 @@
|
|||||||
# Чат с LLM
|
|
||||||
|
|
||||||
**Чат с LLM** - это интерфейс для общения с LLM-моделями. Подходит для знакомства и тестирования моделей.
|
|
||||||
|
|
||||||
Исходя из возможностей сервиса Чат с LLM пользовательский путь от авторизации к диалогу выглядит следующим образом:
|
|
||||||
|
|
||||||
1. Переход в чат с LLM.
|
|
||||||
2. Выбор LLM.
|
|
||||||
3. Выбор базы знаний.
|
|
||||||
4. Настройка системного промпта.
|
|
||||||
5. Диалог с LLM.
|
|
||||||
|
|
||||||
## Доступные модели
|
|
||||||
|
|
||||||
Чат с LLM поддерживает модели:.
|
|
||||||
|
|
||||||
| Модель | Контекст | Параметры | Reasoning | Инструменты | Картинки |
|
|
||||||
|:-------|:-------|:-------|:-------|:-------|:-------|
|
|
||||||
| Deepseek-chat | 131k | 671B | ✅ | ✅ | ❌ |
|
|
||||||
| Gemma 3 | 128k | 27B | ❌ | ❌ | ✅ |
|
|
||||||
| Qwen 3 | 131k | 32B | ✅ |✅ | ❌|
|
|
||||||
|
|
||||||
::: details Описание моделей
|
|
||||||
|
|
||||||
- **DeepSeek Chat**
|
|
||||||
|
|
||||||
DeepSeek V3 — это мощная гибридная модель с 671 млрд. параметров, специально оптимизированная для кодогенерации и работы поисковых агентов. Модель поддерживает контекст до 128 тыс. токенов и позволяет гибко управлять режимом рассуждений через параметр "reasoning_enabled". Она демонстрирует производительность уровня DeepSeek-R1, но работает быстрее, идеально подходя для программирования, исследований и агентных workflow.
|
|
||||||
|
|
||||||
- **Gemma 3**
|
|
||||||
|
|
||||||
Основная особенность этой модели в том, что она поддерживает картинки. Вы можете использовать ее как OCR: модель распознает рукописный текст на русском языке. Кроме этого, модель распознает и классифицирует объекты на фотографиях; может распознавать и переводить надписи.
|
|
||||||
|
|
||||||
- **Qwen 3 32B**
|
|
||||||
|
|
||||||
Основная модель, с которой рекомендуется начинать эксперименты. Поддерживает нативный вызов инструментов.
|
|
||||||
|
|
||||||
Режимы работы:
|
|
||||||
|
|
||||||
- с рассуждениями (включен по умолчанию).
|
|
||||||
- без рассуждений (нужно передать в запросе /no_think).
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Авторизация в чате с LLM
|
|
||||||
|
|
||||||
Доступ к чату с LLM-моделями предоставляется по уникальной ссылке, которая формируется после [создания тенанта](ai-setting.md#создать-тенант).
|
|
||||||
|
|
||||||
1. В левом меню откройте раздел **Тенанты**.
|
|
||||||
2. Нажмите на имя тенанта.
|
|
||||||
3. Из поля **Url приложения** скопируйте ссылку на чат с LLM.
|
|
||||||
4. Вставьте ссылку в браузер. Откроется чат с LLM.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
::: details Интерфейс чата с LLM
|
|
||||||
|
|
||||||
- **Чат**
|
|
||||||
|
|
||||||
Раздел включает функции:
|
|
||||||
|
|
||||||
- диалог с моделью в режиме вопрос-ответ;
|
|
||||||
- выбор LLM;
|
|
||||||
- выбор базы знаний.
|
|
||||||
|
|
||||||
- **Базы знаний**
|
|
||||||
|
|
||||||
Раздел предназначен для подготовки базы знаний, на основе которой модель будет генерировать ответы.
|
|
||||||
|
|
||||||
- **Системные промпты**
|
|
||||||
|
|
||||||
Раздел предназначен для создания системных промптов. Системный промпт представляет из себя набор инструкций, на которые опирается модель при подготовке ответа на запрос пользователя.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Начать диалог с моделью
|
|
||||||
|
|
||||||
1. [Авторизоваться в чате с LLM](#авторизация-в-чате-с-llm).
|
|
||||||
2. В левом меню выберите раздел **Чаты**.
|
|
||||||
3. Выберите из списка модель. Если в списке отсутствует нужная [модель](#доступные-модели), то [добавьте модель](ai-setting.md#добавить-модель) в тенант.
|
|
||||||
|
|
||||||
::: tip Информация
|
|
||||||
|
|
||||||
Эксперименты рекомендуется с модели **Qwen 3 32B**, которая имеет больший контекст и поддерживает нативный вызов инструментов.
|
|
||||||
|
|
||||||
Модель **Qwen 3 32B** может работать:
|
|
||||||
- [с рассуждениями](ai-glossary.md#рассуждения) - этот режим включен по умолчанию;
|
|
||||||
- без рассуждений - в этом случае нужно передать в запросе `/no_think`.
|
|
||||||
|
|
||||||
:::
|
|
||||||
4. (опционально) Выберите базу знаний, на основе которой модель составит ответ. Если список баз данных пуст, то [создайте](#создать-базу-знаний) базу знаний.
|
|
||||||
5. (опциоанльно) Выберите системный промпт. По умолчанию в чате задан системный промпт. Если необходим промпт под определенную задачу, то [измените](#редактировать-системный-промпт) системный промпт.
|
|
||||||
6. Введите запрос к модели. Дождитесь ответа.
|
|
||||||
|
|
||||||
## Использовать базу знаний
|
|
||||||
|
|
||||||
Если необходимо, чтобы модель генерировала ответы не на базе своего раннего обучения, а обращалась, например, к актуальной нормативной базе или актуальным тарифам, то необходимо указать [базу знаний](ai-glossary.md#база-знаний-rag), с которой чат должен расширить свой контекст.
|
|
||||||
|
|
||||||
Для этого необходимо выбрать базу знаний и продолжить диалог.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Если база знаний отсутствует в списке, то [создайте](#создать-базу-знаний) базу знаний и добавьте документы.
|
|
||||||
|
|
||||||
### Создать базу знаний
|
|
||||||
|
|
||||||
1. [Авторизоваться в чате с LLM](#авторизация-в-чате-с-llm).
|
|
||||||
2. В левом меню выберите раздел **Базы знаний**.
|
|
||||||
3. Нажмите кнопку **Создать базу знаний**.
|
|
||||||
4. Заполните параметры базы знаний:
|
|
||||||
- **Имя**: введите имя базы знаний, имя будет отображаться при выборе базы знаний в чате.
|
|
||||||
- **Описание**: введите описание базы знаний.
|
|
||||||
5. Нажмите кнопку **Создать**.
|
|
||||||
|
|
||||||
База знаний будет создана, но в ней пока нет информации для генерации ответов модели. Добавьте документы в базу знаний.
|
|
||||||
|
|
||||||
### Добавить документ в базу знаний
|
|
||||||
|
|
||||||
1. [Авторизоваться в чате с LLM](#авторизация-в-чате-с-llm).
|
|
||||||
2. В левом меню выберите раздел **Базы знаний**.
|
|
||||||
3. В списке нажмите на нужную базу знаний.
|
|
||||||
4. Нажмите кнопку **Добавить документ**.
|
|
||||||
5. Загрузите файлы в базу знаний.
|
|
||||||
6. Нажмите **Добавить**.
|
|
||||||
|
|
||||||
## Редактировать системный промпт
|
|
||||||
|
|
||||||
По умолчанию задан простой "размытый" [промпт](ai-glossary.md#промпт), который указывает, что ответы модели должны быть полезными. Но такой чат не всегда сможет предоставить пользователю ответ, который его устроит.
|
|
||||||
|
|
||||||
В чате с LLM доступен редактор системных промптов. Возможны способы редактирования системных промптов:
|
|
||||||
|
|
||||||
- редактирование системного промпта в текущей сессии диалога с моделью;
|
|
||||||
- создание системного промпта в библиотеке системных промптов для дальнейшего использования.
|
|
||||||
|
|
||||||
### Редактирование системного промпта в текущей сессии
|
|
||||||
|
|
||||||
1. [Начните](#начать-диалог-с-моделью) диалог с моделью.
|
|
||||||
2. Системный промпт отображается над строкой для ввода текста в чате.
|
|
||||||
3. Нажмите на значок карандаша справа от системного промпта.
|
|
||||||
4. В появившемся окне справа введите содержимое промпта.
|
|
||||||
5. Нажмите кнопку **Сохранить**.
|
|
||||||
6. Содержимое системного промпта обновится.
|
|
||||||
|
|
||||||
Редактируемый системный промпт доступен для всех моделей и сохраняется только в рамках текущей сессии.
|
|
||||||
|
|
||||||
### Создать системный промпт
|
|
||||||
|
|
||||||
1. [Авторизоваться в чате с LLM](#авторизация-в-чате-с-llm).
|
|
||||||
2. В левом меню выберите раздел **Системные промпты**.
|
|
||||||
3. Нажмите кнопку **Создать системный промпт**.
|
|
||||||
4. Заполните параметры промпта:
|
|
||||||
- **Название**: введите название системного промпта.
|
|
||||||
- **Содержание**: введите содержание промпта.
|
|
||||||
5. Нажмите **Создать**.
|
|
||||||
|
|
||||||
Системный промпт добавлен в библиотеку системных промптов. Посмотреть список промптов можно в левом меню в разделе **Системные промпты**.
|
|
||||||
|
|
||||||
## Сменить тенант
|
|
||||||
|
|
||||||
В чате с LLM-моделями есть возможность работать сразу с несколькими [тенантами](ai-setting.md#создать-тенант).
|
|
||||||
|
|
||||||
Для смены текущего тенанта необходимо:
|
|
||||||
|
|
||||||
1. В верхнем меню нажмите на вкладку **Тенант**.
|
|
||||||
2. Выберите из списка тенант.
|
|
||||||
|
|
||||||
К тенанта привязаны сущности:
|
|
||||||
|
|
||||||
- модели;
|
|
||||||
- базы знаний;
|
|
||||||
- системные промпты.
|
|
||||||
|
|
||||||
Для каждого тенанта эти сущности будут отличаться.
|
|
||||||
|
|
||||||
## Очистить контекст диалога
|
|
||||||
|
|
||||||
При длительном диалоге модель накапливает [контекст](ai-glossary.md#контекст) и может начать генерировать неточные ответы ("галлюцинации"). Для предотвращения "галлюцинации" рекомендуется периодически очищать контекст диалога.
|
|
||||||
|
|
||||||
Для очистки контекста диалога нажмите на значок корзины в правом верхнем углу окна чата.
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
# Быстрый старт с AI платформа
|
|
||||||
|
|
||||||
Данная инструкция рассматривает начальную настройку сервиса **AI платформа** и отправку первого запроса к LLM-модели.
|
|
||||||
|
|
||||||
## Перед началом работы
|
|
||||||
|
|
||||||
- [Зарегистрируйтесь](../start/getting-started.md#1-регистрация-в-beeline-cloud) в личном кабинете Beeline Cloud.
|
|
||||||
|
|
||||||
## 1. Создать тенант
|
|
||||||
|
|
||||||
1. В верхнем меню нажмите на пункт **Сервисы**.
|
|
||||||
2. Выберите **Сервис AI платфома**.
|
|
||||||
3. В левом меню откройте раздел **Тенанты**.
|
|
||||||
4. Нажмите кнопку **Создать тенант**.
|
|
||||||
5. Введите имя тенанта.
|
|
||||||
6. Нажмите **Создать тенант**.
|
|
||||||
|
|
||||||
## 2. Добавить модель
|
|
||||||
|
|
||||||
1. В левом меню откройте раздел **Модель**.
|
|
||||||
2. Нажмите кнопку **Добавить модель**.
|
|
||||||
3. В поле **Тенант** выберите созданный тенант.
|
|
||||||
4. В поле **Модель** выберите из списка подходящую **LLM-модель**.
|
|
||||||
5. Установите лимит использования токенов в час.
|
|
||||||
6. Нажмите **Добавить модель**.
|
|
||||||
|
|
||||||
## 3. Перейти в чат с LLM
|
|
||||||
|
|
||||||
Протестировать модели в интерфейсе можно в чате с LLM. Доступ к чату с LLM-моделями предоставляется по уникальной ссылке, которая формируется после создания тенанта.
|
|
||||||
|
|
||||||
1. В левом меню откройте раздел **Тенанты**.
|
|
||||||
2. Нажмите на имя тенанта.
|
|
||||||
3. Из поля **Url приложения** скопируйте ссылку на чат с LLM.
|
|
||||||
4. Вставьте ссылку в браузер.
|
|
||||||
|
|
||||||
## 4. Создать системный промпт
|
|
||||||
|
|
||||||
1. В чате с LLM в левом меню откройте раздел **Системные промпты**.
|
|
||||||
2. Нажмите кнопку **Создать системный промпт**.
|
|
||||||
3. Заполните параметры промпта:
|
|
||||||
- **Название**: введите название систменого промпта;
|
|
||||||
- **Содержание**: введите содержание промпта.
|
|
||||||
4. Нажмите **Создать**.
|
|
||||||
|
|
||||||
## 5. Начать диалог с моделью
|
|
||||||
|
|
||||||
1. В чате с LLM-моделями в левом меню перейдите в раздел **Чат**.
|
|
||||||
2. Выберите из списка модель.
|
|
||||||
3. Выберите из списка системный промпт.
|
|
||||||
4. Откроется чат. В текстовом поле внизу введите запрос к LLM-модели.
|
|
||||||
5. Дождитесь ответа модели.
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# Концепции
|
|
||||||
|
|
||||||
## База знаний (RAG)
|
|
||||||
|
|
||||||
RAG — это подход, при котором ответ LLM формируется с использованием дополнительного источника актуальных данных.
|
|
||||||
|
|
||||||
## Контекст
|
|
||||||
|
|
||||||
Контекст — это ограниченное по размеру окно, в которое должен уместиться запрос к LLM. У каждой модели контекст строго ограничен и указан в документации к ней.
|
|
||||||
|
|
||||||
## Рассуждения
|
|
||||||
|
|
||||||
Reasoning (рассуждение или логическое мышление) у LLM — это способность модели не просто воспроизводить выученные паттерны текста, а последовательно и логически выводить новую информацию из уже известных ей данных.
|
|
||||||
|
|
||||||
|
|
||||||
## Промпт
|
|
||||||
|
|
||||||
Промпт — это текстовый запрос, который вы отправляете модели, и который задает контекст и направление для ответа. LLM анализирует промпт и генерирует ответ, который является логическим продолжением текста. Чем понятнее и конкретнее сформулирован промпт, тем качественнее будет ответ.
|
|
||||||
|
|
||||||
Системные промпты — специальные инструкции, которые задают общие рамки поведения модели на протяжении всего диалога. Системный промпт устанавливается в начале общения и сообщает модели, какую роль она должна играть, какие ограничения соблюдать и какой стиль общения использовать.
|
|
||||||
|
|
||||||
В сервисе **AI-платформа** системный промпт доступен для редактирования, чтобы пользователи могли максимально настраивать поведение моделей.
|
|
||||||
|
|
||||||
## Токен
|
|
||||||
|
|
||||||
LLM представляет текст не в виде слов или букв, а в виде токенов. Токен — это несколько букв (часть слова), которые часто встречаются рядом в обучающей выборке. Текст запроса, который вы отправляете в LLM, сначала нарезается на токены, и только потом обрабатывается моделью.
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# Обзор сервиса
|
|
||||||
|
|
||||||
Сервис **AI платфома** предоставляет доступ к большим языковым моделям (Large Language Models, LLM). LLM-модели готовы к использованию и избавляют пользователя от необходимости самостоятельного развертывания и изучения связанных технологий.
|
|
||||||
|
|
||||||
## Возможности сервиса
|
|
||||||
|
|
||||||
- Интерфейс для взаимодействия с моделями в формате чат-бота.
|
|
||||||
- Предоставляет различные [модели](ai-chat-llm.md#доступные-модели).
|
|
||||||
- Использование баз знаний (RAG).
|
|
||||||
- Редактирование системного промпта.
|
|
||||||
- Диалог с моделью.
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
# Управление сервисом
|
|
||||||
|
|
||||||
В разделе рассмотрены компоненты сервиса **AI платформа** и приведены пошаговые инструкции по их созданию и управлению компонентами.
|
|
||||||
|
|
||||||
## Создать тенант
|
|
||||||
|
|
||||||
**Тенант** представляет собой изолированный логический контейнер ресурсов сервиса (модели, базы знаний) для работы в рамках проекта. Создается в личном кабинете Beeline Cloud.
|
|
||||||
|
|
||||||
1. Войдите в [личный кабинет](https://lk.cloud.beeline.ru/).
|
|
||||||
2. В верхнем меню нажмите на раздел **Сервисы**.
|
|
||||||
3. Выберите **Сервис AI платформа**.
|
|
||||||
4. В левом меню откройте раздел **Тенанты**.
|
|
||||||
5. Нажмите кнопку **Создать тенант**.
|
|
||||||
6. Введите имя тенанта.
|
|
||||||
7. Нажмите **Создать тенант**.
|
|
||||||
|
|
||||||
## Добавить модель
|
|
||||||
|
|
||||||
1. Войдите в [личный кабинет](https://lk.cloud.beeline.ru/).
|
|
||||||
2. В верхнем меню нажмите на раздел **Сервисы**.
|
|
||||||
3. Выберите **Сервис AI платформа**.
|
|
||||||
4. В левом меню откройте раздел **Модели**.
|
|
||||||
5. Нажмите кнопку **Добавить модель**.
|
|
||||||
6. Заполните параметры модели:
|
|
||||||
- **Тенант**: выберите тенант, в котором будет использоваться модель.
|
|
||||||
- **Модель**: выберите из списка подходящую LLM-модель.
|
|
||||||
- **Токены**: введите лимит использования токенов в час.
|
|
||||||
7. Нажмите кнопку **Добавить модель**.
|
|
||||||
|
|
||||||
## Добавить базу знаний
|
|
||||||
|
|
||||||
1. Войдите в [личный кабинет](https://lk.cloud.beeline.ru/).
|
|
||||||
2. В верхнем меню нажмите на раздел **Сервисы**.
|
|
||||||
3. Выберите **Сервис AI платформа**.
|
|
||||||
4. В левом меню откройте раздел **База знаний**.
|
|
||||||
5. Нажмите кнопку **Создать базу знаний**.
|
|
||||||
6. Заполните параметры базы знаний:
|
|
||||||
- **Тенант**: выберите из списка тенант.
|
|
||||||
- **Имя**: введите имя базы знаний.
|
|
||||||
- **Описание**: введите описание базы знаний.
|
|
||||||
7. Нажмите **Создать базу знаний**.
|
|
||||||
|
|
||||||
[Наполнение базы знаний](ai-chat-llm.md#добавить-документ-в-базу-знаний) документами, на основании которых будет генерироваться ответ модели, выполняется в чате с LLM.
|
|
||||||
|
|
||||||
## Удалить тенант, модель, базу знаний
|
|
||||||
|
|
||||||
1. Войдите в [личный кабинет](https://lk.cloud.beeline.ru/).
|
|
||||||
2. В верхнем меню нажмите на раздел **Сервисы**.
|
|
||||||
3. Выберите **Сервис AI платформа**.
|
|
||||||
4. Откройте раздел c нужным компонентом сервиса:
|
|
||||||
- **Тенанты**,
|
|
||||||
- **Модели**,
|
|
||||||
- **Базы знаний**.
|
|
||||||
5. В таблице найдите строку с нужным компонентом сервиса.
|
|
||||||
6. Нажмите … и выберите **Удалить**.
|
|
||||||
7. В открывшемся окне подтвердите операцию, нажав **Удалить**.
|
|
||||||
|
Before Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 194 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 238 KiB |
|
Before Width: | Height: | Size: 58 KiB |
@@ -1,21 +0,0 @@
|
|||||||
---
|
|
||||||
section_links:
|
|
||||||
- title: Обзор сервиса
|
|
||||||
link: /ai/ai-overview-platform.md
|
|
||||||
description: Обзор сервиса, решаемые задачи
|
|
||||||
- title: Быстрый старт
|
|
||||||
link: /ai/ai-getting-started.md
|
|
||||||
description: Создание виртуальной машины в дата-центре
|
|
||||||
- title: Настройка сервиса
|
|
||||||
link: /ai/ai-setting.md
|
|
||||||
description: Создание тенанта, добавление моделей и базы знаний
|
|
||||||
- title: Чат с LLM
|
|
||||||
link: /ai/ai-chat-llm.md
|
|
||||||
description: Интерфейс для взаимодействия с LLM-моделями в формате чат-бота
|
|
||||||
- title: Концепции
|
|
||||||
link: /ai/ai-glossary.md
|
|
||||||
description: Основные понятия, используемые в сервисе
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# AI платформа
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
@use '@beeline/design-tokens/scss/tokens/themes' as *;
|
|
||||||
|
|
||||||
:root {
|
|
||||||
--app-navbar-height: #{$app-navbar-height};
|
|
||||||
}
|
|
||||||
|
|
||||||
* {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
html,
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
html {
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
#app {
|
|
||||||
height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
html.dark-theme {
|
|
||||||
background-color: $color-background-base;
|
|
||||||
color: $color-text-active;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:visited {
|
|
||||||
color: $color-text-active !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
text-decoration: none !important;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
@import 'variables';
|
|
||||||
@import 'base';
|
|
||||||
@import 'form';
|
|
||||||
@import 'helpers';
|
|
||||||
@import 'components';
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
// Navbar
|
|
||||||
$app-navbar-height: 3.5rem;
|
|
||||||
$app-header-height: 64px;
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
@use '@beeline/design-tokens/scss/tokens/themes' as *;
|
|
||||||
@use '@beeline/design-tokens/scss/tokens/components/fab' as *;
|
|
||||||
@use '@beeline/design-tokens/scss/tokens/components/button' as *;
|
|
||||||
@use '@beeline/design-tokens/scss/tokens/globals' as *;
|
|
||||||
@use '@beeline/design-tokens/scss/mixin';
|
|
||||||
|
|
||||||
@mixin fab_button {
|
|
||||||
background-color: $button-overlay-background-color;
|
|
||||||
padding-left: $button-only-text-small-padding-horizontal;
|
|
||||||
padding-right: $button-only-text-small-padding-horizontal;
|
|
||||||
letter-spacing: $button-small-text-font-letter-spacing;
|
|
||||||
line-height: $button-small-text-font-line-height;
|
|
||||||
font-size: $button-small-text-font-size;
|
|
||||||
height: $button-small-height;
|
|
||||||
color: $button-overlay-text-color;
|
|
||||||
box-shadow: none;
|
|
||||||
border: 1px solid $button-outline-border-color;
|
|
||||||
border-radius: $button-border-radius;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
cursor: pointer;
|
|
||||||
background-color: $button-overlay-background-color-hover;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.app-fab {
|
|
||||||
height: $fab-standard-height;
|
|
||||||
width: $fab-standard-width;
|
|
||||||
position: fixed;
|
|
||||||
z-index: 50;
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
border: 0;
|
|
||||||
padding: $fab-standard-padding;
|
|
||||||
letter-spacing: $fab-text-font-letter-spacing;
|
|
||||||
line-height: $fab-text-font-line-height;
|
|
||||||
font-size: $fab-text-font-size;
|
|
||||||
font-weight: $fab-text-font-weight;
|
|
||||||
box-shadow: $fab-shadow;
|
|
||||||
background-color: $color-background-inverse;
|
|
||||||
color: $color-text-active-inverse;
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
&__icon {
|
|
||||||
width: 24px;
|
|
||||||
height: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
// background-color: $fab-hover-background-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
&--focused {
|
|
||||||
border-color: $fab-focused-border-color;
|
|
||||||
border-width: $fab-focused-border-width;
|
|
||||||
}
|
|
||||||
|
|
||||||
&--mini {
|
|
||||||
height: $fab-mini-height;
|
|
||||||
width: $fab-mini-width;
|
|
||||||
border-radius: $fab-mini-border-radius;
|
|
||||||
padding: $fab-mini-padding;
|
|
||||||
}
|
|
||||||
|
|
||||||
&--extended {
|
|
||||||
height: $fab-extended-height;
|
|
||||||
border-radius: $fab-extended-border-radius;
|
|
||||||
padding-right: $fab-extended-padding-right;
|
|
||||||
padding-left: $fab-extended-padding-left;
|
|
||||||
|
|
||||||
& &__icon {
|
|
||||||
margin-right: $fab-extended-icon-spacing;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.app-fab--extended.app-fab--mini {
|
|
||||||
height: $fab-mini-height;
|
|
||||||
}
|
|
||||||
|
|
||||||
&--disabled {
|
|
||||||
opacity: $fab-disabled-opacity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.app-fab-dialog {
|
|
||||||
position: fixed;
|
|
||||||
bottom: 44px;
|
|
||||||
right: 0;
|
|
||||||
// background-color: $color-background-medium;
|
|
||||||
background-color: transparent;
|
|
||||||
// border-radius: 12px;
|
|
||||||
padding: 1rem;
|
|
||||||
// border: 1px solid $color-border;
|
|
||||||
// min-width: 300px;
|
|
||||||
// box-shadow: $elevation-medium;
|
|
||||||
|
|
||||||
.icon-contained {
|
|
||||||
display: inline-flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
width: 40px;
|
|
||||||
height: 40px;
|
|
||||||
background-color: $color-status-neutral-background;
|
|
||||||
color: $color-status-neutral;
|
|
||||||
border-radius: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#feedback_button {
|
|
||||||
@include fab_button();
|
|
||||||
}
|
|
||||||
|
|
||||||
#bug_button {
|
|
||||||
@include fab_button();
|
|
||||||
line-height: 38px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a#bug_button,
|
|
||||||
a#bug_button:visited,
|
|
||||||
a#bug_button:active {
|
|
||||||
color: $button-overlay-text-color !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
@import 'fab';
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
@use '@beeline/design-tokens/scss/tokens/components/formfield' as formfield;
|
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
@use '@beeline/design-tokens/scss/tokens/components/textarea' as *;
|
|
||||||
@use '@beeline/design-tokens/scss/tokens/components/formfield';
|
|
||||||
@use '@beeline/design-tokens/scss/tokens/themes';
|
|
||||||
|
|
||||||
.textarea-field {
|
|
||||||
$px: 16px;
|
|
||||||
|
|
||||||
display: block;
|
|
||||||
width: 100%;
|
|
||||||
position: relative;
|
|
||||||
padding: $textarea-without-label-medium-text-margin-top $px $textarea-text-margin-bottom;
|
|
||||||
height: $textarea-without-label-medium-height;
|
|
||||||
background: formfield.$formfield-background-color;
|
|
||||||
border: formfield.$formfield-border-width formfield.$formfield-border-style formfield.$formfield-border-color;
|
|
||||||
border-radius: formfield.$formfield-border-radius;
|
|
||||||
|
|
||||||
& &__label {
|
|
||||||
position: absolute;
|
|
||||||
top: $textarea-with-label-text-margin-top;
|
|
||||||
left: $px;
|
|
||||||
transition: font-size 300ms ease-out;
|
|
||||||
color: formfield.$formfield-label-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
& textarea {
|
|
||||||
height: $textarea-medium-text-height;
|
|
||||||
width: 100%;
|
|
||||||
outline: none;
|
|
||||||
border: none;
|
|
||||||
box-shadow: none;
|
|
||||||
resize: none;
|
|
||||||
background-color: transparent;
|
|
||||||
color: themes.$color-text-active;
|
|
||||||
}
|
|
||||||
|
|
||||||
& &__resizer {
|
|
||||||
position: absolute;
|
|
||||||
bottom: $textarea-resizer-margin-bottom;
|
|
||||||
right: $textarea-resizer-margin-right;
|
|
||||||
rotate: -45deg;
|
|
||||||
width: 1em;
|
|
||||||
height: 1em;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
cursor: nwse-resize;
|
|
||||||
}
|
|
||||||
|
|
||||||
&::before {
|
|
||||||
content: '';
|
|
||||||
display: flex;
|
|
||||||
background-color: darkslategrey;
|
|
||||||
width: 10px;
|
|
||||||
height: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&::after {
|
|
||||||
content: '';
|
|
||||||
display: flex;
|
|
||||||
position: relative;
|
|
||||||
right: -3px;
|
|
||||||
bottom: -2px;
|
|
||||||
background-color: darkslategrey;
|
|
||||||
width: 4px;
|
|
||||||
height: 1px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.textarea-field--with-label {
|
|
||||||
height: $textarea-with-label-medium-height;
|
|
||||||
padding-top: $textarea-with-label-text-margin-top;
|
|
||||||
|
|
||||||
&.textarea-field--floated .textarea-field__label {
|
|
||||||
top: $textarea-medium-label-floated-margin-top;
|
|
||||||
line-height: $textarea-small-label-floated-font-line-height;
|
|
||||||
font-size: $textarea-small-label-floated-font-size;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.textarea-field--small {
|
|
||||||
height: $textarea-with-label-small-height;
|
|
||||||
padding-top: $textarea-small-label-margin-top;
|
|
||||||
top: $textarea-small-label-floated-margin-top;
|
|
||||||
|
|
||||||
& .textarea-field__label {
|
|
||||||
font-size: $textarea-small-label-font-size;
|
|
||||||
font-weight: $textarea-small-label-font-weight;
|
|
||||||
letter-spacing: $textarea-small-label-font-letter-spacing;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.textarea-field--focused {
|
|
||||||
border-color: formfield.$formfield-border-color-focus;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.textarea-field--small {
|
|
||||||
padding-top: $textarea-without-label-small-text-margin-top;
|
|
||||||
height: $textarea-without-label-small-height;
|
|
||||||
|
|
||||||
& textarea {
|
|
||||||
height: $textarea-small-text-height;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
@use '@beeline/design-tokens/scss/tokens/components/textfield' as *;
|
|
||||||
@use '@beeline/design-tokens/scss/tokens/globals';
|
|
||||||
@use '@beeline/design-tokens/scss/tokens/themes' as theme;
|
|
||||||
|
|
||||||
.textfield {
|
|
||||||
display: block;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: globals.$size-control-height-medium;
|
|
||||||
border: globals.$size-border-width-regular solid transparent;
|
|
||||||
padding-top: $textfield-without-label-medium-text-margin-vertical;
|
|
||||||
padding-bottom: $textfield-without-label-medium-text-margin-vertical;
|
|
||||||
background-color: theme.$color-control-background;
|
|
||||||
border-radius: 12px; // globals.$size-border-radius-x6;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: theme.$color-control-background-hover;
|
|
||||||
}
|
|
||||||
|
|
||||||
// input
|
|
||||||
input {
|
|
||||||
outline: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
// label
|
|
||||||
&--with-label {
|
|
||||||
// padding-top: $textfield-with-label-medium-text-margin-top;
|
|
||||||
// padding-bottom: $textfield-with-label-medium-text-margin-bottom;
|
|
||||||
}
|
|
||||||
|
|
||||||
&__label {
|
|
||||||
// padding-top: $textfield-medium-label-margin-top;
|
|
||||||
|
|
||||||
&.textfield__label--floated {
|
|
||||||
// padding-top: $textfield-medium-label-margin-top-floated;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// small
|
|
||||||
&--small {
|
|
||||||
height: globals.$size-control-height-small;
|
|
||||||
}
|
|
||||||
|
|
||||||
// large
|
|
||||||
&--large {
|
|
||||||
height: globals.$size-control-height-large;
|
|
||||||
padding-top: $textfield-without-label-large-text-margin-vertical;
|
|
||||||
padding-bottom: $textfield-without-label-large-text-margin-vertical;
|
|
||||||
|
|
||||||
&.textfield--with-label {
|
|
||||||
padding-top: $textfield-with-label-large-text-margin-top;
|
|
||||||
padding-bottom: $textfield-with-label-large-text-margin-bottom;
|
|
||||||
}
|
|
||||||
|
|
||||||
.textfield__label {
|
|
||||||
padding-top: $textfield-large-label-margin-top;
|
|
||||||
|
|
||||||
&.textfield__label--floated {
|
|
||||||
padding-top: $textfield-large-label-margin-top-floated;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// states
|
|
||||||
&--focused {
|
|
||||||
border-color: theme.$color-border-focus;
|
|
||||||
background-color: theme.$color-background-base;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
@use '@beeline/design-tokens/scss/tokens/themes' as *;
|
|
||||||
|
|
||||||
.app-bg-status-error {
|
|
||||||
background-color: $color-status-error-background;
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
.app-cursor-pointer {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
@import 'text';
|
|
||||||
@import 'color';
|
|
||||||
@import 'media';
|
|
||||||
@import 'common';
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
@use '@beeline/design-tokens/scss/tokens/themes' as theme;
|
|
||||||
@use 'src/assets/scss/app/mixins' as mixins;
|
|
||||||
|
|
||||||
@mixin truncate {
|
|
||||||
white-space: nowrap;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin truncate-lines($lines: 2) {
|
|
||||||
display: -webkit-box;
|
|
||||||
-webkit-box-orient: vertical;
|
|
||||||
-webkit-line-clamp: $lines;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
|
|
||||||
.app-text-active {
|
|
||||||
color: theme.$color-text-active;
|
|
||||||
}
|
|
||||||
|
|
||||||
.app-text-inactive {
|
|
||||||
color: theme.$color-text-inactive;
|
|
||||||
}
|
|
||||||
|
|
||||||
// styles for hyperlinks
|
|
||||||
.app-link {
|
|
||||||
color: theme.$color-text-active;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: theme.$color-text-active;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.app-text-caption {
|
|
||||||
@include mixins.text-caption;
|
|
||||||
}
|
|
||||||
|
|
||||||
.app-text-truncate {
|
|
||||||
white-space: nowrap;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sizes
|
|
||||||
.app-text-size-subtitle-3 {
|
|
||||||
font-size: 15px;
|
|
||||||
line-height: 20px;
|
|
||||||
font-weight: 500;
|
|
||||||
letter-spacing: 0.2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.app-text-size-body-3 {
|
|
||||||
font-size: 15px;
|
|
||||||
line-height: 18px;
|
|
||||||
letter-spacing: 0.2px;
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Colors
|
|
||||||
.app-text-color-caption {
|
|
||||||
color: theme.$color-text-inactive;
|
|
||||||
}
|
|
||||||
.app-text-warning {
|
|
||||||
color: theme.$color-status-warning;
|
|
||||||
}
|
|
||||||
.app-text-info {
|
|
||||||
color: theme.$color-status-info;
|
|
||||||
}
|
|
||||||
.app-text-error {
|
|
||||||
color: theme.$color-status-error;
|
|
||||||
}
|
|
||||||
.app-text-success {
|
|
||||||
color: theme.$color-status-success;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Breaks
|
|
||||||
.app-break-keep-all {
|
|
||||||
word-break: keep-all;
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
@import 'spinner';
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
@use 'src/assets/scss/app/variables' as v;
|
|
||||||
|
|
||||||
.app-loading-screen {
|
|
||||||
display: block;
|
|
||||||
height: calc(100vh - v.$app-header-height);
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
@forward 'text';
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
@use '@beeline/design-tokens/scss/tokens/themes' as theme;
|
|
||||||
|
|
||||||
%text_caption {
|
|
||||||
font-size: 13px;
|
|
||||||
line-height: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin text_caption {
|
|
||||||
@extend %text_caption;
|
|
||||||
color: theme.$color-text-inactive;
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin text_caption_error {
|
|
||||||
@extend %text_caption;
|
|
||||||
color: theme.$color-status-error;
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin text_body_2 {
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 400;
|
|
||||||
font-size: 17px;
|
|
||||||
line-height: 22px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin truncate {
|
|
||||||
white-space: nowrap;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
@use '@beeline/design-tokens/scss/tokens/themes';
|
|
||||||
@use '@beeline/design-tokens/scss/tokens/themes/dark';
|
|
||||||
|
|
||||||
:root {
|
|
||||||
@include themes.theme();
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark-theme {
|
|
||||||
@include themes.theme(dark.$theme);
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
@use '@beeline/design-tokens/scss/font-face' with (
|
|
||||||
$font-path-beeline-sans: '../fonts/beeline-sans'
|
|
||||||
);
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
// @use "@beeline/design-tokens/scss/iconfont/iconfont" with (
|
|
||||||
// $font-path-iconfont: '../fonts/iconfont'
|
|
||||||
// );
|
|
||||||
@use '@beeline/design-tokens/scss/iconfont/icons';
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-display: block;
|
|
||||||
font-family: 'BeelineIcons';
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 400;
|
|
||||||
src:
|
|
||||||
url('../fonts/iconfont/BeelineIcons.woff2') format('woff2'),
|
|
||||||
url('../fonts/iconfont/BeelineIcons.woff') format('woff'),
|
|
||||||
url('../fonts/iconfont/BeelineIcons.ttf') format('ttf');
|
|
||||||
}
|
|
||||||
|
|
||||||
.beeline-icons {
|
|
||||||
font-family: 'BeelineIcons', sans-serif;
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 24px; /* Preferred icon size */
|
|
||||||
display: inline-block;
|
|
||||||
line-height: 1;
|
|
||||||
text-transform: none;
|
|
||||||
letter-spacing: normal;
|
|
||||||
word-wrap: normal;
|
|
||||||
white-space: nowrap;
|
|
||||||
direction: ltr;
|
|
||||||
|
|
||||||
/* Support for all WebKit browsers. */
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
/* Support for Safari and Chrome. */
|
|
||||||
text-rendering: optimizeLegibility;
|
|
||||||
|
|
||||||
/* Support for Firefox. */
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
|
|
||||||
/* Support for IE. */
|
|
||||||
font-feature-settings: 'liga';
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
@import 'fonts';
|
|
||||||
@import 'icons';
|
|
||||||
@import 'base';
|
|
||||||
@import 'scrollbar';
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
@use '@beeline/design-tokens/scss/tokens/themes';
|
|
||||||
|
|
||||||
html {
|
|
||||||
scrollbar-color: themes.$color-text-inactive transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
* {
|
|
||||||
scrollbar-width: thin;
|
|
||||||
}
|
|
||||||
|
|
||||||
body::-webkit-scrollbar {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-scrollbar {
|
|
||||||
width: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-scrollbar-track {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-scrollbar-thumb {
|
|
||||||
background-color: themes.$color-text-inactive;
|
|
||||||
border: 4px solid transparent;
|
|
||||||
background-clip: content-box;
|
|
||||||
border-radius: 100px;
|
|
||||||
min-height: 28px;
|
|
||||||
}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
@use 'sass:map';
|
|
||||||
@use '@beeline/design-tokens/scss/tokens/globals';
|
|
||||||
@use '@beeline/design-tokens/scss/tokens/themes/light';
|
|
||||||
@use '@beeline/design-tokens/scss/tokens/components/button';
|
|
||||||
|
|
||||||
// Colors
|
|
||||||
$primary: globals.$color-background-brand;
|
|
||||||
$background: map.get(light.$theme, 'color-background-base');
|
|
||||||
$info: map.get(light.$theme, 'color-status-info');
|
|
||||||
$success: map.get(light.$theme, 'color-status-success');
|
|
||||||
$warning: map.get(light.$theme, 'color-status-warning');
|
|
||||||
$danger: map.get(light.$theme, 'color-status-error');
|
|
||||||
|
|
||||||
// Typography
|
|
||||||
$family-primary: globals.$font-family-text;
|
|
||||||
$title-color: map.get(light.$theme, 'color-text-active');
|
|
||||||
$subtitle-color: map.get(light.$theme, 'color-text-inactive');
|
|
||||||
|
|
||||||
// Radius
|
|
||||||
$radius: globals.$size-border-radius-x6;
|
|
||||||
|
|
||||||
// Buttons
|
|
||||||
$button-padding-vertical: globals.$size-spacing-x4;
|
|
||||||
$button-padding-horizontal: globals.$size-spacing-x5;
|
|
||||||
$button-background-color: button.$button-plain-background-color;
|
|
||||||
$button-focus-border-color: map.get(light.$theme, 'color-background-base-focused');
|
|
||||||
$button-disabled-opacity: button.$button-opacity-disabled;
|
|
||||||
|
|
||||||
// Box
|
|
||||||
$box-radius: $radius;
|
|
||||||
$box-shadow: globals.$elevation-low;
|
|
||||||
$box-padding: globals.$size-spacing-x6;
|
|
||||||
$box-link-hover-shadow: globals.$elevation-medium;
|
|
||||||
$box-link-active-shadow: globals.$elevation-medium;
|
|
||||||
|
|
||||||
// Form
|
|
||||||
$input-color: map.get(light.$theme, 'color-text-active');
|
|
||||||
$input-background-color: map.get(light.$theme, 'color-control-background');
|
|
||||||
$label-color: map.get(light.$theme, 'color-text-inactive');
|
|
||||||
$label-weight: globals.$font-weight-caption;
|
|
||||||
|
|
||||||
// Table
|
|
||||||
$table-color: map.get(light.$theme, 'color-text-active');
|
|
||||||
$table-background-color: map.get(light.$theme, 'color-background-base');
|
|
||||||
$table-cell-border: 1px solid map.get(light.$theme, 'color-control-background');
|
|
||||||
$table-cell-padding: 16px 16px;
|
|
||||||
$table-cell-heading-color: map.get(light.$theme, 'color-text-active');
|
|
||||||
$table-head-cell-border-width: 1px;
|
|
||||||
|
|
||||||
@import 'bulma/bulma';
|
|
||||||
@import 'overrides';
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
@use 'sass:map';
|
|
||||||
@use '@beeline/design-tokens/scss/tokens/themes/dark';
|
|
||||||
|
|
||||||
.box {
|
|
||||||
.dark-theme & {
|
|
||||||
background-color: map.get(dark.$theme, 'color-background-low');
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: map.get(dark.$theme, 'color-background-medium');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
@use '@beeline/design-tokens/scss/tokens/components/button' as button;
|
|
||||||
@use '@beeline/design-tokens/scss/tokens/themes';
|
|
||||||
|
|
||||||
.button {
|
|
||||||
font-weight: button.$button-medium-text-font-weight;
|
|
||||||
color: themes.$color-text-active;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: themes.$color-text-active;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
@use '@beeline/design-tokens/scss/tokens/themes';
|
|
||||||
|
|
||||||
.dropdown {
|
|
||||||
&-content {
|
|
||||||
background-color: themes.$color-background-medium;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dropdown-item {
|
|
||||||
color: themes.$color-text-active;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: themes.$color-background-base-hover;
|
|
||||||
color: themes.$color-text-active;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
@import 'button';
|
|
||||||
@import 'title';
|
|
||||||
@import 'box';
|
|
||||||
@import 'form';
|
|
||||||
@import 'table';
|
|
||||||
@import 'dropdown';
|
|
||||||
@import 'text';
|
|
||||||