Dependent selects — country then region then city: each rung loads from the one above, changing an upper rung clears the lower ones out loud, and an answer for a rung the reader already left is discarded.
npx shadcn@latest add @zyeon/cascading-selectZyeon UI limits how often it can be asked, and Cascading Select hasn't had its turn. Its source will show here once it has.