diff --git a/site/src/components/docs/demos/airplay-button/html/tailwind/BasicUsage.astro b/site/src/components/docs/demos/airplay-button/html/tailwind/BasicUsage.astro
new file mode 100644
index 00000000..c515bacd
--- /dev/null
+++ b/site/src/components/docs/demos/airplay-button/html/tailwind/BasicUsage.astro
@@ -0,0 +1,9 @@
+---
+import HtmlDemo from '@/components/docs/demos/HtmlDemo.astro';
+import html from './BasicUsage.html?raw';
+---
+
+
+
diff --git a/site/src/components/docs/demos/airplay-button/html/tailwind/BasicUsage.html b/site/src/components/docs/demos/airplay-button/html/tailwind/BasicUsage.html
new file mode 100644
index 00000000..b65846d8
--- /dev/null
+++ b/site/src/components/docs/demos/airplay-button/html/tailwind/BasicUsage.html
@@ -0,0 +1,20 @@
+
+
+
+
+ Stop AirPlay
+ Start AirPlay
+ No AirPlay devices found
+ AirPlay not supported
+
+
+
diff --git a/site/src/components/docs/demos/airplay-button/html/tailwind/BasicUsage.ts b/site/src/components/docs/demos/airplay-button/html/tailwind/BasicUsage.ts
new file mode 100644
index 00000000..14879a23
--- /dev/null
+++ b/site/src/components/docs/demos/airplay-button/html/tailwind/BasicUsage.ts
@@ -0,0 +1,2 @@
+import '@videojs/html/video/player';
+import '@videojs/html/ui/airplay-button';
diff --git a/site/src/components/docs/demos/airplay-button/react/tailwind/BasicUsage.tsx b/site/src/components/docs/demos/airplay-button/react/tailwind/BasicUsage.tsx
new file mode 100644
index 00000000..6e4f8923
--- /dev/null
+++ b/site/src/components/docs/demos/airplay-button/react/tailwind/BasicUsage.tsx
@@ -0,0 +1,35 @@
+import { AirPlayButton, createPlayer } from '@videojs/react';
+import { Video, videoFeatures } from '@videojs/react/video';
+
+const Player = createPlayer({ features: videoFeatures });
+
+export default function BasicUsage() {
+ return (
+
+
+
+ {
+ const label =
+ state.availability === 'unsupported'
+ ? 'AirPlay not supported'
+ : state.state === 'connected'
+ ? 'Stop AirPlay'
+ : state.availability === 'unavailable'
+ ? 'No AirPlay devices found'
+ : 'Start AirPlay';
+ return ;
+ }}
+ />
+
+
+ );
+}
diff --git a/site/src/components/docs/demos/buffering-indicator/html/tailwind/BasicUsage.astro b/site/src/components/docs/demos/buffering-indicator/html/tailwind/BasicUsage.astro
new file mode 100644
index 00000000..c515bacd
--- /dev/null
+++ b/site/src/components/docs/demos/buffering-indicator/html/tailwind/BasicUsage.astro
@@ -0,0 +1,9 @@
+---
+import HtmlDemo from '@/components/docs/demos/HtmlDemo.astro';
+import html from './BasicUsage.html?raw';
+---
+
+
+
diff --git a/site/src/components/docs/demos/buffering-indicator/html/tailwind/BasicUsage.html b/site/src/components/docs/demos/buffering-indicator/html/tailwind/BasicUsage.html
new file mode 100644
index 00000000..42e3c8d8
--- /dev/null
+++ b/site/src/components/docs/demos/buffering-indicator/html/tailwind/BasicUsage.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
diff --git a/site/src/components/docs/demos/buffering-indicator/html/tailwind/BasicUsage.ts b/site/src/components/docs/demos/buffering-indicator/html/tailwind/BasicUsage.ts
new file mode 100644
index 00000000..c28dcd98
--- /dev/null
+++ b/site/src/components/docs/demos/buffering-indicator/html/tailwind/BasicUsage.ts
@@ -0,0 +1,2 @@
+import '@videojs/html/video/player';
+import '@videojs/html/ui/buffering-indicator';
diff --git a/site/src/components/docs/demos/buffering-indicator/react/tailwind/BasicUsage.tsx b/site/src/components/docs/demos/buffering-indicator/react/tailwind/BasicUsage.tsx
new file mode 100644
index 00000000..014cbd7f
--- /dev/null
+++ b/site/src/components/docs/demos/buffering-indicator/react/tailwind/BasicUsage.tsx
@@ -0,0 +1,30 @@
+import { BufferingIndicator, createPlayer } from '@videojs/react';
+import { Video, videoFeatures } from '@videojs/react/video';
+
+const Player = createPlayer({ features: videoFeatures });
+
+export default function BasicUsage() {
+ return (
+
+
+
+ (
+
+ {state.visible && (
+
+ )}
+
+ )}
+ />
+
+
+ );
+}
diff --git a/site/src/components/docs/demos/captions-button/html/tailwind/BasicUsage.astro b/site/src/components/docs/demos/captions-button/html/tailwind/BasicUsage.astro
new file mode 100644
index 00000000..c515bacd
--- /dev/null
+++ b/site/src/components/docs/demos/captions-button/html/tailwind/BasicUsage.astro
@@ -0,0 +1,9 @@
+---
+import HtmlDemo from '@/components/docs/demos/HtmlDemo.astro';
+import html from './BasicUsage.html?raw';
+---
+
+
+
diff --git a/site/src/components/docs/demos/captions-button/html/tailwind/BasicUsage.html b/site/src/components/docs/demos/captions-button/html/tailwind/BasicUsage.html
new file mode 100644
index 00000000..55f75a72
--- /dev/null
+++ b/site/src/components/docs/demos/captions-button/html/tailwind/BasicUsage.html
@@ -0,0 +1,20 @@
+
+
+
+
+ Captions Off
+ Captions On
+
+
+
diff --git a/site/src/components/docs/demos/captions-button/html/tailwind/BasicUsage.ts b/site/src/components/docs/demos/captions-button/html/tailwind/BasicUsage.ts
new file mode 100644
index 00000000..dbbd8dcd
--- /dev/null
+++ b/site/src/components/docs/demos/captions-button/html/tailwind/BasicUsage.ts
@@ -0,0 +1,2 @@
+import '@videojs/html/video/player';
+import '@videojs/html/ui/captions-button';
diff --git a/site/src/components/docs/demos/captions-button/react/tailwind/BasicUsage.tsx b/site/src/components/docs/demos/captions-button/react/tailwind/BasicUsage.tsx
new file mode 100644
index 00000000..c954e308
--- /dev/null
+++ b/site/src/components/docs/demos/captions-button/react/tailwind/BasicUsage.tsx
@@ -0,0 +1,29 @@
+import { CaptionsButton, createPlayer } from '@videojs/react';
+import { Video, videoFeatures } from '@videojs/react/video';
+
+const Player = createPlayer({ features: videoFeatures });
+
+export default function BasicUsage() {
+ return (
+
+
+
+ (
+
+ )}
+ />
+
+
+ );
+}
diff --git a/site/src/components/docs/demos/controls/html/tailwind/BasicUsage.astro b/site/src/components/docs/demos/controls/html/tailwind/BasicUsage.astro
new file mode 100644
index 00000000..c515bacd
--- /dev/null
+++ b/site/src/components/docs/demos/controls/html/tailwind/BasicUsage.astro
@@ -0,0 +1,9 @@
+---
+import HtmlDemo from '@/components/docs/demos/HtmlDemo.astro';
+import html from './BasicUsage.html?raw';
+---
+
+
+
diff --git a/site/src/components/docs/demos/controls/html/tailwind/BasicUsage.html b/site/src/components/docs/demos/controls/html/tailwind/BasicUsage.html
new file mode 100644
index 00000000..cd78a96a
--- /dev/null
+++ b/site/src/components/docs/demos/controls/html/tailwind/BasicUsage.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+ Play
+ Pause
+
+
+
+
+
+
diff --git a/site/src/components/docs/demos/controls/html/tailwind/BasicUsage.ts b/site/src/components/docs/demos/controls/html/tailwind/BasicUsage.ts
new file mode 100644
index 00000000..f1eee5ec
--- /dev/null
+++ b/site/src/components/docs/demos/controls/html/tailwind/BasicUsage.ts
@@ -0,0 +1,4 @@
+import '@videojs/html/video/player';
+import '@videojs/html/ui/controls';
+import '@videojs/html/ui/play-button';
+import '@videojs/html/ui/time';
diff --git a/site/src/components/docs/demos/controls/react/tailwind/BasicUsage.tsx b/site/src/components/docs/demos/controls/react/tailwind/BasicUsage.tsx
new file mode 100644
index 00000000..9e9fcc26
--- /dev/null
+++ b/site/src/components/docs/demos/controls/react/tailwind/BasicUsage.tsx
@@ -0,0 +1,38 @@
+import { Controls, createPlayer, PlayButton, Time } from '@videojs/react';
+import { Video, videoFeatures } from '@videojs/react/video';
+
+const Player = createPlayer({ features: videoFeatures });
+
+export default function BasicUsage() {
+ return (
+
+
+
+
+
+
+ }
+ />
+
+
+
+
+
+
+ );
+}
diff --git a/site/src/components/docs/demos/playback-rate-button/html/tailwind/BasicUsage.astro b/site/src/components/docs/demos/playback-rate-button/html/tailwind/BasicUsage.astro
new file mode 100644
index 00000000..c515bacd
--- /dev/null
+++ b/site/src/components/docs/demos/playback-rate-button/html/tailwind/BasicUsage.astro
@@ -0,0 +1,9 @@
+---
+import HtmlDemo from '@/components/docs/demos/HtmlDemo.astro';
+import html from './BasicUsage.html?raw';
+---
+
+
+
diff --git a/site/src/components/docs/demos/playback-rate-button/html/tailwind/BasicUsage.html b/site/src/components/docs/demos/playback-rate-button/html/tailwind/BasicUsage.html
new file mode 100644
index 00000000..e5f217ca
--- /dev/null
+++ b/site/src/components/docs/demos/playback-rate-button/html/tailwind/BasicUsage.html
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/site/src/components/docs/demos/playback-rate-button/html/tailwind/BasicUsage.ts b/site/src/components/docs/demos/playback-rate-button/html/tailwind/BasicUsage.ts
new file mode 100644
index 00000000..6f30f8d6
--- /dev/null
+++ b/site/src/components/docs/demos/playback-rate-button/html/tailwind/BasicUsage.ts
@@ -0,0 +1,2 @@
+import '@videojs/html/video/player';
+import '@videojs/html/ui/playback-rate-button';
diff --git a/site/src/components/docs/demos/playback-rate-button/react/tailwind/BasicUsage.tsx b/site/src/components/docs/demos/playback-rate-button/react/tailwind/BasicUsage.tsx
new file mode 100644
index 00000000..8525f023
--- /dev/null
+++ b/site/src/components/docs/demos/playback-rate-button/react/tailwind/BasicUsage.tsx
@@ -0,0 +1,25 @@
+import { createPlayer, PlaybackRateButton } from '@videojs/react';
+import { Video, videoFeatures } from '@videojs/react/video';
+
+const Player = createPlayer({ features: videoFeatures });
+
+export default function BasicUsage() {
+ return (
+
+
+
+ }
+ />
+
+
+ );
+}
diff --git a/site/src/components/docs/demos/popover/html/tailwind/BasicUsage.astro b/site/src/components/docs/demos/popover/html/tailwind/BasicUsage.astro
new file mode 100644
index 00000000..c515bacd
--- /dev/null
+++ b/site/src/components/docs/demos/popover/html/tailwind/BasicUsage.astro
@@ -0,0 +1,9 @@
+---
+import HtmlDemo from '@/components/docs/demos/HtmlDemo.astro';
+import html from './BasicUsage.html?raw';
+---
+
+
+
diff --git a/site/src/components/docs/demos/popover/html/tailwind/BasicUsage.html b/site/src/components/docs/demos/popover/html/tailwind/BasicUsage.html
new file mode 100644
index 00000000..22d26768
--- /dev/null
+++ b/site/src/components/docs/demos/popover/html/tailwind/BasicUsage.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+ Popover content
+
+
+
+
+
diff --git a/site/src/components/docs/demos/popover/html/tailwind/BasicUsage.ts b/site/src/components/docs/demos/popover/html/tailwind/BasicUsage.ts
new file mode 100644
index 00000000..5f95baa6
--- /dev/null
+++ b/site/src/components/docs/demos/popover/html/tailwind/BasicUsage.ts
@@ -0,0 +1,2 @@
+import '@videojs/html/video/player';
+import '@videojs/html/ui/popover';
diff --git a/site/src/components/docs/demos/popover/react/tailwind/BasicUsage.tsx b/site/src/components/docs/demos/popover/react/tailwind/BasicUsage.tsx
new file mode 100644
index 00000000..8d5ae14a
--- /dev/null
+++ b/site/src/components/docs/demos/popover/react/tailwind/BasicUsage.tsx
@@ -0,0 +1,32 @@
+import { createPlayer, Popover } from '@videojs/react';
+import { Video, videoFeatures } from '@videojs/react/video';
+
+const Player = createPlayer({ features: videoFeatures });
+
+export default function BasicUsage() {
+ return (
+
+
+
+
+
+
+ Settings
+
+
+
+ Popover content
+
+
+
+
+
+ );
+}
diff --git a/site/src/components/docs/demos/poster/html/tailwind/BasicUsage.astro b/site/src/components/docs/demos/poster/html/tailwind/BasicUsage.astro
new file mode 100644
index 00000000..c515bacd
--- /dev/null
+++ b/site/src/components/docs/demos/poster/html/tailwind/BasicUsage.astro
@@ -0,0 +1,9 @@
+---
+import HtmlDemo from '@/components/docs/demos/HtmlDemo.astro';
+import html from './BasicUsage.html?raw';
+---
+
+
+
diff --git a/site/src/components/docs/demos/poster/html/tailwind/BasicUsage.html b/site/src/components/docs/demos/poster/html/tailwind/BasicUsage.html
new file mode 100644
index 00000000..c0d97b59
--- /dev/null
+++ b/site/src/components/docs/demos/poster/html/tailwind/BasicUsage.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+ Play
+ Pause
+
+
+
diff --git a/site/src/components/docs/demos/poster/html/tailwind/BasicUsage.ts b/site/src/components/docs/demos/poster/html/tailwind/BasicUsage.ts
new file mode 100644
index 00000000..72060f9f
--- /dev/null
+++ b/site/src/components/docs/demos/poster/html/tailwind/BasicUsage.ts
@@ -0,0 +1,3 @@
+import '@videojs/html/video/player';
+import '@videojs/html/ui/play-button';
+import '@videojs/html/ui/poster';
diff --git a/site/src/components/docs/demos/poster/react/tailwind/BasicUsage.tsx b/site/src/components/docs/demos/poster/react/tailwind/BasicUsage.tsx
new file mode 100644
index 00000000..2ed2f7bc
--- /dev/null
+++ b/site/src/components/docs/demos/poster/react/tailwind/BasicUsage.tsx
@@ -0,0 +1,28 @@
+import { createPlayer, PlayButton, Poster } from '@videojs/react';
+import { Video, videoFeatures } from '@videojs/react/video';
+
+const Player = createPlayer({ features: videoFeatures });
+
+export default function BasicUsage() {
+ return (
+
+
+
+
+
+
+ }
+ />
+
+
+ );
+}
diff --git a/site/src/content/docs/reference/airplay-button.mdx b/site/src/content/docs/reference/airplay-button.mdx
index 3e8bacf0..0ea33d37 100644
--- a/site/src/content/docs/reference/airplay-button.mdx
+++ b/site/src/content/docs/reference/airplay-button.mdx
@@ -15,12 +15,17 @@ import Demo from "@/components/docs/demos/Demo.astro";
import BasicUsageDemoReact from "@/components/docs/demos/airplay-button/react/css/BasicUsage";
import basicUsageReactTsx from "@/components/docs/demos/airplay-button/react/css/BasicUsage.tsx?raw";
import basicUsageReactCss from "@/components/docs/demos/airplay-button/react/css/BasicUsage.css?raw";
+import BasicUsageDemoReactTailwind from "@/components/docs/demos/airplay-button/react/tailwind/BasicUsage";
+import basicUsageReactTailwindTsx from "@/components/docs/demos/airplay-button/react/tailwind/BasicUsage.tsx?raw";
{/* HTML demos */}
import BasicUsageDemoHtml from "@/components/docs/demos/airplay-button/html/css/BasicUsage.astro";
import basicUsageHtml from "@/components/docs/demos/airplay-button/html/css/BasicUsage.html?raw";
import basicUsageHtmlCss from "@/components/docs/demos/airplay-button/html/css/BasicUsage.css?raw";
import basicUsageHtmlTs from "@/components/docs/demos/airplay-button/html/css/BasicUsage.ts?raw";
+import BasicUsageDemoHtmlTailwind from "@/components/docs/demos/airplay-button/html/tailwind/BasicUsage.astro";
+import basicUsageTailwindHtml from "@/components/docs/demos/airplay-button/html/tailwind/BasicUsage.html?raw";
+import basicUsageTailwindHtmlTs from "@/components/docs/demos/airplay-button/html/tailwind/BasicUsage.ts?raw";
## Anatomy
@@ -110,6 +115,13 @@ Renders a `