From 8f931db0f04397f53bc734e376e96e90444690e5 Mon Sep 17 00:00:00 2001 From: Aleksey Sabilin Date: Sun, 26 Jul 2026 22:25:25 +0300 Subject: [PATCH] feat: CalenTIQ Admin branding (wordmark, favicon, titles). Refs EventHub/EventHubSpec#10 --- index.html | 3 +- public/brand/mark-white.svg | 15 ++++++ public/brand/mark.svg | 15 ++++++ public/favicon.ico | Bin 0 -> 917 bytes public/favicon.svg | 16 +++++- src/components/BrandWordmark.tsx | 75 ++++++++++++++++++++++++++++ src/layouts/ControlCenterLayout.tsx | 11 ++-- src/locales/en.json | 2 +- src/locales/ru.json | 2 +- src/pages/auth/LoginPage.tsx | 3 +- 10 files changed, 133 insertions(+), 9 deletions(-) create mode 100644 public/brand/mark-white.svg create mode 100644 public/brand/mark.svg create mode 100644 public/favicon.ico create mode 100644 src/components/BrandWordmark.tsx diff --git a/index.html b/index.html index fa7f658..6b20ed6 100644 --- a/index.html +++ b/index.html @@ -3,8 +3,9 @@ + - EventHub Admin + CalenTIQ Admin
diff --git a/public/brand/mark-white.svg b/public/brand/mark-white.svg new file mode 100644 index 0000000..2270bfc --- /dev/null +++ b/public/brand/mark-white.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/brand/mark.svg b/public/brand/mark.svg new file mode 100644 index 0000000..699253f --- /dev/null +++ b/public/brand/mark.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5712ba8e5e6df554e607f16e3493cbe9f48ef889 GIT binary patch literal 917 zcmV;G18V$r)a@6u-Oj5(JSzK%SzAWWbObQ#3h_eW*XS&-tY$YqHc46EzhT5LpCy$ou{1AkMO` zpbOG(c6RRGd-j}r-iOs_G|&xd^_nN-i)XG=xlEy4M7?8}!y6R{p9#liCMJjQq1GnW z5)etow$JwRr2-lR_}t+|qg5t)b}Jx~jQ;q$g$9jf%WKdEuT(2rC+e{b?2;8t#XBC4@c4Ga z3%OVdbiS)#ES<;}a=B6gE`=BauEL6Ux{gYsSe&ud>oxGaKN4)91`~E4UM{V=)~GuW zlh~*A&-F%~x;r6}znPtfi+|hy-Cw+tz%d-BaUbOi9W!>|{>A;X?`$B~z#OL?J4|*k z2t;kUT0womsyB1lT=J7eJ=2eCM8hMlv;Ax_hx)~aXNUTEM+2i$m&#|nkpN;0E}Qc( zL0bTi%^ekp0#Sk?3vl49dg|l+GGrg^2vTQKu4%2?CX$LI@D5)`Y1EMMwR(N;{D^v_ zm8mQ`6ZrEY7V=*OX}_Fa`pI=$08}V=gNbO=;F5)D>s#|;G@Wq!4sjf}8|EOxGlksR z!A7?{?JS^FDc`5KO2r|4Oe%v}GreMSqGn-lD&!%2-4YN(m|CiUI&nt;hBcp#fN(wx zo`NZs<{Y5G*S+;(xoi2lVTJLze7Xiu@;I!ALIUz`b!QDR09@#pIBTujQB*27?E}U| z14UZ^6ef5p#4_|`P{Xt>0OBW|&+6rB^khJo`XU!}0RS-E2v4AvD$(F@N5FZMNaoTO zt?AJM@BnOjGui&=0sxzyKRgci-JF9%A?gW%Sg2a7b`_8=WH&v#&=pp!&Q@;sitB8O zoVA()?puRMgnu2oK#%t}r$MfT{6owDEt9qb%(3qW8!&aE=G00000NkvXXu0mjfltQA& literal 0 HcmV?d00001 diff --git a/public/favicon.svg b/public/favicon.svg index 6893eb1..699253f 100644 --- a/public/favicon.svg +++ b/public/favicon.svg @@ -1 +1,15 @@ - \ No newline at end of file + + + + + + + + + + + + + + + diff --git a/src/components/BrandWordmark.tsx b/src/components/BrandWordmark.tsx new file mode 100644 index 0000000..69c96a1 --- /dev/null +++ b/src/components/BrandWordmark.tsx @@ -0,0 +1,75 @@ +import React from 'react'; +import { cn } from '@/lib/utils'; + +type Size = 'sm' | 'md' | 'lg'; + +type Props = { + size?: Size; + className?: string; + /** Show Time Arc mark next to wordmark (default true). */ + withMark?: boolean; + /** Append muted "Admin" after the brand (sidebar / login). */ + withAdmin?: boolean; +}; + +const sizeMap: Record = { + sm: { mark: 'h-5 w-5', text: 'text-sm', admin: 'text-[11px]' }, + md: { mark: 'h-7 w-7', text: 'text-2xl', admin: 'text-sm' }, + lg: { mark: 'h-10 w-10', text: 'text-4xl', admin: 'text-base' }, +}; + +/** + * Public brand lockup: Time Arc + CalenTIQ (Admin). + * Uses currentColor so the mark follows theme foreground. + */ +const BrandWordmark: React.FC = ({ + size = 'md', + className, + withMark = true, + withAdmin = false, +}) => { + const s = sizeMap[size]; + return ( +
+ {withMark && ( + + + + + + + + + + + + + + + + )} +

+ CalenTIQ + {withAdmin && ( + Admin + )} +

+
+ ); +}; + +export default BrandWordmark; diff --git a/src/layouts/ControlCenterLayout.tsx b/src/layouts/ControlCenterLayout.tsx index fb0ce5c..8504fb7 100644 --- a/src/layouts/ControlCenterLayout.tsx +++ b/src/layouts/ControlCenterLayout.tsx @@ -38,6 +38,7 @@ import { } from '@/config/adminAccess'; import { notify } from '@/lib/notify'; import { cn } from '@/lib/utils'; +import BrandWordmark from '@/components/BrandWordmark'; import { testid } from '@/lib/testid'; import { getTableDensity, toggleTableDensity, type TableDensity } from '@/lib/density'; import { Button } from '@/components/ui/button'; @@ -251,11 +252,13 @@ const ControlCenterLayout: React.FC = () => { collapsed ? 'w-16' : 'w-60' )} > -
+
{!collapsed && ( - - {import.meta.env.VITE_APP_TITLE || t('common.appTitle')} - + )}