Tom Sel ect представляет собой JavaScript-библиотеку, предназначенную
для расширения стандартных элементов выбора данных
(<select>) функциональностью автодополнения,
мультивыбора, тегирования и асинхронной подгрузки данных. Архитектура
библиотеки ориентирована на минимальную зависимость от окружения и
максимальную совместимость с современными фронтенд-стеками.
Библиотека рассчитана на работу в современных браузерах, поддерживающих стандарты ECMAScript 2015 (ES6) и выше. Основной набор поддерживаемых окружений включает:
Ключевым требованием является наличие поддержки следующих возможностей Jav * aScript:
class синтаксисMap и SetPromiseObject.assignArray.prototype.find,
Array.prototype.includesquerySelector и querySelectorAll в DOM
APIВ старых браузерах, таких как Internet Explorer, работа библиотеки невозможна без существенной полифилльной обвязки, при этом даже при наличии полифиллов часть функциональности остаётся ограниченной из-за отсутствия современных DOM API и событийной модели.
Исходный код Tom Select написан с ориентацией на ES6+. В большинстве случаев дополнительная транспиляция не требуется при использовании современных сборщиков.
Поддерживаются следующие сценарии интеграции:
<script>)При использовании в сборщиках уровня Webpack, Vite, Rollup или Parcel библиотека подключается как обычный npm-пакет без необходимости ручной конфигурации транспиляции.
Tom Select проектируется как библиотека с минимальным числом зависимостей. В базовой конфигурации отсутствуют обязательные сторонние зависимости.
Функциональность полностью автономна и включает:
fetch
или совместимые реализации)При этом в некоторых сценариях возможна интеграция с внешними инструментами, например:
Подключение библиотеки возможно через несколько форматов распространения:
import TomSelect fr om "tom-select";
Используется в современных фронтенд-сборках с поддержкой ESM. Данный формат является основным для современных приложений.
const TomSelect = require("tom-select");
Применяется в Node.js-окружениях и старых конфигурациях сборщиков.
<link rel="stylesheet" href="tom-select.css">
<script src="tom-select.complete.min.js"></script>
После подключения библиотека становится доступной через глобальный объект:
new TomSelect("#select");
UMD-сборка включает в себя все необходимые компоненты, включая базовые плагины и стили.
Интеграция с React требует учёта жизненного цикла компонентов. DOM-манипуляции выполняются вне виртуального DOM, поэтому инициализация происходит после монтирования элемента.
Основные особенности:
useEffectВ Vue интеграция осуществляется через mounted и
beforeUnmount (или аналогичные хуки в Vue 2).
Особенности:
v-model в связке с
событиями библиотекиSvelte обеспечивает более прямую работу с DOM, поэтому Tom Select
подключается через onMount без дополнительных
адаптеров.
Tom Select зависит от DOM API, поэтому прямое выполнение в серверных средах невозможно. При использовании SSR (например, Next.js или Nuxt) применяется отложенная инициализация:
window и documentСерверная часть может использоваться только для подготовки данных, но не для инициализации UI-компонентов библиотеки.
Библиотека адаптирована для мобильных браузеров и поддерживает:
Особое внимание уделено работе с ограниченной производительностью мобильных устройств: минимизировано количество перерасчётов DOM и перерисовок.
Tom Select содержит типовые определения, обеспечивающие совместимость с TypeScript:
Это позволяет использовать библиотеку в строго типизированных проектах без дополнительного ручного описания интерфейсов.
Для корректной работы в современных проектах достаточно:
Дополнительная конфигурация Babel требуется только в случаях поддержки устаревших браузеров.
Несмотря на широкую поддержку окружений, существуют ограничения:
Архитектура библиотеки предполагает отказ от поддержки устаревших стандартов в пользу производительности и простоты интеграции в современные веб-приложения