# Острова: элемент и его монтирование — Mercury LMS > LM0. Остров — один серверный элемент с `phx-update="ignore"` и `phx-hook`, в который монтируется компонент Mercury Hyperscript. Два варианта: `LiveMercury.mercury/1` (хук `MercuryHook`, поиск компонента по имени) и `EchoEduWeb.Island.island/1` (хук `CourseIsland`, поиск по URL бандла). ## Когда читать Когда вы выводите остров из HEEx, регистрируете его компонент на клиенте или выясняете, почему остров не монтируется. ## Контракт - `<.mercury name="X" ...>` (`import LiveMercury`). Зарезервированные assigns: `name` (обязателен), `id` (по умолчанию `"X-"`, счётчик процесса), `class`, `ssr` (по умолчанию `config :live_mercury, :ssr`, `false`), `diff` (по умолчанию `:enable_props_diff`, `true`), `socket` (только определяет неподключённый первый рендеринг). Остальные assigns — свойства; assign `%Phoenix.LiveView.LiveStream{}` — поток; слот по умолчанию `:inner_block` становится `children`. Свойства кодируются протоколом `LiveMercury.Encoder`. - Атрибуты элемента: `data-name`, `data-props` (компактный JSON), `data-props-diff`, `data-use-diff`, `data-streams-diff`, `data-slots` (слот по умолчанию в base64), `data-ssr`, `phx-update="ignore"`, `phx-hook="MercuryHook"`. - Клиент: `getHooks(components)` → `{ MercuryHook }`; `createMercuryHook(resolve)` принимает `el => Component | Promise`. Компонент получает `{...props, ...streams, pushEvent, pushEventTo, handleEvent, removeHandleEvent, upload, uploadTo}` и слот как дочернее содержимое внутри `LiveMercuryProvider`. При `data-ssr` первый клиентский рендеринг очищает серверную разметку; гидратации нет. - EDU: `<.island id bundle props>`; `id` и `bundle` обязательны, `props` — карта (по умолчанию `%{}`), слот — серверная разметка, сохраняемая до монтирования и восстанавливаемая в `destroyed`. Свойства находятся в первом дочернем `