You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
**A modular, high-performance carousel block for WordPress, powered by the Interactivity API and Embla Carousel.**
7
7
@@ -16,6 +16,29 @@ Easily create dynamic, accessible, and customizable carousels for any content ty
16
16
-**Accessibility**: W3C-compliant roles, labels, and keyboard navigation.
17
17
-**RTL Support**: Built-in support for Right-to-Left languages.
18
18
19
+
## Requirements
20
+
21
+
| Requirement | Minimum | Recommended |
22
+
|-------------|---------|-------------|
23
+
| WordPress | 6.5+ | 6.6+ |
24
+
| PHP | 7.4+ | 8.2+ |
25
+
| Gutenberg | Not required | — |
26
+
27
+
> **Note:** The Interactivity API became stable in WordPress 6.5. This plugin works with WordPress core—no Gutenberg plugin required.
28
+
29
+
## Browser Support
30
+
31
+
Carousel Kit supports all modern browsers:
32
+
33
+
| Browser | Minimum Version |
34
+
|---------|-----------------|
35
+
| Chrome | 80+ |
36
+
| Firefox | 74+ |
37
+
| Safari | 14+ |
38
+
| Edge | 80+ |
39
+
40
+
> **Note:** Internet Explorer is not supported. The plugin requires ES2020+ features (optional chaining, nullish coalescing) and CSS custom properties.
41
+
19
42
## Documentation
20
43
21
44
-**[Installation](docs/INSTALLATION.md)**: How to install via ZIP or Composer.
@@ -35,14 +58,83 @@ The plugin provides a suite of blocks that work together:
*Carousel configuration options in the block sidebar.*
75
+
76
+
## FAQ
77
+
78
+
### Does it work with Full Site Editing (FSE)?
79
+
80
+
Yes! Carousel Kit is fully compatible with Full Site Editing. You can use the carousel block in templates, template parts, and anywhere blocks are supported.
81
+
82
+
### Can I nest other blocks inside slides?
83
+
84
+
Absolutely. Each slide is a container that accepts any WordPress block—images, paragraphs, groups, columns, and even other third-party blocks.
85
+
86
+
### Does it support the Query Loop block?
87
+
88
+
Yes. Simply add a Query Loop block inside the Carousel Viewport, and each post in the loop becomes a slide automatically. No special configuration needed.
89
+
90
+
### Is it accessible?
91
+
92
+
Yes. The carousel follows W3C accessibility guidelines with proper ARIA roles, labels, and full keyboard navigation support.
93
+
94
+
### Can I have multiple carousels on the same page?
95
+
96
+
Yes. Each carousel instance maintains its own independent state.
97
+
98
+
## Changelog
99
+
100
+
### 1.0.0 (2026-02-03)
101
+
102
+
**Features:**
103
+
- Initial release with compound block architecture
104
+
- Embla Carousel integration with Interactivity API
105
+
- Query Loop support for dynamic content
106
+
- Autoplay with configurable delay and interaction controls
107
+
- Vertical and horizontal axis support
108
+
- Slides to scroll option
109
+
- Example patterns: Hero, Logo Showcase, Testimonials
110
+
111
+
**Bug Fixes:**
112
+
- Fixed gap issue for carousel items
113
+
114
+
See [CHANGELOG.md](CHANGELOG.md) for full release history.
-[ ]**Progress bar indicator** — Visual autoplay progress
125
+
-[ ]**Breakpoint-specific settings** — Different slides per view at different screen sizes
126
+
-[ ]**Additional patterns** — More pre-built carousel patterns
127
+
128
+
Have a feature request? [Open an issue](https://github.com/rtCamp/carousel-kit/issues) on GitHub.
129
+
38
130
## Live Demo
39
131
40
-
[**🚀 Try the Interactive Demo in WordPress Playground**](https://playground.wordpress.net/?blueprint-url=https://raw.githubusercontent.com/rtCamp/core-carousel/main/blueprint.json)
132
+
[**🚀 Try the Interactive Demo in WordPress Playground**](https://playground.wordpress.net/?blueprint-url=https://raw.githubusercontent.com/rtCamp/carousel-kit/main/blueprint.json)
Copy file name to clipboardExpand all lines: docs/API.md
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,7 @@
3
3
This block uses the **WordPress Interactivity API** to manage state and logic. You can consume this state in your own custom blocks to build advanced features like progress bars, slide counters, or synchronized sliders.
4
4
5
5
## Store Namespace
6
-
`core-carousel/carousel`
6
+
`carousel-kit/carousel`
7
7
8
8
## Context (`CarouselContext`)
9
9
@@ -30,7 +30,7 @@ Create a progress bar that animates while the carousel is auto-playing.
30
30
**save.tsx**
31
31
```jsx
32
32
<div
33
-
data-wp-interactive="core-carousel/carousel"
33
+
data-wp-interactive="carousel-kit/carousel"
34
34
data-wp-bind--key="context.timerIterationId"
35
35
data-wp-bind--style="state.barDuration"
36
36
data-wp-class--is-playing="context.isPlaying"
@@ -40,7 +40,7 @@ Create a progress bar that animates while the carousel is auto-playing.
40
40
41
41
**view.ts**
42
42
```js
43
-
store('core-carousel/carousel', {
43
+
store('carousel-kit/carousel', {
44
44
state: {
45
45
getbarDuration() {
46
46
const { autoplay } =getContext();
@@ -64,7 +64,7 @@ Highlight slide content when active using the `callbacks.isSlideActive` helper.
@@ -78,8 +78,8 @@ Highlight slide content when active using the `callbacks.isSlideActive` helper.
78
78
79
79
### Editor Interactivity:"Find & Bind"
80
80
Gutenberg's `InnerBlocks` can isolate React Contexts, causing state sync issues between parent and deeply nested children in the editor. To guarantee reliable interactivity:
81
-
1. **Attach**: The Viewport component attaches the vanilla Embla instance directly to its DOM node using a Symbol key: `element[Symbol.for("core-carousel.carousel")] = embla`.
82
-
2. **Find**: Child components (Controls/Dots) attempt to find the API via Context first. If missing, they traverse the DOM up to the common wrapper (`.core-carousel`) and then search for the sibling `.embla` viewport.
81
+
1. **Attach**: The Viewport component attaches the vanilla Embla instance directly to its DOM node using a Symbol key: `element[Symbol.for("carousel-kit.carousel")] = embla`.
82
+
2. **Find**: Child components (Controls/Dots) attempt to find the API via Context first. If missing, they traverse the DOM up to the common wrapper (`.carousel-kit`) and then search for the sibling `.embla` viewport.
83
83
3. **Bind**: A retry mechanism (`setTimeout` + `useEffect`) ensures the Viewport has finished initializing before binding listeners.
0 commit comments