@xhub-short/ui 0.1.0-beta.1 → 0.1.0-beta.11
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/dist/CommentSheet.css-DyEc3Sro.d.ts +217 -0
- package/dist/VideoSlotPlayIndicator-DPs8Xt5C.d.ts +51 -0
- package/dist/chunk-3OB3OVYR.js +349 -0
- package/dist/{chunk-WKX2WBVO.js → chunk-3XPJHUYL.js} +1 -39
- package/dist/chunk-4RIMQOBR.js +58 -0
- package/dist/chunk-4TUBNA2X.js +180 -0
- package/dist/{chunk-4YDIRPIN.js → chunk-ANCP53F3.js} +3 -3
- package/dist/{chunk-UXMA4KJZ.js → chunk-CAWE42LH.js} +5 -3
- package/dist/{chunk-ANGBSV7L.js → chunk-CIIZ3IHV.js} +10 -5
- package/dist/chunk-DR7KR7OT.js +103 -0
- package/dist/chunk-DXLCQ4FH.js +102 -0
- package/dist/chunk-EDWS2IPH.js +1 -0
- package/dist/chunk-FR7UQSZP.js +570 -0
- package/dist/chunk-IWSBYOSS.js +91 -0
- package/dist/chunk-JEY6R4KJ.js +334 -0
- package/dist/chunk-KMJ3PQ7M.js +1262 -0
- package/dist/chunk-MFJS65C5.js +368 -0
- package/dist/{chunk-HW4LXTFT.js → chunk-OM4L7RE5.js} +18 -6
- package/dist/chunk-PBIH2F2Q.js +344 -0
- package/dist/chunk-PJ4NMVMY.js +326 -0
- package/dist/chunk-Q6MG7AVG.js +531 -0
- package/dist/chunk-QCKVF2DR.js +713 -0
- package/dist/chunk-QCRRF76W.js +75 -0
- package/dist/chunk-QUEJHA24.js +508 -0
- package/dist/chunk-VXW7AOGM.js +285 -0
- package/dist/chunk-YB7AXTX7.js +430 -0
- package/dist/chunk-ZGWSJ6Z5.js +601 -0
- package/dist/components/ActionBar/index.js +1 -1
- package/dist/components/AdvanceMenu/index.d.ts +78 -0
- package/dist/components/AdvanceMenu/index.js +1 -0
- package/dist/components/AuthorInfo/index.d.ts +5 -1
- package/dist/components/AuthorInfo/index.js +1 -1
- package/dist/components/BottomSheet/index.d.ts +82 -0
- package/dist/components/BottomSheet/index.js +1 -0
- package/dist/components/CleanModeOverlay/index.d.ts +60 -0
- package/dist/components/CleanModeOverlay/index.js +1 -0
- package/dist/components/CommentSheet/index.d.ts +164 -0
- package/dist/components/CommentSheet/index.js +1 -0
- package/dist/components/DetailView/index.d.ts +311 -0
- package/dist/components/DetailView/index.js +1 -0
- package/dist/components/ErrorBoundary/index.js +1 -1
- package/dist/components/ImageCarousel/index.d.ts +50 -0
- package/dist/components/ImageCarousel/index.js +1 -0
- package/dist/components/ImagePostSlot/index.d.ts +207 -0
- package/dist/components/ImagePostSlot/index.js +1 -0
- package/dist/components/ProgressBar/index.d.ts +30 -2
- package/dist/components/ProgressBar/index.js +1 -1
- package/dist/components/QualityPicker/index.d.ts +35 -0
- package/dist/components/QualityPicker/index.js +1 -0
- package/dist/components/ReportSheet/index.d.ts +68 -0
- package/dist/components/ReportSheet/index.js +1 -0
- package/dist/components/Skeleton/index.js +1 -1
- package/dist/components/SpeedPicker/index.d.ts +32 -0
- package/dist/components/SpeedPicker/index.js +1 -0
- package/dist/components/VideoFeed/index.d.ts +12 -1
- package/dist/components/VideoFeed/index.js +1 -1
- package/dist/components/VideoInfo/index.d.ts +4 -2
- package/dist/components/VideoInfo/index.js +1 -1
- package/dist/components/VideoPlayer/index.d.ts +14 -41
- package/dist/components/VideoPlayer/index.js +1 -1
- package/dist/components/VideoSlot/index.d.ts +84 -65
- package/dist/components/VideoSlot/index.js +2 -1
- package/dist/components/VirtualSlider/index.d.ts +339 -0
- package/dist/components/VirtualSlider/index.js +1 -0
- package/dist/components/icons/index.js +1 -1
- package/dist/index.d.ts +107 -95
- package/dist/index.js +84 -27
- package/package.json +51 -7
- package/dist/chunk-2PTMP65P.js +0 -738
- package/dist/chunk-4MN72OZH.js +0 -148
- package/dist/chunk-DHQJBXQW.js +0 -562
- package/dist/chunk-SSJDO24Q.js +0 -204
- package/dist/chunk-XAOEHLOX.js +0 -1326
- package/dist/chunk-YW23IBKF.js +0 -530
- package/dist/chunk-ZZDQKP4R.js +0 -418
- package/dist/use-gesture-react.esm-3SV4QLEJ.js +0 -1893
|
@@ -110,10 +110,10 @@ function BookmarkFilledIcon(props) {
|
|
|
110
110
|
) });
|
|
111
111
|
}
|
|
112
112
|
function PlayIcon(props) {
|
|
113
|
-
return /* @__PURE__ */ jsx("svg", {
|
|
113
|
+
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", xmlns: "http://www.w3.org/2000/svg", fill: "none", ...getIconProps(props), children: /* @__PURE__ */ jsx(
|
|
114
114
|
"path",
|
|
115
115
|
{
|
|
116
|
-
d: "
|
|
116
|
+
d: "M9.92196 2.01322C7.19974 0.436195 3.79175 2.40044 3.79175 5.54647V22.4486C3.79175 25.5946 7.19974 27.5588 9.92195 25.9818L24.5099 17.5308C27.2252 15.9578 27.2252 12.0373 24.5099 10.4643L9.92196 2.01322Z",
|
|
117
117
|
fill: "currentColor"
|
|
118
118
|
}
|
|
119
119
|
) });
|
|
@@ -122,7 +122,7 @@ function PauseIcon(props) {
|
|
|
122
122
|
return /* @__PURE__ */ jsx("svg", { ...getIconProps(props), "aria-hidden": "true", children: /* @__PURE__ */ jsx(
|
|
123
123
|
"path",
|
|
124
124
|
{
|
|
125
|
-
d: "
|
|
125
|
+
d: "M24.2096 4.20016V23.8002C24.2096 24.5422 24.2096 24.9902 23.9879 25.4265C23.7907 25.8138 23.4816 26.123 23.0954 26.319C22.6591 26.5407 22.2111 26.5407 21.4679 26.5407H19.3679C18.6259 26.5407 18.1767 26.5407 17.7404 26.319C17.3542 26.123 17.0451 25.8138 16.8479 25.4265C16.6251 24.989 16.6251 24.541 16.6251 23.799V4.20016C16.6251 3.45816 16.6251 3.01016 16.8467 2.57383C17.0439 2.1865 17.3531 1.87733 17.7393 1.68133C18.1756 1.4585 18.6236 1.4585 19.3667 1.4585H21.4667C22.2099 1.4585 22.6579 1.4585 23.0954 1.68133C23.4804 1.87733 23.7896 2.1865 23.9867 2.57266C24.2096 3.01016 24.2096 3.45816 24.2096 4.20016ZM10.2621 1.68133C9.82458 1.4585 9.37658 1.4585 8.63342 1.4585H6.53341C5.79025 1.4585 5.34225 1.4585 4.90591 1.68133C4.51858 1.8785 4.20941 2.18766 4.01341 2.57383C3.79175 3.01016 3.79175 3.45816 3.79175 4.20016V23.8002C3.79175 24.5422 3.79175 24.9902 4.01341 25.4253C4.21058 25.8127 4.51975 26.1218 4.90708 26.319C5.34341 26.5407 5.79141 26.5407 6.53458 26.5407H8.63458C9.37658 26.5407 9.82575 26.5407 10.2621 26.319C10.6482 26.123 10.9574 25.8138 11.1546 25.4265C11.3762 24.9902 11.3762 24.5422 11.3762 23.8002V4.20016C11.3762 3.45816 11.3762 3.01016 11.1534 2.57266C10.9562 2.18533 10.6471 1.87733 10.2621 1.68133Z",
|
|
126
126
|
fill: "currentColor"
|
|
127
127
|
}
|
|
128
128
|
) });
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// src/utils/injectComponentCSS.ts
|
|
2
2
|
var injectedStyles = /* @__PURE__ */ new Set();
|
|
3
3
|
var STYLE_ID_PREFIX = "sv-styles-";
|
|
4
|
-
function injectComponentCSS(componentId, css) {
|
|
4
|
+
function injectComponentCSS(componentId, css, options = {}) {
|
|
5
|
+
const { layered = true } = options;
|
|
5
6
|
if (typeof document === "undefined") {
|
|
6
7
|
return () => {
|
|
7
8
|
};
|
|
@@ -20,11 +21,12 @@ function injectComponentCSS(componentId, css) {
|
|
|
20
21
|
const style = document.createElement("style");
|
|
21
22
|
style.id = styleId;
|
|
22
23
|
style.setAttribute("data-sv-component", componentId);
|
|
23
|
-
style.textContent =
|
|
24
|
+
style.textContent = layered ? `@layer sv {
|
|
25
|
+
${css}
|
|
26
|
+
}` : css;
|
|
24
27
|
document.head.appendChild(style);
|
|
25
28
|
injectedStyles.add(componentId);
|
|
26
29
|
return () => {
|
|
27
|
-
removeComponentCSS(componentId);
|
|
28
30
|
};
|
|
29
31
|
}
|
|
30
32
|
function removeComponentCSS(componentId) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { injectComponentCSS } from './chunk-
|
|
1
|
+
import { formatCount } from './chunk-3XPJHUYL.js';
|
|
2
|
+
import { injectComponentCSS } from './chunk-CAWE42LH.js';
|
|
3
|
+
import { clsx } from 'clsx';
|
|
3
4
|
import { createContext, useInsertionEffect, useState, useRef, useEffect, useCallback, useContext } from 'react';
|
|
4
5
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
6
|
|
|
@@ -339,6 +340,7 @@ function ActionButton({
|
|
|
339
340
|
const handleTouchEnd = useCallback(
|
|
340
341
|
(e) => {
|
|
341
342
|
e.stopPropagation();
|
|
343
|
+
e.preventDefault();
|
|
342
344
|
if (!disabled && onClick) {
|
|
343
345
|
onClick();
|
|
344
346
|
}
|
|
@@ -360,7 +362,7 @@ function ActionButton({
|
|
|
360
362
|
const formattedCount = count !== void 0 ? formatter(count) : null;
|
|
361
363
|
const shouldShowCount = count !== void 0 && (!hideZeroCount || count > 0);
|
|
362
364
|
const displayIcon = isActive && activeIcon ? activeIcon : icon;
|
|
363
|
-
const buttonClasses =
|
|
365
|
+
const buttonClasses = clsx(
|
|
364
366
|
CSS_PREFIX,
|
|
365
367
|
variant !== "default" && `${CSS_PREFIX}--${variant}`,
|
|
366
368
|
type !== "default" && `${CSS_PREFIX}--${type}`,
|
|
@@ -389,7 +391,10 @@ function ActionButton({
|
|
|
389
391
|
shouldShowCount && /* @__PURE__ */ jsx(
|
|
390
392
|
"span",
|
|
391
393
|
{
|
|
392
|
-
className:
|
|
394
|
+
className: clsx(
|
|
395
|
+
`${CSS_PREFIX}__count`,
|
|
396
|
+
!shouldShowCount && `${CSS_PREFIX}__count--hidden`
|
|
397
|
+
),
|
|
393
398
|
children: formattedCount
|
|
394
399
|
}
|
|
395
400
|
)
|
|
@@ -443,7 +448,7 @@ function ActionBarHeadlessRoot({
|
|
|
443
448
|
interactionState,
|
|
444
449
|
interactionActions
|
|
445
450
|
};
|
|
446
|
-
const containerClasses =
|
|
451
|
+
const containerClasses = clsx(
|
|
447
452
|
CSS_PREFIX2,
|
|
448
453
|
direction === "horizontal" && `${CSS_PREFIX2}--horizontal`,
|
|
449
454
|
className
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { clsx } from 'clsx';
|
|
2
|
+
import { memo, useEffect, useCallback } from 'react';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
// src/components/QualityPicker/QualityPickerHeadless.tsx
|
|
6
|
+
|
|
7
|
+
// src/components/QualityPicker/QualityPicker.css.ts
|
|
8
|
+
var QUALITY_PICKER_CSS = `.sv-quality-picker{--sv-quality-picker-bg:rgba(28,28,30,.95);--sv-quality-picker-text:#fff;--sv-quality-picker-text-secondary:rgba(255,255,255,.6);--sv-quality-picker-selected:#007aff;--sv-quality-picker-item-hover:rgba(255,255,255,.1);--sv-quality-picker-check:#007aff;--sv-quality-picker-badge:rgba(255,255,255,.15);--sv-quality-picker-item-height:48px;--sv-quality-picker-radius:12px;--sv-quality-picker-padding:8px}.sv-quality-picker{padding:var(--sv-quality-picker-padding)}.sv-quality-picker-title{padding:8px 16px;font-size:14px;font-weight:600;color:var(--sv-quality-picker-text-secondary);text-align:center}.sv-quality-picker-options{display:flex;flex-direction:column;gap:2px}.sv-quality-picker-option{display:flex;align-items:center;gap:12px;height:var(--sv-quality-picker-item-height);padding:0 16px;border:0;background:transparent;color:var(--sv-quality-picker-text);font-size:16px;font-weight:normal;cursor:pointer;border-radius:var(--sv-quality-picker-radius);transition:background-color 150ms ease;-webkit-tap-highlight-color:transparent}.sv-quality-picker-option:hover{background:var(--sv-quality-picker-item-hover)}.sv-quality-picker-option[data-selected="true"]{color:var(--sv-quality-picker-selected);font-weight:500}.sv-quality-picker-option-label{flex:1;display:flex;align-items:center;gap:8px}.sv-quality-picker-option-badge{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;padding:2px 6px;background:var(--sv-quality-picker-badge);border-radius:4px;color:var(--sv-quality-picker-text-secondary)}.sv-quality-picker-option[data-selected="true"] .sv-quality-picker-option-badge{background:var(--sv-quality-picker-selected);color:#fff}.sv-quality-picker-option-check{width:20px;height:20px;color:var(--sv-quality-picker-check);opacity:0;transition:opacity 150ms ease}.sv-quality-picker-option[data-selected="true"] .sv-quality-picker-option-check{opacity:1}.sv-quality-picker-empty{padding:24px 16px;text-align:center;color:var(--sv-quality-picker-text-secondary);font-size:14px}`;
|
|
9
|
+
var cssInjected = false;
|
|
10
|
+
function injectCSS() {
|
|
11
|
+
if (cssInjected || typeof document === "undefined") return;
|
|
12
|
+
const styleId = "sv-quality-picker-styles";
|
|
13
|
+
if (!document.getElementById(styleId)) {
|
|
14
|
+
const style = document.createElement("style");
|
|
15
|
+
style.id = styleId;
|
|
16
|
+
style.textContent = QUALITY_PICKER_CSS;
|
|
17
|
+
document.head.appendChild(style);
|
|
18
|
+
}
|
|
19
|
+
cssInjected = true;
|
|
20
|
+
}
|
|
21
|
+
function CheckIcon() {
|
|
22
|
+
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ jsx("polyline", { points: "20 6 9 17 4 12" }) });
|
|
23
|
+
}
|
|
24
|
+
function getQualityBadge(height) {
|
|
25
|
+
if (height >= 2160) return "4K";
|
|
26
|
+
if (height >= 1080) return "FHD";
|
|
27
|
+
if (height >= 720) return "HD";
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
function formatQualityLabel(level) {
|
|
31
|
+
return `${level.height}p`;
|
|
32
|
+
}
|
|
33
|
+
function QualityPickerHeadlessComponent({
|
|
34
|
+
quality,
|
|
35
|
+
levels,
|
|
36
|
+
onQualityChange,
|
|
37
|
+
title = "Quality",
|
|
38
|
+
className,
|
|
39
|
+
onClose,
|
|
40
|
+
autoClose = true,
|
|
41
|
+
showAuto = true,
|
|
42
|
+
autoLabel = "Auto",
|
|
43
|
+
emptyMessage = "No quality options available"
|
|
44
|
+
}) {
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
injectCSS();
|
|
47
|
+
}, []);
|
|
48
|
+
const handleSelect = useCallback(
|
|
49
|
+
(level) => {
|
|
50
|
+
onQualityChange(level);
|
|
51
|
+
if (autoClose && onClose) {
|
|
52
|
+
onClose();
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
[onQualityChange, autoClose, onClose]
|
|
56
|
+
);
|
|
57
|
+
const sortedLevels = [...levels].sort((a, b) => b.height - a.height);
|
|
58
|
+
const isEmpty = sortedLevels.length === 0;
|
|
59
|
+
return /* @__PURE__ */ jsxs("div", { className: clsx("sv-quality-picker", className), "aria-label": title, children: [
|
|
60
|
+
title && /* @__PURE__ */ jsx("div", { className: "sv-quality-picker-title", children: title }),
|
|
61
|
+
isEmpty ? /* @__PURE__ */ jsx("div", { className: "sv-quality-picker-empty", children: emptyMessage }) : /* @__PURE__ */ jsxs("div", { className: "sv-quality-picker-options", children: [
|
|
62
|
+
showAuto && /* @__PURE__ */ jsxs(
|
|
63
|
+
"button",
|
|
64
|
+
{
|
|
65
|
+
type: "button",
|
|
66
|
+
className: "sv-quality-picker-option",
|
|
67
|
+
"data-selected": quality === -1,
|
|
68
|
+
onClick: () => handleSelect(-1),
|
|
69
|
+
"aria-selected": quality === -1,
|
|
70
|
+
children: [
|
|
71
|
+
/* @__PURE__ */ jsx("span", { className: "sv-quality-picker-option-label", children: autoLabel }),
|
|
72
|
+
/* @__PURE__ */ jsx("span", { className: "sv-quality-picker-option-check", children: /* @__PURE__ */ jsx(CheckIcon, {}) })
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
),
|
|
76
|
+
sortedLevels.map((level, index) => {
|
|
77
|
+
const isSelected = quality === index;
|
|
78
|
+
const badge = getQualityBadge(level.height);
|
|
79
|
+
return /* @__PURE__ */ jsxs(
|
|
80
|
+
"button",
|
|
81
|
+
{
|
|
82
|
+
type: "button",
|
|
83
|
+
className: "sv-quality-picker-option",
|
|
84
|
+
"data-selected": isSelected,
|
|
85
|
+
onClick: () => handleSelect(index),
|
|
86
|
+
"aria-selected": isSelected,
|
|
87
|
+
children: [
|
|
88
|
+
/* @__PURE__ */ jsxs("span", { className: "sv-quality-picker-option-label", children: [
|
|
89
|
+
formatQualityLabel(level),
|
|
90
|
+
badge && /* @__PURE__ */ jsx("span", { className: "sv-quality-picker-option-badge", children: badge })
|
|
91
|
+
] }),
|
|
92
|
+
/* @__PURE__ */ jsx("span", { className: "sv-quality-picker-option-check", children: /* @__PURE__ */ jsx(CheckIcon, {}) })
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
level.height
|
|
96
|
+
);
|
|
97
|
+
})
|
|
98
|
+
] })
|
|
99
|
+
] });
|
|
100
|
+
}
|
|
101
|
+
var QualityPickerHeadless = memo(QualityPickerHeadlessComponent);
|
|
102
|
+
|
|
103
|
+
export { QUALITY_PICKER_CSS, QualityPickerHeadless };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { BottomSheetHeadless, useBottomSheetContext } from './chunk-PJ4NMVMY.js';
|
|
2
|
+
import { clsx } from 'clsx';
|
|
3
|
+
import { memo, useEffect, useCallback } from 'react';
|
|
4
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
// src/components/AdvanceMenu/AdvanceMenu.css.ts
|
|
7
|
+
var ADVANCE_MENU_CSS = `.sv-advance-menu{--sv-advance-menu-bg:rgba(28,28,30,.95);--sv-advance-menu-border:rgba(255,255,255,.1);--sv-advance-menu-text:#fff;--sv-advance-menu-text-secondary:rgba(255,255,255,.6);--sv-advance-menu-backdrop:rgba(0,0,0,.5);--sv-advance-menu-item-hover:rgba(255,255,255,.1);--sv-advance-menu-item-active:rgba(255,255,255,.15);--sv-advance-menu-danger:#ff453a;--sv-advance-menu-icon:rgba(255,255,255,.8);--sv-advance-menu-radius:16px;--sv-advance-menu-item-height:52px;--sv-advance-menu-padding:8px;--sv-advance-menu-icon-size:24px;--sv-advance-menu-gap:12px;--sv-sheet-bg:var(--sv-advance-menu-bg);--sv-sheet-border-radius:var(--sv-advance-menu-radius);--sv-sheet-handle-bg:var(--sv-advance-menu-border)}.sv-advance-menu-backdrop{--sv-sheet-backdrop-bg:var(--sv-advance-menu-backdrop)}.sv-advance-menu-sheet{padding-bottom:env(safe-area-inset-bottom,0)}.sv-advance-menu-items{padding:var(--sv-advance-menu-padding);display:flex;flex-direction:column;gap:2px}.sv-advance-menu-item{display:flex;align-items:center;gap:var(--sv-advance-menu-gap);height:var(--sv-advance-menu-item-height);padding:0 16px;border:0;background:transparent;color:var(--sv-advance-menu-text);font-size:16px;font-weight:normal;text-align:left;cursor:pointer;border-radius:12px;transition:background-color 150ms ease;-webkit-tap-highlight-color:transparent}.sv-advance-menu-item:hover:not(:disabled){background:var(--sv-advance-menu-item-hover)}.sv-advance-menu-item:active:not(:disabled){background:var(--sv-advance-menu-item-active)}.sv-advance-menu-item:disabled{opacity:.5;cursor:not-allowed}.sv-advance-menu-item[data-danger="true"]{color:var(--sv-advance-menu-danger)}.sv-advance-menu-item[data-danger="true"] .sv-advance-menu-item-icon{color:var(--sv-advance-menu-danger)}.sv-advance-menu-item-icon{width:var(--sv-advance-menu-icon-size);height:var(--sv-advance-menu-icon-size);color:var(--sv-advance-menu-icon);flex-shrink:0;display:flex;align-items:center;justify-content:center}.sv-advance-menu-item-icon svg{width:100%;height:100%}.sv-advance-menu-item-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sv-advance-menu-item-value{color:var(--sv-advance-menu-text-secondary);font-size:14px}.sv-advance-menu-separator{height:1px;background:var(--sv-advance-menu-border);margin:8px 16px}.sv-advance-menu-section-title{padding:8px 16px 4px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--sv-advance-menu-text-secondary)}`;
|
|
8
|
+
var cssInjected = false;
|
|
9
|
+
function injectCSS() {
|
|
10
|
+
if (cssInjected || typeof document === "undefined") return;
|
|
11
|
+
const styleId = "sv-advance-menu-styles";
|
|
12
|
+
if (!document.getElementById(styleId)) {
|
|
13
|
+
const style = document.createElement("style");
|
|
14
|
+
style.id = styleId;
|
|
15
|
+
style.textContent = ADVANCE_MENU_CSS;
|
|
16
|
+
document.head.appendChild(style);
|
|
17
|
+
}
|
|
18
|
+
cssInjected = true;
|
|
19
|
+
}
|
|
20
|
+
function AdvanceMenuHeadlessComponent({
|
|
21
|
+
isOpen,
|
|
22
|
+
onClose,
|
|
23
|
+
children,
|
|
24
|
+
className,
|
|
25
|
+
sheetClassName,
|
|
26
|
+
backdropClassName,
|
|
27
|
+
closeOnBackdropClick = true,
|
|
28
|
+
closeOnEscape = true,
|
|
29
|
+
showDragHandle = true,
|
|
30
|
+
ariaLabel = "Menu"
|
|
31
|
+
}) {
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
injectCSS();
|
|
34
|
+
}, []);
|
|
35
|
+
return /* @__PURE__ */ jsx(
|
|
36
|
+
BottomSheetHeadless,
|
|
37
|
+
{
|
|
38
|
+
isOpen,
|
|
39
|
+
onClose,
|
|
40
|
+
height: "auto",
|
|
41
|
+
className: clsx("sv-advance-menu", "sv-advance-menu-sheet", sheetClassName, className),
|
|
42
|
+
backdropClassName: clsx("sv-advance-menu-backdrop", backdropClassName),
|
|
43
|
+
contentClassName: "sv-advance-menu-items",
|
|
44
|
+
closeOnBackdropClick,
|
|
45
|
+
closeOnEscape,
|
|
46
|
+
showDragHandle,
|
|
47
|
+
ariaLabel,
|
|
48
|
+
children
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
function AdvanceMenuItem({
|
|
53
|
+
icon,
|
|
54
|
+
label,
|
|
55
|
+
value,
|
|
56
|
+
onClick,
|
|
57
|
+
disabled = false,
|
|
58
|
+
danger = false,
|
|
59
|
+
className,
|
|
60
|
+
closeOnClick = false
|
|
61
|
+
}) {
|
|
62
|
+
const { onClose } = useBottomSheetContext();
|
|
63
|
+
const handleClick = useCallback(() => {
|
|
64
|
+
if (disabled) return;
|
|
65
|
+
onClick?.();
|
|
66
|
+
if (closeOnClick) {
|
|
67
|
+
onClose();
|
|
68
|
+
}
|
|
69
|
+
}, [disabled, onClick, closeOnClick, onClose]);
|
|
70
|
+
return /* @__PURE__ */ jsxs(
|
|
71
|
+
"button",
|
|
72
|
+
{
|
|
73
|
+
type: "button",
|
|
74
|
+
className: clsx("sv-advance-menu-item", className),
|
|
75
|
+
onClick: handleClick,
|
|
76
|
+
disabled,
|
|
77
|
+
"data-danger": danger,
|
|
78
|
+
role: "menuitem",
|
|
79
|
+
children: [
|
|
80
|
+
icon && /* @__PURE__ */ jsx("span", { className: "sv-advance-menu-item-icon", children: icon }),
|
|
81
|
+
/* @__PURE__ */ jsx("span", { className: "sv-advance-menu-item-label", children: label }),
|
|
82
|
+
value && /* @__PURE__ */ jsx("span", { className: "sv-advance-menu-item-value", children: value })
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
function AdvanceMenuSeparator({ className }) {
|
|
88
|
+
return /* @__PURE__ */ jsx("div", { className: clsx("sv-advance-menu-separator", className) });
|
|
89
|
+
}
|
|
90
|
+
function AdvanceMenuSectionTitle({
|
|
91
|
+
children,
|
|
92
|
+
className
|
|
93
|
+
}) {
|
|
94
|
+
return /* @__PURE__ */ jsx("div", { className: clsx("sv-advance-menu-section-title", className), children });
|
|
95
|
+
}
|
|
96
|
+
var AdvanceMenuHeadless = Object.assign(memo(AdvanceMenuHeadlessComponent), {
|
|
97
|
+
Item: memo(AdvanceMenuItem),
|
|
98
|
+
Separator: memo(AdvanceMenuSeparator),
|
|
99
|
+
SectionTitle: memo(AdvanceMenuSectionTitle)
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
export { ADVANCE_MENU_CSS, AdvanceMenuHeadless };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { clsx, clsx as clsx2 } from 'clsx';
|