mirror of
https://github.com/dartdavros/chatballs.git
synced 2026-10-05 01:14:58 +03:00
💄 rebrand(ui): CustoCRM logo and product name instead of Edevs Hub
- New logo: favicon.svg and LogoIcon (replaces PulseIcon) in sidebar and auth screens - Source logo asset saved to resources/icon.svg - Replace "Edevs Hub" with "CustoCRM" across internal-ui, web-chat, backend strings (email sender/subject, TOTP issuer, notification bot texts, OpenAPI title), env examples and README - Add .claude/launch.json for internal-ui dev server (bind 127.0.0.1) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e358a0b327
commit
192497ead0
18 files changed
+27
-27
No files matched your search
+1
-1
@@ -30,7 +30,7 @@ HUB_OPENROUTER_API_KEY=
|
||||
# EMAIL_HOST=
|
||||
# EMAIL_HOST_USER=
|
||||
# EMAIL_HOST_PASSWORD=
|
||||
# DEFAULT_FROM_EMAIL=Edevs Hub <no-reply@edevs.tech>
|
||||
# DEFAULT_FROM_EMAIL=CustoCRM <no-reply@edevs.tech>
|
||||
INTERNAL_UI_BASE_URL=http://localhost:5173
|
||||
|
||||
POSTGRES_DB=edevs_hub
|
||||
|
||||
@@ -66,7 +66,7 @@ EMAIL_PORT=587
|
||||
EMAIL_HOST_USER=
|
||||
EMAIL_HOST_PASSWORD=
|
||||
EMAIL_USE_TLS=true
|
||||
DEFAULT_FROM_EMAIL=Edevs Hub <no-reply@edevs.tech>
|
||||
DEFAULT_FROM_EMAIL=CustoCRM <no-reply@edevs.tech>
|
||||
|
||||
# Required only for the first production seed when no OWNER exists yet.
|
||||
# The seed command never resets an existing user's password.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Edevs Hub
|
||||
# CustoCRM
|
||||
|
||||
Canonical implementation workspace for `hub.edevs.tech`.
|
||||
|
||||
|
||||
@@ -150,7 +150,7 @@ EMAIL_PORT = int(os.environ.get("EMAIL_PORT", "587"))
|
||||
EMAIL_HOST_USER = os.environ.get("EMAIL_HOST_USER", "")
|
||||
EMAIL_HOST_PASSWORD = os.environ.get("EMAIL_HOST_PASSWORD", "")
|
||||
EMAIL_USE_TLS = os.environ.get("EMAIL_USE_TLS", "true").lower() == "true"
|
||||
DEFAULT_FROM_EMAIL = os.environ.get("DEFAULT_FROM_EMAIL", "Edevs Hub <no-reply@edevs.tech>")
|
||||
DEFAULT_FROM_EMAIL = os.environ.get("DEFAULT_FROM_EMAIL", "CustoCRM <no-reply@edevs.tech>")
|
||||
|
||||
# Base URL of the internal UI, used to build links inside transactional emails.
|
||||
INTERNAL_UI_BASE_URL = os.environ.get("INTERNAL_UI_BASE_URL", "http://localhost:5173")
|
||||
|
||||
@@ -7,7 +7,7 @@ from hub_platform.webchat.views import WidgetLoaderView
|
||||
urlpatterns = [
|
||||
path("admin/", admin.site.urls),
|
||||
path("chat-widget.js", WidgetLoaderView.as_view(), name="chat-widget-loader"),
|
||||
path("api/v1/schema/", get_schema_view(title="Edevs Hub API", version="0.1.0"), name="openapi-schema"),
|
||||
path("api/v1/schema/", get_schema_view(title="CustoCRM API", version="0.1.0"), name="openapi-schema"),
|
||||
path("api/v1/auth/", include("hub_platform.identity.auth_urls")),
|
||||
path("api/v1/company/", include("hub_platform.identity.company_urls")),
|
||||
path("api/v1/company/", include("hub_platform.products.urls")),
|
||||
|
||||
@@ -8,7 +8,7 @@ import time
|
||||
from hub_platform.identity.models import HumanUser
|
||||
|
||||
TOTP_SESSION_KEY = "identity_pending_totp_user_id"
|
||||
TOTP_ISSUER = "Edevs Hub"
|
||||
TOTP_ISSUER = "CustoCRM"
|
||||
TOTP_PERIOD_SECONDS = 30
|
||||
|
||||
|
||||
|
||||
@@ -12,10 +12,10 @@ def send_password_reset_email(user: HumanUser) -> None:
|
||||
token = default_token_generator.make_token(user)
|
||||
reset_url = f"{settings.INTERNAL_UI_BASE_URL.rstrip('/')}/reset-password?uid={uid}&token={token}"
|
||||
send_mail(
|
||||
subject="Восстановление доступа к Edevs Hub",
|
||||
subject="Восстановление доступа к CustoCRM",
|
||||
message=(
|
||||
f"Здравствуйте, {user.full_name or user.email}.\n\n"
|
||||
"Вы запросили сброс пароля для Edevs Hub. Чтобы задать новый пароль, перейдите по ссылке:\n"
|
||||
"Вы запросили сброс пароля для CustoCRM. Чтобы задать новый пароль, перейдите по ссылке:\n"
|
||||
f"{reset_url}\n\n"
|
||||
"Ссылка действует 30 минут. Если вы не запрашивали сброс, просто проигнорируйте это письмо."
|
||||
),
|
||||
|
||||
@@ -24,8 +24,8 @@ logger = logging.getLogger(__name__)
|
||||
CODE_TTL = timedelta(minutes=10)
|
||||
NOTIFIER_PURPOSE = "notifications"
|
||||
|
||||
CONFIRMATION_TEXT = "Готово! Уведомления Edevs Hub подключены. Отключить можно в профиле."
|
||||
HINT_TEXT = "Это сервисный бот уведомлений Edevs Hub. Чтобы подключить уведомления, откройте профиль в Hub и нажмите «Подключить»."
|
||||
CONFIRMATION_TEXT = "Готово! Уведомления CustoCRM подключены. Отключить можно в профиле."
|
||||
HINT_TEXT = "Это сервисный бот уведомлений CustoCRM. Чтобы подключить уведомления, откройте профиль в Hub и нажмите «Подключить»."
|
||||
|
||||
# База deep-link по провайдеру: и TG, и MAX поддерживают ?start=<код>.
|
||||
_DEEP_LINK_BASE = {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<title>Edevs Hub</title>
|
||||
<title>CustoCRM</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect width="32" height="32" rx="8" fill="#1677ff"/>
|
||||
<path d="M7 16h4l2 6 4-14 2 8h6" fill="none" stroke="#ffffff" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1386 1386" fill="none">
|
||||
<rect width="1386" height="1386" rx="300" fill="#1677FF"/>
|
||||
<path d="M691.947 175C743.896 176.004 775.161 202.368 793.419 230.289C802.544 244.243 808.421 258.585 812.018 270.347C815.61 282.096 816.938 291.306 816.938 295.001C816.938 309.524 816.93 372.653 744.438 407.813V460.002H904.938V540.99L904.45 541.002L744.445 544.989L749.937 882.48C749.937 882.489 749.939 882.5 749.94 882.514C749.944 882.549 749.949 882.602 749.955 882.672C749.968 882.812 749.988 883.021 750.016 883.295C750.071 883.842 750.157 884.648 750.278 885.681C750.521 887.746 750.905 890.716 751.471 894.334C752.601 901.571 754.457 911.395 757.356 921.745C760.257 932.098 764.196 942.963 769.489 952.29C774.619 961.33 780.998 968.885 788.895 973.156L789.664 973.56L789.699 973.577L789.731 973.601C793.751 976.524 799.835 978.199 806.771 979.04C813.693 979.879 821.395 979.88 828.599 979.506C835.8 979.132 842.489 978.384 847.379 977.729C849.823 977.401 851.817 977.097 853.199 976.875C853.89 976.764 854.428 976.673 854.793 976.61C854.975 976.579 855.115 976.555 855.208 976.538C855.255 976.53 855.29 976.524 855.313 976.52C855.323 976.518 855.33 976.516 855.336 976.515C855.345 976.512 855.36 976.509 855.379 976.505C855.418 976.495 855.477 976.481 855.556 976.461C855.713 976.421 855.948 976.36 856.258 976.276C856.878 976.109 857.797 975.851 858.986 975.491C861.365 974.771 864.827 973.639 869.151 971.999C877.801 968.719 889.899 963.401 903.684 955.262C931.141 939.048 965.281 911.632 992.18 866.791C981.29 863.394 967.013 860.713 955.359 858.873C949.428 857.937 944.183 857.218 940.421 856.734C938.54 856.492 937.03 856.309 935.99 856.187C935.471 856.125 935.069 856.079 934.797 856.048C934.661 856.032 934.557 856.02 934.487 856.013C934.453 856.009 934.427 856.006 934.409 856.004C934.401 856.003 934.394 856.002 934.39 856.002C934.388 856.002 934.386 856.002 934.385 856.002L934.384 856.001H934.383L933.401 855.894L934.069 855.166L1073.57 703.165L1074.13 702.559L1074.41 703.333C1090.68 748.154 1096.94 802.964 1099.12 846.542C1100.22 868.336 1100.3 887.331 1100.1 900.879C1100 907.653 1099.84 913.065 1099.7 916.784C1099.63 918.644 1099.56 920.081 1099.51 921.053C1099.49 921.539 1099.47 921.909 1099.46 922.157C1099.45 922.282 1099.45 922.376 1099.44 922.438C1099.44 922.47 1099.44 922.494 1099.44 922.51C1099.44 922.517 1099.44 922.523 1099.44 922.527C1099.44 922.529 1099.44 922.531 1099.44 922.532C1099.43 922.533 1099.39 922.531 1098.94 922.505L1099.44 922.534L1099.39 923.361L1098.68 922.933L1048.66 892.726C1003.9 993.99 945.911 1044.08 883.83 1083.43C821.626 1122.85 755.486 1151.41 694.283 1209.87L693.948 1210.19L693.604 1209.88C626.889 1149.91 559.114 1118.72 497.414 1078.36C435.832 1038.08 380.46 988.73 338.686 892.68C328.31 897.648 315.933 905.371 306.086 911.902C301.091 915.215 296.752 918.217 293.662 920.391C292.117 921.478 290.883 922.358 290.037 922.966C289.614 923.269 289.288 923.505 289.067 923.665C288.957 923.745 288.874 923.806 288.817 923.847C288.789 923.867 288.768 923.883 288.754 923.894C288.747 923.899 288.741 923.903 288.737 923.905C288.736 923.906 288.734 923.907 288.733 923.907L288.732 923.908L288.048 924.408L287.941 923.567L288.438 923.505C287.942 923.568 287.942 923.567 287.941 923.566C287.941 923.566 287.941 923.564 287.94 923.562C287.94 923.559 287.94 923.555 287.939 923.549C287.938 923.537 287.936 923.518 287.933 923.494C287.927 923.446 287.918 923.373 287.906 923.277C287.884 923.086 287.851 922.8 287.81 922.424C287.727 921.67 287.611 920.551 287.478 919.085C287.21 916.153 286.872 911.834 286.587 906.28C286.016 895.173 285.656 879.126 286.5 859.358C288.189 819.824 294.695 765.402 313.962 705.85L314.224 705.041L314.803 705.662L455.303 856.163L455.976 856.884L454.997 857.001L397.147 863.923C397.186 864.016 397.228 864.119 397.276 864.232C397.53 864.832 397.917 865.718 398.445 866.858C399.502 869.139 401.127 872.437 403.397 876.495C407.939 884.612 415.061 895.773 425.381 907.932C446.013 932.242 479.425 960.545 530.546 976.515C553.481 979.493 570.422 978.743 581.621 977.252C587.224 976.506 591.391 975.575 594.151 974.832C595.531 974.461 596.561 974.137 597.242 973.906C597.583 973.791 597.836 973.699 598.004 973.637C598.088 973.606 598.151 973.581 598.191 973.565C598.211 973.558 598.227 973.552 598.236 973.548C598.241 973.546 598.244 973.544 598.246 973.543C598.249 973.542 598.254 973.54 598.26 973.537C598.274 973.531 598.297 973.521 598.326 973.508C598.386 973.48 598.477 973.436 598.598 973.376C598.839 973.256 599.199 973.068 599.661 972.8C600.586 972.264 601.923 971.408 603.553 970.142C606.812 967.608 611.246 963.425 615.904 956.842C625.218 943.678 635.442 920.895 638.938 882.477L642.432 544.989L482.925 541.002L482.438 540.99V460.002H642.483C642.506 459.763 642.536 459.433 642.572 459.019C642.654 458.09 642.768 456.741 642.895 455.058C643.147 451.691 643.45 446.988 643.652 441.648C644.054 431.045 644.053 417.961 642.48 407.824C603.762 387.517 586.111 359.35 578.152 336.227C574.167 324.647 572.613 314.338 572.056 306.921C571.777 303.212 571.748 300.226 571.788 298.164C571.808 297.133 571.846 296.333 571Line truncated
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 255 B After Width: | Height: | Size: 5.8 KiB |
@@ -1,13 +1,13 @@
|
||||
import type { ReactNode } from "react";
|
||||
|
||||
import { PulseIcon, ShieldIcon } from "../../shared/icons";
|
||||
import { LogoIcon, ShieldIcon } from "../../shared/icons";
|
||||
|
||||
export function AuthFrame({ title, subtitle, logo, width = 400, children, note }: { title: string; subtitle: ReactNode; logo: "pulse" | "shield"; width?: number; children: ReactNode; note?: ReactNode }) {
|
||||
return (
|
||||
<main className="auth-screen">
|
||||
<div className="auth-box" style={{ width }}>
|
||||
<div className="auth-brand">
|
||||
<div className="auth-logo">{logo === "shield" ? <ShieldIcon /> : <PulseIcon />}</div>
|
||||
<div className="auth-logo">{logo === "shield" ? <ShieldIcon /> : <LogoIcon />}</div>
|
||||
<h1>{title}</h1>
|
||||
<p>{subtitle}</p>
|
||||
</div>
|
||||
|
||||
@@ -36,7 +36,7 @@ export function AuthLogin({ onLogin, onTotpChallenge, onRecover }: { onLogin: (u
|
||||
}
|
||||
|
||||
return (
|
||||
<AuthFrame title="Edevs Hub" subtitle="Вход во внутренний кабинет" logo="pulse" note="Доступ только для сотрудников Edevs · защищённое соединение">
|
||||
<AuthFrame title="CustoCRM" subtitle="Вход во внутренний кабинет" logo="pulse" note="Доступ только для сотрудников Edevs · защищённое соединение">
|
||||
<form className="auth-card" onSubmit={submit}>
|
||||
{error && <div className="auth-error"><span className="auth-error-dot">!</span><span>Неверный email или пароль. Проверьте данные и попробуйте снова.</span></div>}
|
||||
<label className="field-label">Email</label>
|
||||
|
||||
@@ -94,7 +94,7 @@ export function AuthResetPassword({ onDone }: { onDone: () => void }) {
|
||||
}
|
||||
|
||||
return (
|
||||
<AuthFrame title="Новый пароль" subtitle="Задайте новый пароль для входа в Edevs Hub." logo="shield" width={420} note={backLink}>
|
||||
<AuthFrame title="Новый пароль" subtitle="Задайте новый пароль для входа в CustoCRM." logo="shield" width={420} note={backLink}>
|
||||
<form className="auth-card" onSubmit={submit}>
|
||||
{error && <div className="auth-error"><span className="auth-error-dot">!</span><span>{error}</span></div>}
|
||||
<label className="field-label">Новый пароль</label>
|
||||
|
||||
@@ -11,7 +11,7 @@ export type QrMatrix = {
|
||||
};
|
||||
|
||||
export function createQrMatrix(text: string): QrMatrix {
|
||||
const bytes = Array.from(new TextEncoder().encode(text || "Edevs Hub"));
|
||||
const bytes = Array.from(new TextEncoder().encode(text || "CustoCRM"));
|
||||
const version = chooseVersion(bytes.length);
|
||||
const size = version * 4 + 17;
|
||||
const dataCodewords = encodeData(bytes, version);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { RouteKey, SessionUser } from "../types";
|
||||
import { Icon, PulseIcon } from "../shared/icons";
|
||||
import { Icon, LogoIcon } from "../shared/icons";
|
||||
import { Avatar } from "../shared/ui";
|
||||
|
||||
export function Sidebar({ route, user, setRoute }: { route: RouteKey; user: SessionUser; setRoute: (route: RouteKey) => void }) {
|
||||
@@ -20,8 +20,8 @@ export function Sidebar({ route, user, setRoute }: { route: RouteKey; user: Sess
|
||||
return (
|
||||
<aside className="hub-sidebar">
|
||||
<button className="hub-brand" type="button" onClick={() => setRoute("command")}>
|
||||
<div className="hub-brand-mark"><PulseIcon /></div>
|
||||
<div><strong>Edevs Hub</strong><span>Уровень компании</span></div>
|
||||
<div className="hub-brand-mark"><LogoIcon /></div>
|
||||
<div><strong>CustoCRM</strong><span>Уровень компании</span></div>
|
||||
</button>
|
||||
<nav className="hub-nav">
|
||||
{nav.map((item, index) => {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import type { ReactNode } from "react";
|
||||
|
||||
export function PulseIcon() {
|
||||
export function LogoIcon() {
|
||||
return (
|
||||
<svg viewBox="0 0 24 24" width="17" height="17" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
|
||||
<path d="M3 12h4l2 6 4-14 2 8h6" />
|
||||
<svg viewBox="140 140 1106 1106" width="17" height="17" fill="currentColor">
|
||||
<path d="M691.947 175C743.896 176.004 775.161 202.368 793.419 230.289C802.544 244.243 808.421 258.585 812.018 270.347C815.61 282.096 816.938 291.306 816.938 295.001C816.938 309.524 816.93 372.653 744.438 407.813V460.002H904.938V540.99L904.45 541.002L744.445 544.989L749.937 882.48C749.937 882.489 749.939 882.5 749.94 882.514C749.944 882.549 749.949 882.602 749.955 882.672C749.968 882.812 749.988 883.021 750.016 883.295C750.071 883.842 750.157 884.648 750.278 885.681C750.521 887.746 750.905 890.716 751.471 894.334C752.601 901.571 754.457 911.395 757.356 921.745C760.257 932.098 764.196 942.963 769.489 952.29C774.619 961.33 780.998 968.885 788.895 973.156L789.664 973.56L789.699 973.577L789.731 973.601C793.751 976.524 799.835 978.199 806.771 979.04C813.693 979.879 821.395 979.88 828.599 979.506C835.8 979.132 842.489 978.384 847.379 977.729C849.823 977.401 851.817 977.097 853.199 976.875C853.89 976.764 854.428 976.673 854.793 976.61C854.975 976.579 855.115 976.555 855.208 976.538C855.255 976.53 855.29 976.524 855.313 976.52C855.323 976.518 855.33 976.516 855.336 976.515C855.345 976.512 855.36 976.509 855.379 976.505C855.418 976.495 855.477 976.481 855.556 976.461C855.713 976.421 855.948 976.36 856.258 976.276C856.878 976.109 857.797 975.851 858.986 975.491C861.365 974.771 864.827 973.639 869.151 971.999C877.801 968.719 889.899 963.401 903.684 955.262C931.141 939.048 965.281 911.632 992.18 866.791C981.29 863.394 967.013 860.713 955.359 858.873C949.428 857.937 944.183 857.218 940.421 856.734C938.54 856.492 937.03 856.309 935.99 856.187C935.471 856.125 935.069 856.079 934.797 856.048C934.661 856.032 934.557 856.02 934.487 856.013C934.453 856.009 934.427 856.006 934.409 856.004C934.401 856.003 934.394 856.002 934.39 856.002C934.388 856.002 934.386 856.002 934.385 856.002L934.384 856.001H934.383L933.401 855.894L934.069 855.166L1073.57 703.165L1074.13 702.559L1074.41 703.333C1090.68 748.154 1096.94 802.964 1099.12 846.542C1100.22 868.336 1100.3 887.331 1100.1 900.879C1100 907.653 1099.84 913.065 1099.7 916.784C1099.63 918.644 1099.56 920.081 1099.51 921.053C1099.49 921.539 1099.47 921.909 1099.46 922.157C1099.45 922.282 1099.45 922.376 1099.44 922.438C1099.44 922.47 1099.44 922.494 1099.44 922.51C1099.44 922.517 1099.44 922.523 1099.44 922.527C1099.44 922.529 1099.44 922.531 1099.44 922.532C1099.43 922.533 1099.39 922.531 1098.94 922.505L1099.44 922.534L1099.39 923.361L1098.68 922.933L1048.66 892.726C1003.9 993.99 945.911 1044.08 883.83 1083.43C821.626 1122.85 755.486 1151.41 694.283 1209.87L693.948 1210.19L693.604 1209.88C626.889 1149.91 559.114 1118.72 497.414 1078.36C435.832 1038.08 380.46 988.73 338.686 892.68C328.31 897.648 315.933 905.371 306.086 911.902C301.091 915.215 296.752 918.217 293.662 920.391C292.117 921.478 290.883 922.358 290.037 922.966C289.614 923.269 289.288 923.505 289.067 923.665C288.957 923.745 288.874 923.806 288.817 923.847C288.789 923.867 288.768 923.883 288.754 923.894C288.747 923.899 288.741 923.903 288.737 923.905C288.736 923.906 288.734 923.907 288.733 923.907L288.732 923.908L288.048 924.408L287.941 923.567L288.438 923.505C287.942 923.568 287.942 923.567 287.941 923.566C287.941 923.566 287.941 923.564 287.94 923.562C287.94 923.559 287.94 923.555 287.939 923.549C287.938 923.537 287.936 923.518 287.933 923.494C287.927 923.446 287.918 923.373 287.906 923.277C287.884 923.086 287.851 922.8 287.81 922.424C287.727 921.67 287.611 920.551 287.478 919.085C287.21 916.153 286.872 911.834 286.587 906.28C286.016 895.173 285.656 879.126 286.5 859.358C288.189 819.824 294.695 765.402 313.962 705.85L314.224 705.041L314.803 705.662L455.303 856.163L455.976 856.884L454.997 857.001L397.147 863.923C397.186 864.016 397.228 864.119 397.276 864.232C397.53 864.832 397.917 865.718 398.445 866.858C399.502 869.139 401.127 872.437 403.397 876.495C407.939 884.612 415.061 895.773 425.381 907.932C446.013 932.242 479.425 960.545 530.546 976.515C553.481 979.493 570.422 978.743 581.621 977.252C587.224 976.506 591.391 975.575 594.151 974.832C595.531 974.461 596.561 974.137 597.242 973.906C597.583 973.791 597.836 973.699 598.004 973.637C598.088 973.606 598.151 973.581 598.191 973.565C598.211 973.558 598.227 973.552 598.236 973.548C598.241 973.546 598.244 973.544 598.246 973.543C598.249 973.542 598.254 973.54 598.26 973.537C598.274 973.531 598.297 973.521 598.326 973.508C598.386 973.48 598.477 973.436 598.598 973.376C598.839 973.256 599.199 973.068 599.661 972.8C600.586 972.264 601.923 971.408 603.553 970.142C606.812 967.608 611.246 963.425 615.904 956.842C625.218 943.678 635.442 920.895 638.938 882.477L642.432 544.989L482.925 541.002L482.438 540.99V460.002H642.483C642.506 459.763 642.536 459.433 642.572 459.019C642.654 458.09 642.768 456.741 642.895 455.058C643.147 451.691 643.45 446.988 643.652 441.648C644.054 431.045 644.053 417.961 642.48 407.824C603.762 387.517 586.111 359.35 578.152 336.227C574.167 324.647 572.613 314.338 572.056 306.921C571.777 303.212 571.748 300.226 571.788 298.164C571.808 297.133 571.846 296.333Line truncated
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<!-- Камера/микрофон разрешаются только самой странице звонка (SPEC-HUB-0013 §12). -->
|
||||
<title>Онлайн-звонок | Edevs Hub</title>
|
||||
<title>Онлайн-звонок | CustoCRM</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Web Chat | Edevs Hub</title>
|
||||
<title>Web Chat | CustoCRM</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
Reference in new issue
Block a user