fix(web): restore accessible labels for model action tooltips
This commit is contained in:
parent
7fe727fb68
commit
8b89824c2b
1 changed files with 29 additions and 3 deletions
|
|
@ -38,18 +38,21 @@ export function ModelCard({
|
||||||
const canSetDefault =
|
const canSetDefault =
|
||||||
model.available && !model.is_default && !model.is_virtual
|
model.available && !model.is_default && !model.is_virtual
|
||||||
|
|
||||||
|
const setDefaultLabel = t("models.action.setDefault")
|
||||||
const setDefaultDisabledReason = (() => {
|
const setDefaultDisabledReason = (() => {
|
||||||
if (settingDefault) return t("models.action.setDefaultDisabled.setting")
|
if (settingDefault) return t("models.action.setDefaultDisabled.setting")
|
||||||
if (!model.available)
|
if (!model.available)
|
||||||
return t("models.action.setDefaultDisabled.unavailable")
|
return t("models.action.setDefaultDisabled.unavailable")
|
||||||
if (model.is_default) return t("models.action.setDefaultDisabled.isDefault")
|
if (model.is_default) return t("models.action.setDefaultDisabled.isDefault")
|
||||||
if (model.is_virtual) return t("models.action.setDefaultDisabled.isVirtual")
|
if (model.is_virtual) return t("models.action.setDefaultDisabled.isVirtual")
|
||||||
return t("models.action.setDefault")
|
return setDefaultLabel
|
||||||
})()
|
})()
|
||||||
|
|
||||||
|
const editLabel = t("models.action.edit")
|
||||||
|
const deleteLabel = t("models.action.delete")
|
||||||
const deleteDisabledReason = model.is_default
|
const deleteDisabledReason = model.is_default
|
||||||
? t("models.action.deleteDisabled.isDefault")
|
? t("models.action.deleteDisabled.isDefault")
|
||||||
: t("models.action.delete")
|
: deleteLabel
|
||||||
const deleteDisabled = model.is_default
|
const deleteDisabled = model.is_default
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
@ -109,12 +112,28 @@ export function ModelCard({
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
tabIndex={!canSetDefault || settingDefault ? 0 : undefined}
|
tabIndex={!canSetDefault || settingDefault ? 0 : undefined}
|
||||||
|
role={!canSetDefault || settingDefault ? "button" : undefined}
|
||||||
|
aria-disabled={
|
||||||
|
!canSetDefault || settingDefault ? true : undefined
|
||||||
|
}
|
||||||
|
aria-label={
|
||||||
|
!canSetDefault || settingDefault
|
||||||
|
? setDefaultLabel
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
|
title={
|
||||||
|
!canSetDefault || settingDefault
|
||||||
|
? setDefaultLabel
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
>
|
>
|
||||||
<Button
|
<Button
|
||||||
variant="ghost"
|
variant="ghost"
|
||||||
size="icon-sm"
|
size="icon-sm"
|
||||||
onClick={() => onSetDefault(model)}
|
onClick={() => onSetDefault(model)}
|
||||||
disabled={settingDefault || !canSetDefault}
|
disabled={settingDefault || !canSetDefault}
|
||||||
|
aria-label={setDefaultLabel}
|
||||||
|
title={setDefaultLabel}
|
||||||
>
|
>
|
||||||
{settingDefault ? (
|
{settingDefault ? (
|
||||||
<IconLoader2 className="size-3.5 animate-spin" />
|
<IconLoader2 className="size-3.5 animate-spin" />
|
||||||
|
|
@ -132,7 +151,8 @@ export function ModelCard({
|
||||||
variant="ghost"
|
variant="ghost"
|
||||||
size="icon-sm"
|
size="icon-sm"
|
||||||
onClick={() => onEdit(model)}
|
onClick={() => onEdit(model)}
|
||||||
title={t("models.action.edit")}
|
aria-label={editLabel}
|
||||||
|
title={editLabel}
|
||||||
>
|
>
|
||||||
<IconEdit className="size-3.5" />
|
<IconEdit className="size-3.5" />
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -142,12 +162,18 @@ export function ModelCard({
|
||||||
<span
|
<span
|
||||||
className={deleteDisabled ? "cursor-not-allowed" : undefined}
|
className={deleteDisabled ? "cursor-not-allowed" : undefined}
|
||||||
tabIndex={deleteDisabled ? 0 : undefined}
|
tabIndex={deleteDisabled ? 0 : undefined}
|
||||||
|
role={deleteDisabled ? "button" : undefined}
|
||||||
|
aria-disabled={deleteDisabled ? true : undefined}
|
||||||
|
aria-label={deleteDisabled ? deleteLabel : undefined}
|
||||||
|
title={deleteDisabled ? deleteLabel : undefined}
|
||||||
>
|
>
|
||||||
<Button
|
<Button
|
||||||
variant="ghost"
|
variant="ghost"
|
||||||
size="icon-sm"
|
size="icon-sm"
|
||||||
onClick={() => onDelete(model)}
|
onClick={() => onDelete(model)}
|
||||||
disabled={deleteDisabled}
|
disabled={deleteDisabled}
|
||||||
|
aria-label={deleteLabel}
|
||||||
|
title={deleteLabel}
|
||||||
className="text-muted-foreground hover:text-destructive hover:bg-destructive/10"
|
className="text-muted-foreground hover:text-destructive hover:bg-destructive/10"
|
||||||
>
|
>
|
||||||
<IconTrash className="size-3.5" />
|
<IconTrash className="size-3.5" />
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue