@once-ui-system/core 1.7.11 → 1.7.13
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 +53 -0
- package/README.md +27 -0
- package/agent/once-ui-codegen.mdc +27 -0
- package/ai/catalog.json +1650 -0
- package/ai/catalog.seed.json +411 -0
- package/ai/components/Accordion.json +136 -0
- package/ai/components/AccordionGroup.json +128 -0
- package/ai/components/Animation.json +146 -0
- package/ai/components/Arrow.json +128 -0
- package/ai/components/AutoScroll.json +130 -0
- package/ai/components/Avatar.json +133 -0
- package/ai/components/AvatarGroup.json +129 -0
- package/ai/components/Background.json +131 -0
- package/ai/components/Badge.json +132 -0
- package/ai/components/Banner.json +122 -0
- package/ai/components/BarChart.json +123 -0
- package/ai/components/BlobFx.json +125 -0
- package/ai/components/BlockQuote.json +132 -0
- package/ai/components/Button.json +26 -0
- package/ai/components/Card.json +129 -0
- package/ai/components/Carousel.json +134 -0
- package/ai/components/CelebrationFx.json +132 -0
- package/ai/components/ChartHeader.json +130 -0
- package/ai/components/ChartStatus.json +12 -0
- package/ai/components/Checkbox.json +13 -0
- package/ai/components/Chip.json +132 -0
- package/ai/components/CodeBlock.json +122 -0
- package/ai/components/ColorInput.json +13 -0
- package/ai/components/Column.json +128 -0
- package/ai/components/CompareImage.json +126 -0
- package/ai/components/ContextMenu.json +22 -0
- package/ai/components/CountFx.json +82 -0
- package/ai/components/CountdownFx.json +11 -0
- package/ai/components/Cursor.json +9 -0
- package/ai/components/CursorCard.json +128 -0
- package/ai/components/DataTooltip.json +15 -0
- package/ai/components/DateInput.json +21 -0
- package/ai/components/DatePicker.json +143 -0
- package/ai/components/DateRangeInput.json +18 -0
- package/ai/components/DateRangePicker.json +129 -0
- package/ai/components/Dialog.json +134 -0
- package/ai/components/DialogProvider.json +8 -0
- package/ai/components/Dropdown.json +128 -0
- package/ai/components/DropdownWrapper.json +28 -0
- package/ai/components/EmojiPicker.json +129 -0
- package/ai/components/EmojiPickerDropdown.json +13 -0
- package/ai/components/Fade.json +130 -0
- package/ai/components/FadingLettersFx.json +77 -0
- package/ai/components/Feedback.json +132 -0
- package/ai/components/Flex.json +125 -0
- package/ai/components/FlipFx.json +133 -0
- package/ai/components/GlitchFx.json +128 -0
- package/ai/components/Grid.json +121 -0
- package/ai/components/Heading.json +75 -0
- package/ai/components/HeadingLink.json +127 -0
- package/ai/components/HeadingNav.json +124 -0
- package/ai/components/HoloFx.json +128 -0
- package/ai/components/Hover.json +130 -0
- package/ai/components/HoverCard.json +122 -0
- package/ai/components/Icon.json +132 -0
- package/ai/components/IconButton.json +22 -0
- package/ai/components/InfiniteScroll.json +130 -0
- package/ai/components/InlineCode.json +126 -0
- package/ai/components/Input.json +24 -0
- package/ai/components/InteractiveDetails.json +14 -0
- package/ai/components/Kbar.json +10 -0
- package/ai/components/Kbd.json +127 -0
- package/ai/components/Legend.json +14 -0
- package/ai/components/LetterFx.json +14 -0
- package/ai/components/Line.json +125 -0
- package/ai/components/LineBarChart.json +123 -0
- package/ai/components/LineChart.json +123 -0
- package/ai/components/LinearGauge.json +130 -0
- package/ai/components/LinearGradient.json +15 -0
- package/ai/components/List.json +127 -0
- package/ai/components/ListItem.json +77 -0
- package/ai/components/Logo.json +16 -0
- package/ai/components/LogoCloud.json +124 -0
- package/ai/components/Mask.json +131 -0
- package/ai/components/MasonryGrid.json +132 -0
- package/ai/components/MatrixFx.json +135 -0
- package/ai/components/Media.json +142 -0
- package/ai/components/MediaUpload.json +122 -0
- package/ai/components/MegaMenu.json +125 -0
- package/ai/components/MobileMegaMenu.json +125 -0
- package/ai/components/Modal.json +12 -0
- package/ai/components/NavIcon.json +127 -0
- package/ai/components/NumberInput.json +16 -0
- package/ai/components/OTPInput.json +13 -0
- package/ai/components/OgCard.json +135 -0
- package/ai/components/Option.json +137 -0
- package/ai/components/Particle.json +135 -0
- package/ai/components/PasswordInput.json +8 -0
- package/ai/components/PieChart.json +123 -0
- package/ai/components/ProgressBar.json +131 -0
- package/ai/components/Pulse.json +129 -0
- package/ai/components/RadialGauge.json +134 -0
- package/ai/components/RadialGradient.json +16 -0
- package/ai/components/RadioButton.json +17 -0
- package/ai/components/RevealFx.json +131 -0
- package/ai/components/Row.json +128 -0
- package/ai/components/Schema.json +17 -0
- package/ai/components/ScrollContainer.json +126 -0
- package/ai/components/ScrollToTop.json +124 -0
- package/ai/components/Scroller.json +128 -0
- package/ai/components/SegmentedControl.json +132 -0
- package/ai/components/Select.json +21 -0
- package/ai/components/ShineFx.json +80 -0
- package/ai/components/Skeleton.json +129 -0
- package/ai/components/Slider.json +17 -0
- package/ai/components/SmartLink.json +17 -0
- package/ai/components/Spinner.json +127 -0
- package/ai/components/SplitView.json +129 -0
- package/ai/components/StatusIndicator.json +128 -0
- package/ai/components/StyleOverlay.json +126 -0
- package/ai/components/StylePanel.json +125 -0
- package/ai/components/Swiper.json +130 -0
- package/ai/components/Switch.json +20 -0
- package/ai/components/Table.json +140 -0
- package/ai/components/Tag.json +129 -0
- package/ai/components/TagInput.json +12 -0
- package/ai/components/Text.json +72 -0
- package/ai/components/Textarea.json +24 -0
- package/ai/components/ThemeSwitcher.json +122 -0
- package/ai/components/TiltFx.json +126 -0
- package/ai/components/Timeline.json +126 -0
- package/ai/components/Toast.json +13 -0
- package/ai/components/Toaster.json +14 -0
- package/ai/components/ToggleButton.json +24 -0
- package/ai/components/Tooltip.json +129 -0
- package/ai/components/TypeFx.json +15 -0
- package/ai/components/User.json +15 -0
- package/ai/components/UserMenu.json +16 -0
- package/ai/components/WeatherFx.json +133 -0
- package/ai/examples/auth.tsx +105 -0
- package/ai/examples/blocks/Background6.tsx +25 -0
- package/ai/examples/blocks/Chat1.tsx +70 -0
- package/ai/examples/blocks/Dashboard1.tsx +404 -0
- package/ai/examples/blocks/Feed3.tsx +151 -0
- package/ai/examples/blocks/Footer1.tsx +30 -0
- package/ai/examples/blocks/Footer2.tsx +96 -0
- package/ai/examples/blocks/Footer3.tsx +127 -0
- package/ai/examples/blocks/Footer4.tsx +406 -0
- package/ai/examples/blocks/Header1.tsx +370 -0
- package/ai/examples/blocks/Header2.tsx +98 -0
- package/ai/examples/blocks/Header3.tsx +133 -0
- package/ai/examples/blocks/Header4.tsx +123 -0
- package/ai/examples/blocks/Productivity1.tsx +318 -0
- package/ai/examples/blocks/Roadmap1.tsx +133 -0
- package/ai/examples/blocks/Sidebar1.tsx +34 -0
- package/ai/examples/blocks/Sidebar2.tsx +17 -0
- package/ai/examples/blocks/Sidebar4.tsx +92 -0
- package/ai/examples/blocks/Sidebar5.tsx +73 -0
- package/ai/examples/blocks/Streaming1.tsx +353 -0
- package/ai/examples/blocks/Table1.tsx +303 -0
- package/ai/examples/blocks/Waitlist1.tsx +141 -0
- package/ai/examples/blocks/content/chat1content.ts +65 -0
- package/ai/examples/blocks/content/resources.ts +5 -0
- package/ai/examples/blocks/content/roadmap1content.ts +51 -0
- package/ai/examples/blocks/manifest.json +191 -0
- package/ai/examples/dashboard.tsx +150 -0
- package/ai/examples/marketing-hero.tsx +152 -0
- package/ai/examples/pricing.tsx +219 -0
- package/ai/examples/settings.tsx +140 -0
- package/ai/gotchas.json +85 -0
- package/ai/manifest.json +21 -0
- package/ai/rules.compact.md +73 -0
- package/ai/spec.json +2694 -2701
- package/ai/tasks/auth.json +23 -0
- package/ai/tasks/chat.json +28 -0
- package/ai/tasks/dashboard.json +39 -0
- package/ai/tasks/index.json +12 -0
- package/ai/tasks/marketing-hero.json +38 -0
- package/ai/tasks/pricing.json +42 -0
- package/ai/tasks/roadmap.json +22 -0
- package/ai/tasks/settings.json +34 -0
- package/dist/AGENTS.md +53 -0
- package/dist/README.md +27 -0
- package/dist/agent/once-ui-codegen.mdc +27 -0
- package/dist/ai/catalog.json +1650 -0
- package/dist/ai/catalog.seed.json +411 -0
- package/dist/ai/components/Accordion.json +136 -0
- package/dist/ai/components/AccordionGroup.json +128 -0
- package/dist/ai/components/Animation.json +146 -0
- package/dist/ai/components/Arrow.json +128 -0
- package/dist/ai/components/AutoScroll.json +130 -0
- package/dist/ai/components/Avatar.json +133 -0
- package/dist/ai/components/AvatarGroup.json +129 -0
- package/dist/ai/components/Background.json +131 -0
- package/dist/ai/components/Badge.json +132 -0
- package/dist/ai/components/Banner.json +122 -0
- package/dist/ai/components/BarChart.json +123 -0
- package/dist/ai/components/BlobFx.json +125 -0
- package/dist/ai/components/BlockQuote.json +132 -0
- package/dist/ai/components/Button.json +26 -0
- package/dist/ai/components/Card.json +129 -0
- package/dist/ai/components/Carousel.json +134 -0
- package/dist/ai/components/CelebrationFx.json +132 -0
- package/dist/ai/components/ChartHeader.json +130 -0
- package/dist/ai/components/ChartStatus.json +12 -0
- package/dist/ai/components/Checkbox.json +13 -0
- package/dist/ai/components/Chip.json +132 -0
- package/dist/ai/components/CodeBlock.json +122 -0
- package/dist/ai/components/ColorInput.json +13 -0
- package/dist/ai/components/Column.json +128 -0
- package/dist/ai/components/CompareImage.json +126 -0
- package/dist/ai/components/ContextMenu.json +22 -0
- package/dist/ai/components/CountFx.json +82 -0
- package/dist/ai/components/CountdownFx.json +11 -0
- package/dist/ai/components/Cursor.json +9 -0
- package/dist/ai/components/CursorCard.json +128 -0
- package/dist/ai/components/DataTooltip.json +15 -0
- package/dist/ai/components/DateInput.json +21 -0
- package/dist/ai/components/DatePicker.json +143 -0
- package/dist/ai/components/DateRangeInput.json +18 -0
- package/dist/ai/components/DateRangePicker.json +129 -0
- package/dist/ai/components/Dialog.json +134 -0
- package/dist/ai/components/DialogProvider.json +8 -0
- package/dist/ai/components/Dropdown.json +128 -0
- package/dist/ai/components/DropdownWrapper.json +28 -0
- package/dist/ai/components/EmojiPicker.json +129 -0
- package/dist/ai/components/EmojiPickerDropdown.json +13 -0
- package/dist/ai/components/Fade.json +130 -0
- package/dist/ai/components/FadingLettersFx.json +77 -0
- package/dist/ai/components/Feedback.json +132 -0
- package/dist/ai/components/Flex.json +125 -0
- package/dist/ai/components/FlipFx.json +133 -0
- package/dist/ai/components/GlitchFx.json +128 -0
- package/dist/ai/components/Grid.json +121 -0
- package/dist/ai/components/Heading.json +75 -0
- package/dist/ai/components/HeadingLink.json +127 -0
- package/dist/ai/components/HeadingNav.json +124 -0
- package/dist/ai/components/HoloFx.json +128 -0
- package/dist/ai/components/Hover.json +130 -0
- package/dist/ai/components/HoverCard.json +122 -0
- package/dist/ai/components/Icon.json +132 -0
- package/dist/ai/components/IconButton.json +22 -0
- package/dist/ai/components/InfiniteScroll.json +130 -0
- package/dist/ai/components/InlineCode.json +126 -0
- package/dist/ai/components/Input.json +24 -0
- package/dist/ai/components/InteractiveDetails.json +14 -0
- package/dist/ai/components/Kbar.json +10 -0
- package/dist/ai/components/Kbd.json +127 -0
- package/dist/ai/components/Legend.json +14 -0
- package/dist/ai/components/LetterFx.json +14 -0
- package/dist/ai/components/Line.json +125 -0
- package/dist/ai/components/LineBarChart.json +123 -0
- package/dist/ai/components/LineChart.json +123 -0
- package/dist/ai/components/LinearGauge.json +130 -0
- package/dist/ai/components/LinearGradient.json +15 -0
- package/dist/ai/components/List.json +127 -0
- package/dist/ai/components/ListItem.json +77 -0
- package/dist/ai/components/Logo.json +16 -0
- package/dist/ai/components/LogoCloud.json +124 -0
- package/dist/ai/components/Mask.json +131 -0
- package/dist/ai/components/MasonryGrid.json +132 -0
- package/dist/ai/components/MatrixFx.json +135 -0
- package/dist/ai/components/Media.json +142 -0
- package/dist/ai/components/MediaUpload.json +122 -0
- package/dist/ai/components/MegaMenu.json +125 -0
- package/dist/ai/components/MobileMegaMenu.json +125 -0
- package/dist/ai/components/Modal.json +12 -0
- package/dist/ai/components/NavIcon.json +127 -0
- package/dist/ai/components/NumberInput.json +16 -0
- package/dist/ai/components/OTPInput.json +13 -0
- package/dist/ai/components/OgCard.json +135 -0
- package/dist/ai/components/Option.json +137 -0
- package/dist/ai/components/Particle.json +135 -0
- package/dist/ai/components/PasswordInput.json +8 -0
- package/dist/ai/components/PieChart.json +123 -0
- package/dist/ai/components/ProgressBar.json +131 -0
- package/dist/ai/components/Pulse.json +129 -0
- package/dist/ai/components/RadialGauge.json +134 -0
- package/dist/ai/components/RadialGradient.json +16 -0
- package/dist/ai/components/RadioButton.json +17 -0
- package/dist/ai/components/RevealFx.json +131 -0
- package/dist/ai/components/Row.json +128 -0
- package/dist/ai/components/Schema.json +17 -0
- package/dist/ai/components/ScrollContainer.json +126 -0
- package/dist/ai/components/ScrollToTop.json +124 -0
- package/dist/ai/components/Scroller.json +128 -0
- package/dist/ai/components/SegmentedControl.json +132 -0
- package/dist/ai/components/Select.json +21 -0
- package/dist/ai/components/ShineFx.json +80 -0
- package/dist/ai/components/Skeleton.json +129 -0
- package/dist/ai/components/Slider.json +17 -0
- package/dist/ai/components/SmartLink.json +17 -0
- package/dist/ai/components/Spinner.json +127 -0
- package/dist/ai/components/SplitView.json +129 -0
- package/dist/ai/components/StatusIndicator.json +128 -0
- package/dist/ai/components/StyleOverlay.json +126 -0
- package/dist/ai/components/StylePanel.json +125 -0
- package/dist/ai/components/Swiper.json +130 -0
- package/dist/ai/components/Switch.json +20 -0
- package/dist/ai/components/Table.json +140 -0
- package/dist/ai/components/Tag.json +129 -0
- package/dist/ai/components/TagInput.json +12 -0
- package/dist/ai/components/Text.json +72 -0
- package/dist/ai/components/Textarea.json +24 -0
- package/dist/ai/components/ThemeSwitcher.json +122 -0
- package/dist/ai/components/TiltFx.json +126 -0
- package/dist/ai/components/Timeline.json +126 -0
- package/dist/ai/components/Toast.json +13 -0
- package/dist/ai/components/Toaster.json +14 -0
- package/dist/ai/components/ToggleButton.json +24 -0
- package/dist/ai/components/Tooltip.json +129 -0
- package/dist/ai/components/TypeFx.json +15 -0
- package/dist/ai/components/User.json +15 -0
- package/dist/ai/components/UserMenu.json +16 -0
- package/dist/ai/components/WeatherFx.json +133 -0
- package/dist/ai/eval-tasks.md +71 -0
- package/dist/ai/examples/blocks/manifest.json +191 -0
- package/dist/ai/gotchas.json +85 -0
- package/dist/ai/manifest.json +21 -0
- package/dist/ai/recipes.md +149 -0
- package/dist/ai/rules.compact.md +73 -0
- package/dist/ai/rules.md +217 -0
- package/dist/ai/spec.json +2695 -0
- package/dist/ai/tasks/auth.json +23 -0
- package/dist/ai/tasks/chat.json +28 -0
- package/dist/ai/tasks/dashboard.json +39 -0
- package/dist/ai/tasks/index.json +12 -0
- package/dist/ai/tasks/marketing-hero.json +38 -0
- package/dist/ai/tasks/pricing.json +42 -0
- package/dist/ai/tasks/roadmap.json +22 -0
- package/dist/ai/tasks/settings.json +34 -0
- package/dist/components/ContextMenu.d.ts +2 -2
- package/dist/components/ContextMenu.d.ts.map +1 -1
- package/dist/components/ContextMenu.js +3 -3
- package/dist/components/ContextMenu.js.map +1 -1
- package/dist/components/ElementType.d.ts.map +1 -1
- package/dist/components/ElementType.js +6 -4
- package/dist/components/ElementType.js.map +1 -1
- package/dist/components/Media.d.ts.map +1 -1
- package/dist/components/Media.js +6 -3
- package/dist/components/Media.js.map +1 -1
- package/dist/components/MediaVideoPlayer.d.ts +12 -0
- package/dist/components/MediaVideoPlayer.d.ts.map +1 -0
- package/dist/components/MediaVideoPlayer.js +246 -0
- package/dist/components/MediaVideoPlayer.js.map +1 -0
- package/dist/components/MediaVideoPlayer.module.scss +90 -0
- package/dist/components/Table.d.ts +34 -6
- package/dist/components/Table.d.ts.map +1 -1
- package/dist/components/Table.js +114 -30
- package/dist/components/Table.js.map +1 -1
- package/dist/components/Table.module.scss +174 -3
- package/dist/components/ThemeInit.d.ts.map +1 -1
- package/dist/components/ThemeInit.js +2 -1
- package/dist/components/ThemeInit.js.map +1 -1
- package/dist/components/Timeline.d.ts +1 -1
- package/dist/components/Timeline.d.ts.map +1 -1
- package/dist/components/Timeline.js +16 -52
- package/dist/components/Timeline.js.map +1 -1
- package/dist/data/emoji-data.json +0 -10
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +7 -2
- package/dist/icons.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/modules/code/CodeBlock.impl.d.ts.map +1 -1
- package/dist/modules/code/CodeBlock.impl.js +11 -5
- package/dist/modules/code/CodeBlock.impl.js.map +1 -1
- package/dist/modules/seo/Schema.d.ts.map +1 -1
- package/dist/modules/seo/Schema.js +3 -4
- package/dist/modules/seo/Schema.js.map +1 -1
- package/dist/package.json +33 -3
- package/dist/server/og-url-validation.d.ts +10 -0
- package/dist/server/og-url-validation.d.ts.map +1 -0
- package/dist/server/og-url-validation.js +234 -0
- package/dist/server/og-url-validation.js.map +1 -0
- package/dist/server/og-utils.d.ts +5 -2
- package/dist/server/og-utils.d.ts.map +1 -1
- package/dist/server/og-utils.js +39 -14
- package/dist/server/og-utils.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/safe-html.d.ts +19 -0
- package/dist/utils/safe-html.d.ts.map +1 -0
- package/dist/utils/safe-html.js +43 -0
- package/dist/utils/safe-html.js.map +1 -0
- package/package.json +159 -127
- package/scripts/copy-files.js +103 -0
- package/scripts/generate-ai-spec.js +464 -0
- package/scripts/generate-emoji-data.js +128 -0
- package/scripts/init-agent.js +156 -0
- package/scripts/validate-ai-code.js +149 -0
- package/LICENSE.md +0 -21
- package/next-env.d.ts +0 -5
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
4
|
+
import classNames from "classnames";
|
|
5
|
+
import { Flex, IconButton, Row, Text } from ".";
|
|
6
|
+
import styles from "./MediaVideoPlayer.module.scss";
|
|
7
|
+
const formatTime = (seconds) => {
|
|
8
|
+
if (!Number.isFinite(seconds) || seconds < 0) {
|
|
9
|
+
return "0:00";
|
|
10
|
+
}
|
|
11
|
+
const totalSeconds = Math.floor(seconds);
|
|
12
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
13
|
+
const remainingSeconds = totalSeconds % 60;
|
|
14
|
+
return `${minutes}:${remainingSeconds.toString().padStart(2, "0")}`;
|
|
15
|
+
};
|
|
16
|
+
const MediaVideoPlayer = ({ src, autoplay = false, loop = false, muted: mutedProp = true, objectFit = "cover", className, }) => {
|
|
17
|
+
const containerRef = useRef(null);
|
|
18
|
+
const videoRef = useRef(null);
|
|
19
|
+
const progressRef = useRef(null);
|
|
20
|
+
const hideControlsTimeoutRef = useRef(undefined);
|
|
21
|
+
const isSeekingRef = useRef(false);
|
|
22
|
+
const [isPlaying, setIsPlaying] = useState(autoplay);
|
|
23
|
+
const [isMuted, setIsMuted] = useState(mutedProp);
|
|
24
|
+
const [isFullscreen, setIsFullscreen] = useState(false);
|
|
25
|
+
const [controlsVisible, setControlsVisible] = useState(true);
|
|
26
|
+
const [currentTime, setCurrentTime] = useState(0);
|
|
27
|
+
const [duration, setDuration] = useState(0);
|
|
28
|
+
const [progress, setProgress] = useState(0);
|
|
29
|
+
const clearHideControlsTimeout = useCallback(() => {
|
|
30
|
+
if (hideControlsTimeoutRef.current) {
|
|
31
|
+
clearTimeout(hideControlsTimeoutRef.current);
|
|
32
|
+
hideControlsTimeoutRef.current = undefined;
|
|
33
|
+
}
|
|
34
|
+
}, []);
|
|
35
|
+
const scheduleHideControls = useCallback(() => {
|
|
36
|
+
clearHideControlsTimeout();
|
|
37
|
+
if (!videoRef.current || videoRef.current.paused) {
|
|
38
|
+
setControlsVisible(true);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
hideControlsTimeoutRef.current = setTimeout(() => {
|
|
42
|
+
setControlsVisible(false);
|
|
43
|
+
}, 2500);
|
|
44
|
+
}, [clearHideControlsTimeout]);
|
|
45
|
+
const revealControls = useCallback(() => {
|
|
46
|
+
setControlsVisible(true);
|
|
47
|
+
scheduleHideControls();
|
|
48
|
+
}, [scheduleHideControls]);
|
|
49
|
+
const syncPlaybackState = useCallback(() => {
|
|
50
|
+
const video = videoRef.current;
|
|
51
|
+
if (!video) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
setIsPlaying(!video.paused);
|
|
55
|
+
setCurrentTime(video.currentTime);
|
|
56
|
+
setDuration(video.duration || 0);
|
|
57
|
+
setProgress(video.duration ? (video.currentTime / video.duration) * 100 : 0);
|
|
58
|
+
}, []);
|
|
59
|
+
const togglePlay = useCallback(async () => {
|
|
60
|
+
const video = videoRef.current;
|
|
61
|
+
if (!video) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (video.paused) {
|
|
65
|
+
try {
|
|
66
|
+
await video.play();
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
video.pause();
|
|
74
|
+
}
|
|
75
|
+
syncPlaybackState();
|
|
76
|
+
revealControls();
|
|
77
|
+
}, [revealControls, syncPlaybackState]);
|
|
78
|
+
const toggleMute = useCallback(() => {
|
|
79
|
+
const video = videoRef.current;
|
|
80
|
+
if (!video) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
video.muted = !video.muted;
|
|
84
|
+
setIsMuted(video.muted);
|
|
85
|
+
revealControls();
|
|
86
|
+
}, [revealControls]);
|
|
87
|
+
const toggleFullscreen = useCallback(async () => {
|
|
88
|
+
const container = containerRef.current;
|
|
89
|
+
if (!container) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
if (document.fullscreenElement) {
|
|
94
|
+
await document.exitFullscreen();
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
await container.requestFullscreen();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
revealControls();
|
|
104
|
+
}, [revealControls]);
|
|
105
|
+
const seekToPosition = useCallback((clientX) => {
|
|
106
|
+
const video = videoRef.current;
|
|
107
|
+
const progressTrack = progressRef.current;
|
|
108
|
+
if (!video || !progressTrack || !video.duration) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const rect = progressTrack.getBoundingClientRect();
|
|
112
|
+
const ratio = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));
|
|
113
|
+
video.currentTime = ratio * video.duration;
|
|
114
|
+
syncPlaybackState();
|
|
115
|
+
}, [syncPlaybackState]);
|
|
116
|
+
const handleProgressPointerDown = (event) => {
|
|
117
|
+
event.stopPropagation();
|
|
118
|
+
isSeekingRef.current = true;
|
|
119
|
+
progressRef.current?.setPointerCapture(event.pointerId);
|
|
120
|
+
seekToPosition(event.clientX);
|
|
121
|
+
revealControls();
|
|
122
|
+
};
|
|
123
|
+
const handleProgressPointerMove = (event) => {
|
|
124
|
+
if (!isSeekingRef.current) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
seekToPosition(event.clientX);
|
|
128
|
+
};
|
|
129
|
+
const handleProgressPointerUp = (event) => {
|
|
130
|
+
if (!isSeekingRef.current) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
isSeekingRef.current = false;
|
|
134
|
+
progressRef.current?.releasePointerCapture(event.pointerId);
|
|
135
|
+
scheduleHideControls();
|
|
136
|
+
};
|
|
137
|
+
const handleContainerClick = (event) => {
|
|
138
|
+
if (event.target.closest("[data-video-control]")) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
togglePlay();
|
|
142
|
+
};
|
|
143
|
+
const handleKeyDown = (event) => {
|
|
144
|
+
switch (event.key) {
|
|
145
|
+
case " ":
|
|
146
|
+
case "k":
|
|
147
|
+
event.preventDefault();
|
|
148
|
+
togglePlay();
|
|
149
|
+
break;
|
|
150
|
+
case "m":
|
|
151
|
+
event.preventDefault();
|
|
152
|
+
toggleMute();
|
|
153
|
+
break;
|
|
154
|
+
case "f":
|
|
155
|
+
event.preventDefault();
|
|
156
|
+
toggleFullscreen();
|
|
157
|
+
break;
|
|
158
|
+
case "ArrowLeft":
|
|
159
|
+
event.preventDefault();
|
|
160
|
+
if (videoRef.current) {
|
|
161
|
+
videoRef.current.currentTime = Math.max(0, videoRef.current.currentTime - 5);
|
|
162
|
+
syncPlaybackState();
|
|
163
|
+
revealControls();
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
case "ArrowRight":
|
|
167
|
+
event.preventDefault();
|
|
168
|
+
if (videoRef.current) {
|
|
169
|
+
videoRef.current.currentTime = Math.min(videoRef.current.duration || 0, videoRef.current.currentTime + 5);
|
|
170
|
+
syncPlaybackState();
|
|
171
|
+
revealControls();
|
|
172
|
+
}
|
|
173
|
+
break;
|
|
174
|
+
default:
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
useEffect(() => {
|
|
179
|
+
const video = videoRef.current;
|
|
180
|
+
if (!video) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
video.muted = mutedProp;
|
|
184
|
+
const handleLoadedMetadata = () => syncPlaybackState();
|
|
185
|
+
const handleTimeUpdate = () => syncPlaybackState();
|
|
186
|
+
const handlePlay = () => {
|
|
187
|
+
setIsPlaying(true);
|
|
188
|
+
scheduleHideControls();
|
|
189
|
+
};
|
|
190
|
+
const handlePause = () => {
|
|
191
|
+
setIsPlaying(false);
|
|
192
|
+
setControlsVisible(true);
|
|
193
|
+
clearHideControlsTimeout();
|
|
194
|
+
};
|
|
195
|
+
const handleVolumeChange = () => setIsMuted(video.muted);
|
|
196
|
+
video.addEventListener("loadedmetadata", handleLoadedMetadata);
|
|
197
|
+
video.addEventListener("timeupdate", handleTimeUpdate);
|
|
198
|
+
video.addEventListener("play", handlePlay);
|
|
199
|
+
video.addEventListener("pause", handlePause);
|
|
200
|
+
video.addEventListener("volumechange", handleVolumeChange);
|
|
201
|
+
if (autoplay) {
|
|
202
|
+
video.play().catch(() => {
|
|
203
|
+
setIsPlaying(false);
|
|
204
|
+
setControlsVisible(true);
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
return () => {
|
|
208
|
+
video.removeEventListener("loadedmetadata", handleLoadedMetadata);
|
|
209
|
+
video.removeEventListener("timeupdate", handleTimeUpdate);
|
|
210
|
+
video.removeEventListener("play", handlePlay);
|
|
211
|
+
video.removeEventListener("pause", handlePause);
|
|
212
|
+
video.removeEventListener("volumechange", handleVolumeChange);
|
|
213
|
+
};
|
|
214
|
+
}, [autoplay, clearHideControlsTimeout, mutedProp, scheduleHideControls, syncPlaybackState]);
|
|
215
|
+
useEffect(() => {
|
|
216
|
+
const handleFullscreenChange = () => {
|
|
217
|
+
setIsFullscreen(Boolean(document.fullscreenElement));
|
|
218
|
+
};
|
|
219
|
+
document.addEventListener("fullscreenchange", handleFullscreenChange);
|
|
220
|
+
return () => {
|
|
221
|
+
document.removeEventListener("fullscreenchange", handleFullscreenChange);
|
|
222
|
+
};
|
|
223
|
+
}, []);
|
|
224
|
+
useEffect(() => {
|
|
225
|
+
return () => {
|
|
226
|
+
clearHideControlsTimeout();
|
|
227
|
+
};
|
|
228
|
+
}, [clearHideControlsTimeout]);
|
|
229
|
+
const showCenterPlay = !isPlaying && controlsVisible;
|
|
230
|
+
return (_jsxs("div", { ref: containerRef, className: classNames(styles.container, className), tabIndex: 0, role: "group", "aria-label": "Video player", onMouseMove: revealControls, onTouchStart: revealControls, onClick: handleContainerClick, onKeyDown: handleKeyDown, children: [_jsx("video", { ref: videoRef, className: styles.video, src: src, loop: loop, muted: isMuted, playsInline: true, preload: "metadata", style: { objectFit } }), _jsxs("div", { className: classNames(styles.overlay, controlsVisible || !isPlaying ? styles.visible : styles.hidden), children: [_jsx("div", { className: styles.gradient }), showCenterPlay && (_jsx("div", { className: styles.centerPlay, "data-video-control": true, children: _jsx(Flex, { center: true, radius: "full", className: styles.centerPlayButton, style: { width: "4rem", height: "4rem" }, children: _jsx(IconButton, { variant: "ghost", icon: "play", tooltip: "Play", tooltipPosition: "top", onClick: (event) => {
|
|
231
|
+
event.stopPropagation();
|
|
232
|
+
togglePlay();
|
|
233
|
+
}, "data-video-control": true }) }) })), _jsxs(Flex, { fillWidth: true, direction: "column", gap: "8", paddingX: "12", paddingBottom: "12", className: styles.controls, "data-video-control": true, children: [_jsx(Row, { ref: progressRef, fillWidth: true, radius: "full", className: styles.progressTrack, style: { background: "rgba(255, 255, 255, 0.25)" }, onPointerDown: handleProgressPointerDown, onPointerMove: handleProgressPointerMove, onPointerUp: handleProgressPointerUp, onPointerCancel: handleProgressPointerUp, role: "slider", "aria-label": "Seek", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(progress), children: _jsx(Row, { radius: "full", fillHeight: true, className: styles.progressFill, style: { width: `${progress}%`, background: "var(--brand-solid-strong)" } }) }), _jsxs(Row, { fillWidth: true, vertical: "center", horizontal: "between", gap: "8", children: [_jsxs(Row, { vertical: "center", gap: "4", children: [_jsx(IconButton, { variant: "ghost", icon: isPlaying ? "pause" : "play", tooltip: isPlaying ? "Pause" : "Play", tooltipPosition: "top", onClick: (event) => {
|
|
234
|
+
event.stopPropagation();
|
|
235
|
+
togglePlay();
|
|
236
|
+
} }), _jsxs(Text, { variant: "label-default-xs", onSolid: "neutral-weak", className: styles.time, children: [formatTime(currentTime), " / ", formatTime(duration)] })] }), _jsxs(Row, { vertical: "center", gap: "4", children: [_jsx(IconButton, { variant: "ghost", icon: isMuted ? "volumeOff" : "volume", tooltip: isMuted ? "Unmute" : "Mute", tooltipPosition: "top", onClick: (event) => {
|
|
237
|
+
event.stopPropagation();
|
|
238
|
+
toggleMute();
|
|
239
|
+
} }), _jsx(IconButton, { variant: "ghost", icon: isFullscreen ? "minimize" : "maximize", tooltip: isFullscreen ? "Exit fullscreen" : "Fullscreen", tooltipPosition: "top", onClick: (event) => {
|
|
240
|
+
event.stopPropagation();
|
|
241
|
+
toggleFullscreen();
|
|
242
|
+
} })] })] })] })] })] }));
|
|
243
|
+
};
|
|
244
|
+
MediaVideoPlayer.displayName = "MediaVideoPlayer";
|
|
245
|
+
export { MediaVideoPlayer };
|
|
246
|
+
//# sourceMappingURL=MediaVideoPlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaVideoPlayer.js","sourceRoot":"","sources":["../../src/components/MediaVideoPlayer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
.container {
|
|
2
|
+
position: relative;
|
|
3
|
+
width: 100%;
|
|
4
|
+
height: 100%;
|
|
5
|
+
background: var(--neutral-solid-strong);
|
|
6
|
+
outline: none;
|
|
7
|
+
|
|
8
|
+
&:fullscreen,
|
|
9
|
+
&:-webkit-full-screen {
|
|
10
|
+
.video {
|
|
11
|
+
object-fit: contain;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.video {
|
|
17
|
+
width: 100%;
|
|
18
|
+
height: 100%;
|
|
19
|
+
display: block;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.overlay {
|
|
23
|
+
position: absolute;
|
|
24
|
+
inset: 0;
|
|
25
|
+
display: flex;
|
|
26
|
+
flex-direction: column;
|
|
27
|
+
justify-content: flex-end;
|
|
28
|
+
pointer-events: none;
|
|
29
|
+
transition: opacity var(--transition-micro-medium);
|
|
30
|
+
|
|
31
|
+
&.visible {
|
|
32
|
+
opacity: 1;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
&.hidden {
|
|
36
|
+
opacity: 0;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.gradient {
|
|
41
|
+
position: absolute;
|
|
42
|
+
inset: 0;
|
|
43
|
+
background: linear-gradient(
|
|
44
|
+
to top,
|
|
45
|
+
rgba(0, 0, 0, 0.75) 0%,
|
|
46
|
+
rgba(0, 0, 0, 0.25) 35%,
|
|
47
|
+
transparent 65%
|
|
48
|
+
);
|
|
49
|
+
pointer-events: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.centerPlay {
|
|
53
|
+
position: absolute;
|
|
54
|
+
inset: 0;
|
|
55
|
+
display: flex;
|
|
56
|
+
align-items: center;
|
|
57
|
+
justify-content: center;
|
|
58
|
+
pointer-events: auto;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.centerPlayButton {
|
|
62
|
+
backdrop-filter: blur(0.5rem);
|
|
63
|
+
background: rgba(0, 0, 0, 0.45);
|
|
64
|
+
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.controls {
|
|
68
|
+
position: relative;
|
|
69
|
+
z-index: 1;
|
|
70
|
+
pointer-events: auto;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.progressTrack {
|
|
74
|
+
height: 0.1875rem;
|
|
75
|
+
cursor: pointer;
|
|
76
|
+
transition: height var(--transition-micro-short);
|
|
77
|
+
|
|
78
|
+
&:hover {
|
|
79
|
+
height: 0.3125rem;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.progressFill {
|
|
84
|
+
transition: width 0.05s linear;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.time {
|
|
88
|
+
font-variant-numeric: tabular-nums;
|
|
89
|
+
user-select: none;
|
|
90
|
+
}
|
|
@@ -1,16 +1,44 @@
|
|
|
1
1
|
import { Flex } from ".";
|
|
2
2
|
import { ReactNode } from "react";
|
|
3
|
+
type TableHeader = {
|
|
4
|
+
content: ReactNode;
|
|
5
|
+
key: string;
|
|
6
|
+
sortable?: boolean;
|
|
7
|
+
width?: string;
|
|
8
|
+
align?: "left" | "center" | "right";
|
|
9
|
+
};
|
|
10
|
+
type TableAction = {
|
|
11
|
+
icon: string;
|
|
12
|
+
label?: string;
|
|
13
|
+
tooltip?: string;
|
|
14
|
+
variant?: "primary" | "secondary" | "tertiary" | "danger";
|
|
15
|
+
onClick: (rowIndex: number) => void;
|
|
16
|
+
disabled?: (rowIndex: number) => boolean;
|
|
17
|
+
};
|
|
3
18
|
type TableProps = React.ComponentProps<typeof Flex> & {
|
|
4
19
|
data: {
|
|
5
|
-
headers:
|
|
6
|
-
content: ReactNode;
|
|
7
|
-
key: string;
|
|
8
|
-
sortable?: boolean;
|
|
9
|
-
}[];
|
|
20
|
+
headers: TableHeader[];
|
|
10
21
|
rows: ReactNode[][];
|
|
11
22
|
};
|
|
12
23
|
onRowClick?: (rowIndex: number) => void;
|
|
24
|
+
searchable?: boolean;
|
|
25
|
+
searchPlaceholder?: string;
|
|
26
|
+
striped?: boolean;
|
|
27
|
+
hoverable?: boolean;
|
|
28
|
+
compact?: boolean;
|
|
29
|
+
loading?: boolean;
|
|
30
|
+
emptyState?: ReactNode;
|
|
31
|
+
actions?: TableAction[];
|
|
32
|
+
stickyHeader?: boolean;
|
|
33
|
+
maxHeight?: string;
|
|
34
|
+
rowClassName?: (rowIndex: number) => string;
|
|
35
|
+
cellClassName?: (rowIndex: number, cellIndex: number) => string;
|
|
36
|
+
paginated?: boolean;
|
|
37
|
+
defaultPageSize?: number;
|
|
38
|
+
pageSizeOptions?: number[];
|
|
39
|
+
loadingState?: ReactNode;
|
|
13
40
|
};
|
|
14
|
-
declare function Table({ data, onRowClick, ...flex }: TableProps): import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
declare function Table({ data, onRowClick, searchable, searchPlaceholder, striped, hoverable, compact, loading, emptyState, actions, stickyHeader, maxHeight, rowClassName, cellClassName, paginated, defaultPageSize, pageSizeOptions, loadingState, ...flex }: TableProps): import("react/jsx-runtime").JSX.Element;
|
|
15
42
|
export { Table };
|
|
43
|
+
export type { TableProps, TableHeader, TableAction };
|
|
16
44
|
//# sourceMappingURL=Table.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/components/Table.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/components/Table.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,IAAI,EAA+E,MAAM,GAAG,CAAC;AACrG,OAAO,EAAqB,SAAS,EAAE,MAAM,OAAO,CAAC;AAIrD,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACrC,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1D,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CAC1C,CAAC;AAEF,KAAK,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,GAAG;IACpD,IAAI,EAAE;QACJ,OAAO,EAAE,WAAW,EAAE,CAAC;QACvB,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;KACrB,CAAC;IACF,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAChE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B,CAAC;AAYF,iBAAS,KAAK,CAAC,EACb,IAAI,EACJ,UAAU,EACV,UAAkB,EAClB,iBAA+B,EAC/B,OAAe,EACf,SAAgB,EAChB,OAAe,EACf,OAAe,EACf,UAAU,EACV,OAAO,EACP,YAAoB,EACpB,SAAS,EACT,YAAY,EACZ,aAAa,EACb,SAAiB,EACjB,eAAoB,EACpB,eAAiC,EACjC,YAAY,EACZ,GAAG,IAAI,EACR,EAAE,UAAU,2CAgXZ;AAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC"}
|
package/dist/components/Table.js
CHANGED
|
@@ -1,44 +1,128 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { Row, IconButton } from ".";
|
|
4
|
-
import { useState } from "react";
|
|
3
|
+
import { Flex, Row, Column, Icon, Text, IconButton, Input, Select, Button, ShineFx } from ".";
|
|
4
|
+
import { useState, useMemo } from "react";
|
|
5
5
|
import styles from "./Table.module.scss";
|
|
6
|
-
|
|
6
|
+
import classNames from "classnames";
|
|
7
|
+
function extractText(node) {
|
|
8
|
+
if (node == null)
|
|
9
|
+
return "";
|
|
10
|
+
if (typeof node === "string" || typeof node === "number")
|
|
11
|
+
return String(node);
|
|
12
|
+
if (Array.isArray(node))
|
|
13
|
+
return node.map(extractText).join(" ");
|
|
14
|
+
if (typeof node === "object" && "props" in node) {
|
|
15
|
+
return extractText(node.props?.children);
|
|
16
|
+
}
|
|
17
|
+
return "";
|
|
18
|
+
}
|
|
19
|
+
function Table({ data, onRowClick, searchable = false, searchPlaceholder = "Search...", striped = false, hoverable = true, compact = false, loading = false, emptyState, actions, stickyHeader = false, maxHeight, rowClassName, cellClassName, paginated = false, defaultPageSize = 10, pageSizeOptions = [5, 10, 20, 50], loadingState, ...flex }) {
|
|
7
20
|
const [sortConfig, setSortConfig] = useState(null);
|
|
8
|
-
const
|
|
9
|
-
|
|
21
|
+
const [searchQuery, setSearchQuery] = useState("");
|
|
22
|
+
const [page, setPage] = useState(1);
|
|
23
|
+
const [pageSize, setPageSize] = useState(defaultPageSize);
|
|
24
|
+
const handleSort = (key, sortable) => {
|
|
25
|
+
if (!sortable)
|
|
26
|
+
return;
|
|
27
|
+
let direction = "asc";
|
|
10
28
|
if (sortConfig && sortConfig.key === key) {
|
|
11
|
-
direction = sortConfig.direction === "
|
|
29
|
+
direction = sortConfig.direction === "asc" ? "desc" : "asc";
|
|
12
30
|
}
|
|
13
31
|
setSortConfig({ key, direction });
|
|
14
32
|
};
|
|
15
|
-
const
|
|
33
|
+
const filteredRows = useMemo(() => {
|
|
34
|
+
if (!searchable || !searchQuery.trim())
|
|
35
|
+
return data.rows;
|
|
36
|
+
const query = searchQuery.toLowerCase();
|
|
37
|
+
return data.rows.filter(row => row.some(cell => extractText(cell).toLowerCase().includes(query)));
|
|
38
|
+
}, [data.rows, searchQuery, searchable]);
|
|
39
|
+
const sortedRows = useMemo(() => {
|
|
16
40
|
if (!sortConfig)
|
|
17
|
-
return
|
|
18
|
-
const headerIndex = data.headers.findIndex(
|
|
41
|
+
return filteredRows;
|
|
42
|
+
const headerIndex = data.headers.findIndex(h => h.key === sortConfig.key);
|
|
19
43
|
if (headerIndex === -1)
|
|
20
|
-
return
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
44
|
+
return filteredRows;
|
|
45
|
+
return [...filteredRows].sort((a, b) => {
|
|
46
|
+
const aValue = extractText(a[headerIndex]);
|
|
47
|
+
const bValue = extractText(b[headerIndex]);
|
|
48
|
+
const comparison = aValue.localeCompare(bValue, undefined, {
|
|
49
|
+
numeric: true,
|
|
50
|
+
sensitivity: "base"
|
|
51
|
+
});
|
|
52
|
+
return sortConfig.direction === "asc" ? comparison : -comparison;
|
|
53
|
+
});
|
|
54
|
+
}, [filteredRows, sortConfig, data.headers]);
|
|
55
|
+
const paginatedRows = useMemo(() => {
|
|
56
|
+
if (!paginated)
|
|
57
|
+
return sortedRows;
|
|
58
|
+
const start = (page - 1) * pageSize;
|
|
59
|
+
const end = start + pageSize;
|
|
60
|
+
return sortedRows.slice(start, end);
|
|
61
|
+
}, [sortedRows, paginated, page, pageSize]);
|
|
62
|
+
const totalPages = Math.max(1, Math.ceil(sortedRows.length / pageSize));
|
|
63
|
+
const currentPage = Math.min(page, totalPages);
|
|
64
|
+
useMemo(() => {
|
|
65
|
+
setPage(1);
|
|
66
|
+
}, [searchQuery, sortConfig]);
|
|
67
|
+
const tableClasses = classNames(styles.table, {
|
|
68
|
+
[styles["table--striped"]]: striped,
|
|
69
|
+
[styles["table--hoverable"]]: hoverable,
|
|
70
|
+
[styles["table--compact"]]: compact,
|
|
71
|
+
[styles["table--clickable"]]: !!onRowClick,
|
|
72
|
+
[styles["table--sticky-header"]]: stickyHeader,
|
|
29
73
|
});
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
74
|
+
const renderHeader = (header, index) => {
|
|
75
|
+
const isActive = sortConfig?.key === header.key;
|
|
76
|
+
const thClasses = classNames(styles.table__th, {
|
|
77
|
+
[styles["table__th--sortable"]]: header.sortable,
|
|
78
|
+
[styles["table__th--active"]]: isActive,
|
|
79
|
+
[styles[`table__th--align-${header.align || "left"}`]]: true,
|
|
80
|
+
});
|
|
81
|
+
return (_jsx("th", { className: thClasses, style: { width: header.width }, onClick: () => handleSort(header.key, header.sortable), children: _jsxs(Row, { gap: "8", vertical: "center", horizontal: header.align === "center" ? "center" : header.align === "right" ? "end" : "start", children: [_jsx(Text, { variant: "label-strong-s", onBackground: isActive ? "neutral-strong" : "neutral-medium", children: header.content }), header.sortable && (_jsx(Icon, { name: isActive
|
|
82
|
+
? sortConfig.direction === "asc" ? "chevronUp" : "chevronDown"
|
|
83
|
+
: "chevronUp", size: "xs", onBackground: isActive ? "neutral-strong" : "neutral-weak", style: {
|
|
84
|
+
transform: !isActive ? "rotate(90deg)" : undefined,
|
|
85
|
+
transition: "all 0.2s ease",
|
|
86
|
+
} }))] }) }, header.key));
|
|
87
|
+
};
|
|
88
|
+
const renderRow = (row, originalIndex, displayIndex) => {
|
|
89
|
+
const rowClasses = classNames(styles.table__row, rowClassName?.(originalIndex));
|
|
90
|
+
return (_jsxs("tr", { className: rowClasses, onClick: onRowClick ? () => onRowClick(originalIndex) : undefined, children: [row.map((cell, cellIndex) => {
|
|
91
|
+
const header = data.headers[cellIndex];
|
|
92
|
+
const tdClasses = classNames(styles.table__td, styles[`table__td--align-${header?.align || "left"}`], cellClassName?.(originalIndex, cellIndex));
|
|
93
|
+
return (_jsx("td", { className: tdClasses, children: cell }, cellIndex));
|
|
94
|
+
}), actions && actions.length > 0 && (_jsx("td", { className: classNames(styles.table__td, styles["table__td--actions"]), style: { width: `${actions.length * 32}px`, minWidth: `${actions.length * 32}px` }, children: _jsx(Row, { gap: "8", horizontal: "start", vertical: "center", onClick: (e) => e.stopPropagation(), children: actions.map((action, actionIndex) => (_jsx(IconButton, { icon: action.icon, size: "l", variant: action.variant || "tertiary", tooltip: action.tooltip || action.label, onClick: (e) => {
|
|
95
|
+
e.stopPropagation();
|
|
96
|
+
action.onClick(originalIndex);
|
|
97
|
+
}, disabled: action.disabled?.(originalIndex) }, actionIndex))) }) }))] }, displayIndex));
|
|
98
|
+
};
|
|
99
|
+
const renderEmptyState = () => (_jsx("tr", { children: _jsx("td", { colSpan: data.headers.length + (actions?.length ? 1 : 0), className: styles.table__empty, children: emptyState || (_jsxs(Column, { center: true, padding: "xl", gap: "m", children: [_jsx(Icon, { name: "inbox", size: "l", onBackground: "neutral-weak" }), _jsxs(Column, { center: true, gap: "4", children: [_jsx(Text, { variant: "heading-strong-s", children: "No data available" }), _jsx(Text, { variant: "body-default-s", onBackground: "neutral-weak", children: searchQuery ? "Try adjusting your search" : "There are no items to display" })] })] })) }) }));
|
|
100
|
+
const renderLoadingState = () => (_jsx("tr", { children: _jsx("td", { colSpan: data.headers.length + (actions?.length ? 1 : 0), className: styles.table__loading, children: loadingState || (_jsx(Column, { center: true, padding: "xl", gap: "m", children: _jsx(ShineFx, { variant: "label-default-s", children: "Loading data..." }) })) }) }));
|
|
101
|
+
return (_jsxs(Column, { fillWidth: true, gap: "m", ...flex, children: [searchable && (_jsxs(Row, { horizontal: "between", vertical: "center", gap: "m", maxWidth: 12, children: [_jsx(Input, { id: "table-search", placeholder: searchPlaceholder, value: searchQuery, height: "xs", onChange: (e) => setSearchQuery(e.target.value) }), sortedRows.length !== data.rows.length && (_jsxs(Text, { onBackground: "neutral-weak", children: [sortedRows.length, " of ", data.rows.length] }))] })), _jsx(Flex, { fillWidth: true, radius: "l", border: "neutral-alpha-medium", background: "surface", overflowX: "auto", overflowY: maxHeight ? "auto" : "visible", style: { maxHeight }, className: styles.table__container, children: _jsxs("table", { className: tableClasses, children: [_jsx("thead", { className: styles.table__thead, children: _jsxs("tr", { children: [data.headers.map((header, index) => renderHeader(header, index)), actions && actions.length > 0 && (_jsx("th", { className: classNames(styles.table__th, styles["table__th--actions"]), children: _jsx(Text, { variant: "label-strong-s", onBackground: "neutral-medium", children: "Actions" }) }))] }) }), _jsx("tbody", { className: styles.table__tbody, children: loading ? (renderLoadingState()) : sortedRows.length === 0 ? (renderEmptyState()) : (paginatedRows.map((row, index) => {
|
|
102
|
+
const originalIndex = data.rows.indexOf(row);
|
|
103
|
+
return renderRow(row, originalIndex, index);
|
|
104
|
+
})) })] }) }), paginated && !loading && sortedRows.length > 0 && (_jsxs(Row, { horizontal: "between", vertical: "center", paddingX: "s", gap: "m", wrap: true, children: [_jsxs(Row, { gap: "8", vertical: "center", children: [_jsx(Row, { maxWidth: 2, children: _jsx(Select, { id: "page-size", placeholder: "Select page size", value: String(pageSize), height: "xs", onSelect: (value) => {
|
|
105
|
+
setPageSize(Number(value));
|
|
106
|
+
setPage(1);
|
|
107
|
+
}, options: pageSizeOptions.map(size => ({
|
|
108
|
+
label: String(size),
|
|
109
|
+
value: String(size)
|
|
110
|
+
})) }) }), _jsxs(Text, { variant: "label-default-s", onBackground: "neutral-medium", children: [currentPage, " / ", totalPages] })] }), totalPages > 1 && (_jsxs(Row, { gap: "4", vertical: "center", children: [_jsx(IconButton, { size: "s", variant: "secondary", icon: "chevronDoubleLeft", onClick: () => setPage(1), disabled: currentPage === 1 }), _jsx(IconButton, { size: "s", variant: "secondary", icon: "chevronLeft", onClick: () => setPage(currentPage - 1), disabled: currentPage === 1 }), Array.from({ length: Math.min(3, totalPages) }, (_, i) => {
|
|
111
|
+
let pageNum;
|
|
112
|
+
if (totalPages <= 5) {
|
|
113
|
+
pageNum = i + 1;
|
|
114
|
+
}
|
|
115
|
+
else if (currentPage <= 3) {
|
|
116
|
+
pageNum = i + 1;
|
|
117
|
+
}
|
|
118
|
+
else if (currentPage >= totalPages - 2) {
|
|
119
|
+
pageNum = totalPages - 4 + i;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
pageNum = currentPage - 2 + i;
|
|
123
|
+
}
|
|
124
|
+
return (_jsx(Button, { size: "s", variant: pageNum === currentPage ? "primary" : "tertiary", onClick: () => setPage(pageNum), children: pageNum }, pageNum));
|
|
125
|
+
}), _jsx(IconButton, { size: "s", variant: "secondary", icon: "chevronRight", onClick: () => setPage(currentPage + 1), disabled: currentPage === totalPages }), _jsx(IconButton, { icon: "chevronDoubleRight", size: "s", variant: "secondary", onClick: () => setPage(totalPages), disabled: currentPage === totalPages })] }))] })), !paginated && !loading && sortedRows.length > 0 && sortConfig && (_jsx(Row, { horizontal: "end", vertical: "center", paddingX: "s", children: _jsxs(Row, { gap: "4", vertical: "center", children: [_jsxs(Text, { variant: "body-default-s", onBackground: "neutral-weak", children: ["Sorted by ", data.headers.find(h => h.key === sortConfig.key)?.content] }), _jsx(IconButton, { icon: "close", size: "s", variant: "tertiary", onClick: () => setSortConfig(null), tooltip: "Clear sort" })] }) }))] }));
|
|
42
126
|
}
|
|
43
127
|
export { Table };
|
|
44
128
|
//# sourceMappingURL=Table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sourceRoot":"","sources":["../../src/components/Table.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.js","sourceRoot":"","sources":["../../src/components/Table.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAW,MAAM,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,GAAG,CAAC;AACrG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAa,MAAM,OAAO,CAAC;AACrD,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,UAAU,MAAM,YAAY,CAAC;AA2CpC,SAAS,WAAW,CAAC,IAAe;IAClC,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QAChD,OAAO,WAAW,CAAE,IAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,KAAK,CAAC,EACb,IAAI,EACJ,UAAU,EACV,UAAU,GAAG,KAAK,EAClB,iBAAiB,GAAG,WAAW,EAC/B,OAAO,GAAG,KAAK,EACf,SAAS,GAAG,IAAI,EAChB,OAAO,GAAG,KAAK,EACf,OAAO,GAAG,KAAK,EACf,UAAU,EACV,OAAO,EACP,YAAY,GAAG,KAAK,EACpB,SAAS,EACT,YAAY,EACZ,aAAa,EACb,SAAS,GAAG,KAAK,EACjB,eAAe,GAAG,EAAE,EACpB,eAAe,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACjC,YAAY,EACZ,GAAG,IAAI,EACI;IACX,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAGlC,IAAI,CAAC,CAAC;IAChB,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE1D,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,QAAkB,EAAE,EAAE;QACrD,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,IAAI,SAAS,GAAmB,KAAK,CAAC;QACtC,IAAI,UAAU,IAAI,UAAU,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YACzC,SAAS,GAAG,UAAU,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9D,CAAC;QACD,aAAa,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAEzD,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC5B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAClE,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;IAEzC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE;QAC9B,IAAI,CAAC,UAAU;YAAE,OAAO,YAAY,CAAC;QAErC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1E,IAAI,WAAW,KAAK,CAAC,CAAC;YAAE,OAAO,YAAY,CAAC;QAE5C,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YAE3C,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE;gBACzD,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,MAAM;aACpB,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAE7C,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,IAAI,CAAC,SAAS;YAAE,OAAO,UAAU,CAAC;QAElC,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;QACpC,MAAM,GAAG,GAAG,KAAK,GAAG,QAAQ,CAAC;QAC7B,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAE/C,OAAO,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,CAAC,CAAC,CAAC;IACb,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;IAE9B,MAAM,YAAY,GAAG,UAAU,CAC7B,MAAM,CAAC,KAAK,EACZ;QACE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO;QACnC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,SAAS;QACvC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO;QACnC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU;QAC1C,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,YAAY;KAC/C,CACF,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,MAAmB,EAAE,KAAa,EAAE,EAAE;QAC1D,MAAM,QAAQ,GAAG,UAAU,EAAE,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC;QAChD,MAAM,SAAS,GAAG,UAAU,CAC1B,MAAM,CAAC,SAAS,EAChB;YACE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ;YAChD,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,QAAQ;YACvC,CAAC,MAAM,CAAC,oBAAoB,MAAM,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI;SAC7D,CACF,CAAC;QAEF,OAAO,CACL,aAEE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,YAEtD,MAAC,GAAG,IAAC,GAAG,EAAC,GAAG,EAAC,QAAQ,EAAC,QAAQ,EAAC,UAAU,EAAE,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,aAC1H,KAAC,IAAI,IAAC,OAAO,EAAC,gBAAgB,EAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,YACxF,MAAM,CAAC,OAAO,GACV,EACN,MAAM,CAAC,QAAQ,IAAI,CAClB,KAAC,IAAI,IACH,IAAI,EAAE,QAAQ;4BACZ,CAAC,CAAC,UAAU,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa;4BAC9D,CAAC,CAAC,WAAW,EAEf,IAAI,EAAC,IAAI,EACT,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,EAC1D,KAAK,EAAE;4BACL,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;4BAClD,UAAU,EAAE,eAAe;yBAC5B,GACD,CACH,IACG,IAvBD,MAAM,CAAC,GAAG,CAwBZ,CACN,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,GAAgB,EAAE,aAAqB,EAAE,YAAoB,EAAE,EAAE;QAClF,MAAM,UAAU,GAAG,UAAU,CAC3B,MAAM,CAAC,UAAU,EACjB,YAAY,EAAE,CAAC,aAAa,CAAC,CAC9B,CAAC;QAEF,OAAO,CACL,cAEE,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,aAEhE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;oBAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBACvC,MAAM,SAAS,GAAG,UAAU,CAC1B,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,oBAAoB,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,CAAC,EACrD,aAAa,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,CAC1C,CAAC;oBAEF,OAAO,CACL,aAAoB,SAAS,EAAE,SAAS,YACrC,IAAI,IADE,SAAS,CAEb,CACN,CAAC;gBACJ,CAAC,CAAC,EACD,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAChC,aACE,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC,EACrE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,YAElF,KAAC,GAAG,IAAC,GAAG,EAAC,GAAG,EAAC,UAAU,EAAC,OAAO,EAAC,QAAQ,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,YAClF,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CACpC,KAAC,UAAU,IAET,IAAI,EAAE,MAAM,CAAC,IAAW,EACxB,IAAI,EAAC,GAAG,EACR,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,UAAU,EACrC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EACvC,OAAO,EAAE,CAAC,CAAmB,EAAE,EAAE;gCAC/B,CAAC,CAAC,eAAe,EAAE,CAAC;gCACpB,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;4BAChC,CAAC,EACD,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,IATrC,WAAW,CAUhB,CACH,CAAC,GACE,GACH,CACN,KAxCI,YAAY,CAyCd,CACN,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,CAC7B,uBACE,aACE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACxD,SAAS,EAAE,MAAM,CAAC,YAAY,YAE7B,UAAU,IAAI,CACb,MAAC,MAAM,IAAC,MAAM,QAAC,OAAO,EAAC,IAAI,EAAC,GAAG,EAAC,GAAG,aACjC,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,GAAG,EAAC,YAAY,EAAC,cAAc,GAAG,EAC1D,MAAC,MAAM,IAAC,MAAM,QAAC,GAAG,EAAC,GAAG,aACpB,KAAC,IAAI,IAAC,OAAO,EAAC,kBAAkB,kCAEzB,EACP,KAAC,IAAI,IAAC,OAAO,EAAC,gBAAgB,EAAC,YAAY,EAAC,cAAc,YACvD,WAAW,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,+BAA+B,GACvE,IACA,IACF,CACV,GACE,GACF,CACN,CAAC;IAEF,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,CAC/B,uBACE,aACE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACxD,SAAS,EAAE,MAAM,CAAC,cAAc,YAE/B,YAAY,IAAI,CACf,KAAC,MAAM,IAAC,MAAM,QAAC,OAAO,EAAC,IAAI,EAAC,GAAG,EAAC,GAAG,YACjC,KAAC,OAAO,IAAC,OAAO,EAAC,iBAAiB,gCAExB,GACH,CACV,GACE,GACF,CACN,CAAC;IAEF,OAAO,CACL,MAAC,MAAM,IAAC,SAAS,QAAC,GAAG,EAAC,GAAG,KAAK,IAAI,aAE/B,UAAU,IAAI,CACb,MAAC,GAAG,IAAC,UAAU,EAAC,SAAS,EAAC,QAAQ,EAAC,QAAQ,EAAC,GAAG,EAAC,GAAG,EAAC,QAAQ,EAAE,EAAE,aAC9D,KAAC,KAAK,IACJ,EAAE,EAAC,cAAc,EACjB,WAAW,EAAE,iBAAiB,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAC,IAAI,EACX,QAAQ,EAAE,CAAC,CAAsC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GACpF,EACD,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CACzC,MAAC,IAAI,IAAC,YAAY,EAAC,cAAc,aAAE,UAAU,CAAC,MAAM,UAAM,IAAI,CAAC,IAAI,CAAC,MAAM,IAAQ,CACnF,IACG,CACP,EAGD,KAAC,IAAI,IACH,SAAS,QACT,MAAM,EAAC,GAAG,EACV,MAAM,EAAC,sBAAsB,EAC7B,UAAU,EAAC,SAAS,EACpB,SAAS,EAAC,MAAM,EAChB,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACzC,KAAK,EAAE,EAAE,SAAS,EAAE,EACpB,SAAS,EAAE,MAAM,CAAC,gBAAgB,YAElC,iBAAO,SAAS,EAAE,YAAY,aAC5B,gBAAO,SAAS,EAAE,MAAM,CAAC,YAAY,YACnC,yBACG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAChE,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAChC,aAAI,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC,YACvE,KAAC,IAAI,IAAC,OAAO,EAAC,gBAAgB,EAAC,YAAY,EAAC,gBAAgB,wBAErD,GACJ,CACN,IACE,GACC,EACR,gBAAO,SAAS,EAAE,MAAM,CAAC,YAAY,YAClC,OAAO,CAAC,CAAC,CAAC,CACT,kBAAkB,EAAE,CACrB,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC5B,gBAAgB,EAAE,CACnB,CAAC,CAAC,CAAC,CACF,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gCAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gCAC7C,OAAO,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;4BAC9C,CAAC,CAAC,CACH,GACK,IACF,GACH,EAGN,SAAS,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CACjD,MAAC,GAAG,IAAC,UAAU,EAAC,SAAS,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,IAAI,mBACnE,MAAC,GAAG,IAAC,GAAG,EAAC,GAAG,EAAC,QAAQ,EAAC,QAAQ,aAC5B,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YACd,KAAC,MAAM,IACL,EAAE,EAAC,WAAW,EACd,WAAW,EAAC,kBAAkB,EAC9B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EACvB,MAAM,EAAC,IAAI,EACX,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wCAClB,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wCAC3B,OAAO,CAAC,CAAC,CAAC,CAAC;oCACb,CAAC,EACD,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wCACpC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC;wCACnB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC;qCACpB,CAAC,CAAC,GACH,GACE,EACN,MAAC,IAAI,IAAC,OAAO,EAAC,iBAAiB,EAAC,YAAY,EAAC,gBAAgB,aAC1D,WAAW,SAAK,UAAU,IACtB,IACH,EAEL,UAAU,GAAG,CAAC,IAAI,CACjB,MAAC,GAAG,IAAC,GAAG,EAAC,GAAG,EAAC,QAAQ,EAAC,QAAQ,aAC5B,KAAC,UAAU,IACT,IAAI,EAAC,GAAG,EACR,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,mBAAmB,EACxB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EACzB,QAAQ,EAAE,WAAW,KAAK,CAAC,GAC3B,EACF,KAAC,UAAU,IACT,IAAI,EAAC,GAAG,EACR,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,aAAa,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,EACvC,QAAQ,EAAE,WAAW,KAAK,CAAC,GAC3B,EAED,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gCACxD,IAAI,OAAO,CAAC;gCACZ,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;oCACpB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gCAClB,CAAC;qCAAM,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;oCAC5B,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gCAClB,CAAC;qCAAM,IAAI,WAAW,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;oCACzC,OAAO,GAAG,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;gCAC/B,CAAC;qCAAM,CAAC;oCACN,OAAO,GAAG,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;gCAChC,CAAC;gCAED,OAAO,CACL,KAAC,MAAM,IAEL,IAAI,EAAC,GAAG,EACR,OAAO,EAAE,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EACzD,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,YAE9B,OAAO,IALH,OAAO,CAML,CACV,CAAC;4BACJ,CAAC,CAAC,EAEF,KAAC,UAAU,IACT,IAAI,EAAC,GAAG,EACR,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,cAAc,EACnB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,EACvC,QAAQ,EAAE,WAAW,KAAK,UAAU,GACpC,EACF,KAAC,UAAU,IACT,IAAI,EAAC,oBAAoB,EACzB,IAAI,EAAC,GAAG,EACR,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAClC,QAAQ,EAAE,WAAW,KAAK,UAAU,GACpC,IACE,CACP,IACG,CACP,EAGA,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,IAAI,CAChE,KAAC,GAAG,IAAC,UAAU,EAAC,KAAK,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,EAAC,GAAG,YAClD,MAAC,GAAG,IAAC,GAAG,EAAC,GAAG,EAAC,QAAQ,EAAC,QAAQ,aAC5B,MAAC,IAAI,IAAC,OAAO,EAAC,gBAAgB,EAAC,YAAY,EAAC,cAAc,2BAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,IAC/D,EACP,KAAC,UAAU,IACT,IAAI,EAAC,OAAO,EACZ,IAAI,EAAC,GAAG,EACR,OAAO,EAAC,UAAU,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAClC,OAAO,EAAC,YAAY,GACpB,IACE,GACF,CACP,IACM,CACV,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
|