diff --git a/ordinis-admin-ui/src/components/form/SchemaDrivenForm.tsx b/ordinis-admin-ui/src/components/form/SchemaDrivenForm.tsx index 28e4c11..98abaf0 100644 --- a/ordinis-admin-ui/src/components/form/SchemaDrivenForm.tsx +++ b/ordinis-admin-ui/src/components/form/SchemaDrivenForm.tsx @@ -747,6 +747,13 @@ const ReferenceSelectField = ({ // scroll и type-ahead search работают OOTB. SingleSelect popup // через createPortal с position:fixed не делает auto-flip и уходит // за нижний край когда триггер близко к низу modal'а. + // Caret chevron как inline SVG в data-uri — match'ит SingleSelect + // CaretDown иконку (color carbon/40, weight 'regular', size ~16). + // appearance-none убирает OS default стрелку, иначе на macOS Safari + // рендерится двойной chevron + native blue border. + const caretSvg = + "url(\"data:image/svg+xml;utf8,\")" + return ( field.onChange(e.target.value || undefined)} disabled={isLoading} aria-invalid={Boolean(errorMsg)} + // appearance-none + custom caret = одинаковый look на всех + // платформах. py-2 (8px) match'ит TextInput высоту. + // pr-10 даёт место под chevron, остальной padding как у TextInput. className={[ - 'w-full border rounded-sm px-3 py-2 text-sm font-secondary', + 'w-full appearance-none border rounded-sm pl-3 pr-10 py-2 text-sm font-secondary', 'bg-white text-black transition-colors', + 'bg-no-repeat bg-[right_0.75rem_center] bg-[length:1rem_1rem]', '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', ].join(' ')} + style={{ backgroundImage: caretSvg }} > {options.map((opt) => (