Desde React 19, los Web Components son totalmente compatibles sin wrappers ni soluciones alternativas. Usa directamente el Web Component Add to Calendar Button en tu JSX.

A continuación destacamos todas las opciones.

Paso 1: Instalación con npm

Instala el paquete desde el registro de npm.

Terminal window
npm install add-to-calendar-button

Paso 2: Importarlo

Importa el módulo en el componente donde quieras usar el botón.

import 'add-to-calendar-button';

Paso 3: Usarlo

Empieza añadiendo una etiqueta <add-to-calendar-button> al código HTML, con las opciones como atributos.

Con React 19, las propiedades de los custom elements pueden tiparse mediante la compatibilidad de TypeScript. Registra el tipo una vez, por ejemplo en global.d.ts, para obtener comprobación completa:

import type {
AddToCalendarButtonType,
} from 'add-to-calendar-button';
import type {
DetailedHTMLProps,
HTMLAttributes,
} from 'react';
declare module 'react' {
namespace JSX {
interface IntrinsicElements {
'add-to-calendar-button': DetailedHTMLProps<
Omit<HTMLAttributes<HTMLElement>, keyof AddToCalendarButtonType>,
HTMLElement
> &
AddToCalendarButtonType;
}
}
}
export {};

Si compilerOptions.types está definido en tu tsconfig, incluye react y react-dom junto con las entradas existentes:

{
"compilerOptions": {
"types": ["vite/client", "react", "react-dom"]
}
}

Tu bloque de código podría ser como el siguiente.

<add-to-calendar-button
name="Título"
options="'apple','google'"
location="World Wide Web"
start-date="2026-10-18"
end-date="2026-10-18"
start-time="10:15"
end-time="23:30"
time-zone="Europe/Madrid"
language="es"
></add-to-calendar-button>

Ten en cuenta que el botón solo funciona en el cliente. Añade 'use client'; cuando corresponda.

Estilos e idiomas

El script incluye el estilo de botón «default» y el paquete de inglés, por lo que funciona y se ve bien sin configuración adicional.

Al cargar directamente el script del navegador, los demás estilos e idiomas se descargan automáticamente cuando se necesitan (unos pocos KB cada uno). Las integraciones empaquetadas deben registrar explícitamente los módulos necesarios como se muestra abajo.

Empaquetado con npm (recomendado para frameworks)

Al empaquetar el script, importa los módulos de estilo e idioma necesarios antes del módulo principal. Así quedan registrados sin solicitudes antes de que se actualice el custom element, también durante la hidratación SSR:

import 'add-to-calendar-button/styles/3d'; // any style besides "default"
import 'add-to-calendar-button/i18n/de'; // any language besides English
import 'add-to-calendar-button'; // load the component last

Para cargar todos los estilos o idiomas en una sola instrucción, usa los módulos agregados: import 'add-to-calendar-button/styles/all' e import 'add-to-calendar-button/i18n/all'.

Consulta las opciones «button-style» y «language» de la página Configuración para ver todos los detalles.