@xhub-short/ui 0.1.0-beta.1 → 0.1.0-beta.10

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.
Files changed (45) hide show
  1. package/dist/CommentSheet.css-BeCrEaUG.d.ts +221 -0
  2. package/dist/{chunk-2PTMP65P.js → chunk-2FSDVYER.js} +8 -9
  3. package/dist/{chunk-WKX2WBVO.js → chunk-3XPJHUYL.js} +1 -39
  4. package/dist/{chunk-ANGBSV7L.js → chunk-AC2IFAJR.js} +10 -5
  5. package/dist/{chunk-4YDIRPIN.js → chunk-ANCP53F3.js} +3 -3
  6. package/dist/chunk-AQHD6LPS.js +430 -0
  7. package/dist/{chunk-HW4LXTFT.js → chunk-CL6BS7GB.js} +7 -5
  8. package/dist/{chunk-YW23IBKF.js → chunk-ECR42RKK.js} +46 -5
  9. package/dist/chunk-EDWS2IPH.js +1 -0
  10. package/dist/chunk-FNXTPQ6L.js +2573 -0
  11. package/dist/{chunk-DHQJBXQW.js → chunk-KWHMZ6H5.js} +1 -1
  12. package/dist/{chunk-UXMA4KJZ.js → chunk-RMLTPW5S.js} +3 -2
  13. package/dist/{chunk-SSJDO24Q.js → chunk-SZXFH334.js} +1 -1
  14. package/dist/{chunk-4MN72OZH.js → chunk-UNV3NWN6.js} +4 -4
  15. package/dist/{chunk-ZZDQKP4R.js → chunk-WCRDTBCZ.js} +94 -155
  16. package/dist/{chunk-XAOEHLOX.js → chunk-XDIH66C4.js} +245 -52
  17. package/dist/components/ActionBar/index.js +1 -1
  18. package/dist/components/AuthorInfo/index.d.ts +5 -1
  19. package/dist/components/AuthorInfo/index.js +1 -1
  20. package/dist/components/BlurhashPlaceholder/index.d.ts +67 -0
  21. package/dist/components/BlurhashPlaceholder/index.js +150 -0
  22. package/dist/components/CommentSheet/index.d.ts +164 -0
  23. package/dist/components/CommentSheet/index.js +1 -0
  24. package/dist/components/ErrorBoundary/index.js +1 -1
  25. package/dist/components/OfflineIndicator/index.d.ts +56 -0
  26. package/dist/components/OfflineIndicator/index.js +151 -0
  27. package/dist/components/ProgressBar/index.d.ts +30 -2
  28. package/dist/components/ProgressBar/index.js +1 -1
  29. package/dist/components/Skeleton/index.js +1 -1
  30. package/dist/components/SubtitleDisplay/index.d.ts +94 -0
  31. package/dist/components/SubtitleDisplay/index.js +165 -0
  32. package/dist/components/VideoFeed/index.d.ts +11 -0
  33. package/dist/components/VideoFeed/index.js +1 -1
  34. package/dist/components/VideoInfo/index.js +1 -1
  35. package/dist/components/VideoPlayer/index.d.ts +14 -41
  36. package/dist/components/VideoPlayer/index.js +1 -1
  37. package/dist/components/VideoSlot/index.d.ts +124 -64
  38. package/dist/components/VideoSlot/index.js +1 -1
  39. package/dist/components/VirtualSlider/index.d.ts +339 -0
  40. package/dist/components/VirtualSlider/index.js +1 -0
  41. package/dist/components/icons/index.js +1 -1
  42. package/dist/index.d.ts +76 -93
  43. package/dist/index.js +75 -27
  44. package/package.json +53 -8
  45. package/dist/use-gesture-react.esm-3SV4QLEJ.js +0 -1893
@@ -0,0 +1,339 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as react from 'react';
3
+ import { ReactNode } from 'react';
4
+
5
+ /**
6
+ * VirtualSlider Context
7
+ *
8
+ * Generic context for VirtualSlider compound components.
9
+ * Provides slider state and navigation to child components.
10
+ *
11
+ * @template T - The type of items in the slider
12
+ */
13
+ /**
14
+ * VirtualSlider context value
15
+ *
16
+ * @template T - The type of items in the slider
17
+ */
18
+ interface VirtualSliderContextValue<T> {
19
+ /** All items in the slider */
20
+ items: T[];
21
+ /** Current active index */
22
+ activeIndex: number;
23
+ /** Whether user is currently swiping */
24
+ isSwiping: boolean;
25
+ /** Current drag offset in pixels */
26
+ dragOffset: number;
27
+ /** Container height in pixels */
28
+ containerHeight: number;
29
+ /** Navigate to specific index */
30
+ goToIndex: (index: number) => void;
31
+ /** Total item count */
32
+ totalCount: number;
33
+ }
34
+ /**
35
+ * VirtualSlider context
36
+ *
37
+ * Generic context that can hold any item type.
38
+ * Use VirtualSliderContext.Provider to provide values.
39
+ *
40
+ * @internal Use hooks instead of accessing context directly
41
+ */
42
+ declare const VirtualSliderContext: react.Context<VirtualSliderContextValue<any> | null>;
43
+ /**
44
+ * Hook to access VirtualSlider context
45
+ *
46
+ * @throws Error if used outside VirtualSlider
47
+ *
48
+ * @example
49
+ * ```tsx
50
+ * function SlotContent<T>() {
51
+ * const { items, activeIndex } = useVirtualSliderContext<T>();
52
+ * return <div>Item {activeIndex + 1} of {items.length}</div>;
53
+ * }
54
+ * ```
55
+ */
56
+ declare function useVirtualSliderContext<T>(): VirtualSliderContextValue<T>;
57
+ /**
58
+ * Hook to optionally access VirtualSlider context
59
+ *
60
+ * Returns null if not inside a VirtualSlider (doesn't throw).
61
+ * Useful for components that can work both inside and outside slider.
62
+ *
63
+ * @example
64
+ * ```tsx
65
+ * function OptionalSlotInfo<T>() {
66
+ * const context = useOptionalVirtualSliderContext<T>();
67
+ * if (!context) return null;
68
+ * return <div>Slide {context.activeIndex + 1}</div>;
69
+ * }
70
+ * ```
71
+ */
72
+ declare function useOptionalVirtualSliderContext<T>(): VirtualSliderContextValue<T> | null;
73
+ /**
74
+ * Hook to get current active index from slider context
75
+ *
76
+ * @throws Error if used outside VirtualSlider
77
+ */
78
+ declare function useSliderActiveIndex(): number;
79
+ /**
80
+ * Hook to check if currently swiping
81
+ *
82
+ * @throws Error if used outside VirtualSlider
83
+ */
84
+ declare function useSliderIsSwiping(): boolean;
85
+
86
+ /**
87
+ * useSliderPosition Hook
88
+ *
89
+ * Calculates position and visibility for slots in a virtual slider.
90
+ * Uses position-based virtual scrolling (TikTok-style).
91
+ *
92
+ * Architecture:
93
+ * - Only renders slots within the viewport + buffer
94
+ * - Uses CSS transforms for smooth 60fps scrolling
95
+ * - No state updates during scroll (uses refs)
96
+ * - Pure math, no DOM access
97
+ *
98
+ * ⚠️ Resize Handling:
99
+ * This hook recalculates on containerHeight change.
100
+ * Parent should handle resize transitions (e.g., debounce, or set isResizing=true
101
+ * to suppress transitions during resize).
102
+ */
103
+ /**
104
+ * Position data for a single slot
105
+ */
106
+ interface SlotPosition {
107
+ /** Slot index */
108
+ index: number;
109
+ /**
110
+ * Logical Y position from top (px)
111
+ * Note: This is the logical position, NOT a CSS property.
112
+ * Use `transform` for actual positioning.
113
+ * Useful for debugging and testing.
114
+ */
115
+ top: number;
116
+ /** Whether slot is the active (focused) one */
117
+ isActive: boolean;
118
+ /**
119
+ * Absolute distance from active slot (0 = active, 1 = adjacent, etc.)
120
+ * Always >= 0
121
+ */
122
+ distance: number;
123
+ /**
124
+ * Signed distance from active slot
125
+ * Negative = above active, Positive = below active
126
+ * Useful for direction-aware animations
127
+ */
128
+ signedDistance: number;
129
+ /** CSS transform style */
130
+ transform: string;
131
+ /** Opacity for transition effect */
132
+ opacity: number;
133
+ }
134
+ /**
135
+ * Options for useSliderPosition hook
136
+ */
137
+ interface UseSliderPositionOptions {
138
+ /** Total number of items */
139
+ totalCount: number;
140
+ /** Current active index */
141
+ activeIndex: number;
142
+ /** Container height in pixels */
143
+ containerHeight: number;
144
+ /** Current drag offset in pixels (during swipe) */
145
+ dragOffset: number;
146
+ /** Whether user is currently swiping */
147
+ isSwiping: boolean;
148
+ /**
149
+ * Whether container is being resized
150
+ * When true, opacity transitions may be suppressed
151
+ */
152
+ isResizing?: boolean;
153
+ /** Number of slots to render before/after active (default: 1) */
154
+ bufferSize?: number;
155
+ }
156
+ /**
157
+ * Return value from useSliderPosition hook
158
+ */
159
+ interface UseSliderPositionReturn {
160
+ /** Positions for all slots that should render */
161
+ slots: SlotPosition[];
162
+ /** Current scroll offset (for container transform) */
163
+ scrollOffset: number;
164
+ /** Whether at start of items (activeIndex === 0) */
165
+ isAtStart: boolean;
166
+ /**
167
+ * Whether at last index (activeIndex === totalCount - 1)
168
+ * Note: This is purely positional. Check hasMore to determine
169
+ * if more content can be loaded.
170
+ */
171
+ isAtLastIndex: boolean;
172
+ /** Clamped active index (guaranteed valid) */
173
+ clampedActiveIndex: number;
174
+ }
175
+ /**
176
+ * Calculate slot positions for virtual scrolling
177
+ *
178
+ * Key behaviors:
179
+ * - Active slot is at position 0 (top of viewport)
180
+ * - Only active + buffer slots are calculated (max 3 by default)
181
+ * - During swipe, dragOffset shifts all positions
182
+ * - Smooth transitions via CSS transform
183
+ *
184
+ * @example
185
+ * ```tsx
186
+ * const { slots, isAtLastIndex } = useSliderPosition({
187
+ * totalCount: items.length,
188
+ * activeIndex,
189
+ * containerHeight: 800,
190
+ * dragOffset,
191
+ * isSwiping,
192
+ * });
193
+ *
194
+ * slots.forEach(slot => {
195
+ * // slot.transform = "translateY(800px)"
196
+ * // slot.signedDistance = 1 (below active)
197
+ * });
198
+ * ```
199
+ */
200
+ declare function useSliderPosition(options: UseSliderPositionOptions): UseSliderPositionReturn;
201
+ /**
202
+ * Calculate the slot index from a Y position
203
+ * Useful for snap-to-slot logic
204
+ *
205
+ * @param yPosition - Current scroll position (negative = scrolled down)
206
+ * @param containerHeight - Height of each slot
207
+ * @param totalCount - Total number of slots
208
+ * @returns Clamped slot index
209
+ */
210
+ declare function getSlotIndexFromPosition(yPosition: number, containerHeight: number, totalCount: number): number;
211
+
212
+ /**
213
+ * VirtualSlider Props
214
+ *
215
+ * @template T - The type of items in the slider
216
+ */
217
+ interface VirtualSliderProps<T> {
218
+ /** Items to display */
219
+ items: T[];
220
+ /** Unique key extractor for each item */
221
+ keyExtractor: (item: T, index: number) => string;
222
+ /** Render function for each item */
223
+ renderItem: (item: T, index: number, isActive: boolean) => ReactNode;
224
+ /** Current active index */
225
+ activeIndex: number;
226
+ /** Whether user is currently swiping */
227
+ isSwiping: boolean;
228
+ /** Current drag offset in pixels */
229
+ dragOffset: number;
230
+ /** Navigate to specific index */
231
+ goToIndex: (index: number) => void;
232
+ /** Called when active index changes */
233
+ onIndexChange?: (index: number) => void;
234
+ /** Called when reaching near end of items */
235
+ onEndReached?: () => void;
236
+ /** Threshold for triggering onEndReached (default: 2) */
237
+ endReachedThreshold?: number;
238
+ /** Number of slots to render before/after active (default: 1) */
239
+ bufferSize?: number;
240
+ /** Whether items are loading */
241
+ isLoading?: boolean;
242
+ /** Whether more items can be loaded */
243
+ hasMore?: boolean;
244
+ /** Custom loading UI */
245
+ loadingComponent?: ReactNode;
246
+ /** Custom empty state UI */
247
+ emptyComponent?: ReactNode;
248
+ /** Custom end of list UI */
249
+ endComponent?: ReactNode;
250
+ /** Loading text (if not using loadingComponent) */
251
+ loadingText?: string;
252
+ /** Empty text (if not using emptyComponent) */
253
+ emptyText?: string;
254
+ /** End text (if not using endComponent) */
255
+ endText?: string;
256
+ /** Container height (default: 100vh via CSS) */
257
+ height?: number | string;
258
+ /** Additional CSS classes */
259
+ className?: string;
260
+ /** Disable inline transform styles (for direct DOM manipulation) */
261
+ disableInlineTransforms?: boolean;
262
+ /** Test ID */
263
+ testId?: string;
264
+ }
265
+ /**
266
+ * Generic VirtualSlider Component
267
+ *
268
+ * Renders a position-based virtual slider that can handle any content type.
269
+ * Only active slot + buffer slots are rendered for performance.
270
+ *
271
+ * @template T - The type of items in the slider
272
+ */
273
+ declare function VirtualSlider<T>({ items, keyExtractor, renderItem, activeIndex, isSwiping, dragOffset, goToIndex, onIndexChange, onEndReached, endReachedThreshold, bufferSize, isLoading, hasMore, loadingComponent, emptyComponent, endComponent, loadingText, emptyText, endText, height, className, disableInlineTransforms, testId, }: VirtualSliderProps<T>): react_jsx_runtime.JSX.Element;
274
+ declare namespace VirtualSlider {
275
+ var displayName: string;
276
+ }
277
+
278
+ /**
279
+ * VirtualSlider Constants
280
+ *
281
+ * DOM contract constants for VirtualSlider components.
282
+ * Used for direct DOM manipulation in wired components.
283
+ */
284
+ /** Root container class */
285
+ declare const SLIDER_CLASS = "sv-slider";
286
+ /** Inner container class */
287
+ declare const SLIDER_CONTAINER_CLASS = "sv-slider__container";
288
+ /** Individual slot class */
289
+ declare const SLIDER_SLOT_CLASS = "sv-slider__slot";
290
+ /** Active slot modifier */
291
+ declare const SLIDER_SLOT_ACTIVE_CLASS = "sv-slider__slot--active";
292
+ /** Adjacent (non-active) slot modifier */
293
+ declare const SLIDER_SLOT_ADJACENT_CLASS = "sv-slider__slot--adjacent";
294
+ /** Transitioning (not swiping) modifier */
295
+ declare const SLIDER_SLOT_TRANSITIONING_CLASS = "sv-slider__slot--transitioning";
296
+ /** Swiping state modifier */
297
+ declare const SLIDER_CONTAINER_SWIPING_CLASS = "sv-slider__container--swiping";
298
+ /** Snapping state modifier */
299
+ declare const SLIDER_CONTAINER_SNAPPING_CLASS = "sv-slider__container--snapping";
300
+ /**
301
+ * Data attribute for slot index (HTML attribute name)
302
+ * @example <div data-slot-index="2">
303
+ */
304
+ declare const SLOT_INDEX_ATTR = "data-slot-index";
305
+ /**
306
+ * Dataset key for slot index (JavaScript access)
307
+ * @example element.dataset.slotIndex
308
+ */
309
+ declare const SLOT_INDEX_DATASET_KEY = "slotIndex";
310
+ /**
311
+ * Data attribute for active slot flag
312
+ * @example <div data-slot-active="true">
313
+ */
314
+ declare const SLOT_ACTIVE_ATTR = "data-slot-active";
315
+ /**
316
+ * Dataset key for active slot flag
317
+ * @example element.dataset.slotActive === 'true'
318
+ */
319
+ declare const SLOT_ACTIVE_DATASET_KEY = "slotActive";
320
+ /** Default buffer size (slots before/after active) */
321
+ declare const DEFAULT_BUFFER_SIZE = 1;
322
+ /** Default end reached threshold */
323
+ declare const DEFAULT_END_REACHED_THRESHOLD = 2;
324
+ /** Default loading text */
325
+ declare const DEFAULT_LOADING_TEXT = "Loading...";
326
+ /** Default empty text */
327
+ declare const DEFAULT_EMPTY_TEXT = "No items";
328
+ /** Default end text */
329
+ declare const DEFAULT_END_TEXT = "You've reached the end";
330
+
331
+ /**
332
+ * VirtualSlider CSS Styles
333
+ *
334
+ * Generic styles for position-based virtual slider.
335
+ * Uses sv-slider prefix to avoid conflicts.
336
+ */
337
+ declare const VIRTUAL_SLIDER_CSS = "\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n * Container\n * \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.sv-slider {\n position: relative;\n width: 100%;\n height: 100vh;\n overflow: hidden;\n background-color: var(--sv-slider-bg, #000);\n touch-action: none;\n -webkit-user-select: none;\n user-select: none;\n}\n\n.sv-slider__container {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n/* Transition during snap (not swiping) */\n.sv-slider__container--snapping {\n /* Transitions handled by individual slots */\n}\n\n/* During swipe - no transitions for immediate response */\n.sv-slider__container--swiping {\n /* Slots handle their own transitions */\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n * Slots\n * \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.sv-slider__slot {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n will-change: transform, opacity;\n contain: layout style;\n}\n\n/* Active slot */\n.sv-slider__slot--active {\n z-index: 2;\n}\n\n/* Adjacent slots (before/after active) */\n.sv-slider__slot--adjacent {\n z-index: 1;\n}\n\n/* Smooth transition when snapping */\n.sv-slider__slot--transitioning {\n transition:\n transform 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94),\n opacity 0.3s ease;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n * Loading State\n * \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.sv-slider__loading {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 16px;\n background-color: var(--sv-slider-bg, #000);\n color: var(--sv-slider-text, #fff);\n}\n\n.sv-slider__loading-spinner {\n width: 40px;\n height: 40px;\n border: 3px solid rgba(255, 255, 255, 0.2);\n border-top-color: var(--sv-color-primary, #fe2c55);\n border-radius: 50%;\n animation: sv-slider-spin 0.8s linear infinite;\n}\n\n@keyframes sv-slider-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n.sv-slider__loading-text {\n font-size: 14px;\n color: var(--sv-slider-text-muted, rgba(255, 255, 255, 0.7));\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n * Empty State\n * \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.sv-slider__empty {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n background-color: var(--sv-slider-bg, #000);\n color: var(--sv-slider-text, #fff);\n}\n\n.sv-slider__empty-icon {\n font-size: 48px;\n opacity: 0.5;\n}\n\n.sv-slider__empty-text {\n font-size: 16px;\n color: var(--sv-slider-text-muted, rgba(255, 255, 255, 0.7));\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n * End of List\n * \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n\n.sv-slider__end {\n position: absolute;\n bottom: var(--sv-safe-area-bottom, 20px);\n left: 0;\n right: 0;\n text-align: center;\n padding: 12px 16px;\n font-size: 14px;\n color: var(--sv-slider-text-muted, rgba(255, 255, 255, 0.6));\n pointer-events: none;\n z-index: 10;\n}\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n * CSS Variables Reference\n * \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n *\n * --sv-slider-bg: Background color (default: #000)\n * --sv-slider-text: Text color (default: #fff)\n * --sv-slider-text-muted: Muted text color (default: rgba(255,255,255,0.7))\n * --sv-color-primary: Primary accent color (default: #fe2c55)\n * --sv-safe-area-bottom: Bottom safe area for notched devices\n *\n * \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n";
338
+
339
+ export { DEFAULT_BUFFER_SIZE, DEFAULT_EMPTY_TEXT, DEFAULT_END_REACHED_THRESHOLD, DEFAULT_END_TEXT, DEFAULT_LOADING_TEXT, SLIDER_CLASS, SLIDER_CONTAINER_CLASS, SLIDER_CONTAINER_SNAPPING_CLASS, SLIDER_CONTAINER_SWIPING_CLASS, SLIDER_SLOT_ACTIVE_CLASS, SLIDER_SLOT_ADJACENT_CLASS, SLIDER_SLOT_CLASS, SLIDER_SLOT_TRANSITIONING_CLASS, SLOT_ACTIVE_ATTR, SLOT_ACTIVE_DATASET_KEY, SLOT_INDEX_ATTR, SLOT_INDEX_DATASET_KEY, type SlotPosition, type UseSliderPositionOptions, type UseSliderPositionReturn, VIRTUAL_SLIDER_CSS, VirtualSlider, VirtualSliderContext, type VirtualSliderContextValue, type VirtualSliderProps, getSlotIndexFromPosition, useOptionalVirtualSliderContext, useSliderActiveIndex, useSliderIsSwiping, useSliderPosition, useVirtualSliderContext };
@@ -0,0 +1 @@
1
+ export { DEFAULT_BUFFER_SIZE, DEFAULT_EMPTY_TEXT, DEFAULT_END_REACHED_THRESHOLD, DEFAULT_END_TEXT, DEFAULT_LOADING_TEXT, SLIDER_CLASS, SLIDER_CONTAINER_CLASS, SLIDER_CONTAINER_SNAPPING_CLASS, SLIDER_CONTAINER_SWIPING_CLASS, SLIDER_SLOT_ACTIVE_CLASS, SLIDER_SLOT_ADJACENT_CLASS, SLIDER_SLOT_CLASS, SLIDER_SLOT_TRANSITIONING_CLASS, SLOT_ACTIVE_ATTR, SLOT_ACTIVE_DATASET_KEY, SLOT_INDEX_ATTR, SLOT_INDEX_DATASET_KEY, VIRTUAL_SLIDER_CSS, VirtualSlider, VirtualSliderContext, getSlotIndexFromPosition, useOptionalVirtualSliderContext, useSliderActiveIndex, useSliderIsSwiping, useSliderPosition, useVirtualSliderContext } from '../../chunk-AQHD6LPS.js';
@@ -1 +1 @@
1
- export { BookmarkFilledIcon, BookmarkIcon, CloseIcon, CommentIcon, HeartFilledIcon, HeartIcon, MoreIcon, MusicIcon, PauseIcon, PlayIcon, PlusIcon, ShareIcon, UserCheckIcon, UserPlusIcon, VerifiedIcon, VolumeIcon, VolumeMutedIcon } from '../../chunk-4YDIRPIN.js';
1
+ export { BookmarkFilledIcon, BookmarkIcon, CloseIcon, CommentIcon, HeartFilledIcon, HeartIcon, MoreIcon, MusicIcon, PauseIcon, PlayIcon, PlusIcon, ShareIcon, UserCheckIcon, UserPlusIcon, VerifiedIcon, VolumeIcon, VolumeMutedIcon } from '../../chunk-ANCP53F3.js';