@underverse-ui/underverse 1.0.32 → 1.0.33
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.
- package/AGENTS.md +7 -1
- package/README.md +19 -1
- package/agent-recipes.json +1 -2
- package/api-reference.json +9 -2
- package/dist/index.cjs +56 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -2
- package/dist/index.d.ts +13 -2
- package/dist/index.js +56 -26
- package/dist/index.js.map +1 -1
- package/llms.txt +4 -1
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -51,13 +51,19 @@ import { OverlayScrollbarProvider } from "@underverse-ui/underverse";
|
|
|
51
51
|
export function App() {
|
|
52
52
|
return (
|
|
53
53
|
<>
|
|
54
|
-
<OverlayScrollbarProvider />
|
|
54
|
+
<OverlayScrollbarProvider enabled theme="os-theme-underverse" autoHide="leave" />
|
|
55
55
|
{/* app */}
|
|
56
56
|
</>
|
|
57
57
|
);
|
|
58
58
|
}
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
+
Behavior:
|
|
62
|
+
|
|
63
|
+
- Provider initializes only on `[data-os-scrollbar]`.
|
|
64
|
+
- Underverse components already mark their internal scroll containers.
|
|
65
|
+
- Use `data-os-ignore` on a node to opt out.
|
|
66
|
+
|
|
61
67
|
## i18n Notes
|
|
62
68
|
|
|
63
69
|
- Components work without `next-intl` using fallback translations.
|
package/README.md
CHANGED
|
@@ -146,13 +146,31 @@ import { OverlayScrollbarProvider } from "@underverse-ui/underverse";
|
|
|
146
146
|
function App() {
|
|
147
147
|
return (
|
|
148
148
|
<>
|
|
149
|
-
<OverlayScrollbarProvider
|
|
149
|
+
<OverlayScrollbarProvider
|
|
150
|
+
enabled
|
|
151
|
+
theme="os-theme-underverse"
|
|
152
|
+
autoHide="leave"
|
|
153
|
+
autoHideDelay={600}
|
|
154
|
+
/>
|
|
150
155
|
{/* your app */}
|
|
151
156
|
</>
|
|
152
157
|
);
|
|
153
158
|
}
|
|
154
159
|
```
|
|
155
160
|
|
|
161
|
+
Provider behavior:
|
|
162
|
+
|
|
163
|
+
- Initializes **only** on elements marked with `data-os-scrollbar`.
|
|
164
|
+
- Does **not** initialize on `document.body` / `document.documentElement`.
|
|
165
|
+
- Skips portal/dialog trees (`[data-radix-portal]`, `[role="dialog"]`, `[aria-modal="true"]`, `[data-sonner-toaster]`).
|
|
166
|
+
- Per-node opt-out is available via `data-os-ignore`.
|
|
167
|
+
|
|
168
|
+
Migration notes:
|
|
169
|
+
|
|
170
|
+
- Remove any local DOM-scanning scrollbar provider in your app.
|
|
171
|
+
- Keep a single `OverlayScrollbarProvider` mounted once at app root.
|
|
172
|
+
- If you have custom app-level scroll containers outside Underverse components, add `data-os-scrollbar` to those nodes.
|
|
173
|
+
|
|
156
174
|
### Standalone React (Vite, CRA, etc.)
|
|
157
175
|
|
|
158
176
|
```tsx
|
package/agent-recipes.json
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
{
|
|
27
27
|
"id": "overlay-scrollbar-provider",
|
|
28
28
|
"title": "Enable overlay scrollbars",
|
|
29
|
-
"code": "import \"overlayscrollbars/overlayscrollbars.css\";\nimport { OverlayScrollbarProvider } from \"@underverse-ui/underverse\";\n\nexport function App(){\n return <><OverlayScrollbarProvider />{/* app */}</>;\n}\n"
|
|
29
|
+
"code": "import \"overlayscrollbars/overlayscrollbars.css\";\nimport { OverlayScrollbarProvider } from \"@underverse-ui/underverse\";\n\nexport function App(){\n return <><OverlayScrollbarProvider enabled theme=\"os-theme-underverse\" autoHide=\"leave\" />{/* app */}</>;\n}\n"
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
"id": "api-discovery-order",
|
|
@@ -39,4 +39,3 @@
|
|
|
39
39
|
}
|
|
40
40
|
]
|
|
41
41
|
}
|
|
42
|
-
|
package/api-reference.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"package": "@underverse-ui/underverse",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.33",
|
|
4
4
|
"sourceEntry": "src/index.ts",
|
|
5
|
-
"totalExports":
|
|
5
|
+
"totalExports": 207,
|
|
6
6
|
"exports": [
|
|
7
7
|
{
|
|
8
8
|
"name": "*",
|
|
@@ -862,6 +862,13 @@
|
|
|
862
862
|
"local": false,
|
|
863
863
|
"aliasOf": "default"
|
|
864
864
|
},
|
|
865
|
+
{
|
|
866
|
+
"name": "OverlayScrollbarProviderProps",
|
|
867
|
+
"kind": "type",
|
|
868
|
+
"source": "../../../components/ui/OverlayScrollbarProvider",
|
|
869
|
+
"reexport": true,
|
|
870
|
+
"local": false
|
|
871
|
+
},
|
|
865
872
|
{
|
|
866
873
|
"name": "PageLoading",
|
|
867
874
|
"kind": "value",
|
package/dist/index.cjs
CHANGED
|
@@ -3820,6 +3820,8 @@ var Popover = ({
|
|
|
3820
3820
|
children,
|
|
3821
3821
|
className,
|
|
3822
3822
|
contentClassName,
|
|
3823
|
+
contentProps,
|
|
3824
|
+
contentScrollable = false,
|
|
3823
3825
|
placement = "bottom",
|
|
3824
3826
|
modal = false,
|
|
3825
3827
|
disabled = false,
|
|
@@ -3991,7 +3993,7 @@ var Popover = ({
|
|
|
3991
3993
|
{
|
|
3992
3994
|
ref: panelRef,
|
|
3993
3995
|
"data-state": "open",
|
|
3994
|
-
role: "dialog",
|
|
3996
|
+
role: modal ? "dialog" : void 0,
|
|
3995
3997
|
"aria-modal": modal || void 0,
|
|
3996
3998
|
style: {
|
|
3997
3999
|
transformOrigin: getTransformOrigin2(initialPlacement.side, initialPlacement.align)
|
|
@@ -4004,12 +4006,15 @@ var Popover = ({
|
|
|
4004
4006
|
children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
4005
4007
|
"div",
|
|
4006
4008
|
{
|
|
4009
|
+
...contentProps,
|
|
4010
|
+
"data-os-scrollbar": contentScrollable ? true : void 0,
|
|
4007
4011
|
className: cn(
|
|
4008
4012
|
"rounded-2xl md:rounded-3xl border bg-popover text-popover-foreground shadow-md",
|
|
4009
4013
|
"backdrop-blur-sm bg-popover/95 border-border/60 p-4",
|
|
4014
|
+
contentProps?.className,
|
|
4010
4015
|
contentClassName
|
|
4011
4016
|
),
|
|
4012
|
-
tabIndex: -1,
|
|
4017
|
+
tabIndex: contentProps?.tabIndex ?? -1,
|
|
4013
4018
|
children
|
|
4014
4019
|
}
|
|
4015
4020
|
)
|
|
@@ -4222,6 +4227,7 @@ var Sheet = ({
|
|
|
4222
4227
|
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
4223
4228
|
"div",
|
|
4224
4229
|
{
|
|
4230
|
+
"data-os-scrollbar": true,
|
|
4225
4231
|
className: "flex-1 overflow-auto p-4",
|
|
4226
4232
|
style: {
|
|
4227
4233
|
opacity: open && !isAnimating ? 1 : 0,
|
|
@@ -4685,7 +4691,7 @@ var Tabs = ({
|
|
|
4685
4691
|
);
|
|
4686
4692
|
const activeTab = tabs.find((tab) => tab.value === active);
|
|
4687
4693
|
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: cn("w-full", orientation === "vertical" && "flex gap-6"), children: [
|
|
4688
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: containerClasses, role: "tablist", "aria-orientation": orientation, children: [
|
|
4694
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: containerClasses, role: "tablist", "aria-orientation": orientation, "data-os-scrollbar": orientation === "horizontal" ? true : void 0, children: [
|
|
4689
4695
|
tabs.map((tab, index) => {
|
|
4690
4696
|
const isActive = active === tab.value;
|
|
4691
4697
|
const Icon = tab.icon;
|
|
@@ -5235,7 +5241,7 @@ var Combobox = ({
|
|
|
5235
5241
|
}
|
|
5236
5242
|
)
|
|
5237
5243
|
] }) }),
|
|
5238
|
-
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "overflow-y-auto overscroll-contain", style: { maxHeight }, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: cn(size === "sm" ? "p-1" : size === "lg" ? "p-2" : "p-1.5"), children: loading2 ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "px-3 py-10 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex flex-col items-center gap-3 animate-in fade-in-0 zoom-in-95 duration-300", children: [
|
|
5244
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { "data-os-scrollbar": true, className: "overflow-y-auto overscroll-contain", style: { maxHeight }, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: cn(size === "sm" ? "p-1" : size === "lg" ? "p-2" : "p-1.5"), children: loading2 ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "px-3 py-10 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex flex-col items-center gap-3 animate-in fade-in-0 zoom-in-95 duration-300", children: [
|
|
5239
5245
|
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "relative", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "w-10 h-10 rounded-full border-2 border-primary/20 border-t-primary animate-spin" }) }),
|
|
5240
5246
|
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "text-sm text-muted-foreground", children: loadingText })
|
|
5241
5247
|
] }) }) : filteredOptions.length > 0 ? groupedOptions ? (
|
|
@@ -6291,6 +6297,7 @@ var DatePicker = ({
|
|
|
6291
6297
|
sizeStyles8[size].contentPadding,
|
|
6292
6298
|
"animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-300"
|
|
6293
6299
|
),
|
|
6300
|
+
contentScrollable: true,
|
|
6294
6301
|
trigger: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
|
|
6295
6302
|
"button",
|
|
6296
6303
|
{
|
|
@@ -6646,6 +6653,7 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
6646
6653
|
size === "sm" ? "p-3" : "p-5",
|
|
6647
6654
|
"animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-300"
|
|
6648
6655
|
),
|
|
6656
|
+
contentScrollable: true,
|
|
6649
6657
|
trigger: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
|
|
6650
6658
|
"button",
|
|
6651
6659
|
{
|
|
@@ -7096,6 +7104,7 @@ function WheelColumn({
|
|
|
7096
7104
|
"div",
|
|
7097
7105
|
{
|
|
7098
7106
|
ref: scrollRef,
|
|
7107
|
+
"data-os-scrollbar": true,
|
|
7099
7108
|
className: cn(
|
|
7100
7109
|
"h-full overflow-y-auto overscroll-contain snap-y snap-mandatory",
|
|
7101
7110
|
"select-none cursor-grab active:cursor-grabbing",
|
|
@@ -8519,6 +8528,7 @@ function WheelColumn2({
|
|
|
8519
8528
|
"div",
|
|
8520
8529
|
{
|
|
8521
8530
|
ref: scrollRef,
|
|
8531
|
+
"data-os-scrollbar": true,
|
|
8522
8532
|
className: cn(
|
|
8523
8533
|
"h-full overflow-y-auto overscroll-contain snap-y snap-mandatory",
|
|
8524
8534
|
"select-none cursor-grab active:cursor-grabbing",
|
|
@@ -9466,6 +9476,7 @@ var DateTimePicker = ({
|
|
|
9466
9476
|
// Keep the popover usable on small viewports
|
|
9467
9477
|
"max-w-[calc(100vw-1rem)] max-h-[calc(100vh-6rem)] overflow-auto"
|
|
9468
9478
|
),
|
|
9479
|
+
contentScrollable: true,
|
|
9469
9480
|
placement: "bottom-end",
|
|
9470
9481
|
children: [
|
|
9471
9482
|
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex flex-col lg:flex-row divide-y lg:divide-y-0 lg:divide-x divide-border", children: [
|
|
@@ -10137,7 +10148,7 @@ function CalendarTimelineHeader(props) {
|
|
|
10137
10148
|
contentClassName: cn(
|
|
10138
10149
|
"w-auto p-0 rounded-2xl md:rounded-3xl overflow-hidden"
|
|
10139
10150
|
),
|
|
10140
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "max-w-[calc(100vw-1rem)] max-h-[calc(100vh-6rem)] overflow-auto", children: [
|
|
10151
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { "data-os-scrollbar": true, className: "max-w-[calc(100vw-1rem)] max-h-[calc(100vh-6rem)] overflow-auto", children: [
|
|
10141
10152
|
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex flex-col lg:flex-row divide-y lg:divide-y-0 lg:divide-x divide-border", children: [
|
|
10142
10153
|
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "p-2", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
10143
10154
|
Calendar3,
|
|
@@ -10281,7 +10292,7 @@ function CalendarTimelineHeader(props) {
|
|
|
10281
10292
|
]
|
|
10282
10293
|
}
|
|
10283
10294
|
) : null,
|
|
10284
|
-
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { ref: headerRef, className: "flex-1 min-w-0 overflow-x-auto overflow-y-hidden", children: slotHeaderNodes })
|
|
10295
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { ref: headerRef, "data-os-scrollbar": true, className: "flex-1 min-w-0 overflow-x-auto overflow-y-hidden", children: slotHeaderNodes })
|
|
10285
10296
|
] })
|
|
10286
10297
|
] });
|
|
10287
10298
|
}
|
|
@@ -11872,6 +11883,7 @@ function CalendarTimeline({
|
|
|
11872
11883
|
"div",
|
|
11873
11884
|
{
|
|
11874
11885
|
ref: leftRef,
|
|
11886
|
+
"data-os-scrollbar": true,
|
|
11875
11887
|
className: "shrink-0 overflow-y-auto overflow-x-hidden",
|
|
11876
11888
|
style: { width: effectiveResourceColumnWidth, minWidth: effectiveResourceColumnWidth },
|
|
11877
11889
|
children: [
|
|
@@ -12497,6 +12509,7 @@ var MultiCombobox = ({
|
|
|
12497
12509
|
id: listboxId,
|
|
12498
12510
|
role: "listbox",
|
|
12499
12511
|
"aria-multiselectable": "true",
|
|
12512
|
+
"data-os-scrollbar": true,
|
|
12500
12513
|
style: { maxHeight },
|
|
12501
12514
|
className: cn("overflow-y-auto p-1.5", size === "lg" ? "text-base" : size === "sm" ? "text-xs" : "text-sm"),
|
|
12502
12515
|
children: loading2 ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("li", { className: "px-3 py-8 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex flex-col items-center gap-3 animate-in fade-in-0 zoom-in-95 duration-300", children: [
|
|
@@ -15133,6 +15146,7 @@ function Carousel({
|
|
|
15133
15146
|
showThumbnails && totalSlides > slidesToShow && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
15134
15147
|
"div",
|
|
15135
15148
|
{
|
|
15149
|
+
"data-os-scrollbar": true,
|
|
15136
15150
|
className: cn(
|
|
15137
15151
|
"absolute bottom-0 left-0 right-0 flex gap-2 p-4 bg-linear-to-t from-black/50 to-transparent overflow-x-auto",
|
|
15138
15152
|
isHorizontal ? "flex-row" : "flex-col"
|
|
@@ -16024,6 +16038,7 @@ var TimelineRoot = React43.forwardRef(
|
|
|
16024
16038
|
"div",
|
|
16025
16039
|
{
|
|
16026
16040
|
ref,
|
|
16041
|
+
"data-os-scrollbar": mode === "horizontal" ? true : void 0,
|
|
16027
16042
|
className: cn("relative", mode === "horizontal" && "flex gap-4 overflow-x-auto", mode === "vertical" && "space-y-0", className),
|
|
16028
16043
|
...rest,
|
|
16029
16044
|
children: mode === "vertical" ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "space-y-0", children: content }) : content
|
|
@@ -17019,7 +17034,7 @@ var MusicPlayer = ({
|
|
|
17019
17034
|
}
|
|
17020
17035
|
) })
|
|
17021
17036
|
] }),
|
|
17022
|
-
showPlaylist && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "bg-muted/50 backdrop-blur-sm max-h-96 overflow-y-auto border-t border-border", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "p-4", children: [
|
|
17037
|
+
showPlaylist && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { "data-os-scrollbar": true, className: "bg-muted/50 backdrop-blur-sm max-h-96 overflow-y-auto border-t border-border", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "p-4", children: [
|
|
17023
17038
|
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("h3", { className: "text-lg font-semibold text-foreground mb-3", children: [
|
|
17024
17039
|
"Playlist (",
|
|
17025
17040
|
playlist.length,
|
|
@@ -19018,44 +19033,56 @@ var LoadingBar = ({
|
|
|
19018
19033
|
// ../../components/ui/OverlayScrollbarProvider.tsx
|
|
19019
19034
|
var import_react33 = require("react");
|
|
19020
19035
|
var import_overlayscrollbars = require("overlayscrollbars");
|
|
19021
|
-
var
|
|
19036
|
+
var SCROLLABLE_SELECTOR = "[data-os-scrollbar]";
|
|
19022
19037
|
var PORTAL_EXCLUDE_SELECTOR = [
|
|
19023
19038
|
"[data-radix-portal]",
|
|
19024
19039
|
"[role='dialog']",
|
|
19025
19040
|
"[aria-modal='true']",
|
|
19026
19041
|
"[data-sonner-toaster]"
|
|
19027
19042
|
].join(", ");
|
|
19028
|
-
var OPTIONS = {
|
|
19029
|
-
scrollbars: {
|
|
19030
|
-
theme: "os-theme-underverse",
|
|
19031
|
-
visibility: "auto",
|
|
19032
|
-
autoHide: "leave",
|
|
19033
|
-
autoHideDelay: 600,
|
|
19034
|
-
dragScroll: true,
|
|
19035
|
-
clickScroll: false
|
|
19036
|
-
}
|
|
19037
|
-
};
|
|
19038
19043
|
function shouldSkip(element) {
|
|
19039
19044
|
if (element === document.body || element === document.documentElement) return true;
|
|
19045
|
+
if (element.classList.contains("scrollbar-none")) return true;
|
|
19040
19046
|
if (element.hasAttribute("data-os-ignore")) return true;
|
|
19041
19047
|
if (element.hasAttribute("data-overlayscrollbars")) return true;
|
|
19042
19048
|
if (element.closest(PORTAL_EXCLUDE_SELECTOR)) return true;
|
|
19043
19049
|
return false;
|
|
19044
19050
|
}
|
|
19045
|
-
function OverlayScrollbarProvider(
|
|
19051
|
+
function OverlayScrollbarProvider({
|
|
19052
|
+
enabled = true,
|
|
19053
|
+
theme = "os-theme-underverse",
|
|
19054
|
+
visibility = "auto",
|
|
19055
|
+
autoHide = "leave",
|
|
19056
|
+
autoHideDelay = 600,
|
|
19057
|
+
dragScroll = true,
|
|
19058
|
+
clickScroll = false
|
|
19059
|
+
} = {}) {
|
|
19046
19060
|
(0, import_react33.useEffect)(() => {
|
|
19061
|
+
if (typeof window === "undefined") return;
|
|
19062
|
+
if (!enabled) return;
|
|
19063
|
+
const options = {
|
|
19064
|
+
scrollbars: {
|
|
19065
|
+
theme,
|
|
19066
|
+
visibility,
|
|
19067
|
+
autoHide,
|
|
19068
|
+
autoHideDelay,
|
|
19069
|
+
dragScroll,
|
|
19070
|
+
clickScroll
|
|
19071
|
+
}
|
|
19072
|
+
};
|
|
19047
19073
|
const instances = /* @__PURE__ */ new Map();
|
|
19048
19074
|
let rafId = 0;
|
|
19049
19075
|
const init = (element) => {
|
|
19050
19076
|
if (shouldSkip(element)) return;
|
|
19051
19077
|
if (instances.has(element)) return;
|
|
19052
|
-
instances.set(element, (0, import_overlayscrollbars.OverlayScrollbars)(element,
|
|
19078
|
+
instances.set(element, (0, import_overlayscrollbars.OverlayScrollbars)(element, options));
|
|
19053
19079
|
};
|
|
19054
19080
|
const scan = (root) => {
|
|
19055
|
-
if (root instanceof HTMLElement && root.matches(
|
|
19081
|
+
if (root instanceof HTMLElement && root.matches(SCROLLABLE_SELECTOR)) {
|
|
19056
19082
|
init(root);
|
|
19057
19083
|
}
|
|
19058
|
-
|
|
19084
|
+
if (!("querySelectorAll" in root)) return;
|
|
19085
|
+
root.querySelectorAll(SCROLLABLE_SELECTOR).forEach(init);
|
|
19059
19086
|
};
|
|
19060
19087
|
const cleanup = () => {
|
|
19061
19088
|
instances.forEach((instance, element) => {
|
|
@@ -19092,7 +19119,7 @@ function OverlayScrollbarProvider() {
|
|
|
19092
19119
|
instances.forEach((instance) => instance.destroy());
|
|
19093
19120
|
instances.clear();
|
|
19094
19121
|
};
|
|
19095
|
-
}, []);
|
|
19122
|
+
}, [enabled, theme, visibility, autoHide, autoHideDelay, dragScroll, clickScroll]);
|
|
19096
19123
|
return null;
|
|
19097
19124
|
}
|
|
19098
19125
|
var OverlayScrollbarProvider_default = OverlayScrollbarProvider;
|
|
@@ -21645,7 +21672,7 @@ var CommandList = (0, import_react42.forwardRef)((props, ref) => {
|
|
|
21645
21672
|
if (props.items.length === 0) {
|
|
21646
21673
|
return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "w-72 p-4 text-center text-sm text-muted-foreground", children: "No results" });
|
|
21647
21674
|
}
|
|
21648
|
-
return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { ref: listRef, className: "w-72 max-h-80 overflow-y-auto bg-card border border-border rounded-2xl shadow-lg", children: [
|
|
21675
|
+
return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { ref: listRef, "data-os-scrollbar": true, className: "w-72 max-h-80 overflow-y-auto bg-card border border-border rounded-2xl shadow-lg", children: [
|
|
21649
21676
|
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "px-3 py-2 border-b", children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: "Basic Blocks" }) }),
|
|
21650
21677
|
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "p-1", children: props.items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
|
|
21651
21678
|
"button",
|
|
@@ -22738,7 +22765,7 @@ var EmojiList = (0, import_react44.forwardRef)((props, ref) => {
|
|
|
22738
22765
|
if (props.items.length === 0) {
|
|
22739
22766
|
return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "w-80 p-4 text-center text-sm text-muted-foreground bg-card border border-border rounded-2xl shadow-lg", children: "No emoji found" });
|
|
22740
22767
|
}
|
|
22741
|
-
return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "w-80 max-h-80 overflow-y-auto bg-card border border-border rounded-2xl shadow-lg", children: [
|
|
22768
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { "data-os-scrollbar": true, className: "w-80 max-h-80 overflow-y-auto bg-card border border-border rounded-2xl shadow-lg", children: [
|
|
22742
22769
|
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "px-3 py-2 border-b bg-muted/30", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
22743
22770
|
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_lucide_react41.Smile, { className: "w-4 h-4 text-primary" }),
|
|
22744
22771
|
/* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: "Emoji" })
|
|
@@ -23107,6 +23134,7 @@ function buildUEditorExtensions({
|
|
|
23107
23134
|
import_extension_code_block_lowlight.default.configure({
|
|
23108
23135
|
lowlight,
|
|
23109
23136
|
HTMLAttributes: {
|
|
23137
|
+
"data-os-scrollbar": "true",
|
|
23110
23138
|
class: "rounded-lg bg-[#1e1e1e] p-4 font-mono text-sm overflow-x-auto"
|
|
23111
23139
|
}
|
|
23112
23140
|
}),
|
|
@@ -23437,6 +23465,7 @@ var EmojiPicker = ({ onSelect, onClose }) => {
|
|
|
23437
23465
|
"div",
|
|
23438
23466
|
{
|
|
23439
23467
|
ref: scrollContainerRef,
|
|
23468
|
+
"data-os-scrollbar": true,
|
|
23440
23469
|
className: "overflow-y-auto px-3 py-2 shrink",
|
|
23441
23470
|
style: { height: "20rem" },
|
|
23442
23471
|
children: search ? (
|
|
@@ -24136,7 +24165,7 @@ var SlashCommandMenu = ({ editor, onClose, filterText = "" }) => {
|
|
|
24136
24165
|
if (commands.length === 0) {
|
|
24137
24166
|
return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "w-72 p-4 text-center text-muted-foreground text-sm", children: t("slashCommand.noResults") });
|
|
24138
24167
|
}
|
|
24139
|
-
return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { ref: menuRef, className: "w-72 max-h-80 overflow-y-auto", children: [
|
|
24168
|
+
return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { ref: menuRef, "data-os-scrollbar": true, className: "w-72 max-h-80 overflow-y-auto", children: [
|
|
24140
24169
|
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "px-3 py-2 border-b", children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: t("slashCommand.basicBlocks") }) }),
|
|
24141
24170
|
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "p-1", children: commands.map((cmd, index) => /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(
|
|
24142
24171
|
"button",
|
|
@@ -24898,6 +24927,7 @@ var UEditor = import_react52.default.forwardRef(({
|
|
|
24898
24927
|
import_react53.EditorContent,
|
|
24899
24928
|
{
|
|
24900
24929
|
editor,
|
|
24930
|
+
"data-os-scrollbar": true,
|
|
24901
24931
|
className: "flex-1 overflow-y-auto",
|
|
24902
24932
|
style: {
|
|
24903
24933
|
minHeight,
|