diff --git a/ordinis-admin-ui/src/auth/AuthBadge.tsx b/ordinis-admin-ui/src/auth/AuthBadge.tsx index f091e7c..e26a857 100644 --- a/ordinis-admin-ui/src/auth/AuthBadge.tsx +++ b/ordinis-admin-ui/src/auth/AuthBadge.tsx @@ -15,7 +15,7 @@ export function AuthBadge() { if (auth.isLoading) { return ( - + {t('loading')} ) @@ -58,7 +58,7 @@ export function AuthBadge() { return (
- + {display} diff --git a/ordinis-admin-ui/src/auth/RequireAuth.tsx b/ordinis-admin-ui/src/auth/RequireAuth.tsx index 7f22b99..eb19619 100644 --- a/ordinis-admin-ui/src/auth/RequireAuth.tsx +++ b/ordinis-admin-ui/src/auth/RequireAuth.tsx @@ -34,14 +34,14 @@ export function RequireAuth({ children }: { children: ReactNode }) { return (
-

Ошибка входа

-

+

Ошибка входа

+

Keycloak вернул ошибку:{' '} {oidcError}

)} {idSource && ( -
+
{t('form.idSourceNote', { field: idSource })}
)} @@ -327,9 +327,9 @@ const FieldBody = ({
{label}{' '} - i18n + i18n -
+
{supportedLocales.map((loc) => ( (
- + {loc === defaultLocale ? {loc} : loc}
@@ -599,7 +599,7 @@ const DateTimeField = ({ label, value, defaultTime, onChange, hint, error }: Dat />
- {hint && !error &&

{hint}

} + {hint && !error &&

{hint}

} {error &&

{error}

}
) @@ -797,11 +797,11 @@ const ReferenceSelectField = ({ // appearance-none убирает OS default стрелку. // py-2 (8px) match'ит TextInput высоту. pr-10 — место под адорнмент. className={[ - 'w-full appearance-none border rounded-sm pl-3 pr-10 py-2 text-sm font-secondary', + 'w-full appearance-none border rounded-sm pl-3 pr-10 py-2 text-sm font-display', 'bg-white text-black transition-colors', - 'focus:outline-none focus:ring-1 focus:ring-ultramarain focus:border-ultramarain', - errorMsg ? 'border-mars' : 'border-regolith hover:border-carbon/40', - isLoading ? 'cursor-wait text-carbon/60' : 'cursor-pointer', + 'focus:outline-none focus:ring-1 focus:ring-accent focus:border-accent', + errorMsg ? 'border-mars' : 'border-line hover:border-carbon/40', + isLoading ? 'cursor-wait text-mute' : 'cursor-pointer', ].join(' ')} > @@ -816,9 +816,9 @@ const ReferenceSelectField = ({ aria-hidden="true" > {isLoading ? ( - + ) : ( - + )}
diff --git a/ordinis-admin-ui/src/components/geo/AoiPickerDialog.tsx b/ordinis-admin-ui/src/components/geo/AoiPickerDialog.tsx index e6e2945..5e30044 100644 --- a/ordinis-admin-ui/src/components/geo/AoiPickerDialog.tsx +++ b/ordinis-admin-ui/src/components/geo/AoiPickerDialog.tsx @@ -163,10 +163,10 @@ export const AoiPickerDialog = ({ isOpen, onClose, onApply, initial }: Props) => type="button" onClick={() => setDrawMode(active ? 'idle' : mode)} className={[ - 'px-3 py-1.5 text-xs font-secondary rounded-sm border transition-colors', + 'px-3 py-1.5 text-xs font-display rounded-sm border transition-colors', active - ? 'border-ultramarain bg-ultramarain text-white' - : 'border-regolith bg-white text-carbon hover:border-carbon/40', + ? 'border-accent bg-accent text-white' + : 'border-line bg-white text-ink hover:border-carbon/40', ].join(' ')} > {label} @@ -183,7 +183,7 @@ export const AoiPickerDialog = ({ isOpen, onClose, onApply, initial }: Props) => panelClassName="max-h-[calc(100vh-2rem)] my-4 flex flex-col" bodyClassName="flex-1 flex flex-col gap-3 overflow-hidden" > -

{t('aoi.dialog.help')}

+

{t('aoi.dialog.help')}

{toolbarBtn('rectangle', t('aoi.dialog.drawRectangle'))} @@ -192,12 +192,12 @@ export const AoiPickerDialog = ({ isOpen, onClose, onApply, initial }: Props) => type="button" onClick={handleClear} disabled={!shape} - className="px-3 py-1.5 text-xs font-secondary rounded-sm border border-regolith bg-white text-carbon hover:border-carbon/40 disabled:opacity-40 disabled:cursor-not-allowed" + className="px-3 py-1.5 text-xs font-display rounded-sm border border-line bg-white text-ink hover:border-carbon/40 disabled:opacity-40 disabled:cursor-not-allowed" > {t('aoi.dialog.clear')} {drawMode === 'polygon' && ( - + {t('aoi.dialog.polygonHint')} )} @@ -205,7 +205,7 @@ export const AoiPickerDialog = ({ isOpen, onClose, onApply, initial }: Props) =>
diff --git a/ordinis-admin-ui/src/components/lineage/CascadeConfirmDialog.tsx b/ordinis-admin-ui/src/components/lineage/CascadeConfirmDialog.tsx index 1945dc5..fd99be8 100644 --- a/ordinis-admin-ui/src/components/lineage/CascadeConfirmDialog.tsx +++ b/ordinis-admin-ui/src/components/lineage/CascadeConfirmDialog.tsx @@ -119,7 +119,7 @@ export const CascadeConfirmDialog = ({ {plan && ( <> {/* Header summary */} -

+

{hasBlockers ? t('cascade.summary.blocked', { blockers: plan.blockers.length, @@ -144,16 +144,16 @@ export const CascadeConfirmDialog = ({ {b.sourceDict}/{b.businessKey} - .{b.sourceField} + .{b.sourceField} ))} {plan.blockers.length > 5 && ( -

  • +
  • {t('cascade.blockers.more', { count: plan.blockers.length - 5 })}
  • )} -

    +

    {t('cascade.blockers.resolveFirst')}

    @@ -164,7 +164,7 @@ export const CascadeConfirmDialog = ({
    -

    +

    {t('cascade.cascade.title', { count: plan.cascade.length })}

    @@ -176,13 +176,13 @@ export const CascadeConfirmDialog = ({ return (
  • - + {first.sourceDisplayName ?? first.sourceDict} - + .{first.sourceField} @@ -190,14 +190,14 @@ export const CascadeConfirmDialog = ({ {entries.length}
    -
      +
        {sample.map((e) => (
      • · {e.businessKey}
      • ))} {overflow > 0 && ( -
      • +
      • {t('cascade.cascade.more', { count: overflow })}
      • )} @@ -224,7 +224,7 @@ export const CascadeConfirmDialog = ({
        @@ -242,7 +242,7 @@ export const CascadeConfirmDialog = ({
        @@ -264,7 +264,7 @@ export const CascadeConfirmDialog = ({ )} {/* Footer actions */} -
        +
        -
        +
        {dict.name}
        @@ -85,7 +85,7 @@ const SectionLabel = ({ const { t } = useTranslation() return (
        @@ -141,7 +141,7 @@ export function DictionaryHubView({ detail }: { detail: DictionaryDetail }) {
        {outgoingDicts.length === 0 ? ( -
        +
        {t('hub.noOutgoing', { defaultValue: 'нет исходящих ссылок' })}
        ) : ( @@ -156,7 +156,7 @@ export function DictionaryHubView({ detail }: { detail: DictionaryDetail }) { {/* Center: focused dict (large card) */}
        @@ -166,22 +166,22 @@ export function DictionaryHubView({ detail }: { detail: DictionaryDetail }) { {t('dict.list.approval', { defaultValue: 'approval' })} )} - + v{detail.schemaVersion}
        -

        +

        {detail.displayName ?? detail.name}

        -
        +
        {detail.name}
        {detail.description && ( -

        +

        {detail.description}

        )} -
        +
        {detail.bundle} {detail.supportedLocales.join(', ')} {typeof detail.recordCount === 'number' && ( @@ -197,7 +197,7 @@ export function DictionaryHubView({ detail }: { detail: DictionaryDetail }) {
        {incomingDicts.length === 0 ? ( -
        +
        {t('hub.noIncoming', { defaultValue: 'никто не ссылается' })}
        ) : ( diff --git a/ordinis-admin-ui/src/components/lineage/RecordDependentsPanel.tsx b/ordinis-admin-ui/src/components/lineage/RecordDependentsPanel.tsx index d9ad92b..c66f7dd 100644 --- a/ordinis-admin-ui/src/components/lineage/RecordDependentsPanel.tsx +++ b/ordinis-admin-ui/src/components/lineage/RecordDependentsPanel.tsx @@ -68,19 +68,19 @@ export const RecordDependentsPanel = ({ dictionaryName, businessKey }: Props) => return (
        -

        +

        {t('lineage.refs.title')}

        {stale !== null && stale >= 2 && ( {t('lineage.refs.stale', { minutes: stale })} )} - + {t('lineage.refs.total', { count: data.total })}
        @@ -91,16 +91,16 @@ export const RecordDependentsPanel = ({ dictionaryName, businessKey }: Props) => {data.perSource.map((s) => (
      • {s.sourceDisplayName ?? s.sourceDict} - .{s.sourceField} + .{s.sourceField} {s.count} {t(`lineage.onClose.${s.onClose}`)} @@ -111,7 +111,7 @@ export const RecordDependentsPanel = ({ dictionaryName, businessKey }: Props) => {/* Items list */} {data.items.length > 0 && ( -
          +
            {data.items.map((r) => (
          • >
            - {r.sourceDict} - / + {r.sourceDict} + /
            -
            +
            {t('lineage.refs.field', { field: r.sourceField })} ·{' '} {t('lineage.refs.created', { when: new Date(r.createdAt).toLocaleString(), @@ -162,7 +162,7 @@ export const RecordDependentsPanel = ({ dictionaryName, businessKey }: Props) => > {t('pagination.prev')} - + {t('pagination.pageOf', { page: page + 1, total: totalPages })} @@ -386,23 +386,23 @@ function StatusFooter({ if (!valueDate) { return ( -
            +
            {t('timeTravel.hint')}
            ) } return ( -
            - - +
            + + {valueDate.toLocaleString(lang === 'en' ? 'en-US' : 'ru-RU', { dateStyle: 'long', timeStyle: 'short', })} {relativeLabel && ( - + ({relativeLabel}) )} @@ -418,10 +418,10 @@ function StatusFooter({ valueDate.getMinutes(), ) } - className="w-10 px-1.5 py-0.5 rounded-sm border border-regolith bg-white text-2xs font-mono text-center" + className="w-10 px-1.5 py-0.5 rounded-sm border border-line bg-white text-2xs font-mono text-center" aria-label={t('timeTravel.hours')} /> - : + : ))}
            @@ -356,7 +356,7 @@ function FilterPanel({ } return ( -
            +
            -
            +
            @@ -486,7 +486,7 @@ function AuditRow({ row }: { row: AuditEntry }) { {row.traceId ? row.traceId.slice(0, 8) : '—'} @@ -504,29 +504,29 @@ function AuditRow({ row }: { row: AuditEntry }) { {open && ( -
            +
            -
            +
            {t('audit.diff.before')}
            -
            +                
                               {row.payloadBefore
                                 ? JSON.stringify(row.payloadBefore, null, 2)
                                 : '—'}
                             
            -
            +
            {t('audit.diff.after')}
            -
            +                
                               {row.payloadAfter
                                 ? JSON.stringify(row.payloadAfter, null, 2)
                                 : '—'}
                             
            {(row.ipAddress || row.userAgent || row.requestId) && ( -
            +
            {row.ipAddress && IP: {row.ipAddress}} {row.requestId && req: {row.requestId}} {row.userAgent && ( @@ -563,7 +563,7 @@ function Pagination({ return (
            - {t('audit.page.size')} + {t('audit.page.size')} - + ← {t('nav.dictionaries')} {scope && ( - - · + + ·