diff --git a/docs/ui-visual-contract-0.8.json b/docs/ui-visual-contract-0.8.json
index 8adf52b8..61110915 100644
--- a/docs/ui-visual-contract-0.8.json
+++ b/docs/ui-visual-contract-0.8.json
@@ -29,7 +29,7 @@
"packages/ui/components/Container.wrn": "be8fce140043eced8b78c8dd14ff85ace4ed2d91671251641ef83e0fe4da8f2a",
"packages/ui/components/ContextMenu.wrn": "2e011e9cb1c09a3a2344ed3fa29dcc74331cd39f838535d8aee4b249dceef0ce",
"packages/ui/components/CopyMarkup.wrn": "8d57a7d72e02c126f855a181fc36e1b969edb90f683dce6b6ffe546d49d2b29b",
- "packages/ui/components/CustomScrollbar.wrn": "4c1f7758b9cd47e20ecf922403e12b5b15b8127a2744383c6bd280ee20e5fdd1",
+ "packages/ui/components/CustomScrollbar.wrn": "fedb2ab06cc2cf9499c130590945ca6971a3edfb60407b6658ef7756e4be9823",
"packages/ui/components/DataMap.wrn": "65552d73ecd1a148427dbb10d611f9352ca36bd490f595ab1e1a47e173445ba1",
"packages/ui/components/DataTable.wrn": "5a76e50e8559c724aaf01ec954958ac640c99758d44f1eef8e6eb1cb6dc4f862",
"packages/ui/components/DatePicker.wrn": "18b07e59c27c2720bf960e9c04ad70d9e422ddcf0817fede74e71899811bb387",
@@ -53,7 +53,7 @@
"packages/ui/components/InputGroup.wrn": "0e23ea541a60e893c9d9e6f95113911ee459468d8d6105bf03aeb55395359123",
"packages/ui/components/InputNumber.wrn": "a0aa4f4566bf54ffbef54c99648eab05b5f9870be6ea07639a4ecf3930afb631",
"packages/ui/components/Kbd.wrn": "d51fa614b36f971f885410785b481c2e6900b2416e6e7c8868dfda1ebd5f3b4c",
- "packages/ui/components/LayoutSplitter.wrn": "dac5a80acb76bf58dfd25233c68190c67d1aa1b3b0d4250a0957ea40912cf722",
+ "packages/ui/components/LayoutSplitter.wrn": "a86dc54b74aed6b05e770cd1802960d6309bba42fe80e899e8aaa8b1b7aa88e3",
"packages/ui/components/LegendIndicator.wrn": "6a7607b27a17196f899132eb952203a1073e4077365a94935f485e700cbac665",
"packages/ui/components/Link.wrn": "935ac24e8ebd067860dc9709ea9121710315ad6e02ce95cd5e982ae4d5978a02",
"packages/ui/components/List.wrn": "02f960a8e82fa049aac477bac9c1d9371394c86d9c47513138f61bffc79dc7d8",
diff --git a/examples/component-showcase/app/pages/components/custom-scrollbar.wrn b/examples/component-showcase/app/pages/components/custom-scrollbar.wrn
index 21bca16a..9e095e91 100644
--- a/examples/component-showcase/app/pages/components/custom-scrollbar.wrn
+++ b/examples/component-showcase/app/pages/components/custom-scrollbar.wrn
@@ -1,11 +1,12 @@
// Generated by scripts/generate-showcase.mjs. Do not edit directly.
page CustomScrollbarDetail {
layout = "showcase"
- state playground_size = ctx.url.searchParams.get("pg_size") ?? "default"
state playground_color = ctx.url.searchParams.get("pg_color") ?? "primary"
- state playground_columns = Number(ctx.url.searchParams.get("pg_columns") ?? "2")
- state playground_gap = ctx.url.searchParams.get("pg_gap") ?? "md"
- state playground_maxWidth = ctx.url.searchParams.get("pg_maxWidth") ?? "xl"
+ state playground_size = ctx.url.searchParams.get("pg_size") ?? "default"
+ state playground_axis = ctx.url.searchParams.get("pg_axis") ?? "vertical"
+ state playground_thickness = Number(ctx.url.searchParams.get("pg_thickness") ?? "8")
+ state playground_maxHeight = ctx.url.searchParams.get("pg_maxHeight") ?? "20rem"
+ state playground_radius = ctx.url.searchParams.get("pg_radius") ?? "999px"
state playground_class = ctx.url.searchParams.get("pg_class") ?? "showcase-instance showcase-instance--1"
seo {
title = "Custom Scrollbar"
@@ -20,26 +21,26 @@ page CustomScrollbarDetail {
Layout component
Custom Scrollbar
Theme-aware, responsive custom scrollbar component.
- 6 props1 slots1 outputsTheme readyResponsive
+ 7 props1 slots0 outputsTheme readyResponsive
-
+
Interactive playgroundConfigure Custom Scrollbar
Change any prop and inspect the server-rendered component immediately.
Live preview
-
+
Line 1. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.
Line 2. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.
Line 3. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.
Line 4. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.
Line 5. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.
Line 6. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.
Line 7. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.
Line 8. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.
Line 9. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.
Line 10. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.
Line 11. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.
Line 12. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.
-
Event outputInteract with the preview to inspect the typed payload.
+
@@ -48,72 +49,54 @@ page CustomScrollbarDetail {
Live examplesDesigned for real product surfaces
Compare configurations and resize the browser to check responsive behavior.
-
+
- <CustomScrollbar />
+ <CustomScrollbar
+ maxHeight="14rem">
+ <div class="showcase-scroll-demo"><p>Line 1. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.</p><p>Line 2. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.</p><p>Line 3. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.</p><p>Line 4. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.</p><p>Line 5. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.</p><p>Line 6. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.</p><p>Line 7. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.</p><p>Line 8. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.</p><p>Line 9. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.</p><p>Line 10. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.</p><p>Line 11. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.</p><p>Line 12. A scrolling region only shows its scrollbar when the content actually overflows, so this demo ships enough of it.</p></div>
+</CustomScrollbar>
-
+
<CustomScrollbar
+ color="info"
size="sm"
-/>
-
-
-
-
-
-
-
-
-
- <CustomScrollbar
- size="lg"
-/>
+ axis="horizontal"
+ thickness="14"
+ maxHeight="8rem"
+ radius="4px">
+ <div class="showcase-scroll-demo showcase-scroll-demo--wide"><span>Column 1</span><span>Column 2</span><span>Column 3</span><span>Column 4</span><span>Column 5</span><span>Column 6</span><span>Column 7</span><span>Column 8</span><span>Column 9</span><span>Column 10</span><span>Column 11</span><span>Column 12</span><span>Column 13</span><span>Column 14</span></div>
+</CustomScrollbar>
- Component outputsReceive every typed component output
Use declarative output handlers in .wrn files or register a direct output handler from JavaScript. The canonical API exposes payload and does not require event.detail.
@scrollFires when the component emits the scroll event.
<CustomScrollbar
- @scroll='console.log(payload)'
-/>
Direct output handlers.jsimport { registerOutputHandler } from "@wrnexus/csr/outputs"
-
-const component = document.querySelector("[data-ui-component=\"CustomScrollbar\"], [data-component=\"CustomScrollbar\"]")
-
-if (component) registerOutputHandler(component, "scroll", (payload) => {
- console.log("scroll", payload)
-})
- Component APIProps and configuration
All content and behavior shown above is supplied through these props and slots.
| Prop | Type | Default | Required |
|---|
size | string | "default" | No |
color | string | "primary" | No |
columns | number | 2 | No |
gap | string | "md" | No |
maxWidth | string | "xl" | No |
class | string | "" | No |
+
+ Component APIProps and configuration
All content and behavior shown above is supplied through these props and slots.
| Prop | Type | Default | Required |
|---|
color | string | "primary" | No |
size | string | "default" | No |
axis | string | "vertical" | No |
thickness | number | 8 | No |
maxHeight | string | "20rem" | No |
radius | string | "999px" | No |
class | string | "" | No |