sliderpro-agentic-skills-etch 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,491 @@
1
+ ---
2
+ icon: books
3
+ ---
4
+
5
+ # AI Skills Reference: Lookup Companion
6
+
7
+ This is the **lookup-only** companion to `slider-pro-skills.md` (same folder). You do NOT need to
8
+ read this file in full at session start. Grep into the one section a task needs, following the
9
+ "When to consult the reference file" guidance in the main file.
10
+
11
+ > **Full prose reference (local, preferred):** the tables here are lookup summaries. For the
12
+ > descriptions, slot documentation and per-component examples they omit, read the `components/`
13
+ > folder next to this one (`../components/dwc-slider.md`, `dwc-slider-wrapper.md`,
14
+ > `dwc-slide.md`, `dwc-slider-progress.md`, `dwc-slider-play-pause.md`,
15
+ > `dwc-slider-pagination.md`, `dwc-slider-nav-button.md`). If that folder is not present, use the
16
+ > online docs instead.
17
+ >
18
+ > **Full reference (online):** <https://design-with-cracka.gitbook.io/etchsliderpro>
19
+
20
+ ***
21
+
22
+ ## 1. Prop reference
23
+
24
+ Every settable prop on all seven components. Generated from the Etch component export, so it
25
+ matches the components installed on the site. Do not hand-edit this section.
26
+
27
+ **Reading the tables**
28
+
29
+ * **Path** is what you set. `props.<group>.<key>`, always fully flattened.
30
+ * **Paths are unique within a component, not across them.** `props.class` exists on four of them
31
+ (Slide, Progress, Play-Pause, Pagination) and means something different on each. Always resolve
32
+ a path against the component you are setting it on. Similar-sounding settings usually differ by
33
+ group rather than colliding: Loop is `props.motion.loop` on the Slider and
34
+ `props.sliderlessSync.loop` on the Wrapper.
35
+ * **Attribute** is the `data-*` the prop writes onto the element. That attribute is what the
36
+ engine actually reads, so it is the ground truth when a prop and the rendered DOM disagree.
37
+ `style only` means the prop drives CSS or markup and writes no attribute.
38
+ * **Default** is the component's own default. **Never set a prop to its default value.**
39
+ * **Shown when** records the panel condition. It affects only whether Etch displays the field.
40
+ The value path is unaffected: it is `props.lightbox.staticLightbox`, never
41
+ `props.lightbox.ygku9jx.staticLightbox`.
42
+
43
+ <!-- GENERATED:PROPS start -->
44
+
45
+ ### DWC Slider Wrapper
46
+
47
+ | Prop | Path | Attribute | Default | Values / notes |
48
+ | --- | --- | --- | --- | --- |
49
+ | Background Color | `props.backgroundColor` | `style` | `var(--white, white)` | |
50
+ | Wrapper Height | `props.wrapperHeight` | `style` | `auto` | |
51
+ | Space Between Sliders | `props.spaceBetweenSliders` | `style` | | |
52
+ | Custom Class | `props.customClass` | `class` | `` | |
53
+ | Lazy Load Sliders | `props.lazyLoadSliders` | `data-lazy-init` | `false` | `true` / `false` |
54
+ | Lazy Preload Distance | `props.lazyPreloadDistance` | `data-lazy-preload` | `200` | Shown when `props.lazyLoadSliders` |
55
+ | Edge Fade | `props.edgeFade` | `data-edge-fade` | `false` | `true` / `false` |
56
+ | Fade Distance | `props.fadeDistance` | `style` | `15%` | Set overall fade distance from the edge. Shown when `props.edgeFade` |
57
+ | Fade Softness | `props.fadeSoftness` | `style` | `0.8` | Softness scale: 1 = softest fade, 0 = sharp edge. Shown when `props.edgeFade` |
58
+ | Fade Opacity | `props.fadeOpacity` | `style` | `0%` | Shown when `props.edgeFade` |
59
+ | Pause Sliders on Hover | `props.pauseSlidersOnHover` | `data-group-pause-on-hover` | `false` | `true` / `false` |
60
+ | Custom Element | `props.sliderlessSync.customElement` | `data-sync-custom-el` | | |
61
+ | Custom Element Nav | `props.sliderlessSync.customElementNav` | `data-sync-custom-el-nav` | `false` | `true` / `false`. Shown when `props.sliderlessSync.customElement.includes(".") \|\| props.sliderlessSync.customElement.includes("[")` |
62
+ | Loop | `props.sliderlessSync.loop` | `data-loop` | `false` | `true` / `false`. Shown when `props.sliderlessSync.customElement.includes(".") \|\| props.sliderlessSync.customElement.includes("[")` |
63
+ | Leading Zeros | `props.sliderlessSync.leadingZeros` | `data-leading-zeros` | `false` | `true` / `false`. Shown when `props.sliderlessSync.customElement.includes(".") \|\| props.sliderlessSync.customElement.includes("[")` |
64
+ | Title Delay | `props.sliderlessSync.titleDelay` | `data-slide-title-delay` | `200ms` | Shown when `props.sliderlessSync.customElement.includes(".") \|\| props.sliderlessSync.customElement.includes("[")` |
65
+ | Arrow Keys Navigation | `props.sliderlessSync.arrowKeysNavigation` | `data-arrow-keys` | `true` | `true` / `false`. Shown when `props.sliderlessSync.customElement.includes(".") \|\| props.sliderlessSync.customElement.includes("[")` |
66
+ | Autoplay | `props.sliderlessSync.autoplay` | `data-autoplay` | `true` | `true` / `false`. Shown when `props.sliderlessSync.customElement.includes(".") \|\| props.sliderlessSync.customElement.includes("[")` |
67
+ | Autoplay Interval | `props.sliderlessSync.autoplayInterval` | `data-interval` | `4000` | Shown when `props.sliderlessSync.autoplay` |
68
+ | Pause on Hover | `props.sliderlessSync.pauseOnHover` | `data-pause-on-hover` | `false` | `true` / `false`. Shown when `props.sliderlessSync.autoplay` |
69
+
70
+ ### DWC Slider
71
+
72
+ | Prop | Path | Attribute | Default | Values / notes |
73
+ | --- | --- | --- | --- | --- |
74
+ | Slider Class | `props.sliderClass` | `class` | `zyxobeo` | |
75
+ | Slider Role | `props.sliderSetup.sliderRole` | `data-slider-role` | `main` | `Main Slider : main` / `Thumbnail : thumbnails` |
76
+ | Main/Thumbnail Sync Group | `props.sliderSetup.mainThumbnailSyncGroup` | `data-sync-group` | | |
77
+ | Transition Type | `props.sliderSetup.transitionType` | `data-type` | `Slide` | `Slide` / `Fade` / `Loop` |
78
+ | Sllde Direction | `props.sliderSetup.slldeDirection` | `data-direction` | `ltr` | Left to Right: ltr \| Right to Left: rtl \| Vertical: ttb \| Supports responsive shorthand e.g. ttb sm:ltr |
79
+ | Sync Custom Element | `props.sliderSetup.syncCustomElement` | `data-sync-custom-el` | | Syncs slider with other elements on your page. Enter a CSS selector for your own elements, e.g. .hero-title. As the slider moves, the plugin adds is-active to the matching element, plus is-prev / is-next to its neighbours, so you can style them in CSS (e.g. .hero-title.is-active). To extend this feature, use the JS API ready() helper. See docs. |
80
+ | Sync Custom Element Nav | `props.sliderSetup.syncCustomElementNav` | `data-sync-custom-el-nav` | `false` | `true` / `false`. Shown when `props.sliderSetup.syncCustomElement.includes(".") \|\| props.sliderSetup.syncCustomElement.includes("[")` |
81
+ | Custom Options | `props.sliderSetup.customOptions` | `data-custom-options` | | Advanced: add extra Splide settings that don't have their own control here. Type them as name: value pairs separated by commas, e.g. wheel: true, waitForTransition: false, drag: 'free', speed: 800. These override the settings here. For structured settings (like per-breakpoint values), use the setOptions() JavaScript API instead. See docs. |
82
+ | Slide Title Delay | `props.sliderSetup.slideTitleDelay` | `data-slide-title-delay` | `200ms` | How long a Next/Prev nav button waits before swapping to the adjacent slide's title, so the button can resize first. Requires a [data-slide-title] element in the button. 0 = instant. See docs. |
83
+ | Slides Per Page | `props.layout.slidesPerPage` | `data-per-page` | `1` | Set for Base breakpoint and use breakpoint tokens for other breakpoints e.g. 3 md:2 sm:1 |
84
+ | Slides per Move | `props.layout.slidesPerMove` | `data-per-move` | `1` | |
85
+ | Gap between Slides | `props.layout.gapBetweenSlides` | `data-gap` | `1rem` | Set for Base breakpoint and other breakpoints e.g. 1rem md:0.5rem sm:0.25rem. You can also use a single clamp value. |
86
+ | Slider Edge Offset | `props.layout.sliderEdgeOffset` | `data-padding` | | Set splide padding for base and other breakpoints E.g. 8% lg:6% md:4% sm:2%. |
87
+ | -- Left Offset | `props.layout.leftOffset` | `data-padding-left` | | Set splide padding for base and other breakpoints E.g. 8% lg:6% md:4% sm:2%. |
88
+ | -- Right Offset | `props.layout.rightOffset` | `data-padding-right` | | Set splide padding for base and other breakpoints E.g. 8% lg:6% md:4% sm:2%. |
89
+ | Layout Mode | `props.layout.layoutMode` | `data-layout-mode` | | Values: slider or static. Example: "slider md:static" = slider at desktop, static at/below md (e.g. for a mobile stacked-cards) |
90
+ | Grid Columns | `props.layout.gridColumns` | `data-grid-columns` | | Grid columns when slider is in static mode.. Shown when `props.layout.layoutMode.includes("static")` |
91
+ | Padding Inline | `props.layout.paddingInline` | `style` | `0px` | Applies only on static layout. Shown when `props.layout.layoutMode.includes("static")` |
92
+ | Padding Block | `props.layout.paddingBlock` | `style` | `0px` | |
93
+ | Slider Width | `props.dimensions.sliderWidth` | `data-width` | | |
94
+ | Slider Height | `props.dimensions.sliderHeight` | `data-height` | `auto` | Set the base height, and use breakpoint tokens for other breakpoints, E.g. 700px lg:600px md:450px sm:300px. Property: --slide-height-active |
95
+ | Aspect Ratio | `props.dimensions.aspectRatio` | `data-height-ratio` | | Use `1.0` for a square (1:1), `0.75` for classic (4:3), `0.5625` for widescreen (16:9), `0.5` for panorama (2:1), or `0.4225` for ultrawide (21:9). Leave it empty to size the slider with Slider Height instead. It takes the responsive shorthand too, e.g. `0.5 md:0.5625 sm:0.75`.. Shown when `props.dimensions.sliderHeight === "auto"` |
96
+ | Slide Auto Width | `props.dimensions.slideAutoWidth` | `data-slide-auto-width` | `false` | `true` / `false` |
97
+ | Loop | `props.motion.loop` | `data-loop` | `true` | `true` / `false` |
98
+ | Rewind | `props.motion.rewind` | `data-rewind` | `false` | `true` / `false` |
99
+ | Enable Drag | `props.motion.enableDrag` | `data-drag` | `true` | `true` / `false` |
100
+ | Speed | `props.motion.speed` | `data-speed` | `400` | |
101
+ | Focus | `props.motion.focus` | `data-focus` | `0` | Determines which slide should be active if the carousel has multiple slides in a page. E.g. 0, 1, center |
102
+ | Update on Move | `props.motion.updateOnMove` | `data-update-on-move` | `true` | `true` / `false` |
103
+ | Auto Play | `props.autoplay.autoPlay` | `data-autoplay` | `true` | `true` / `false` |
104
+ | Interval | `props.autoplay.interval` | `data-interval` | `4000` | |
105
+ | Pause On Hover | `props.autoplay.pauseOnHover` | `data-pause-on-hover` | `false` | `true` / `false` |
106
+ | Play/Pause Button | `props.autoplay.playPauseButton` | `data-autoplay-toggle` | `true` | `true` / `false` |
107
+ | Bar Progress | `props.progress.barProgress` | `data-bar-progress` | `False` | `False` / `Slides` / `Timer` |
108
+ | Circular Progress | `props.progress.circularProgress` | `data-circular-progress` | `False` | `False` / `Slides` / `Timer` |
109
+ | Counter Progress | `props.progress.counterProgress` | `data-counter` | `false` | `true` / `false` |
110
+ | Counter Leading Zeros | `props.progress.counterLeadingZeros` | `data-leading-zeros` | `false` | `true` / `false`. Shown when `props.progress.circularProgress !== "False" \|\| props.progress.counterProgress` |
111
+ | Infinite Scroll | `props.autoscroll.infiniteScroll` | `data-auto-scroll` | `false` | `true` / `false` |
112
+ | Scroll Speed | `props.autoscroll.scrollSpeed` | `data-auto-scroll-speed` | `4` | Shown when `props.autoscroll.infiniteScroll` |
113
+ | Pause on Hover | `props.autoscroll.pauseOnHover` | `data-auto-scroll-pause-on-hover` | `true` | `true` / `false`. Shown when `props.autoscroll.infiniteScroll` |
114
+ | Pause on Focus | `props.autoscroll.pauseOnFocus` | `data-auto-scroll-pause-on-focus` | `true` | `true` / `false`. Shown when `props.autoscroll.infiniteScroll` |
115
+ | Navigation Arrows | `props.navigation.navigationArrows` | `data-arrows` | `true` | `true` / `false` |
116
+ | Pagination Dots | `props.navigation.paginationDots` | `data-pagination` | `true` | `true` / `false` |
117
+ | Enable | `props.overlay.enable` | `data-overlay` | `false` | `true` / `false` |
118
+ | Overlay Background | `props.overlay.overlayBackground` | `style` | `var(--slider-overlay-bg-inactive)` | Shown when `props.overlay.enable` |
119
+ | Overaly Background Inactive | `props.overlay.overalyBackgroundInactive` | `style` | `color-mix(in oklch, black 55%, transparent)` | Shown when `props.overlay.enable` |
120
+ | Edge Fade | `props.overlay.edgeFade` | `data-edge-fade` | `false` | `true` / `false` |
121
+ | Fade Distance | `props.overlay.fadeDistance` | `style` | `15%` | Set overall fade distance from the edge. Shown when `props.overlay.edgeFade` |
122
+ | Fade Softness | `props.overlay.fadeSoftness` | `style` | `0.8` | Softness scale: 1 = softest fade, 0 = sharp edge. Shown when `props.overlay.edgeFade` |
123
+ | Fade Opacity | `props.overlay.fadeOpacity` | `style` | `0%` | `0%` fades it fully out (default), up to `100%` for no fade at the edge.. Shown when `props.overlay.edgeFade` |
124
+ | Overflow | `props.slides.overflow` | `data-overflow` | `false` | `true` / `false` |
125
+ | Opacity | `props.slides.opacity` | `style` | `1` | |
126
+ | Opacity-Active | `props.slides.opacityActive` | `style` | `1` | |
127
+ | Scale | `props.slides.scale` | `style` | `1` | |
128
+ | Scale-Active | `props.slides.scaleActive` | `style` | `1` | |
129
+ | TranslateY | `props.slides.translateY` | `style` | `0` | |
130
+ | TranslateY-Active | `props.slides.translateYActive` | `style` | `0` | |
131
+ | TranslateX | `props.slides.translateX` | `style` | `0` | |
132
+ | Flip Next TranslateX | `props.slides.flipNextTranslateX` | `data-flip-translate-x` | `false` | `true` / `false`. Shown when `props.slides.translateX !== "0"` |
133
+ | TranslateX-Active | `props.slides.translateXActive` | `style` | `0` | |
134
+ | RotateY | `props.slides.rotateY` | `style` | `0deg` | |
135
+ | Flip Next RotateY | `props.slides.flipNextRotateY` | `data-flip-rotate-y` | `false` | `true` / `false`. Shown when `props.slides.rotateY !== "0deg"` |
136
+ | RotateY-Active | `props.slides.rotateYActive` | `style` | `0deg` | |
137
+ | RotateX | `props.slides.rotateX` | `style` | `0deg` | |
138
+ | RotateX-Active | `props.slides.rotateXActive` | `style` | `0deg` | |
139
+ | Transform Origin | `props.slides.transformOrigin` | `style` | `center center` | |
140
+ | Perspective | `props.slides.perspective` | `style` | `initial` | |
141
+ | Border | `props.slides.border` | `style` | `none` | |
142
+ | Border-Active | `props.slides.borderActive` | `style` | `none` | |
143
+ | Transition | `props.slides.transition` | `style` | `0.4s` | |
144
+ | Transition-Active | `props.slides.transitionActive` | `style` | `0.4s` | |
145
+ | Border Radius | `props.slides.borderRadius` | `style` | | |
146
+ | Height-Inactive | `props.slides.heightInactive` | `style` | `var(--slide-height-active)` | |
147
+ | Lightbox | `props.lightbox.lightbox` | `data-lightbox` | `False` | `False` / `Images` / `Slides` |
148
+ | Lightbox Arrows | `props.lightbox.lightboxArrows` | `data-lightbox-arrows` | `true` | `true` / `false`. Shown when `props.lightbox.lightbox !== "False"` |
149
+ | Lightbox Counter | `props.lightbox.lightboxCounter` | `data-lightbox-counter` | `true` | `true` / `false`. Shown when `props.lightbox.lightbox !== "False"` |
150
+ | Lightbox Transition | `props.lightbox.lightboxTransition` | `data-lightbox-type` | `Rewind` | `Rewind` / `Loop` / `Slide` / `Fade`. Shown when `props.lightbox.lightbox !== "False"` |
151
+ | Static Lightbox | `props.lightbox.staticLightbox` | `data-static-lightbox` | `true` | `true` / `false`. Shown when `props.lightbox.lightbox !== "False"` |
152
+ | Lazy Load Slider | `props.performance.lazyLoadSlider` | `data-lazy-init` | `false` | `true` / `false` |
153
+ | Lazy Preload Distance | `props.performance.lazyPreloadDistance` | `data-lazy-preload` | `200` | Shown when `props.performance.lazyLoadSlider` |
154
+ | Thumbnail slide width | `props.builderPreview.thumbnailSlideWidth` | `style` | `350px` | Applies to thumbnails inside a Slider Wrapper |
155
+ | Outline | `props.builderPreview.outline` | `style` | `dashed 1px color-mix(in oklch, aqua 50%,transparent)` | |
156
+ | Laptop (lg) | `props.breakpoints.laptopLg` | `data-breakpoint-lg` | | Default: 1120px |
157
+ | Tablet (md) | `props.breakpoints.tabletMd` | `data-breakpoint-md` | | Default: 1024px |
158
+ | Phone (sm) | `props.breakpoints.phoneSm` | `data-breakpoint-sm` | | Default: 640px |
159
+ | Aria Label | `props.ariaLabel` | `aria-label` | | |
160
+ | data-slider-id | `props.dataSliderId` | `data-slider-id` | | |
161
+
162
+ ### DWC Slide
163
+
164
+ | Prop | Path | Attribute | Default | Values / notes |
165
+ | --- | --- | --- | --- | --- |
166
+ | Class | `props.class` | `class` | `` | |
167
+ | Slide Title | `props.slideTitle` | `data-slide-title` | | Add a slide title that will show on the custom next/prev buttons. Falls back to [data-slide-title] text, then to first heading in the slide. Note: a text with attribute [data-slide-title] must be added to the custom next/prev buttons to activate this feature. |
168
+
169
+ ### DWC Slider Progress
170
+
171
+ | Prop | Path | Attribute | Default | Values / notes |
172
+ | --- | --- | --- | --- | --- |
173
+ | Progress type | `props.progressType` | `data-progress-type` | `circular` | `Circular : circular` / `Bar : bar` / `Counter : counter` |
174
+ | -- Circular Size (px) | `props.circularSizePx` | `data-circular-size` | `52` | Must be more than twice the Circular Radius.. Shown when `props.progressType === "circular"` |
175
+ | -- Circular radius (px) | `props.circularRadiusPx` | `data-circular-radius` | `25` | Must be less than half the Circular Size. Shown when `props.progressType === "circular"` |
176
+ | -- Circular Stroke (px) | `props.circularStrokePx` | `data-circular-stroke` | `3` | Shown when `props.progressType === "circular"` |
177
+ | -- Circular Counter | `props.circularCounter` | `data-circular-counter` | `true` | `true` / `false`. Shown when `props.progressType === "circular"` |
178
+ | --- Counter Font Size (rem) | `props.counterFontSizeRem` | `data-circular-font` | `0.6` | Shown when `props.circularCounter === true` |
179
+ | Progress Mode | `props.progressMode` | `data-progress-mode` | `slides` | `Slides : slides` / `Timer : timer`. Shown when `props.progressType !== "counter"` |
180
+ | Visibility | `props.style.counterText.visibility` | style only | `Default` | `Default` / `Hide Total : hide-total` / `Hide Current : hide-current`. Shown when `props.progressType === "counter" \|\| (props.progressType === "circular" && props.circularCounter)` |
181
+ | Total Color | `props.style.counterText.totalColor` | `style` | `#8888a0` | Shown when `props.progressType === "counter" \|\| (props.progressType === "circular" && props.circularCounter)` |
182
+ | Current Color | `props.style.counterText.currentColor` | `style` | `var(--primary, #ff4d6a)` | Shown when `props.progressType === "counter" \|\| (props.progressType === "circular" && props.circularCounter)` |
183
+ | Total Font Size | `props.style.counterText.totalFontSize` | `style` | `0.8rem` | Shown when `props.progressType === "counter" \|\| (props.progressType === "circular" && props.circularCounter)` |
184
+ | Current Font Size | `props.style.counterText.currentFontSize` | `style` | `0.8rem` | Shown when `props.progressType === "counter" \|\| (props.progressType === "circular" && props.circularCounter)` |
185
+ | Separator Color | `props.style.counterText.separatorColor` | `style` | `var(--progress-clr-total)` | Shown when `props.progressType === "counter" \|\| (props.progressType === "circular" && props.circularCounter)` |
186
+ | Separator Size | `props.style.counterText.separatorSize` | `style` | `0.6rem` | Shown when `props.progressType === "counter" \|\| (props.progressType === "circular" && props.circularCounter)` |
187
+ | Separator Gap | `props.style.counterText.separatorGap` | `style` | `-0.08em` | Shown when `props.progressType === "counter" \|\| (props.progressType === "circular" && props.circularCounter)` |
188
+ | Padding | `props.style.padding` | `style` | ` 4px 12px` | Shown when `props.progressType === "counter" \|\| (props.progressType === "circular" && props.circularCounter)` |
189
+ | Background Blur | `props.style.backgroundBlur` | `style` | `8px` | Shown when `props.progressType === "counter" \|\| (props.progressType === "circular" && props.circularCounter)` |
190
+ | Progress Fill Color | `props.style.progressFillColor` | `style` | `#ff4d6a` | Shown when `props.progressType === "bar" \|\| props.progressType === "circular"` |
191
+ | Progress Fill Color 2 | `props.style.progressFillColor2` | `style` | `#ff8fa3` | Shown when `props.progressType === "bar"` |
192
+ | Progress Track Color | `props.style.progressTrackColor` | `style` | `rgba(255, 255, 255, 0.1)` | Shown when `props.progressType === "bar" \|\| props.progressType === "circular"` |
193
+ | Background Color | `props.style.backgroundColor` | `style` | `rgba(0, 0, 0, 0.4)` | Shown when `props.progressType === "counter"` |
194
+ | Border Radius | `props.style.borderRadius` | `style` | `20px` | Shown when `props.progressType === "counter"` |
195
+ | Border | `props.style.border` | `style` | `1px solid rgba(255, 255, 255, 0.08)` | Shown when `props.progressType === "counter"` |
196
+ | Class | `props.class` | `class` | `` | |
197
+
198
+ ### DWC Slider Play-Pause
199
+
200
+ | Prop | Path | Attribute | Default | Values / notes |
201
+ | --- | --- | --- | --- | --- |
202
+ | Size | `props.size` | `style` | `40px` | |
203
+ | Border Radius | `props.borderRadius` | `style` | `50vw` | |
204
+ | Border | `props.border` | `style` | `1px solid rgba(255, 255, 255, 0.1)` | |
205
+ | Color | `props.color` | `style` | `#fff` | |
206
+ | Hover/Active Border Color | `props.hoverActiveBorderColor` | `style` | `var(--primary, #ff4d6a)` | |
207
+ | Background | `props.background` | `style` | `rgba(0, 0, 0, 0.4)` | |
208
+ | Hover/Active Background | `props.hoverActiveBackground` | `style` | `color-mix(in oklch, var(--primary, #ff4d6a) 20%, transparent)` | |
209
+ | Background Blur | `props.backgroundBlur` | `style` | `8px` | |
210
+ | Class | `props.class` | `class` | `` | |
211
+
212
+ ### DWC Slider Pagination
213
+
214
+ | Prop | Path | Attribute | Default | Values / notes |
215
+ | --- | --- | --- | --- | --- |
216
+ | Custom Pagination Mode | `props.customPaginationMode` | `data-custom-pagination` | `Default` | `Default` / `Template` |
217
+ | Background Color | `props.wrapper.backgroundColor` | `style` | `rgba(0 0 0 / 40%)` | Shown when `props.customPaginationMode === "Default"` |
218
+ | Filter Blur | `props.wrapper.filterBlur` | `style` | `5px` | Shown when `props.customPaginationMode === "Default"` |
219
+ | Padding | `props.wrapper.padding` | `style` | `0.5em 1em` | Shown when `props.customPaginationMode === "Default"` |
220
+ | Border Radius | `props.wrapper.borderRadius` | `style` | | Shown when `props.customPaginationMode === "Default"` |
221
+ | Size | `props.dot.size` | `style` | `calc(var(--font-size) * 2)` | Shown when `props.customPaginationMode === "Default"` |
222
+ | Background | `props.dot.background` | `style` | ` color-mix(in oklch, white 20%, transparent)` | Shown when `props.customPaginationMode === "Default"` |
223
+ | Active Background | `props.dot.activeBackground` | `style` | `#ff4d6a` | Shown when `props.customPaginationMode === "Default"` |
224
+ | Border Radius | `props.dot.borderRadius` | `style` | `50%` | Shown when `props.customPaginationMode === "Default"` |
225
+ | Font Size | `props.dot.fontSize` | `style` | `1rem` | Shown when `props.customPaginationMode === "Default"` |
226
+ | Text Color | `props.dot.textColor` | `style` | | Shown when `props.customPaginationMode === "Default"` |
227
+ | Active Text Color | `props.dot.activeTextColor` | `style` | | Shown when `props.customPaginationMode === "Default"` |
228
+ | Position | `props.layout.position` | `style` | `Relative` | `Relative` / `Absolute` / `Static` / `Fixed` |
229
+ | Z-index | `props.layout.zIndex` | `style` | `initial` | |
230
+ | Direction | `props.layout.direction` | `style` | `Row` | `Row` / `Column` |
231
+ | Gap | `props.layout.gap` | `style` | `1rem` | |
232
+ | Class | `props.class` | `class` | `` | |
233
+
234
+ ### DWC Slider Nav Button
235
+
236
+ | Prop | Path | Attribute | Default | Values / notes |
237
+ | --- | --- | --- | --- | --- |
238
+ | Navigation Type | `props.navigationType` | `data-go-to` | `next` | `Next Slide : next` / `Previous Slide : prev` / `First Slide : first` / `Last Slide : last` / `Go to Slide : custom` |
239
+ | Custom Slide | `props.customSlide` | `data-go-to` | `1` | Shown when `props.navigationType === "custom"` |
240
+ | Use Custom Arrow | `props.useCustomArrow` | style only | `false` | `true` / `false`. Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
241
+ | Custom SVG | `props.customSvg` | style only | | Paste SVG here. NOTE: To use custom SVG, enable 'Allow "unsafe" HTML' in Etch Settings. Shown when `props.useCustomArrow` |
242
+ | Background | `props.styles.background` | `style` | `rgba(255, 255, 255, 0.06)` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
243
+ | Hover Background | `props.styles.hoverBackground` | `style` | `color-mix(in oklch, var(--primary, #ff4d6a) 20%, transparent)` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
244
+ | Background Blur | `props.styles.backgroundBlur` | `style` | `10px` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
245
+ | Color | `props.styles.color` | `style` | `color-mix(in oklch, white 50%, transparent)` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
246
+ | Hover Color | `props.styles.hoverColor` | `style` | `#fff` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
247
+ | Icon Size | `props.styles.iconSize` | `style` | `1.125rem` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
248
+ | Opacity | `props.styles.opacity` | `style` | `1` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
249
+ | Hover Opacity | `props.styles.hoverOpacity` | `style` | `1` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
250
+ | Border | `props.styles.border` | `style` | `1px solid rgba(255, 255, 255, 0.1)` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
251
+ | Hover Border Color | `props.styles.hoverBorderColor` | `style` | `var(--primary, #ff4d6a)` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
252
+ | Border Radius | `props.styles.borderRadius` | `style` | `50%` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
253
+ | Min Width | `props.styles.minWidth` | `style` | `2.75rem` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
254
+ | Min Height | `props.styles.minHeight` | style only | `var(--arrow-width)` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
255
+ | Padding | `props.styles.padding` | `style` | `0px` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
256
+ | Aspect Ratio | `props.styles.aspectRatio` | `style` | `1` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
257
+ | Transition | `props.styles.transition` | `style` | `0.3s cubic-bezier(0.4, 0, 0.2, 1)` | Shown when `props.navigationType === "next" \|\| props.navigationType === "prev"` |
258
+ | Button Class | `props.buttonClass` | `class` | `` | Add a class to style your navigation button |
259
+ | Button Wrapper Class | `props.buttonWrapperClass` | `class` | `` | Outer button wrapper, useful when applying positioning styles e.g. order |
260
+
261
+ ### Attributes with no prop behind them
262
+
263
+ The engine reads these, but no component prop writes them, and `etch.blocks.setAttribute` only
264
+ accepts keys registered on the component. Use this table to recognise them when reading a page.
265
+
266
+ | Attribute | Notes |
267
+ | --- | --- |
268
+ | `data-auto-height` | Hardcoded to an empty value on the Slider element and not documented. Inert: treat it as unavailable. |
269
+ | `data-autoplay-progress` | Read by the engine but not declared by the component. Use the Progress component, or the Slider's own Bar/Circular Progress props. |
270
+ | `data-fixed-height` | Hardcoded to an empty value on the Slider element and not documented. Inert: treat it as unavailable. |
271
+ | `data-sc-template` | Marks which child of a custom pagination is the template to clone. The engine sets it on the first child when absent. |
272
+
273
+ <!-- GENERATED:PROPS end -->
274
+
275
+ ***
276
+
277
+ ## 2. CSS variables
278
+
279
+ Arrows, dots, pagination, progress, play/pause and the lightbox are styled with CSS custom
280
+ properties, not props. The template class is **`.slider-navigation-vars`**, holding 94 variables.
281
+
282
+ **Per-slider styling.** Each Slider's **Slider Class** prop (`props.sliderClass`) names the class
283
+ its variables are read from, so two sliders on one page style independently. The plugin renames
284
+ the auto-generated class on save, so never style directly on `.slider-navigation-vars`: add your
285
+ own class (e.g. `.my-slider`) and style that. Classes you add yourself are never renamed.
286
+
287
+ ### Arrows
288
+
289
+ `--arrow-bg`, `--arrow-clr`, `--arrow-radius`, `--arrow-width`, `--arrow-height`,
290
+ `--arrow-padding`, `--arrow-aspect-ratio`, `--arrow-icon-size`, `--arrow-bg-blur`,
291
+ `--arrow-border`, `--arrow-opacity`, `--arrow-transition`
292
+
293
+ Hover: `--arrow-hover-bg`, `--arrow-hover-clr`, `--arrow-hover-opacity`, `--arrow-hover-border-clr`
294
+
295
+ Position, per side: `--prev-arrow-top/-bottom/-left/-right/-transform` and
296
+ `--next-arrow-top/-bottom/-left/-right/-transform`
297
+
298
+ ### Pagination dots
299
+
300
+ `--dot-size`, `--dot-radius`, `--dot-clr`, `--dot-transition`, `--dot-hover-clr`,
301
+ `--dot-clr-active`, `--dot-transform-active`
302
+
303
+ Wrapper: `--pagination-position`, `--pagination-padding`, `--pagination-bg`,
304
+ `--pagination-bg-blur`, `--pagination-radius`, `--pagination-gap`, and
305
+ `--pagination-top/-bottom/-left/-right/-transform`
306
+
307
+ ### Play / pause
308
+
309
+ `--play-pause-size`, `--play-pause-radius`, `--play-pause-border`, `--play-pause-clr`,
310
+ `--play-pause-bg`, `--play-pause-bg-blur`, `--play-pause-hover-bg`,
311
+ `--play-pause-hover-border-clr`, `--play-pause-top/-bottom/-left/-right`, `--play-pause-z-index`
312
+
313
+ ### Progress (bar, circular, counter)
314
+
315
+ `--progress-fill-clr`, `--progress-fill-clr-2`, `--progress-bg`, `--progress-bg-blur`,
316
+ `--progress-border-radius`, `--progress-border`, `--progress-padding`, `--progress-track-clr`,
317
+ `--progress-separator-clr`, `--progress-separator-gap`, `--progress-separator-size`,
318
+ `--progress-clr-current`, `--progress-font-size-current`, `--progress-clr-total`,
319
+ `--progress-font-size-total`, `--progress-top/-bottom/-left/-right`, `--progress-z-index`
320
+
321
+ ### Lightbox overlay
322
+
323
+ Themeable **per slider, from the Slider Class**, the same place arrows and dots are styled. Media
324
+ queries inside that class work: the overlay reads the value for the current viewport.
325
+
326
+ `--lightbox-bg`, `--lightbox-z`, `--lightbox-close-size`, `--lightbox-padding`,
327
+ `--lightbox-img-height`, `--lightbox-slide-height`, `--lightbox-arrow-bg`,
328
+ `--lightbox-arrow-hover-bg`, `--lightbox-clr`
329
+
330
+ ### Card deck variables (Sync Without Slider stacks)
331
+
332
+ Not part of `.slider-navigation-vars`. These live on the stack element of a card-deck build and
333
+ are the knobs for its 3-D geometry. See `https://design-with-cracka.gitbook.io/etchsliderpro/card-stack-templates` for the full treatment.
334
+
335
+ | Variable | Meaning |
336
+ | --- | --- |
337
+ | `--dur` | how long one card change takes |
338
+ | `--ease` | easing curve |
339
+ | `--lag` | how far the sideways move trails the lift. This is what reads as a shuffle rather than a slide |
340
+ | `--spread` | sideways offset of the prev/next cards |
341
+ | `--tilt` | their rotation |
342
+ | `--depth-near` | how far back prev/next sit on the Z axis |
343
+ | `--depth-far` | where every other card waits, invisible |
344
+
345
+ **How many cards a deck needs to loop.** Three are always on show, the front card and the two
346
+ beside it. To loop, the deck also needs a hidden slot at each end for the wrapping card to pass
347
+ through unseen. Three visible plus two hidden means **five is the minimum for Loop to work at
348
+ all**, and each extra row fanned out behind costs two more cards:
349
+
350
+ | Rows behind the front card | Cards needed to loop |
351
+ | --- | --- |
352
+ | 1 (just the two side cards) | 5 |
353
+ | 2 | 7 |
354
+ | 3 (the full fan) | 9 |
355
+
356
+ So five cards loops but only ever shows the three-card fan. With fewer than five, turn Loop off
357
+ and the deck dead-ends at the first and last card. A queue that throws cards away (the Fall
358
+ pattern) never loops, so it has no minimum: two cards is fine.
359
+
360
+ The deck script exposes `MAX_TIERS` (the deepest ring the CSS defines) and `NAV_RINGS` (how many
361
+ rings stay clickable). `MIN_LOOP` is the safety rule behind the table above: leave it alone.
362
+
363
+ ***
364
+
365
+ ## 3. Sync Custom Element and Sync Without Slider
366
+
367
+ The feature behind every premade template. A slider (or a wrapper with no slider) moves three
368
+ classes across elements you nominate:
369
+
370
+ | Class | On |
371
+ | --- | --- |
372
+ | `is-active` | the element for the current slide |
373
+ | `is-prev` | the one before it |
374
+ | `is-next` | the one after it |
375
+
376
+ Those three are the entire contract. **You write all the CSS**; the plugin only moves the classes.
377
+
378
+ ### With a slider
379
+
380
+ Set `props.sliderSetup.syncCustomElement` (`data-sync-custom-el`) on the **Slider** to a CSS
381
+ selector for your elements.
382
+
383
+ * **Multiple sets:** comma-separate them, e.g. `.headings, .thumb-strip`. Each set is tracked
384
+ independently, so a 3-item set and a 2-item set each wrap on their own count.
385
+ * Commas **inside** a selector are safe: `:is(.a, .b)`, `:not(.x, .y)`, `[data-role="a,b"]` are
386
+ left intact.
387
+ * Elements can live anywhere on the page and do not have to be inside the slider.
388
+ * They do not have to match the slide count.
389
+
390
+ ### Without a slider
391
+
392
+ Set `props.sliderlessSync.customElement` (`data-sync-custom-el`) on the **Wrapper**, and put no
393
+ `.splide` inside it. That combination alone switches the wrapper into Sync Without Slider. Its
394
+ own group then supplies Loop, Arrow Keys, Auto Play, Interval and Pause on Hover.
395
+
396
+ ### Element nav (clickable synced elements)
397
+
398
+ `data-sync-custom-el-nav` makes the sync two-way: each element also becomes a go-to control, and
399
+ the plugin gives it `role="button"` and `tabindex="0"`.
400
+
401
+ **The overlap caveat, and it bites on every card deck.** Stacked elements sit on top of each
402
+ other, and coplanar boxes are hit-tested by DOM order, so the **last** overlapping element in the
403
+ HTML wins a click however far back it appears. Decide explicitly which element a click reaches:
404
+ set a `z-index` ladder by distance from the active card, and switch `pointer-events` off beyond
405
+ the rings you want clickable. Both need the per-card distance, which is one of the two cases where
406
+ a script is allowed (see the main file).
407
+
408
+ To opt out of focusability, set `tabindex="-1"` on the elements yourself; the plugin will not
409
+ overwrite it.
410
+
411
+ ***
412
+
413
+ ## 4. Escape hatches, in order of preference
414
+
415
+ 1. **A prop.** Check the tables above first. 177 of the 181 props write a `data-*` attribute, so
416
+ almost everything the engine reads is reachable this way.
417
+ 2. **Custom Options** (`props.sliderSetup.customOptions`) for a Splide setting with no control of
418
+ its own. Written as `name: value` pairs, e.g. `wheel: true, waitForTransition: false`.
419
+ 3. **`setOptions()` / `ready()`** from your own JavaScript, for structured settings such as
420
+ per-breakpoint values that Custom Options cannot express. See `https://design-with-cracka.gitbook.io/etchsliderpro/javascript-api`.
421
+
422
+ `etch.blocks.setAttribute` validates the key against the component's registered properties, so an
423
+ arbitrary `data-*` cannot be set on a component instance. The four attributes with no prop behind
424
+ them are listed in section 1 for recognition when reading a page.
425
+
426
+ ```js
427
+ // Turn on a Splide setting the panel does not expose
428
+ window.SplideComponent.setOptions('.my-slider', { pageInterval: 1200 });
429
+
430
+ // Run code once a slider is mounted
431
+ window.SplideComponent.ready('.my-slider', function (splide) {
432
+ splide.on('move', function (i) { /* ... */ });
433
+ });
434
+ ```
435
+
436
+ `setOptions` handles the rebuild when a setting changes size or layout. Use `move` when the page
437
+ should react immediately and `moved` to wait for the slide to arrive. Do not bind a `mounted`
438
+ handler inside `ready()`: the slider mounted before your code ran, so it has already fired.
439
+
440
+ ***
441
+
442
+ ## 5. Recognising an existing setup
443
+
444
+ Before configuring an unfamiliar slider, check whether it is a premade template. If it is, use
445
+ that template's documented knobs rather than inventing new CSS.
446
+
447
+ | Template | Identify by | Script | Guide |
448
+ | --- | --- | --- | --- |
449
+ | Slider Zeon | `.slider-zeon`, `.main-slider-zeon` | no | `https://design-with-cracka.gitbook.io/etchsliderpro/premade-templates` |
450
+ | Slider Chronos | `.slider-chronos` | no | `https://design-with-cracka.gitbook.io/etchsliderpro/premade-templates` |
451
+ | Slider Flow | `.slider-flow` | no | `https://design-with-cracka.gitbook.io/etchsliderpro/premade-templates` |
452
+ | Slider Team | `.slider-team` | no | `https://design-with-cracka.gitbook.io/etchsliderpro/premade-templates` |
453
+ | Slider Stack | `.slider-stack`, `.slider-stack__card` | no | `https://design-with-cracka.gitbook.io/etchsliderpro/card-stack-templates` |
454
+ | Slider Marquee | no class prefix. Identify by the combination: Infinite Scroll on, Edge Fade on, Slide Auto Width on, two wrappers whose rows scroll in opposite directions | no | `https://design-with-cracka.gitbook.io/etchsliderpro/premade-templates` |
455
+ | Deck Featured | `.deck-stack-featured`, `.deck-card-featured` | yes | `https://design-with-cracka.gitbook.io/etchsliderpro/card-stack-templates` |
456
+ | Deck Testimonial | `.deck-stack-testimonial`, `.deck-card-testimonial` | yes | `https://design-with-cracka.gitbook.io/etchsliderpro/card-stack-templates` |
457
+ | Fall | `.fall-stack`, `.fall-card` | yes | `https://design-with-cracka.gitbook.io/etchsliderpro/card-stack-templates` |
458
+
459
+ All nine use Sync Custom Element.
460
+
461
+ The three that carry a script expose named constants at the top of it. On the two Deck templates,
462
+ `MAX_TIERS` is the deepest ring the CSS defines and `NAV_RINGS` is how many rings stay clickable.
463
+ `MIN_LOOP` is a safety rule about how few cards a loop can hide a wrap behind: leave it alone.
464
+ Fall's script has nothing to adjust.
465
+
466
+ ***
467
+
468
+ ## 6. Admin settings
469
+
470
+ Site-wide, at **Settings > Slider Pro for Etch**. An agent rarely changes these but may need to
471
+ reason about them.
472
+
473
+ | Setting | Values | Effect |
474
+ | --- | --- | --- |
475
+ | Splide Library Source | Local (default) / CDN | where Splide loads from |
476
+ | When to Load Slider Assets | Every page (default) / Only when needed / Never | see below |
477
+ | Auto-Scroll Extension | on (default) / off | required by Infinite Scroll marquees |
478
+ | Breakpoints | SM 640, MD 1024, LG 1120 | the site-wide values behind the responsive shorthand |
479
+
480
+ **When to Load Slider Assets** governs Splide plus the plugin's own engine and stylesheet. On
481
+ "Only when needed" a page loads only what it uses, detected from the rendered markup. On "Never",
482
+ Splide is never sent, so sliders, marquees and the lightbox stop working while card stacks keep
483
+ running. The Etch builder always loads everything, so authoring is never affected.
484
+
485
+ If a slider fails to appear on anything other than "Every page", its markup reached the browser in
486
+ a way the detection could not see. Either switch back to "Every page" or add
487
+ `add_filter( 'dwc_slider_pro_needs_assets', '__return_true' );`. Adding `?dwc_debug=1` as an
488
+ administrator prints a footer comment showing what was detected.
489
+
490
+ Per-slider breakpoint overrides live on the Slider itself
491
+ (`props.breakpoints.laptopBreakpoint` and friends); leave a field blank to inherit the site value.