Кнопка копирования
<sf-copy-button> копирует значение и сообщает о результате: значок на миг
становится галочкой, а «Скопировано» вежливо объявляется для чтения с экрана.
Пример
Применение
Что копируется
value— сам текст;target="#id"— значение поля или текст элемента; пронумерованный блок кода копируется без номеров строк.
Задать сразу и value, и target — ошибка (ambiguous_source). Оба
атрибута читаются при каждом копировании, поэтому другое значение достаточно
присвоить свойству: button.value = … или button.target = '#id'.
Классы sf-clipboard подходят для
готовой разметки без Smart-компонентов. <sf-copy-button> нужен, когда
копируется содержимое другого элемента (target), нужно сообщение о
результате и запасной путь там, где буфер обмена недоступен.
<code id="token">sk_test_51H…</code>
<sf-copy-button target="#token" label="Скопировать ключ"></sf-copy-button>
<sf-copy-button value="npm i @simai/ui" text="Копировать" label="Копировать команду"></sf-copy-button>
Вид
text— видимая подпись; без неё кнопка — только значок.size—1/3,1/2(по умолчанию),1или2, по общей лестнице размеров: рядом с полемsf-input--size-1берите1;appearance—link(по умолчанию),ghost,outlineилиtonal.root-styleложится на саму кнопку.icon— значок в покое, по умолчаниюcontent_copy: например,linkдля ссылки илиkeyдля ключа.success-icon— значок после копирования, по умолчаниюcheck.success-textиerror-text— свои сообщения,duration— сколько миллисекунд держится результат, по умолчанию 2000.
Когда копировать нельзя
Если браузер не дал доступ к буферу обмена — страница во фрейме или так настроена политика, — кнопка выделяет текст и сообщает «Выделено — нажмите Ctrl+C» (⌘C на macOS), чтобы человек скопировал сам. Пока идёт копирование, повторное нажатие не срабатывает.
События и код
sf-copy приходит с {text, method}, sf-copy-error — с {code}:
empty_source, missing_target, ambiguous_source или denied. Метод
copy() копирует из кода.
Доступность
label— доступное имя: что именно копируется («Скопировать команду»). По умолчанию «Копировать». Если на странице несколько кнопок, называйте каждую, иначе экранный диктор не различит их.- У кнопки с
textдоступное имя начинается с видимой подписи: приtext="Копировать"—label="Копировать команду", а не «Скопировать команду». Так человек, который управляет голосом, называет кнопку тем словом, которое видит. - У кнопки только со значком видимого имени нет, а всплывающую подсказку
к Smart-кнопке не подключить (см. Подсказка). Где зрячему человеку
нужно имя, задайте
text. - Результат объявляется вежливо, не перебивая.
Справочник API
Раздел собран из манифеста компонента выпуска ui-106d5901f8c3 и обновляется вместе с выпуском. Чтобы исправить описание, исправьте манифест.
Каждому атрибуту соответствует свойство элемента с тем же именем в camelCase: search-placeholder — searchPlaceholder. Свойство атрибута template называется templateName.
| Тег | <sf-copy-button> |
| Назначение | Копирует значение или текст элемента, подтверждает галочкой и вежливым объявлением, а если браузер не даёт доступ к буферу обмена, выделяет текст для Ctrl+C. |
| Контракт | smart.copy-button, версия 1.0.0 |
| Поставка | выпуск Framework ui-106d5901f8c3 |
| Жизненный цикл | экспериментальный: API может меняться между выпусками |
| Готовность | работает в сценарии студии, продуктовой приёмки нет |
| Заготовка до прихода кода | нет: атрибут data-sf-skeleton не пишется; своего скелетона при загрузке данных нет (Заготовка до прихода кода) |
Атрибуты
value—string, по умолчанию пусто. Текст для копирования.target—string, по умолчанию пусто.#idполя (копируется его значение) или элемента (его текст; пронумерованный блок кода — без номеров строк). value и target вместе — ошибка.text—string, по умолчанию пусто. Видимая подпись; без неё кнопка — только значок.label—string, по умолчанию пусто. Доступное имя, говорящее, что копируется («Скопировать команду»); по умолчанию «Копировать».size—string, по умолчанию1/2, значения:1/3,1/2,1,2.appearance—string, по умолчаниюlink, значения:link,ghost,outline,tonal.icon—string, по умолчаниюcontent_copy. Значок в покое: link, key и другие.success-icon—string, по умолчаниюcheck.success-text—string, по умолчанию пусто.error-text—string, по умолчанию пусто.duration—string, по умолчанию2000. Сколько миллисекунд держится результат.root-class—string, по умолчанию пусто.template—string, по умолчаниюdefault.
Методы
copy()— возвращаетobject. Копирует так же, как нажатие; нажатие во время копирования игнорируется.
События
Все события приходят на сам элемент и всплывают. Общие события базового элемента перечислены в главе Жизненный цикл → Этапы.
sf-copy—detail:{ text: string, method: any }. Значение скопировано.sf-copy-error—detail:{ code: any }. Значение не скопировано; при denied текст выделен для Ctrl+C.
Доступность
- Роль: кнопка (
button). - Доступное имя: рекомендуется.
- Клавиши:
Enter,Space. - Фокус: Обычная кнопка с именем из label (что копируется); результат объявляется вежливо; если буфер обмена недоступен, текст выделяется и звучит подсказка нажать Ctrl+C (⌘C на macOS).
Минимальная разметка
<sf-copy-button value="npm i @simai/ui" label="Скопировать команду"></sf-copy-button>
Источник
simai/ui@106d5901f8c3b4f23131ce0e7ede5dbd8abfe4f4:distr/smart/copy-buttonsimai/ui@106d5901f8c3b4f23131ce0e7ede5dbd8abfe4f4:distr/rule/rule.json#name=cl-copy-button
См. также
- Копирование — классы копирования без Smart-компонента
- Кнопки
- Кнопки-иконки