feat: Обновление компонентов ASNsNewManager, DomainsNewManager и IPRangesManager с добавлением позиционирования для подсказок и улучшением доступности кнопок. Подсказки теперь отображаются сверху, а кнопки получили атрибуты title для повышения удобства использования.
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m38s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m38s
This commit is contained in:
@@ -839,11 +839,12 @@ function ASNsNewManager() {
|
||||
<div className="d-flex align-items-center">
|
||||
<IconHash size={16} className="me-2 text-muted" />
|
||||
<span>{item.asn}</span>
|
||||
<Tooltip content="Копировать ASN">
|
||||
<Tooltip content="Копировать ASN" position="top">
|
||||
<button
|
||||
className="btn btn-ghost-secondary btn-icon btn-sm ms-2"
|
||||
onClick={() => copyToClipboard(item.asn)}
|
||||
aria-label="Копировать"
|
||||
title="Копировать ASN"
|
||||
>
|
||||
<IconCopy size={14} />
|
||||
</button>
|
||||
@@ -878,14 +879,14 @@ function ASNsNewManager() {
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Tooltip content="Редактировать">
|
||||
<button className="btn btn-outline-primary btn-icon btn-sm me-1" aria-label="Редактировать" onClick={() => handleEdit(item)}><IconEdit size={16} /></button>
|
||||
<Tooltip content="Редактировать" position="top">
|
||||
<button className="btn btn-outline-primary btn-icon btn-sm me-1" aria-label="Редактировать" onClick={() => handleEdit(item)} title="Редактировать"><IconEdit size={16} /></button>
|
||||
</Tooltip>
|
||||
<Tooltip content="Копировать">
|
||||
<button className="btn btn-outline-secondary btn-icon btn-sm me-1" aria-label="Копировать" onClick={() => copyToClipboard(`${item.asn} ${item.community}`)}><IconCopy size={16} /></button>
|
||||
<Tooltip content="Копировать" position="top">
|
||||
<button className="btn btn-outline-secondary btn-icon btn-sm me-1" aria-label="Копировать" onClick={() => copyToClipboard(`${item.asn} ${item.community}`)} title="Копировать"><IconCopy size={16} /></button>
|
||||
</Tooltip>
|
||||
<Tooltip content="Удалить">
|
||||
<button className="btn btn-outline-danger btn-icon btn-sm" aria-label="Удалить" onClick={() => confirmDelete(item)}><IconTrash size={16} /></button>
|
||||
<Tooltip content="Удалить" position="top">
|
||||
<button className="btn btn-outline-danger btn-icon btn-sm" aria-label="Удалить" onClick={() => confirmDelete(item)} title="Удалить"><IconTrash size={16} /></button>
|
||||
</Tooltip>
|
||||
</>
|
||||
)}
|
||||
|
||||
@@ -860,11 +860,12 @@ function DomainsNewManager() {
|
||||
<div className="d-flex align-items-center">
|
||||
<IconWorld size={16} className="me-2 text-muted" />
|
||||
<span className="font-monospace">{item.domain}</span>
|
||||
<Tooltip content="Копировать домен">
|
||||
<Tooltip content="Копировать домен" position="top">
|
||||
<button
|
||||
className="btn btn-ghost-secondary btn-icon btn-sm ms-2"
|
||||
onClick={() => copyToClipboard(item.domain)}
|
||||
aria-label="Копировать"
|
||||
title="Копировать домен"
|
||||
>
|
||||
<IconCopy size={14} />
|
||||
</button>
|
||||
@@ -910,29 +911,32 @@ function DomainsNewManager() {
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Tooltip content="Редактировать">
|
||||
<Tooltip content="Редактировать" position="top">
|
||||
<button
|
||||
className="btn btn-outline-primary btn-icon btn-sm"
|
||||
aria-label="Редактировать"
|
||||
onClick={() => handleEdit(item)}
|
||||
title="Редактировать"
|
||||
>
|
||||
<IconEdit size={16} />
|
||||
</button>
|
||||
</Tooltip>
|
||||
<Tooltip content="Копировать">
|
||||
<Tooltip content="Копировать" position="top">
|
||||
<button
|
||||
className="btn btn-outline-secondary btn-icon btn-sm"
|
||||
aria-label="Копировать"
|
||||
onClick={() => copyToClipboard(`${item.domain} ${item.community}`)}
|
||||
title="Копировать"
|
||||
>
|
||||
<IconCopy size={16} />
|
||||
</button>
|
||||
</Tooltip>
|
||||
<Tooltip content="Удалить">
|
||||
<Tooltip content="Удалить" position="top">
|
||||
<button
|
||||
className="btn btn-outline-danger btn-icon btn-sm"
|
||||
aria-label="Удалить"
|
||||
onClick={() => confirmDelete(item)}
|
||||
title="Удалить"
|
||||
>
|
||||
<IconTrash size={16} />
|
||||
</button>
|
||||
|
||||
@@ -1078,11 +1078,12 @@ function IPRangesManager() {
|
||||
<div className="d-flex align-items-center">
|
||||
<IconNetwork size={16} className="me-2 text-muted" />
|
||||
<span>{item.ipRange}</span>
|
||||
<Tooltip content="Копировать IP-диапазон">
|
||||
<Tooltip content="Копировать IP-диапазон" position="top">
|
||||
<button
|
||||
className="btn btn-ghost-secondary btn-icon btn-sm ms-2"
|
||||
onClick={() => copyToClipboard(item.ipRange)}
|
||||
aria-label="Копировать"
|
||||
title="Копировать IP-диапазон"
|
||||
>
|
||||
<IconCopy size={14} />
|
||||
</button>
|
||||
@@ -1110,14 +1111,14 @@ function IPRangesManager() {
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Tooltip content="Редактировать">
|
||||
<button className="btn btn-outline-primary btn-icon btn-sm me-1" aria-label="Редактировать" onClick={() => handleEdit(item)}><IconEdit size={16} /></button>
|
||||
<Tooltip content="Редактировать" position="top">
|
||||
<button className="btn btn-outline-primary btn-icon btn-sm me-1" aria-label="Редактировать" onClick={() => handleEdit(item)} title="Редактировать"><IconEdit size={16} /></button>
|
||||
</Tooltip>
|
||||
<Tooltip content="Копировать">
|
||||
<button className="btn btn-outline-secondary btn-icon btn-sm me-1" aria-label="Копировать" onClick={() => copyToClipboard(`${item.ipRange} ${item.community}`)}><IconCopy size={16} /></button>
|
||||
<Tooltip content="Копировать" position="top">
|
||||
<button className="btn btn-outline-secondary btn-icon btn-sm me-1" aria-label="Копировать" onClick={() => copyToClipboard(`${item.ipRange} ${item.community}`)} title="Копировать"><IconCopy size={16} /></button>
|
||||
</Tooltip>
|
||||
<Tooltip content="Удалить">
|
||||
<button className="btn btn-outline-danger btn-icon btn-sm" aria-label="Удалить" onClick={() => confirmDelete(item)}><IconTrash size={16} /></button>
|
||||
<Tooltip content="Удалить" position="top">
|
||||
<button className="btn btn-outline-danger btn-icon btn-sm" aria-label="Удалить" onClick={() => confirmDelete(item)} title="Удалить"><IconTrash size={16} /></button>
|
||||
</Tooltip>
|
||||
</>
|
||||
)}
|
||||
|
||||
@@ -155,6 +155,36 @@ function Tooltip({
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes tooltipFadeInTop {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translate(-50%, calc(-100% - 4px)) scale(0.95);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translate(-50%, calc(-100% - 8px)) scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes tooltipFadeInBottom {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translate(-50%, 4px) scale(0.95);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translate(-50%, 8px) scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
.tooltip-content.tooltip-top {
|
||||
animation: tooltipFadeInTop 0.15s ease-out;
|
||||
}
|
||||
|
||||
.tooltip-content.tooltip-bottom {
|
||||
animation: tooltipFadeInBottom 0.15s ease-out;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.tooltip-inner {
|
||||
background: var(--tblr-gray-800, #1e293b);
|
||||
|
||||
Reference in New Issue
Block a user