- base dialog: z raised to 300/301 (was below sidebar z-200 - dialogs
appeared sunken under navigation), overlay bg-black/45 + 2px blur,
unified close button with hover/focus-visible states, footer pt-4
- FormDialog normalized: width presets sm/md/lg/xl + optional
description, single scrollable body (header/footer fixed), unified
top-right close from base
- ModalOverlay rewritten on radix kernel, same props (+title/noScroll):
portal/focus trap/scroll lock/ESC with proper nesting (fixes
chain-close when ticket detail opens quick-review), 200ms animation,
z-300 layering - was a bare div with no a11y, no animation, ESC
via document listener that leaked to nested dialogs
- killed box-in-box: all 14 ModalOverlay callers stripped their inner
card wrapper (double border/shadow/radius/padding gone) and duplicate
scroll containers; EditInstanceDialog (4th standalone system) migrated
to ModalOverlay, gains ESC/animation/portal
- visual unification per guide: dialog title text-base semibold
(was 4 sizes), close button one form (was 5), footer buttons on
dg-btn system (secondary/primary/danger, was 4 systems), primary
color var(--dg-blue) everywhere (yellow/emerald/blue-500/600 mixed
before), widths 4 presets (was 7 arbitrary values)
- dead code removed: 3 orphaned LDAP dialog components, leftover
create-OU state/handler in BatchImportModal, unused icon imports
verified in browser: users create dialog shows single card (0 inner
cards), 12px radius, z-301/300, overlay blur, sidebar correctly
covered; tsc/build/audit gates green
- multi-round user filters (config filter first, then
objectClass=inetOrgPerson, then AD sAMAccountName/userPrincipalName
fallback) applied to login search, user listing and batch import;
previously pure-AD directories found no users
- attribute fallback chains (uid/sAMAccountName/userPrincipalName,
cn/displayName, telephoneNumber/mobile) via ldapEntryAttr
- import errors explain likely cause instead of empty result
- AES-encrypted admin password kept (aiops stores plaintext)
- frontend gating per aiops pattern: LDAP account management panel
hidden with hint until a config is actually saved (was gated on
unsaved form values); batch-import modal hides to/from-LDAP tabs
when unconfigured, local CSV always available