@endfield-ui/react 1.2.0 → 1.3.0
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/README.md +8 -3
- package/dist/components/accordion/Accordion.d.ts +46 -0
- package/dist/components/accordion/Accordion.js +2 -0
- package/dist/components/accordion/index.d.ts +3 -0
- package/dist/components/alert/Alert.d.ts +28 -0
- package/dist/components/alert/Alert.js +2 -0
- package/dist/components/alert/index.d.ts +3 -0
- package/dist/components/avatar/Avatar.d.ts +24 -0
- package/dist/components/avatar/Avatar.js +2 -0
- package/dist/components/avatar/AvatarSwitcher.d.ts +46 -0
- package/dist/components/avatar/AvatarSwitcher.js +2 -0
- package/dist/components/avatar/index.d.ts +4 -0
- package/dist/components/back-to-top/BackToTop.d.ts +21 -0
- package/dist/components/back-to-top/BackToTop.js +2 -0
- package/dist/components/back-to-top/index.d.ts +3 -0
- package/dist/components/badge/Badge.d.ts +20 -0
- package/dist/components/badge/Badge.js +2 -0
- package/dist/components/badge/index.d.ts +3 -0
- package/dist/components/bracket-title/BracketTitle.d.ts +17 -0
- package/dist/components/bracket-title/BracketTitle.js +2 -0
- package/dist/components/bracket-title/index.d.ts +3 -0
- package/dist/components/breadcrumb/Breadcrumb.d.ts +26 -0
- package/dist/components/breadcrumb/Breadcrumb.js +2 -0
- package/dist/components/breadcrumb/index.d.ts +3 -0
- package/dist/components/button/Button.d.ts +50 -0
- package/dist/components/button/Button.js +2 -0
- package/dist/components/button/ButtonGroup.d.ts +21 -0
- package/dist/components/button/ButtonGroup.js +2 -0
- package/dist/components/button/index.d.ts +4 -0
- package/dist/components/calendar/Calendar.d.ts +57 -0
- package/dist/components/calendar/Calendar.js +2 -0
- package/dist/components/calendar/index.d.ts +3 -0
- package/dist/components/carousel/Carousel.d.ts +38 -0
- package/dist/components/carousel/Carousel.js +2 -0
- package/dist/components/carousel/index.d.ts +3 -0
- package/dist/components/carousel/snap-track.js +2 -0
- package/dist/components/checkbox/Checkbox.d.ts +18 -0
- package/dist/components/checkbox/Checkbox.js +2 -0
- package/dist/components/checkbox/choice-style.js +2 -0
- package/dist/components/checkbox/index.d.ts +3 -0
- package/dist/components/chip/FilterChip.d.ts +18 -0
- package/dist/components/chip/FilterChip.js +2 -0
- package/dist/components/chip/ResourceChip.d.ts +16 -0
- package/dist/components/chip/ResourceChip.js +2 -0
- package/dist/components/chip/capsule-style.d.ts +4 -0
- package/dist/components/chip/capsule-style.js +2 -0
- package/dist/components/chip/index.d.ts +4 -0
- package/dist/components/combobox/Combobox.d.ts +105 -0
- package/dist/components/combobox/Combobox.js +2 -0
- package/dist/components/combobox/index.d.ts +3 -0
- package/dist/components/completion-banner/CompletionBanner.d.ts +26 -0
- package/dist/components/completion-banner/CompletionBanner.js +2 -0
- package/dist/components/completion-banner/index.d.ts +3 -0
- package/dist/components/context-menu/ContextMenu.d.ts +30 -0
- package/dist/components/context-menu/ContextMenu.js +2 -0
- package/dist/components/context-menu/index.d.ts +3 -0
- package/dist/components/corner-brackets/CornerBrackets.d.ts +20 -0
- package/dist/components/corner-brackets/CornerBrackets.js +2 -0
- package/dist/components/corner-brackets/index.d.ts +3 -0
- package/dist/components/countdown/Countdown.d.ts +26 -0
- package/dist/components/countdown/Countdown.js +2 -0
- package/dist/components/countdown/index.d.ts +3 -0
- package/dist/components/dash-indicator/DashIndicator.d.ts +15 -0
- package/dist/components/dash-indicator/DashIndicator.js +2 -0
- package/dist/components/dash-indicator/index.d.ts +3 -0
- package/dist/components/data-row/DataRow.d.ts +58 -0
- package/dist/components/data-row/DataRow.js +2 -0
- package/dist/components/data-row/index.d.ts +3 -0
- package/dist/components/date-picker/DateField.js +2 -0
- package/dist/components/date-picker/DatePicker.d.ts +56 -0
- package/dist/components/date-picker/DatePicker.js +2 -0
- package/dist/components/date-picker/DateRangePicker.d.ts +57 -0
- package/dist/components/date-picker/DateRangePicker.js +2 -0
- package/dist/components/date-picker/index.d.ts +4 -0
- package/dist/components/dialog/Dialog.d.ts +55 -0
- package/dist/components/dialog/Dialog.js +2 -0
- package/dist/components/dialog/index.d.ts +3 -0
- package/dist/components/dialog/initial-focus.js +2 -0
- package/dist/components/dialog/overlay-style.js +2 -0
- package/dist/components/drawer/Drawer.d.ts +48 -0
- package/dist/components/drawer/Drawer.js +2 -0
- package/dist/components/drawer/index.d.ts +3 -0
- package/dist/components/dropdown-menu/DropdownMenu.d.ts +115 -0
- package/dist/components/dropdown-menu/DropdownMenu.js +2 -0
- package/dist/components/dropdown-menu/MenuCheck.js +2 -0
- package/dist/components/dropdown-menu/index.d.ts +3 -0
- package/dist/components/dropdown-menu/menu-style.d.ts +4 -0
- package/dist/components/dropdown-menu/menu-style.js +2 -0
- package/dist/components/empty-state/EmptyState.d.ts +22 -0
- package/dist/components/empty-state/EmptyState.js +2 -0
- package/dist/components/empty-state/index.d.ts +3 -0
- package/dist/components/field/Field.d.ts +58 -0
- package/dist/components/field/Field.js +2 -0
- package/dist/components/field/index.d.ts +3 -0
- package/dist/components/file-upload/FileItem.d.ts +50 -0
- package/dist/components/file-upload/FileItem.js +2 -0
- package/dist/components/file-upload/FileUpload.d.ts +82 -0
- package/dist/components/file-upload/FileUpload.js +2 -0
- package/dist/components/file-upload/index.d.ts +4 -0
- package/dist/components/flyout-bar/FlyoutBar.d.ts +46 -0
- package/dist/components/flyout-bar/FlyoutBar.js +2 -0
- package/dist/components/flyout-bar/index.d.ts +3 -0
- package/dist/components/ghost-text/GhostText.d.ts +21 -0
- package/dist/components/ghost-text/GhostText.js +2 -0
- package/dist/components/ghost-text/index.d.ts +3 -0
- package/dist/components/hatch/Hatch.d.ts +18 -0
- package/dist/components/hatch/Hatch.js +2 -0
- package/dist/components/hatch/index.d.ts +3 -0
- package/dist/components/hazard-stripe/HazardStripe.d.ts +15 -0
- package/dist/components/hazard-stripe/HazardStripe.js +2 -0
- package/dist/components/hazard-stripe/index.d.ts +3 -0
- package/dist/components/hover-card/HoverCard.d.ts +35 -0
- package/dist/components/hover-card/HoverCard.js +2 -0
- package/dist/components/hover-card/index.d.ts +3 -0
- package/dist/components/icon-button/IconButton.d.ts +21 -0
- package/dist/components/icon-button/IconButton.js +2 -0
- package/dist/components/icon-button/index.d.ts +3 -0
- package/dist/components/image-viewer/ImageViewer.d.ts +48 -0
- package/dist/components/image-viewer/ImageViewer.js +2 -0
- package/dist/components/image-viewer/index.d.ts +3 -0
- package/dist/components/input/Input.d.ts +27 -0
- package/dist/components/input/Input.js +2 -0
- package/dist/components/input/control-box.d.ts +5 -0
- package/dist/components/input/control-box.js +2 -0
- package/dist/components/input/index.d.ts +3 -0
- package/dist/components/input/value-chip.js +2 -0
- package/dist/components/item-slot/ItemGrid.d.ts +12 -0
- package/dist/components/item-slot/ItemGrid.js +2 -0
- package/dist/components/item-slot/ItemSlot.d.ts +54 -0
- package/dist/components/item-slot/ItemSlot.js +2 -0
- package/dist/components/item-slot/index.d.ts +4 -0
- package/dist/components/kbd/Kbd.d.ts +15 -0
- package/dist/components/kbd/Kbd.js +2 -0
- package/dist/components/kbd/index.d.ts +3 -0
- package/dist/components/link-element/LinkElement.d.ts +6 -0
- package/dist/components/link-element/LinkElement.js +2 -0
- package/dist/components/list/List.d.ts +46 -0
- package/dist/components/list/List.js +2 -0
- package/dist/components/list/band-style.js +2 -0
- package/dist/components/list/index.d.ts +3 -0
- package/dist/components/loader/Loader.d.ts +23 -0
- package/dist/components/loader/Loader.js +2 -0
- package/dist/components/loader/index.d.ts +3 -0
- package/dist/components/marquee/Marquee.d.ts +22 -0
- package/dist/components/marquee/Marquee.js +2 -0
- package/dist/components/marquee/index.d.ts +3 -0
- package/dist/components/media-card/MediaCard.d.ts +36 -0
- package/dist/components/media-card/MediaCard.js +2 -0
- package/dist/components/media-card/index.d.ts +3 -0
- package/dist/components/nav-action/NavAction.d.ts +34 -0
- package/dist/components/nav-action/NavAction.js +2 -0
- package/dist/components/nav-action/index.d.ts +3 -0
- package/dist/components/nav-menu/NavMenu.d.ts +57 -0
- package/dist/components/nav-menu/NavMenu.js +2 -0
- package/dist/components/nav-menu/index.d.ts +3 -0
- package/dist/components/navigator/Navigator.d.ts +27 -0
- package/dist/components/navigator/Navigator.js +2 -0
- package/dist/components/navigator/index.d.ts +3 -0
- package/dist/components/otp-input/OtpInput.d.ts +52 -0
- package/dist/components/otp-input/OtpInput.js +2 -0
- package/dist/components/otp-input/index.d.ts +3 -0
- package/dist/components/page-header/PageHeader.d.ts +56 -0
- package/dist/components/page-header/PageHeader.js +2 -0
- package/dist/components/page-header/index.d.ts +3 -0
- package/dist/components/pagination/Pagination.d.ts +29 -0
- package/dist/components/pagination/Pagination.js +2 -0
- package/dist/components/pagination/index.d.ts +3 -0
- package/dist/components/panel/Panel.d.ts +36 -0
- package/dist/components/panel/Panel.js +2 -0
- package/dist/components/panel/index.d.ts +3 -0
- package/dist/components/play-button/PlayButton.d.ts +20 -0
- package/dist/components/play-button/PlayButton.js +2 -0
- package/dist/components/play-button/index.d.ts +3 -0
- package/dist/components/popover/Popover.d.ts +36 -0
- package/dist/components/popover/Popover.js +2 -0
- package/dist/components/popover/index.d.ts +3 -0
- package/dist/components/popover/panel-style.js +2 -0
- package/dist/components/progress/Progress.d.ts +27 -0
- package/dist/components/progress/Progress.js +2 -0
- package/dist/components/progress/ProgressRing.d.ts +23 -0
- package/dist/components/progress/ProgressRing.js +2 -0
- package/dist/components/progress/index.d.ts +4 -0
- package/dist/components/radio/Radio.d.ts +33 -0
- package/dist/components/radio/Radio.js +2 -0
- package/dist/components/radio/index.d.ts +3 -0
- package/dist/components/rec-indicator/RecIndicator.d.ts +16 -0
- package/dist/components/rec-indicator/RecIndicator.js +2 -0
- package/dist/components/rec-indicator/index.d.ts +3 -0
- package/dist/components/registration-strip/RegistrationStrip.d.ts +16 -0
- package/dist/components/registration-strip/RegistrationStrip.js +2 -0
- package/dist/components/registration-strip/index.d.ts +3 -0
- package/dist/components/rolling-number/RollingNumber.d.ts +25 -0
- package/dist/components/rolling-number/RollingNumber.js +2 -0
- package/dist/components/rolling-number/index.d.ts +3 -0
- package/dist/components/schedule/Schedule.d.ts +78 -0
- package/dist/components/schedule/Schedule.js +2 -0
- package/dist/components/schedule/index.d.ts +3 -0
- package/dist/components/scroll-area/ScrollArea.d.ts +26 -0
- package/dist/components/scroll-area/ScrollArea.js +2 -0
- package/dist/components/scroll-area/index.d.ts +3 -0
- package/dist/components/scroll-hint/ScrollHint.d.ts +23 -0
- package/dist/components/scroll-hint/ScrollHint.js +2 -0
- package/dist/components/scroll-hint/index.d.ts +3 -0
- package/dist/components/section-title/SectionTitle.d.ts +33 -0
- package/dist/components/section-title/SectionTitle.js +2 -0
- package/dist/components/section-title/index.d.ts +3 -0
- package/dist/components/segmented-control/SegmentedControl.d.ts +49 -0
- package/dist/components/segmented-control/SegmentedControl.js +2 -0
- package/dist/components/segmented-control/index.d.ts +3 -0
- package/dist/components/select/Select.d.ts +95 -0
- package/dist/components/select/Select.js +2 -0
- package/dist/components/select/index.d.ts +3 -0
- package/dist/components/side-rail/SideRail.d.ts +62 -0
- package/dist/components/side-rail/SideRail.js +2 -0
- package/dist/components/side-rail/SideRailSub.d.ts +47 -0
- package/dist/components/side-rail/SideRailSub.js +2 -0
- package/dist/components/side-rail/index.d.ts +4 -0
- package/dist/components/skeleton/Skeleton.d.ts +22 -0
- package/dist/components/skeleton/Skeleton.js +2 -0
- package/dist/components/skeleton/index.d.ts +3 -0
- package/dist/components/slider/Slider.d.ts +63 -0
- package/dist/components/slider/Slider.js +2 -0
- package/dist/components/slider/index.d.ts +3 -0
- package/dist/components/sparkline/Sparkline.d.ts +32 -0
- package/dist/components/sparkline/Sparkline.js +2 -0
- package/dist/components/sparkline/index.d.ts +3 -0
- package/dist/components/spinner/Spinner.d.ts +19 -0
- package/dist/components/spinner/Spinner.js +2 -0
- package/dist/components/spinner/index.d.ts +3 -0
- package/dist/components/splash-screen/SplashScreen.d.ts +43 -0
- package/dist/components/splash-screen/SplashScreen.js +2 -0
- package/dist/components/splash-screen/index.d.ts +3 -0
- package/dist/components/stat/Stat.d.ts +22 -0
- package/dist/components/stat/Stat.js +2 -0
- package/dist/components/stat/index.d.ts +3 -0
- package/dist/components/stepper/Stepper.d.ts +29 -0
- package/dist/components/stepper/Stepper.js +2 -0
- package/dist/components/stepper/index.d.ts +3 -0
- package/dist/components/steps/Steps.d.ts +55 -0
- package/dist/components/steps/Steps.js +2 -0
- package/dist/components/steps/index.d.ts +3 -0
- package/dist/components/switch/Switch.d.ts +28 -0
- package/dist/components/switch/Switch.js +2 -0
- package/dist/components/switch/index.d.ts +3 -0
- package/dist/components/table/Table.d.ts +96 -0
- package/dist/components/table/Table.js +2 -0
- package/dist/components/table/index.d.ts +3 -0
- package/dist/components/tabs/Tabs.d.ts +39 -0
- package/dist/components/tabs/Tabs.js +2 -0
- package/dist/components/tabs/index.d.ts +3 -0
- package/dist/components/tag/Tag.d.ts +25 -0
- package/dist/components/tag/Tag.js +2 -0
- package/dist/components/tag/TagPair.d.ts +16 -0
- package/dist/components/tag/TagPair.js +2 -0
- package/dist/components/tag/index.d.ts +4 -0
- package/dist/components/tag-input/TagInput.d.ts +66 -0
- package/dist/components/tag-input/TagInput.js +3 -0
- package/dist/components/tag-input/index.d.ts +3 -0
- package/dist/components/term/Term.d.ts +19 -0
- package/dist/components/term/Term.js +2 -0
- package/dist/components/term/index.d.ts +3 -0
- package/dist/components/textarea/Textarea.d.ts +17 -0
- package/dist/components/textarea/Textarea.js +2 -0
- package/dist/components/textarea/index.d.ts +3 -0
- package/dist/components/texture/Texture.d.ts +19 -0
- package/dist/components/texture/Texture.js +2 -0
- package/dist/components/texture/index.d.ts +3 -0
- package/dist/components/tick-ring/TickRing.d.ts +22 -0
- package/dist/components/tick-ring/TickRing.js +2 -0
- package/dist/components/tick-ring/index.d.ts +3 -0
- package/dist/components/timeline/Timeline.d.ts +22 -0
- package/dist/components/timeline/Timeline.js +2 -0
- package/dist/components/timeline/index.d.ts +3 -0
- package/dist/components/toast/Toast.d.ts +45 -0
- package/dist/components/toast/Toast.js +2 -0
- package/dist/components/toast/index.d.ts +3 -0
- package/dist/components/toc/Toc.d.ts +46 -0
- package/dist/components/toc/Toc.js +2 -0
- package/dist/components/toc/index.d.ts +3 -0
- package/dist/components/toolbar/Toolbar.d.ts +97 -0
- package/dist/components/toolbar/Toolbar.js +2 -0
- package/dist/components/toolbar/index.d.ts +3 -0
- package/dist/components/tooltip/Tooltip.d.ts +47 -0
- package/dist/components/tooltip/Tooltip.js +2 -0
- package/dist/components/tooltip/index.d.ts +3 -0
- package/dist/components/top-bar/TopBar.d.ts +21 -0
- package/dist/components/top-bar/TopBar.js +2 -0
- package/dist/components/top-bar/index.d.ts +3 -0
- package/dist/components/viewfinder/Viewfinder.d.ts +35 -0
- package/dist/components/viewfinder/Viewfinder.js +2 -0
- package/dist/components/viewfinder/index.d.ts +3 -0
- package/dist/game/animated-dialog/AnimatedDialog.d.ts +53 -0
- package/dist/game/animated-dialog/AnimatedDialog.js +2 -0
- package/dist/game/animated-dialog/index.d.ts +3 -0
- package/dist/game/banner-alert/AlertIcons.js +2 -0
- package/dist/game/banner-alert/AlertModal.js +2 -0
- package/dist/game/banner-alert/BannerAlert.d.ts +6 -0
- package/dist/game/banner-alert/BannerAlert.js +2 -0
- package/dist/game/banner-alert/index.d.ts +3 -0
- package/dist/game/banner-alert/types.d.ts +48 -0
- package/dist/game/banner-alert/types.js +2 -0
- package/dist/game/banner-alert/useAlertActions.js +2 -0
- package/dist/game/banner-alert/useAlertGlitch.js +2 -0
- package/dist/game/full-width-alert/FullWidthAlert.d.ts +7 -0
- package/dist/game/full-width-alert/FullWidthAlert.js +2 -0
- package/dist/game/full-width-alert/index.d.ts +3 -0
- package/dist/game/item-card/ItemCard.d.ts +48 -0
- package/dist/game/item-card/ItemCard.js +2 -0
- package/dist/game/item-card/index.d.ts +3 -0
- package/dist/game/item-hover-card/ItemHoverCard.d.ts +31 -0
- package/dist/game/item-hover-card/ItemHoverCard.js +2 -0
- package/dist/game/item-hover-card/events.js +2 -0
- package/dist/game/item-hover-card/index.d.ts +3 -0
- package/dist/game/item-icon/ItemIcon.d.ts +5 -0
- package/dist/game/item-icon/ItemIcon.js +2 -0
- package/dist/game/item-icon/helpers.d.ts +22 -0
- package/dist/game/item-icon/helpers.js +2 -0
- package/dist/game/item-icon/index.d.ts +5 -0
- package/dist/game/item-icon/types.d.ts +32 -0
- package/dist/game/item-tooltip-card/ItemTooltipCard.d.ts +6 -0
- package/dist/game/item-tooltip-card/ItemTooltipCard.js +2 -0
- package/dist/game/item-tooltip-card/icons.js +2 -0
- package/dist/game/item-tooltip-card/index.d.ts +4 -0
- package/dist/game/item-tooltip-card/types.d.ts +40 -0
- package/dist/game/lib/core.d.ts +8 -0
- package/dist/game/lib/first-focusable.js +2 -0
- package/dist/game/rounded-button/RoundedButton.d.ts +22 -0
- package/dist/game/rounded-button/RoundedButton.js +2 -0
- package/dist/game/rounded-button/RoundedIconButton.d.ts +10 -0
- package/dist/game/rounded-button/RoundedIconButton.js +2 -0
- package/dist/game/rounded-button/index.d.ts +4 -0
- package/dist/game/rounded-select/RoundedSelect.d.ts +43 -0
- package/dist/game/rounded-select/RoundedSelect.js +2 -0
- package/dist/game/rounded-select/index.d.ts +3 -0
- package/dist/game/rounded-switch/RoundedSwitch.d.ts +16 -0
- package/dist/game/rounded-switch/RoundedSwitch.js +2 -0
- package/dist/game/rounded-switch/index.d.ts +3 -0
- package/dist/game/rounded-toggle/RoundedToggle.d.ts +23 -0
- package/dist/game/rounded-toggle/RoundedToggle.js +2 -0
- package/dist/game/rounded-toggle/index.d.ts +3 -0
- package/dist/game/rounded-toggle/keyboard.js +2 -0
- package/dist/game/rounded-toggle/spring-highlight.js +2 -0
- package/dist/game/splash-screen/EndfieldSplashScreen.d.ts +14 -0
- package/dist/game/splash-screen/EndfieldSplashScreen.js +2 -0
- package/dist/game/splash-screen/index.d.ts +3 -0
- package/dist/game.d.ts +29 -383
- package/dist/game.js +1 -2068
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/useAddedKeys.js +2 -0
- package/dist/hooks/useControllableState.d.ts +12 -0
- package/dist/hooks/useControllableState.js +2 -0
- package/dist/hooks/useFlip.js +2 -0
- package/dist/hooks/useInView.d.ts +15 -0
- package/dist/hooks/useInView.js +2 -0
- package/dist/hooks/useIndicator.js +2 -0
- package/dist/hooks/useLingering.js +2 -0
- package/dist/hooks/useOverflowing.js +2 -0
- package/dist/hooks/usePortalScope.d.ts +26 -0
- package/dist/hooks/usePortalScope.js +2 -0
- package/dist/hooks/usePresence.js +2 -0
- package/dist/hooks/useReducedMotion.d.ts +10 -0
- package/dist/hooks/useReducedMotion.js +2 -0
- package/dist/hooks/useScrollPosition.js +2 -0
- package/dist/hooks/useTheme.d.ts +21 -0
- package/dist/hooks/useTheme.js +2 -0
- package/dist/icons/ArrowCorner.d.ts +9 -0
- package/dist/icons/ArrowCorner.js +2 -0
- package/dist/icons/ArrowLeft.d.ts +8 -0
- package/dist/icons/ArrowLeft.js +2 -0
- package/dist/icons/ArrowRight.d.ts +8 -0
- package/dist/icons/ArrowRight.js +2 -0
- package/dist/icons/CalendarIcon.d.ts +12 -0
- package/dist/icons/CalendarIcon.js +2 -0
- package/dist/icons/Check.d.ts +9 -0
- package/dist/icons/Check.js +2 -0
- package/dist/icons/ChevronDown.d.ts +8 -0
- package/dist/icons/ChevronDown.js +2 -0
- package/dist/icons/ChevronLeft.d.ts +8 -0
- package/dist/icons/ChevronLeft.js +2 -0
- package/dist/icons/ChevronRight.d.ts +8 -0
- package/dist/icons/ChevronRight.js +2 -0
- package/dist/icons/Close.d.ts +8 -0
- package/dist/icons/Close.js +2 -0
- package/dist/icons/Crosshair.d.ts +9 -0
- package/dist/icons/Crosshair.js +2 -0
- package/dist/icons/Lock.d.ts +8 -0
- package/dist/icons/Lock.js +2 -0
- package/dist/icons/Menu.d.ts +9 -0
- package/dist/icons/Menu.js +2 -0
- package/dist/icons/Minus.d.ts +9 -0
- package/dist/icons/Minus.js +2 -0
- package/dist/icons/Plus.d.ts +8 -0
- package/dist/icons/Plus.js +2 -0
- package/dist/icons/StatusDanger.d.ts +9 -0
- package/dist/icons/StatusDanger.js +2 -0
- package/dist/icons/StatusInfo.d.ts +9 -0
- package/dist/icons/StatusInfo.js +2 -0
- package/dist/icons/StatusSuccess.d.ts +9 -0
- package/dist/icons/StatusSuccess.js +2 -0
- package/dist/icons/StatusWarning.d.ts +9 -0
- package/dist/icons/StatusWarning.js +2 -0
- package/dist/icons/TriangleRight.d.ts +9 -0
- package/dist/icons/TriangleRight.js +2 -0
- package/dist/icons/Upload.d.ts +9 -0
- package/dist/icons/Upload.js +2 -0
- package/dist/icons/createIcon.d.ts +16 -0
- package/dist/icons/createIcon.js +2 -0
- package/dist/icons/index.d.ts +23 -0
- package/dist/index.d.ts +209 -3546
- package/dist/index.js +1 -9848
- package/dist/lib/cn.d.ts +5 -0
- package/dist/lib/cn.js +2 -0
- package/dist/lib/create-lazy-context.js +2 -0
- package/dist/lib/date.js +2 -0
- package/dist/lib/decor.js +2 -0
- package/dist/lib/defined.js +2 -0
- package/dist/lib/file.js +2 -0
- package/dist/lib/focus-ring.js +2 -0
- package/dist/lib/inline-style.js +2 -0
- package/dist/lib/merge-refs.js +2 -0
- package/dist/lib/motion.js +2 -0
- package/dist/styles.css +1 -1
- package/package.json +17 -11
- package/src/components/accordion/Accordion.tsx +13 -5
- package/src/components/avatar/AvatarSwitcher.tsx +7 -5
- package/src/components/button/Button.tsx +77 -90
- package/src/components/carousel/Carousel.tsx +6 -5
- package/src/components/context-menu/ContextMenu.tsx +5 -2
- package/src/components/data-row/DataRow.tsx +10 -4
- package/src/components/date-picker/DateField.tsx +1 -1
- package/src/components/dropdown-menu/DropdownMenu.tsx +7 -4
- package/src/components/dropdown-menu/menu-style.ts +3 -2
- package/src/components/field/Field.tsx +10 -6
- package/src/components/flyout-bar/FlyoutBar.tsx +1 -1
- package/src/components/icon-button/IconButton.tsx +5 -5
- package/src/components/image-viewer/ImageViewer.tsx +6 -5
- package/src/components/list/List.tsx +7 -5
- package/src/components/nav-action/NavAction.tsx +6 -4
- package/src/components/nav-menu/NavMenu.tsx +13 -7
- package/src/components/page-header/PageHeader.tsx +1 -1
- package/src/components/play-button/PlayButton.tsx +1 -1
- package/src/components/radio/Radio.tsx +7 -5
- package/src/components/schedule/Schedule.tsx +7 -5
- package/src/components/segmented-control/SegmentedControl.tsx +7 -5
- package/src/components/select/Select.tsx +11 -9
- package/src/components/side-rail/SideRail.tsx +15 -9
- package/src/components/side-rail/SideRailSub.tsx +12 -7
- package/src/components/steps/Steps.tsx +7 -5
- package/src/components/table/Table.tsx +23 -17
- package/src/components/tabs/Tabs.tsx +7 -5
- package/src/components/toast/Toast.tsx +8 -5
- package/src/components/toc/Toc.tsx +5 -4
- package/src/components/toolbar/Toolbar.tsx +7 -6
- package/src/components/tooltip/Tooltip.tsx +7 -4
- package/src/components/top-bar/TopBar.tsx +7 -2
- package/src/icons/ArrowCorner.tsx +1 -1
- package/src/icons/ArrowLeft.tsx +1 -1
- package/src/icons/ArrowRight.tsx +1 -1
- package/src/icons/CalendarIcon.tsx +1 -1
- package/src/icons/Check.tsx +4 -1
- package/src/icons/ChevronDown.tsx +4 -1
- package/src/icons/ChevronLeft.tsx +1 -1
- package/src/icons/ChevronRight.tsx +1 -1
- package/src/icons/Close.tsx +4 -1
- package/src/icons/Crosshair.tsx +1 -1
- package/src/icons/Lock.tsx +1 -1
- package/src/icons/Menu.tsx +4 -1
- package/src/icons/Minus.tsx +1 -1
- package/src/icons/Plus.tsx +4 -1
- package/src/icons/StatusDanger.tsx +1 -1
- package/src/icons/StatusInfo.tsx +1 -1
- package/src/icons/StatusSuccess.tsx +1 -1
- package/src/icons/StatusWarning.tsx +1 -1
- package/src/icons/TriangleRight.tsx +1 -1
- package/src/icons/Upload.tsx +1 -1
- package/src/lib/cn.ts +1 -1
- package/src/lib/create-lazy-context.ts +6 -0
- package/src/styles/theme.css +37 -0
- package/src/components/README.md +0 -191
- package/src/hooks/README.md +0 -20
- package/src/icons/README.md +0 -31
- package/src/lib/README.md +0 -19
- package/src/styles/README.md +0 -77
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{focusRingWithin as t}from"../../lib/focus-ring.js";import{StatusDanger as n}from"../../icons/StatusDanger.js";import{mergeRefs as r}from"../../lib/merge-refs.js";import{useControllableState as i}from"../../hooks/useControllableState.js";import{collapse as a}from"../../lib/motion.js";import{useFieldControl as o}from"../field/Field.js";import"../../lib/decor.js";import{formatFileSize as ee,matchesAccept as s,sameFile as te}from"../../lib/file.js";import{FileItem as ne}from"./FileItem.js";import{useAddedKeys as c}from"../../hooks/useAddedKeys.js";import{useLingering as re}from"../../hooks/useLingering.js";import{Upload as ie}from"../../icons/Upload.js";import{useEffect as ae,useLayoutEffect as oe,useRef as l,useState as u}from"react";import{Fragment as d,jsx as f,jsxs as p}from"react/jsx-runtime";const se={list:`已选的文件`,selected:e=>e===0?`没有文件`:`已选 ${e} 个文件`,rejected:e=>`${e} 个文件没有加进来`,type:`类型不对`,size:e=>`超过 ${e}`,count:e=>`超出个数上限(最多 ${e} 个)`},ce={sm:`min-h-10 flex-wrap gap-x-3 px-3 py-2 text-sm`,md:`gap-3 px-4 py-4`},le=e=>`${e.name}-${e.size}-${e.lastModified}`;function ue(e){let t=[...e.items??[]];return t.length===0?[...e.files]:t.flatMap(e=>e.kind!==`file`||e.webkitGetAsEntry?.()?.isDirectory?[]:e.getAsFile()??[])}function m({leaving:t,entering:n,children:r}){let[i,o]=u(r);return!t&&i!==r&&o(r),/* @__PURE__ */ f(`li`,{"data-leaving":t?``:void 0,inert:t,"aria-hidden":t||void 0,className:e(a,`transition-[grid-template-rows,margin,opacity] duration-(--duration-fast)`,`data-leaving:-mb-1 data-leaving:opacity-0`,n&&`animate-fade-in [animation-duration:var(--duration-fast)]`),children:/* @__PURE__ */ f(`div`,{className:`min-h-0 min-w-0 in-data-leaving:overflow-y-clip`,children:t?i:r})})}function h({value:a,defaultValue:h,onValueChange:de,multiple:g=!1,accept:_,maxSize:v,maxFiles:y,onReject:fe,name:pe,title:me=`把文件拖到这里,或者`,browseLabel:he=`选择文件`,dropLabel:ge=`松开,放进来`,description:b,size:x=`md`,invalid:S,disabled:C,required:w,renderFile:T,removeLabel:E=e=>`移除${e}`,labels:D,id:O,"aria-label":k,"aria-describedby":A,className:j,ref:M}){let{id:N,disabled:P,required:F,invalid:I,...L}=o({id:O,disabled:C,required:w,invalid:S,"aria-describedby":A}),R={...se,...D},z=l(null),B=l(null),[V,H]=i({value:a,defaultValue:h??[],onChange:de}),U=V.map(le),_e=c(U),W=re(U),[G,K]=u([]),[q,J]=u(!1),Y=l(0),[ve,X]=u(0);ae(()=>{let e=z.current;if(e&&typeof DataTransfer<`u`)try{let t=new DataTransfer;for(let e of V)t.items.add(e);e.files=t.files}catch{}},[V,ve]);let Z=l(null);oe(()=>{let e=Z.current;if(e===null)return;Z.current=null;let t=B.current?.querySelectorAll(`li:not([data-leaving]) [data-file-remove]`)??[],n=t[Math.min(e,t.length-1)];n?n.focus():z.current?.focus()});let Q=e=>{let t=[],n=g?[...V]:[];for(let r of e)s(r,_)?v!==void 0&&r.size>v?t.push({file:r,reason:`size`}):g?n.some(e=>te(e,r))||(y!==void 0&&n.length>=y?t.push({file:r,reason:`count`}):n.push(r)):n.length===0?n=[r]:t.push({file:r,reason:`count`}):t.push({file:r,reason:`type`});!g&&n.length===0&&(n=V),(n.length!==V.length||n.some((e,t)=>e!==V[t]))&&H(n),K(t),X(e=>e+1),t.length>0&&fe?.(t)},ye=e=>{Z.current=e,H(V.filter((t,n)=>n!==e)),K([]),X(e=>e+1)},be=e=>{Q([...e.target.files??[]])},$=e=>[...e.dataTransfer.types].includes(`Files`),xe=e=>{!P&&$(e)&&(Y.current+=1,J(!0))},Se=e=>{!P&&$(e)&&(Y.current=Math.max(Y.current-1,0),Y.current===0&&J(!1))},Ce=e=>{$(e)&&e.preventDefault()},we=e=>{$(e)&&(e.preventDefault(),Y.current=0,J(!1),P||Q(ue(e.dataTransfer)))},Te=({reason:e})=>e===`type`?R.type:e===`size`?R.size(ee(v??0)):R.count(g?y??0:1);return/* @__PURE__ */ p(`div`,{"data-size":x,"data-invalid":I?``:void 0,className:e(`flex min-w-0 flex-col gap-2 text-ink`,j),children:[/* @__PURE__ */ p(`div`,{"data-dropzone":``,"data-dragging":q?``:void 0,onDragEnter:xe,onDragLeave:Se,onDragOver:Ce,onDrop:we,className:e(`relative flex items-center border bg-surface-sunken`,`transition-colors duration-(--duration-fast) ease-standard`,t,ce[x],q?`border-solid border-ink`:[`border-dashed`,P?`cursor-not-allowed border-line text-ink-disabled`:I?`border-danger`:`border-line-strong hover:border-ink-secondary`]),children:[/* @__PURE__ */ f(ie,{size:x===`sm`?20:24,className:e(`shrink-0`,P?`text-ink-disabled`:`text-ink-secondary`)}),/* @__PURE__ */ p(`span`,{className:e(`flex min-w-0`,x===`sm`?`flex-1 flex-wrap items-baseline gap-x-3`:`flex-col gap-0.5`),children:[/* @__PURE__ */ f(`span`,{className:`font-medium`,children:q?ge:/* @__PURE__ */ p(d,{children:[me,/* @__PURE__ */ f(`span`,{className:`ml-1 underline underline-offset-4`,children:he})]})}),b&&/* @__PURE__ */ f(`span`,{className:e(`text-sm`,P?`text-ink-disabled`:`text-ink-secondary`),children:b})]}),q&&/* @__PURE__ */ f(`span`,{"aria-hidden":`true`,"data-brackets":``,className:e(`pointer-events-none select-none forced-colors:hidden print:hidden`,`corner-brackets absolute inset-1.5 [--bracket-offset:0px] after:animate-bracket-in`)}),/* @__PURE__ */ f(`input`,{ref:r(z,M),id:N,type:`file`,name:pe,multiple:g,accept:_,disabled:P,required:F,"aria-label":k,"aria-invalid":I||void 0,"aria-describedby":L[`aria-describedby`],title:``,onChange:be,className:`absolute inset-0 size-full cursor-[inherit] opacity-0 outline-none disabled:pointer-events-none`})]}),/* @__PURE__ */ f(`div`,{"aria-live":`polite`,"data-rejections":``,children:G.length>0&&/* @__PURE__ */ p(`p`,{className:`flex items-start gap-1.5 text-sm text-danger`,children:[/* @__PURE__ */ f(n,{size:16,className:`mt-0.5 shrink-0`}),/* @__PURE__ */ f(`span`,{className:`min-w-0 wrap-anywhere`,children:`${R.rejected(G.length)}:${G.map(e=>`${e.file.name} ${Te(e)}`).join(`;`)}`})]})}),W.entries.length>0&&/* @__PURE__ */ f(`ul`,{ref:r(B,W.ref),"aria-label":R.list,"data-emptying":V.length===0?``:void 0,className:`flex flex-col gap-1 transition-[margin] duration-(--duration-fast) ease-standard data-emptying:-mt-2`,children:W.entries.map(({key:e,leaving:t})=>{let n=U.indexOf(e),r=V[n],i={remove:()=>ye(n),index:n};return/* @__PURE__ */ f(m,{leaving:t,entering:_e.has(e),children:r!==void 0&&(T?T(r,i):/* @__PURE__ */ f(ne,{name:r.name,size:r.size,disabled:P,removeLabel:E(r.name),onRemove:i.remove}))},e)})}),/* @__PURE__ */ f(`span`,{"aria-live":`polite`,className:`sr-only`,children:R.selected(V.length)})]})}export{h as FileUpload};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
|
|
2
|
+
import { FileItem, FileItemProps, FileItemStatus } from "./FileItem.js";
|
|
3
|
+
import { FileRejectReason, FileRejection, FileUpload, FileUploadLabels, FileUploadProps, FileUploadSize } from "./FileUpload.js";
|
|
4
|
+
export { FileItem, type FileItemProps, type FileItemStatus, type FileRejectReason, type FileRejection, FileUpload, type FileUploadLabels, type FileUploadProps, type FileUploadSize };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
|
|
2
|
+
import { LinkRender } from "../link-element/LinkElement.js";
|
|
3
|
+
import { ComponentProps, MouseEvent, ReactElement, ReactNode } from "react";
|
|
4
|
+
//#region src/components/flyout-bar/FlyoutBar.d.ts
|
|
5
|
+
export type FlyoutBarSide = "right" | "left";
|
|
6
|
+
export type FlyoutBarProps = {
|
|
7
|
+
/**
|
|
8
|
+
* 触发按钮,通常是 `<IconButton variant="inverse">`。
|
|
9
|
+
* 它的名称(`aria-label`)同时是这一条的名称,读屏打开时会读出来
|
|
10
|
+
*/
|
|
11
|
+
trigger: ReactElement<Record<string, unknown>>;
|
|
12
|
+
/** 展开在触发按钮的哪一侧,放不下时自动翻到另一侧。默认 `right` */
|
|
13
|
+
side?: FlyoutBarSide;
|
|
14
|
+
open?: boolean;
|
|
15
|
+
defaultOpen?: boolean;
|
|
16
|
+
onOpenChange?: (open: boolean) => void;
|
|
17
|
+
/** 给横条本身 */
|
|
18
|
+
className?: string;
|
|
19
|
+
/** `FlyoutBarItem` */
|
|
20
|
+
children: ReactNode;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* 展开条:从一个图标按钮旁边拉开的一条横排操作,比如分享的几个去处。
|
|
24
|
+
* 语义和键盘都是横向的菜单——左右方向键移动、回车选择、`Esc` 关闭。
|
|
25
|
+
* 选项多于六个、或者要文字才看得懂时,用 `DropdownMenu`。
|
|
26
|
+
*/
|
|
27
|
+
export declare function FlyoutBar({ trigger, side, open, defaultOpen, onOpenChange, className, children }: FlyoutBarProps): import("react").JSX.Element;
|
|
28
|
+
type ItemOwnProps = {
|
|
29
|
+
/** 只有图标时必须给:它是这一项的名称 */
|
|
30
|
+
"aria-label"?: string;
|
|
31
|
+
disabled?: boolean;
|
|
32
|
+
/** 点了之后是否关掉。操作项默认关,链接项默认不关 */
|
|
33
|
+
closeOnClick?: boolean;
|
|
34
|
+
/** 传了就渲染成链接 */
|
|
35
|
+
href?: string;
|
|
36
|
+
target?: string;
|
|
37
|
+
rel?: string;
|
|
38
|
+
/** 用这个元素代替 `<a>`(路由库的链接组件)。传了就按链接处理 */
|
|
39
|
+
render?: LinkRender;
|
|
40
|
+
onClick?: (event: MouseEvent<HTMLElement>) => void;
|
|
41
|
+
};
|
|
42
|
+
export type FlyoutBarItemProps = ItemOwnProps & Omit<ComponentProps<"div">, keyof ItemOwnProps | "id" | "style">;
|
|
43
|
+
/** 展开条里的一项:子元素是图标,可以再带文字;传 `href` 就是一个链接。 */
|
|
44
|
+
export declare function FlyoutBarItem({ "aria-label": ariaLabel, disabled, closeOnClick, href, target, rel, render, onClick, className, children, ...props }: FlyoutBarItemProps): import("react").JSX.Element;
|
|
45
|
+
//#endregion
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{focusRingInset as t}from"../../lib/focus-ring.js";import{defined as n}from"../../lib/defined.js";import{usePortalScope as r}from"../../hooks/usePortalScope.js";import{jsx as i,jsxs as a}from"react/jsx-runtime";import{Menu as o}from"@base-ui/react/menu";function s({trigger:t,side:n=`right`,open:s,defaultOpen:c,onOpenChange:l,className:u,children:d}){let{anchorRef:f,portalRef:p}=r();return/* @__PURE__ */ a(o.Root,{orientation:`horizontal`,open:s,defaultOpen:c,onOpenChange:l&&(e=>l(e)),children:[/* @__PURE__ */ i(o.Trigger,{ref:f,render:t}),/* @__PURE__ */ i(o.Portal,{ref:p,children:/* @__PURE__ */ i(o.Positioner,{side:n,align:`center`,className:`z-(--z-overlay) outline-none`,children:/* @__PURE__ */ i(o.Popup,{"data-theme":`dark`,className:e(`flex h-(--anchor-height) min-h-10 items-stretch border border-line bg-surface-raised text-ink-secondary shadow-sm outline-none`,`data-[side=left]:border-r-4 data-[side=left]:border-r-action data-[side=right]:border-l-4 data-[side=right]:border-l-action`,`[clip-path:inset(-12px)] transition-[clip-path] duration-(--duration-base) ease-exit`,`data-[side=right]:data-ending-style:[clip-path:inset(-12px_100%_-12px_-12px)] data-[side=right]:data-starting-style:[clip-path:inset(-12px_100%_-12px_-12px)]`,`data-[side=left]:data-ending-style:[clip-path:inset(-12px_-12px_-12px_100%)] data-[side=left]:data-starting-style:[clip-path:inset(-12px_-12px_-12px_100%)]`,u),children:d})})})]})}const c=/* @__PURE__ */ e(`flex min-w-10 cursor-default items-center justify-center gap-2 px-2.5 text-sm select-none`,`transition-colors duration-(--duration-fast) ease-standard`,`data-disabled:text-ink-disabled data-highlighted:text-ink`,`[&_svg]:size-5 [&_svg]:shrink-0`,t);function l({"aria-label":t,disabled:r,closeOnClick:a,href:s,target:l,rel:u,render:d,onClick:f,className:p,children:m,...h}){let g=e(c,p);return s!==void 0||d!==void 0?/* @__PURE__ */ i(o.LinkItem,{render:d,...n({href:s,target:l,rel:u}),"aria-label":t,label:t,closeOnClick:a,onClick:f,className:g,children:m}):/* @__PURE__ */ i(o.Item,{...h,"aria-label":t,label:t,disabled:r,closeOnClick:a,onClick:f,className:g,children:m})}export{s as FlyoutBar,l as FlyoutBarItem};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
import { ComponentProps } from "react";
|
|
3
|
+
//#region src/components/ghost-text/GhostText.d.ts
|
|
4
|
+
export type GhostTextVariant = "hatch" | "outline" | "solid";
|
|
5
|
+
export type GhostTextProps = ComponentProps<"span"> & {
|
|
6
|
+
/**
|
|
7
|
+
* - `hatch` 字形透明,用细斜纹填充。版块分隔、背景,默认;
|
|
8
|
+
* - `outline` 字形透明,只有一圈浅色描边。章节编号、完成态的庆祝词;
|
|
9
|
+
* - `solid` 纯墨色,越过容器边界被截断。
|
|
10
|
+
*/
|
|
11
|
+
variant?: GhostTextVariant;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* 镂空巨字:版面背景层里的一个词或一个编号,不是标题。
|
|
15
|
+
* 它只管长相与隐藏:放在哪、被谁裁切由使用方定——通常是绝对定位在一个
|
|
16
|
+
* `relative overflow-clip` 的版块里。字号默认是 `text-ghost`,用 `className` 换。
|
|
17
|
+
*
|
|
18
|
+
* 内容要短,写与版块相关的真实词语;一个版块一个;窄屏上往往直接去掉更好。
|
|
19
|
+
*/
|
|
20
|
+
export declare function GhostText({ variant, className, ...props }: GhostTextProps): import("react").JSX.Element;
|
|
21
|
+
//#endregion
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{decor as t}from"../../lib/decor.js";import{jsx as n}from"react/jsx-runtime";const r={hatch:`ghost-hatch`,outline:`ghost-outline`,solid:`text-ink`};function i({variant:i=`hatch`,className:a,...o}){return/* @__PURE__ */ n(`span`,{...o,"aria-hidden":`true`,"data-variant":i,className:e(t,`block font-display text-ghost font-extrabold whitespace-nowrap uppercase`,r[i],a)})}export{i as GhostText};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
import { ComponentProps } from "react";
|
|
3
|
+
//#region src/components/hatch/Hatch.d.ts
|
|
4
|
+
export type HatchDensity = "fine" | "mid" | "bold";
|
|
5
|
+
export type HatchProps = Omit<ComponentProps<"div">, "children"> & {
|
|
6
|
+
/**
|
|
7
|
+
* - `bold` 粗而淡的斜带(墨色 5%),跟随主题。条带状的表面:工具条、标题栏,默认;
|
|
8
|
+
* - `mid` 比底色亮一档的斜带,压在深色控件上,不随主题变;
|
|
9
|
+
* - `fine` 很细的墨色斜带,填未探索的区域、需要"留空"的格子。
|
|
10
|
+
*/
|
|
11
|
+
density?: HatchDensity;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* 一块 45° 斜纹,纯装饰。尺寸、位置、底色都由 `className` 给。
|
|
15
|
+
* 把它限制在条带和控件上:不要铺满整个页面,也不要压在正文下面。
|
|
16
|
+
*/
|
|
17
|
+
export declare function Hatch({ density, className, ...props }: HatchProps): import("react").JSX.Element;
|
|
18
|
+
//#endregion
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{decor as t}from"../../lib/decor.js";import{jsx as n}from"react/jsx-runtime";const r={bold:`hatch`,mid:`hatch hatch-mid`,fine:`hatch hatch-fine`};function i({density:i=`bold`,className:a,...o}){return/* @__PURE__ */ n(`div`,{...o,"aria-hidden":`true`,"data-density":i,className:e(t,r[i],a)})}export{i as Hatch};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
import { ComponentProps } from "react";
|
|
3
|
+
//#region src/components/hazard-stripe/HazardStripe.d.ts
|
|
4
|
+
export type HazardStripeSize = "sm" | "md";
|
|
5
|
+
export type HazardStripeProps = Omit<ComponentProps<"div">, "children"> & {
|
|
6
|
+
/** 条高 6px 或 12px */
|
|
7
|
+
size?: HazardStripeSize;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* 警示条纹:黄黑相间的窄条,和红色一样带"危险 / 施工"的含义。
|
|
11
|
+
* 放在删除确认、不可逆操作这类区域的边缘;一个视口最多一处,普通内容不要用。
|
|
12
|
+
* 它只是装饰:危险的含义必须另外用文字写出来。
|
|
13
|
+
*/
|
|
14
|
+
export declare function HazardStripe({ size, className, ...props }: HazardStripeProps): import("react").JSX.Element;
|
|
15
|
+
//#endregion
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{decor as t}from"../../lib/decor.js";import{jsx as n}from"react/jsx-runtime";const r={sm:`h-1.5`,md:`h-3`};function i({size:i=`md`,className:a,...o}){return/* @__PURE__ */ n(`div`,{...o,"aria-hidden":`true`,className:e(t,`hazard w-full`,r[i],a)})}export{i as HazardStripe};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
|
|
2
|
+
import { ComponentProps, ReactElement, ReactNode } from "react";
|
|
3
|
+
//#region src/components/hover-card/HoverCard.d.ts
|
|
4
|
+
export type HoverCardSide = "top" | "bottom" | "left" | "right";
|
|
5
|
+
export type HoverCardAlign = "start" | "center" | "end";
|
|
6
|
+
export type HoverCardProps = Omit<ComponentProps<"div">, "title" | "children" | "className" | "style"> & {
|
|
7
|
+
/** 触发元素:一个链接(`<a>`、带 `href` 的按钮、路由库的链接组件) */
|
|
8
|
+
trigger: ReactElement<Record<string, unknown>>;
|
|
9
|
+
/** 卡片里的标题 */
|
|
10
|
+
title?: ReactNode;
|
|
11
|
+
/** 标题下的一行说明 */
|
|
12
|
+
description?: ReactNode;
|
|
13
|
+
/** 卡片出现在链接的哪一侧,放不下时自动翻到对面。默认 `bottom` */
|
|
14
|
+
side?: HoverCardSide;
|
|
15
|
+
/** 和链接的哪一边对齐。默认 `start` */
|
|
16
|
+
align?: HoverCardAlign;
|
|
17
|
+
/** 指针停住多久后出现,毫秒,默认 600。键盘聚焦时同样要等 */
|
|
18
|
+
delay?: number;
|
|
19
|
+
/** 指针离开多久后消失,毫秒,默认 300:够把指针移进卡片里 */
|
|
20
|
+
closeDelay?: number;
|
|
21
|
+
open?: boolean;
|
|
22
|
+
defaultOpen?: boolean;
|
|
23
|
+
onOpenChange?: (open: boolean) => void;
|
|
24
|
+
/** 给卡片 */
|
|
25
|
+
className?: string;
|
|
26
|
+
children?: ReactNode;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* 悬浮卡:指针停在一个链接上时,在旁边预览它的去处。面板和气泡卡片是同一块。
|
|
30
|
+
*
|
|
31
|
+
* 触屏上不出现,读屏也不会读到它:里面只放"点进去也看得到"的内容,
|
|
32
|
+
* 不放只有这里才有的信息和操作。要操作的用 `Popover`,一句说明用 `Tooltip`。
|
|
33
|
+
*/
|
|
34
|
+
export declare function HoverCard({ trigger, title, description, side, align, delay, closeDelay, open, defaultOpen, onOpenChange, className, children, ...props }: HoverCardProps): import("react").JSX.Element;
|
|
35
|
+
//#endregion
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{usePortalScope as t}from"../../hooks/usePortalScope.js";import{popoverPanel as n}from"../popover/panel-style.js";import{jsx as r,jsxs as i}from"react/jsx-runtime";import{PreviewCard as a}from"@base-ui/react/preview-card";function o({trigger:o,title:s,description:c,side:l=`bottom`,align:u=`start`,delay:d=600,closeDelay:f=300,open:p,defaultOpen:m,onOpenChange:h,className:g,children:_,...v}){let{anchorRef:y,portalRef:b}=t();return/* @__PURE__ */ i(a.Root,{open:p,defaultOpen:m,onOpenChange:h&&(e=>h(e)),children:[/* @__PURE__ */ r(a.Trigger,{ref:y,render:o,delay:d,closeDelay:f}),/* @__PURE__ */ r(a.Portal,{ref:b,children:/* @__PURE__ */ r(a.Positioner,{side:l,align:u,sideOffset:4,className:`z-(--z-overlay) outline-none`,children:/* @__PURE__ */ i(a.Popup,{...v,"data-hover-card":``,className:e(n,g),children:[(s||c)&&/* @__PURE__ */ i(`div`,{className:`flex flex-col gap-1`,children:[s&&/* @__PURE__ */ r(`p`,{className:`text-base font-bold`,children:s}),c&&/* @__PURE__ */ r(`p`,{className:`text-ink-secondary`,children:c})]}),_]})})})]})}export{o as HoverCard};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
import { ComponentProps } from "react";
|
|
3
|
+
//#region src/components/icon-button/IconButton.d.ts
|
|
4
|
+
export type IconButtonVariant = "plain" | "floating" | "accent" | "inverse";
|
|
5
|
+
export type IconButtonSize = "sm" | "md" | "lg";
|
|
6
|
+
export type IconButtonProps = Omit<ComponentProps<"button">, "aria-label"> & {
|
|
7
|
+
/** 纯图标控件必须有可访问名称 */
|
|
8
|
+
"aria-label": string;
|
|
9
|
+
/**
|
|
10
|
+
* - `plain` 方形浅灰底,工具栏与顶栏,默认;
|
|
11
|
+
* - `floating` 圆形白底 + 环境阴影,翻页与浮在图像上的操作;
|
|
12
|
+
* - `accent` 方形,悬停或激活时变信号黄;
|
|
13
|
+
* - `inverse` 方形,悬停或激活时变墨底;它打开的菜单、展开条开着的时候也是。
|
|
14
|
+
*/
|
|
15
|
+
variant?: IconButtonVariant;
|
|
16
|
+
size?: IconButtonSize;
|
|
17
|
+
/** 开关类按钮的激活状态,同时输出 `aria-pressed` */
|
|
18
|
+
pressed?: boolean;
|
|
19
|
+
};
|
|
20
|
+
export declare function IconButton({ variant, size, pressed, disabled, type, className, children, ...props }: IconButtonProps): import("react").JSX.Element;
|
|
21
|
+
//#endregion
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{focusRing as t}from"../../lib/focus-ring.js";import{jsx as n}from"react/jsx-runtime";const r={sm:`size-8 after:absolute after:-inset-1 after:content-[''] forced-colors:after:-inset-[5px] [&_svg]:size-4`,md:`size-10 [&_svg]:size-5`,lg:`size-12 [&_svg]:size-6`},i={plain:`bg-surface-sunken text-ink-secondary hover:bg-surface-muted hover:text-ink active:bg-line`,floating:`bg-neutral-50 text-neutral-900 shadow-sm hover:bg-neutral-200 active:bg-neutral-300`,accent:`bg-surface-sunken text-ink-secondary hover:bg-action hover:text-on-action active:bg-action-pressed`,inverse:`bg-surface-sunken text-ink-secondary hover:bg-surface-inverse hover:text-accent-ink-inverse active:bg-surface-inverse data-popup-open:bg-surface-inverse data-popup-open:text-accent-ink-inverse`},a={plain:`bg-surface-muted text-ink active:bg-line`,floating:`bg-neutral-200 text-neutral-900 shadow-sm active:bg-neutral-300`,accent:`bg-action text-on-action active:bg-action-pressed`,inverse:`bg-surface-inverse text-accent-ink-inverse`},o={plain:`cursor-not-allowed bg-surface-sunken text-ink-disabled`,floating:`cursor-not-allowed bg-neutral-50 text-neutral-400 shadow-sm`,accent:`cursor-not-allowed bg-surface-sunken text-ink-disabled`,inverse:`cursor-not-allowed bg-surface-sunken text-ink-disabled`};function s({variant:s=`plain`,size:c=`md`,pressed:l,disabled:u=!1,type:d=`button`,className:f,children:p,...m}){return/* @__PURE__ */ n(`button`,{...m,type:d,disabled:u,"aria-pressed":l,"data-variant":s,"data-size":c,className:e(`relative inline-flex shrink-0 items-center justify-center`,s===`floating`?`rounded-full`:`rounded-sm`,`transition-colors duration-(--duration-fast) ease-standard`,t,r[c],`forced-colors:border`,u?[o[s],`forced-colors:border-[GrayText]`]:l?[a[s],`forced-colors:border-[Highlight] forced-colors:bg-[Highlight] forced-colors:text-[HighlightText]`]:[i[s],`forced-colors:border-[ButtonText]`],f),children:p})}export{s as IconButton};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
|
|
2
|
+
import { ComponentProps, ReactNode } from "react";
|
|
3
|
+
//#region src/components/image-viewer/ImageViewer.d.ts
|
|
4
|
+
export type ImageViewerRatio = "16/9" | "4/3" | "1/1" | "3/4";
|
|
5
|
+
export type ImageViewerProps = Omit<ComponentProps<"ul">, "aria-label"> & {
|
|
6
|
+
/** 这组图是什么,比如"现场照片"。缩略图的列表和大图层都用它命名 */
|
|
7
|
+
"aria-label": string;
|
|
8
|
+
/** 大图层开没开 */
|
|
9
|
+
open?: boolean;
|
|
10
|
+
onOpenChange?: (open: boolean) => void;
|
|
11
|
+
/** 大图层现在是第几张,从 0 起 */
|
|
12
|
+
index?: number;
|
|
13
|
+
defaultIndex?: number;
|
|
14
|
+
onIndexChange?: (index: number) => void;
|
|
15
|
+
/** 到头之后绕回另一头。默认到头时翻页钮禁用 */
|
|
16
|
+
loop?: boolean;
|
|
17
|
+
/** 缩略图的宽高比,默认 `4/3`。大图不裁切,按原比例整张显示 */
|
|
18
|
+
ratio?: ImageViewerRatio;
|
|
19
|
+
/** 缩略图按钮名称的开头,默认"查看大图" */
|
|
20
|
+
viewLabel?: string;
|
|
21
|
+
previousLabel?: string;
|
|
22
|
+
nextLabel?: string;
|
|
23
|
+
closeLabel?: string;
|
|
24
|
+
/** 直接放 `ImageViewerItem` */
|
|
25
|
+
children: ReactNode;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* 图片查看:一组缩略图,点一张放大到整屏看,前后翻。
|
|
29
|
+
* 大图那一层在亮暗两个主题下都是深色;翻页用的是媒体轮播的那条轨道,触屏可以左右滑。
|
|
30
|
+
*
|
|
31
|
+
* `className` 和其余属性给缩略图的列表。
|
|
32
|
+
*/
|
|
33
|
+
export declare function ImageViewer({ "aria-label": label, open: openProp, onOpenChange, index: indexProp, defaultIndex, onIndexChange, loop, ratio, viewLabel, previousLabel, nextLabel, closeLabel, className, children, ...props }: ImageViewerProps): import("react").JSX.Element;
|
|
34
|
+
export type ImageViewerItemProps = Omit<ComponentProps<"li">, "title" | "aria-label"> & {
|
|
35
|
+
/** 这一张的标题,显示在大图下面;也用来给缩略图按钮起名 */
|
|
36
|
+
title?: ReactNode;
|
|
37
|
+
/** 标题下面的一段说明 */
|
|
38
|
+
description?: ReactNode;
|
|
39
|
+
/** 另给的小图,放在缩略图里。不传就用同一张图 */
|
|
40
|
+
thumbnail?: ReactNode;
|
|
41
|
+
/** 缩略图按钮的可访问名称。默认是"查看大图:标题",没有文字标题时报第几张 */
|
|
42
|
+
"aria-label"?: string;
|
|
43
|
+
/** 图:一个 `<img>`(或 `<video>`)。大图层里按原比例整张显示 */
|
|
44
|
+
children: ReactNode;
|
|
45
|
+
};
|
|
46
|
+
/** 图片查看里的一张。直接放在 `ImageViewer` 里。 */
|
|
47
|
+
export declare function ImageViewerItem({ title, description: _description, thumbnail, "aria-label": ariaLabel, className, children, ...props }: ImageViewerItemProps): import("react").JSX.Element;
|
|
48
|
+
//#endregion
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{focusRing as t}from"../../lib/focus-ring.js";import{createLazyContext as n}from"../../lib/create-lazy-context.js";import{Close as r}from"../../icons/Close.js";import{useControllableState as i}from"../../hooks/useControllableState.js";import{ChevronLeft as a}from"../../icons/ChevronLeft.js";import{ChevronRight as o}from"../../icons/ChevronRight.js";import{IconButton as s}from"../icon-button/IconButton.js";import{useSnapTrack as c}from"../carousel/snap-track.js";import{overlayClose as l,overlayHeader as u}from"../dialog/overlay-style.js";import{Viewfinder as d}from"../viewfinder/Viewfinder.js";import{Children as f,isValidElement as p,useContext as m,useRef as h,useState as g}from"react";import{Fragment as _,jsx as v,jsxs as y}from"react/jsx-runtime";import{Dialog as b}from"@base-ui/react/dialog";const x={"16/9":`aspect-video`,"4/3":`aspect-4/3`,"1/1":`aspect-square`,"3/4":`aspect-3/4`},S=/* @__PURE__ */ n(null);function C({"aria-label":t,open:n,onOpenChange:r,index:a,defaultIndex:o=0,onIndexChange:s,loop:c=!1,ratio:l=`4/3`,viewLabel:u=`查看大图`,previousLabel:d=`上一张`,nextLabel:m=`下一张`,closeLabel:g=`关闭`,className:x,children:C,...T}){let E=S(),D=f.toArray(C).filter(e=>p(e)),O=D.length,k=Math.max(0,O-1),[A,j]=i({value:n,defaultValue:!1,onChange:r}),[M,N]=i({value:a,defaultValue:o,onChange:s}),P=Math.min(Math.max(M,0),k),F=h([]),I=e=>{N(e),j(!0)},L=(e,t)=>{F.current[e]=t};return/* @__PURE__ */ y(_,{children:[/* @__PURE__ */ v(`ul`,{...T,"aria-label":t,"data-ratio":l,className:e(`grid grid-cols-[repeat(auto-fill,minmax(7rem,1fr))] gap-2 text-ink`,x),children:D.map((e,t)=>/* @__PURE__ */ v(E.Provider,{value:{position:t,count:O,ratio:l,viewLabel:u,open:I,register:L},children:e},t))}),/* @__PURE__ */ v(b.Root,{open:A,onOpenChange:e=>j(e),children:/* @__PURE__ */ v(b.Portal,{children:/* @__PURE__ */ v(b.Viewport,{className:`fixed inset-0 z-(--z-overlay)`,children:/* @__PURE__ */ v(w,{label:t,items:D,index:P,setIndex:N,loop:c,previousLabel:d,nextLabel:m,closeLabel:g,thumbs:F,onClose:()=>j(!1)})})})})]})}function w({label:t,items:n,index:i,setIndex:f,loop:p,previousLabel:m,nextLabel:g,closeLabel:_,thumbs:x,onClose:S}){let C=n.length,w=Math.max(0,C-1),{trackRef:E,onScroll:D}=c({index:i,count:C,onSettle:f}),O=h(null),k=h(i);k.current=i;let A=e=>{if(C===0)return;let t=p?(e+C)%C:Math.min(Math.max(e,0),w);f(t),!p&&(t===0||t===w)&&document.activeElement instanceof HTMLButtonElement&&document.activeElement.hasAttribute(`data-image-viewer-nav`)&&O.current?.focus({preventScroll:!0})},j=e=>{if(e.defaultPrevented||e.target.closest(`video, audio, input, textarea`))return;let t={ArrowLeft:i-1,ArrowRight:i+1,Home:0,End:w}[e.key];t!==void 0&&(e.preventDefault(),A(t))},M=n[i]?.props,N=C>1,P=!!(M?.title||M?.description);return/* @__PURE__ */ y(b.Popup,{"data-theme":`dark`,"data-image-viewer":``,ref:O,initialFocus:O,finalFocus:()=>x.current[k.current]??!0,onKeyDown:j,className:e(`flex size-full flex-col bg-surface text-ink outline-none`,`transition-opacity duration-(--duration-fast) ease-standard`,`data-ending-style:opacity-0 data-starting-style:opacity-0`),children:[/* @__PURE__ */ y(`div`,{className:e(u,`h-14 px-4`),children:[/* @__PURE__ */ v(b.Title,{className:`sr-only`,children:t}),N&&/* @__PURE__ */ v(`span`,{"aria-hidden":`true`,"data-count":``,className:`font-tech text-sm text-ink-secondary tabular-nums`,children:`${i+1} / ${C}`}),/* @__PURE__ */ v(b.Close,{"aria-label":_,className:l,children:/* @__PURE__ */ v(r,{size:24})})]}),/* @__PURE__ */ v(d,{size:`md`,animate:!0,className:`min-h-0 flex-1 [--bracket-delay:var(--duration-fast)]`,children:/* @__PURE__ */ v(`div`,{ref:E,"data-image-viewer-track":``,onScroll:D,className:`absolute inset-0 flex snap-x snap-mandatory overflow-x-auto overscroll-x-contain [scrollbar-width:none]`,children:n.map((e,t)=>/* @__PURE__ */ v(T,{label:`第 ${t+1} 张,共 ${C} 张`,current:t===i,onClose:S,children:Math.abs(t-i)<=1?e.props.children:null},t))})}),(N||P)&&/* @__PURE__ */ y(`div`,{className:`flex shrink-0 flex-wrap items-start gap-x-6 gap-y-3 border-t border-line px-4 py-4`,children:[N&&/* @__PURE__ */ y(`div`,{className:`flex shrink-0 gap-2`,children:[/* @__PURE__ */ v(s,{variant:`floating`,"aria-label":m,"data-image-viewer-nav":``,disabled:!p&&i<=0,onClick:()=>A(i-1),children:/* @__PURE__ */ v(a,{})}),/* @__PURE__ */ v(s,{variant:`floating`,"aria-label":g,"data-image-viewer-nav":``,disabled:!p&&i>=w,onClick:()=>A(i+1),children:/* @__PURE__ */ v(o,{})})]}),/* @__PURE__ */ y(`div`,{"aria-live":`polite`,className:`flex min-w-0 flex-1 basis-48 flex-col gap-1`,children:[N&&/* @__PURE__ */ v(`span`,{className:`sr-only`,children:`第 ${i+1} 张,共 ${C} 张`}),M?.title&&/* @__PURE__ */ v(`p`,{className:`text-base font-bold wrap-anywhere`,children:M.title}),M?.description&&/* @__PURE__ */ v(`p`,{className:`max-h-24 overflow-y-auto text-sm wrap-anywhere text-ink-secondary`,children:M.description})]})]})]})}function T({label:t,current:n,onClose:r,children:i}){let[a,o]=g(!1),s=()=>o(!0);return/* @__PURE__ */ v(`div`,{role:`group`,"aria-roledescription":`幻灯片`,"aria-label":t,inert:!n,"data-current":n?``:void 0,"data-loaded":a?``:void 0,onLoadCapture:s,onErrorCapture:s,onClick:e=>{e.target===e.currentTarget&&r()},className:e(`flex size-full shrink-0 snap-start items-center justify-center p-6 sm:p-10`,`*:max-h-full *:max-w-full [&>img]:object-contain [&>video]:object-contain`,`[&>img]:transition-opacity [&>img]:duration-(--duration-fast) [&>img]:ease-standard not-data-loaded:[&>img]:opacity-0`),children:i})}function E({title:n,description:r,thumbnail:i,"aria-label":a,className:o,children:s,...c}){let l=m(S());if(!l)throw Error(`ImageViewerItem 要直接放在 ImageViewer 里面`);let u=a??`${l.viewLabel}:${typeof n==`string`?n:`第 ${l.position+1} 张,共 ${l.count} 张`}`;return/* @__PURE__ */ v(`li`,{...c,className:e(`min-w-0`,o),children:/* @__PURE__ */ y(`button`,{type:`button`,ref:e=>l.register(l.position,e),"aria-label":u,"aria-haspopup":`dialog`,onClick:()=>l.open(l.position),className:e(`group/thumb relative block w-full overflow-clip rounded-md bg-surface-muted`,`[&>img]:size-full [&>img]:object-cover [&>svg]:size-full [&>video]:size-full [&>video]:object-cover`,t,x[l.ratio]),children:[i??s,/* @__PURE__ */ v(`span`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-x-0 bottom-0 h-1 origin-left scale-x-0 bg-action transition-transform duration-(--duration-base) ease-standard group-hover/thumb:scale-x-100 group-focus-visible/thumb:scale-x-100`})]})})}export{C as ImageViewer,E as ImageViewerItem};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
import { ControlSize, ControlVariant } from "./control-box.js";
|
|
3
|
+
import { ComponentProps, ReactNode } from "react";
|
|
4
|
+
//#region src/components/input/Input.d.ts
|
|
5
|
+
export type InputSize = ControlSize;
|
|
6
|
+
export type InputVariant = ControlVariant;
|
|
7
|
+
export type InputProps = Omit<ComponentProps<"input">, "size"> & {
|
|
8
|
+
/**
|
|
9
|
+
* - `sunken` 凹陷的底 + 一条底边线,默认;
|
|
10
|
+
* - `outline` 四边描边,放在凹陷底色的区域(工具条、筛选栏)里时用。
|
|
11
|
+
*/
|
|
12
|
+
variant?: InputVariant;
|
|
13
|
+
/** 32 / 40 / 56px 高 */
|
|
14
|
+
size?: InputSize;
|
|
15
|
+
/** 框内左端:图标 */
|
|
16
|
+
start?: ReactNode;
|
|
17
|
+
/** 框内右端:单位、清除按钮 */
|
|
18
|
+
end?: ReactNode;
|
|
19
|
+
/** 错误态:底边线变红,右侧出现菱形图标。放在 `Field` 里时跟随它的 `error` */
|
|
20
|
+
invalid?: boolean;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* 单行输入框。`className` 给外框,其余属性与 `ref` 给里面的 `<input>`。
|
|
24
|
+
* 每个输入框都要有标签:放进 `Field`,或者自己传 `aria-label`。
|
|
25
|
+
*/
|
|
26
|
+
export declare function Input({ variant, size, start, end, invalid: invalidProp, id: idProp, disabled: disabledProp, required: requiredProp, readOnly, "aria-describedby": describedByProp, className, ...props }: InputProps): import("react").JSX.Element;
|
|
27
|
+
//#endregion
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{StatusDanger as t}from"../../icons/StatusDanger.js";import{useFieldControl as n}from"../field/Field.js";import{controlBox as r,controlElement as i,controlIconSize as a,controlSize as o}from"./control-box.js";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l({variant:l=`sunken`,size:u=`md`,start:d,end:f,invalid:p,id:m,disabled:h,required:g,readOnly:_=!1,"aria-describedby":v,className:y,...b}){let{id:x,disabled:S,required:C,invalid:w,...T}=n({id:m,disabled:h,required:g,invalid:p,"aria-describedby":v});return/* @__PURE__ */ c(`div`,{"data-variant":l,"data-size":u,"data-invalid":w?``:void 0,className:e(r({variant:l,invalid:w,disabled:S,readOnly:_}),`items-center`,o[u],y),children:[d&&/* @__PURE__ */ s(`span`,{className:`flex shrink-0 items-center pl-3 text-ink-secondary`,children:d}),/* @__PURE__ */ s(`input`,{...b,id:x,disabled:S,required:C,readOnly:_,"aria-invalid":w||void 0,"aria-describedby":T[`aria-describedby`],className:e(i,`h-full`,d?`pl-2`:`pl-3`,f||w?`pr-2`:`pr-3`)}),w&&/* @__PURE__ */ s(t,{size:a[u],className:e(`shrink-0 text-danger`,!f&&`mr-3`)}),f&&/* @__PURE__ */ s(`span`,{className:e(`flex shrink-0 items-center pr-3 text-sm text-ink-secondary`,w&&`pl-2`),children:f})]})}export{l as Input};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{focusRingWithin as t}from"../../lib/focus-ring.js";const n={sm:`h-8 text-sm`,md:`h-10 text-base`,lg:`h-14 text-lg`},r={sm:14,md:16,lg:20},i={sunken:`border-b-2`,outline:`border`},a={sunken:`bg-surface-sunken`,outline:`bg-surface`},o={sunken:`before:pointer-events-none before:absolute before:inset-x-0 before:-bottom-[2px] before:h-[2px] before:origin-left before:scale-x-0 before:bg-ink before:content-[''] forced-colors:before:bg-[Highlight]`,outline:`before:pointer-events-none before:absolute before:-inset-px before:border before:border-ink before:[clip-path:inset(0_100%_0_0)] before:content-['']`},s={sunken:`focus-within:before:scale-x-100 has-data-popup-open:before:scale-x-100`,outline:`focus-within:before:[clip-path:inset(0)] has-data-popup-open:before:[clip-path:inset(0)]`};function c(t=`sunken`){return e(o[t],s[t],`before:transition-[scale,clip-path] before:duration-(--duration-fast) before:ease-standard focus-within:before:duration-(--duration-base) focus-within:before:ease-exit has-data-popup-open:before:duration-(--duration-base) has-data-popup-open:before:ease-exit`)}function l({variant:n=`sunken`,invalid:r,disabled:o,readOnly:s}){return e(`relative flex w-full min-w-0 text-ink`,i[n],`transition-colors duration-(--duration-fast) ease-standard`,t,s?`border-transparent bg-transparent`:a[n],s&&!o&&!r&&`forced-colors:border-[Canvas]`,o?`cursor-not-allowed border-line text-ink-disabled`:r?`border-danger`:!s&&`border-line-strong hover:not-focus-within:border-ink-secondary`,!o&&!r&&!s&&c(n))}const u=`min-w-0 flex-1 bg-transparent outline-none placeholder:text-ink-tertiary disabled:cursor-not-allowed disabled:placeholder:text-ink-disabled forced-colors:disabled:text-[GrayText]`,d=`text-ink-disabled forced-colors:text-[GrayText]`;export{l as controlBox,d as controlDisabledText,u as controlElement,r as controlIconSize,c as controlLine,n as controlSize};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const e={sm:`h-5 text-xs`,md:`h-6 text-sm`,lg:`h-8 text-base`},t=`flex max-w-full min-w-0 cursor-default items-center bg-surface-muted pl-2 text-ink forced-colors:border forced-colors:border-[ButtonText]`,n=`flex aspect-square h-full shrink-0 items-center justify-center text-ink-secondary hover:bg-line hover:text-ink forced-colors:in-data-disabled:text-[GrayText]`,r={sm:`h-5`,md:`h-6`,lg:`h-8`},i={sm:`min-h-8 text-sm`,md:`min-h-10 text-base`,lg:`min-h-14 text-lg`};export{i as multiValueBox,t as valueChip,n as valueChipRemove,e as valueChipSize,r as valueInputHeight};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
|
|
2
|
+
import { ComponentProps } from "react";
|
|
3
|
+
//#region src/components/item-slot/ItemGrid.d.ts
|
|
4
|
+
export type ItemGridProps = ComponentProps<"div">;
|
|
5
|
+
/**
|
|
6
|
+
* 物品格的矩阵:一组 `ItemSlot` 排成自动填充的网格,整个矩阵只占一个 Tab 停靠点,
|
|
7
|
+
* 进去之后用方向键在格子之间走。给它一个 `aria-label`,说明这是哪一组物品。
|
|
8
|
+
*
|
|
9
|
+
* 默认每格最小 72px、间距 8px,四周留 4px 给选中格的角括号;用 `className` 改。
|
|
10
|
+
*/
|
|
11
|
+
export declare function ItemGrid({ className, onKeyDown, onFocus, ref: forwardedRef, ...props }: ItemGridProps): import("react").JSX.Element;
|
|
12
|
+
//#endregion
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{mergeRefs as t}from"../../lib/merge-refs.js";import{useEffect as n,useRef as r}from"react";import{jsx as i}from"react/jsx-runtime";const a=`[data-slot-control]`,o=`${a}:not(:disabled):not([aria-disabled="true"])`,s=/* @__PURE__ */ new Set([`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`,`Home`,`End`]);function c(e,t,n,r=!1){let i=e[t];if(!i)return t;let a=e.map((e,t)=>t).sort((t,n)=>e[t].top-e[n].top||e[t].left-e[n].left||t-n),o=[];for(let t of a){let n=o.at(-1);n&&e[t].top-e[n[0]].top<=2?n.push(t):o.push([t])}for(let t of o)t.sort((t,n)=>e[t].left-e[n].left||t-n);let s=o.findIndex(e=>e.includes(t)),c=o[s],l=c.indexOf(t),u=n=>{if(!n)return t;let r=n[0];for(let t of n)Math.abs(e[t].left-i.left)<Math.abs(e[r].left-i.left)&&(r=t);return r};switch(n){case`ArrowRight`:return c[l+1]??t;case`ArrowLeft`:return c[l-1]??t;case`ArrowDown`:return u(o[s+1]);case`ArrowUp`:return u(o[s-1]);case`Home`:return r?o[0][0]:c[0];case`End`:return r?o.at(-1).at(-1):c.at(-1);default:return t}}function l({className:l,onKeyDown:u,onFocus:d,ref:f,...p}){let m=r(null);n(()=>{let e=m.current;if(!e)return;let t=()=>{let t=[...e.querySelectorAll(o)],n=t.find(e=>e===document.activeElement)??t.find(e=>e.getAttribute(`tabindex`)===`0`)??t.find(e=>e.matches(`[aria-pressed="true"], [aria-current]`))??t[0];for(let t of e.querySelectorAll(a)){let e=t===n?`0`:`-1`;t.getAttribute(`tabindex`)!==e&&t.setAttribute(`tabindex`,e)}};t();let n=new MutationObserver(t);return n.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`disabled`,`aria-disabled`]}),()=>n.disconnect()},[]);let h=e=>{d?.(e);let t=e.target;if(t.matches(a))for(let n of e.currentTarget.querySelectorAll(a))n.setAttribute(`tabindex`,n===t?`0`:`-1`)},g=e=>{if(u?.(e),e.defaultPrevented||!s.has(e.key)||e.altKey||e.metaKey||e.shiftKey)return;let t=e.ctrlKey;if(t&&e.key!==`Home`&&e.key!==`End`)return;let n=[...e.currentTarget.querySelectorAll(o)],r=n.indexOf(document.activeElement);if(r===-1)return;let i=c(n.map(e=>{let t=e.getBoundingClientRect();return{top:t.top,left:t.left}}),r,e.key,t);e.preventDefault(),i!==r&&n[i].focus()};return/* @__PURE__ */ i(`div`,{role:`group`,...p,ref:t(m,f),onFocus:h,onKeyDown:g,className:e(`grid grid-cols-[repeat(auto-fill,minmax(4.5rem,1fr))] gap-2 p-1`,l)})}export{l as ItemGrid,c as nextSlotIndex};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
|
|
2
|
+
import { LinkRender } from "../link-element/LinkElement.js";
|
|
3
|
+
import { ComponentProps, MouseEvent, ReactNode } from "react";
|
|
4
|
+
//#region src/components/item-slot/ItemSlot.d.ts
|
|
5
|
+
export type ItemSlotRarity = 1 | 2 | 3 | 4;
|
|
6
|
+
export type ItemSlotRatio = "1/1" | "4/5";
|
|
7
|
+
type OwnProps = {
|
|
8
|
+
/** 物品名称。格子里只有图标,名称是给读屏的 */
|
|
9
|
+
name: string;
|
|
10
|
+
/** 完整的读屏文字。缺省由名称、数量、稀有度与各状态拼出来 */
|
|
11
|
+
label?: string;
|
|
12
|
+
/** 右下角的数量 */
|
|
13
|
+
count?: ReactNode;
|
|
14
|
+
/** 稀有度 1 – 4:底部一段向上消散的渐变,左缘另有同样个数的小菱形 */
|
|
15
|
+
rarity?: ItemSlotRarity;
|
|
16
|
+
/** 宽高比:正方形(默认)或 4:5 */
|
|
17
|
+
ratio?: ItemSlotRatio;
|
|
18
|
+
/** 选中:四角出现角括号 */
|
|
19
|
+
selected?: boolean;
|
|
20
|
+
/** 锁定:左下角一个锁,卡面不变灰 */
|
|
21
|
+
locked?: boolean;
|
|
22
|
+
/** 未获得(图鉴):内容换成准星占位符 */
|
|
23
|
+
unowned?: boolean;
|
|
24
|
+
/** 新获得:左上角的黄签 */
|
|
25
|
+
isNew?: boolean;
|
|
26
|
+
/** 黄签上的字,默认 `NEW` */
|
|
27
|
+
newLabel?: ReactNode;
|
|
28
|
+
/** 右上角的小圆位:已装备者的头像 */
|
|
29
|
+
badge?: ReactNode;
|
|
30
|
+
/** 售罄 / 不可用:整卡压一层遮罩。传文字("售罄")会写在遮罩上 */
|
|
31
|
+
unavailable?: boolean | ReactNode;
|
|
32
|
+
/** 传了就整格渲染成链接 */
|
|
33
|
+
href?: string;
|
|
34
|
+
target?: string;
|
|
35
|
+
rel?: string;
|
|
36
|
+
/** 用这个元素代替 `<a>`(路由库的链接组件)。传了就按链接处理 */
|
|
37
|
+
render?: LinkRender;
|
|
38
|
+
/** 传了(且没有 `href` 和 `render`)就整格渲染成按钮 */
|
|
39
|
+
onClick?: (event: MouseEvent<HTMLElement>) => void;
|
|
40
|
+
disabled?: boolean;
|
|
41
|
+
/** 图标或缩略图 */
|
|
42
|
+
children?: ReactNode;
|
|
43
|
+
};
|
|
44
|
+
export type ItemSlotProps = Omit<ComponentProps<"div">, keyof OwnProps> & OwnProps;
|
|
45
|
+
/**
|
|
46
|
+
* 物品格:矩阵里的一个格子——图标、数量、稀有度。
|
|
47
|
+
* 整格只有一个可点击元素;宽度跟着所在的网格走,格子之间留 6 – 8px。
|
|
48
|
+
*
|
|
49
|
+
* `className` 与其余属性给最外层的盒子。角括号画在盒子之外 4px,
|
|
50
|
+
* 所以网格容器不能贴着格子裁切。一组格子放进 `ItemGrid`,就能用方向键在里面走。
|
|
51
|
+
*/
|
|
52
|
+
export declare function ItemSlot({ name, label, count, rarity, ratio, selected, locked, unowned, isNew, newLabel, badge, unavailable, href, target, rel, render, onClick, disabled, className, children, ...props }: ItemSlotProps): import("react").JSX.Element;
|
|
53
|
+
//#endregion
|
|
54
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import"../../lib/focus-ring.js";import{LinkElement as t}from"../link-element/LinkElement.js";import"../../lib/decor.js";import{Crosshair as n}from"../../icons/Crosshair.js";import{Lock as r}from"../../icons/Lock.js";import{Fragment as i,jsx as a,jsxs as o}from"react/jsx-runtime";const s={"data-slot-control":``},c={"1/1":`aspect-square`,"4/5":`aspect-4/5`},l={1:`from-rarity-1/55`,2:`from-rarity-2/55`,3:`from-rarity-3/55`,4:`from-rarity-4/55`};function u({name:u,label:d,count:f,rarity:p,ratio:m=`1/1`,selected:h=!1,locked:g=!1,unowned:_=!1,isNew:v=!1,newLabel:y=`NEW`,badge:b,unavailable:x=!1,href:S,target:C,rel:w,render:T,onClick:E,disabled:D=!1,className:O,children:k,...A}){let j=S!==void 0||T!==void 0,M=!j&&E!==void 0,N=(j||M)&&!D,P=f!=null&&f!==!1,F=x!==!1&&x!==null,I=typeof x==`boolean`?void 0:x,L=d??[u,P&&typeof f!=`object`&&`数量 ${f}`,p&&`稀有度 ${p}`,v&&`新获得`,_&&`未获得`,g&&`已锁定`,F&&(typeof I==`string`?I:`不可用`)].filter(Boolean).join(`,`),R=e(`absolute inset-0 block overflow-clip border border-line bg-surface-raised text-left text-ink`,N&&[`transition-colors duration-(--duration-fast) ease-standard hover:border-line-strong`,`focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus`,h&&`focus-visible:outline-offset-[6px]`],D&&`cursor-not-allowed`,h&&`forced-colors:border-2 forced-colors:border-[Highlight]`),z=/* @__PURE__ */ o(i,{children:[p&&/* @__PURE__ */ a(`span`,{"aria-hidden":`true`,className:e(`pointer-events-none select-none forced-colors:hidden print:hidden`,`absolute inset-x-0 bottom-0 h-2/5 bg-linear-to-t to-transparent`,l[p])}),p===4&&/* @__PURE__ */ a(`span`,{"aria-hidden":`true`,className:e(`pointer-events-none select-none forced-colors:hidden print:hidden`,`hatch hatch-fine absolute inset-x-0 bottom-0 h-2/5 opacity-30 [mask-image:linear-gradient(to_top,black,transparent)]`)}),/* @__PURE__ */ a(`span`,{"aria-hidden":`true`,className:`absolute inset-0 flex items-center justify-center p-3`,children:_?/* @__PURE__ */ a(n,{className:`size-1/2 max-h-8 max-w-8 text-ink-tertiary`}):k}),p&&/* @__PURE__ */ a(`span`,{"aria-hidden":`true`,className:`absolute top-1/2 left-1.5 flex -translate-y-1/2 flex-col gap-1`,children:Array.from({length:p},(e,t)=>/* @__PURE__ */ a(`span`,{className:`size-1 rotate-45 bg-ink-secondary`},t))}),v&&/* @__PURE__ */ a(`span`,{"aria-hidden":`true`,className:`cut-br cut-sm absolute top-0 left-0 flex h-4 items-center bg-action pr-2.5 pl-1 font-tech text-micro font-bold text-on-action uppercase`,children:y}),b!==void 0&&/* @__PURE__ */ a(`span`,{"aria-hidden":`true`,className:`absolute top-1 right-1 flex size-5 items-center justify-center overflow-clip rounded-full bg-surface-inverse text-micro font-bold text-ink-inverse`,children:b}),g&&/* @__PURE__ */ a(r,{size:14,className:`absolute bottom-1 left-1 text-ink`}),P&&/* @__PURE__ */ a(`span`,{"aria-hidden":`true`,className:`absolute right-1.5 bottom-1 font-tech text-sm leading-none font-bold tabular-nums`,children:f}),F&&/* @__PURE__ */ a(`span`,{"aria-hidden":`true`,className:`absolute inset-0 flex items-center justify-center bg-scrim text-xs font-medium text-neutral-0`,children:I!==void 0&&/* @__PURE__ */ a(`span`,{className:`bg-neutral-950/80 px-1.5 py-0.5`,children:I})}),/* @__PURE__ */ a(`span`,{className:`sr-only`,children:L})]}),B;return B=j?/* @__PURE__ */ a(t,{render:T,href:D?void 0:S,role:D?`link`:void 0,"aria-disabled":D||void 0,target:C,rel:w,"aria-current":h?`true`:void 0,onClick:D?e=>e.preventDefault():E,className:R,...s,children:z}):M?/* @__PURE__ */ a(`button`,{type:`button`,disabled:D,"aria-pressed":h,onClick:E,className:R,...s,children:z}):/* @__PURE__ */ a(`div`,{className:R,children:z}),/* @__PURE__ */ a(`div`,{...A,"data-selected":h?``:void 0,"data-rarity":p,className:e(`relative`,c[m],h&&`corner-brackets after:animate-bracket-in`,O),children:B})}export{u as ItemSlot};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
import { ComponentProps } from "react";
|
|
3
|
+
//#region src/components/kbd/Kbd.d.ts
|
|
4
|
+
export type KbdSize = "sm" | "md";
|
|
5
|
+
export type KbdProps = ComponentProps<"kbd"> & {
|
|
6
|
+
/** 20px 或 24px 高 */
|
|
7
|
+
size?: KbdSize;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* 键位提示:一颗小键帽,贴在对应的控件旁。
|
|
11
|
+
* 只用于真的支持键盘快捷键的地方,触屏界面和普通网页不要伪造键帽。
|
|
12
|
+
* 组合键分开写:`<Kbd>Ctrl</Kbd> + <Kbd>K</Kbd>`。
|
|
13
|
+
*/
|
|
14
|
+
export declare function Kbd({ size, className, ...props }: KbdProps): import("react").JSX.Element;
|
|
15
|
+
//#endregion
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{jsx as t}from"react/jsx-runtime";const n={sm:`h-5 min-w-5 px-1 text-xs`,md:`h-6 min-w-6 px-1.5 text-sm`};function r({size:r=`sm`,className:i,...a}){return/* @__PURE__ */ t(`kbd`,{...a,className:e(`inline-flex shrink-0 items-center justify-center bg-surface-inverse font-tech leading-none font-medium whitespace-nowrap text-ink-inverse`,n[r],i)})}export{r as Kbd};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
|
|
2
|
+
import { LinkRender } from "../link-element/LinkElement.js";
|
|
3
|
+
import { ComponentProps, MouseEvent, ReactNode } from "react";
|
|
4
|
+
//#region src/components/list/List.d.ts
|
|
5
|
+
export type ListVariant = "plain" | "band";
|
|
6
|
+
export type ListProps = ComponentProps<"ul"> & {
|
|
7
|
+
/**
|
|
8
|
+
* - `plain` 行间一条 1px 的线,默认;
|
|
9
|
+
* - `band` 浅色画布上一条条固定深色的行,行间留缝;选中行整行反转成白底墨字。
|
|
10
|
+
*/
|
|
11
|
+
variant?: ListVariant;
|
|
12
|
+
};
|
|
13
|
+
/** 列表行的容器,外圈不描边。里面只放 `ListRow`。 */
|
|
14
|
+
export declare function List({ variant, className, ...props }: ListProps): import("react").JSX.Element;
|
|
15
|
+
export type ListRowSize = "sm" | "md";
|
|
16
|
+
export type ListRowProps = Omit<ComponentProps<"li">, "onClick"> & {
|
|
17
|
+
/** 行首:图标、日期块、缩略图 */
|
|
18
|
+
start?: ReactNode;
|
|
19
|
+
/** 行尾:数值或状态,右对齐、等宽 */
|
|
20
|
+
end?: ReactNode;
|
|
21
|
+
/** 标题下的一行次要说明 */
|
|
22
|
+
description?: ReactNode;
|
|
23
|
+
/** 选中:浅灰底 + 左缘黄条 + 标题加粗;在 `band` 列表里是整行反转成白底墨字 */
|
|
24
|
+
selected?: boolean;
|
|
25
|
+
/** 已完成:整行降一档对比,行尾数值前多一个低对比的描边词,读屏多读一句"已完成" */
|
|
26
|
+
completed?: boolean;
|
|
27
|
+
/** 完成态的描边词,默认 `DONE`。纯装饰;传 `null` 去掉 */
|
|
28
|
+
completedWord?: ReactNode;
|
|
29
|
+
/** 40px 或 48px 行高 */
|
|
30
|
+
size?: ListRowSize;
|
|
31
|
+
/** 传了就整行渲染成链接 */
|
|
32
|
+
href?: string;
|
|
33
|
+
target?: string;
|
|
34
|
+
rel?: string;
|
|
35
|
+
/** 用这个元素代替 `<a>`(路由库的链接组件)。传了就按链接处理 */
|
|
36
|
+
render?: LinkRender;
|
|
37
|
+
/** 传了(且没有 `href` 和 `render`)就整行渲染成按钮 */
|
|
38
|
+
onClick?: (event: MouseEvent<HTMLElement>) => void;
|
|
39
|
+
disabled?: boolean;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* 一行一个条目。整行可点时只有一个可点击元素,不要在里面再嵌按钮。
|
|
43
|
+
* 左缘的黄条只表示"选中",不要拿它表示类目。
|
|
44
|
+
*/
|
|
45
|
+
export declare function ListRow({ start, end, description, selected, completed, completedWord, size, href, target, rel, render, onClick, disabled, className, children, ...props }: ListRowProps): import("react").JSX.Element;
|
|
46
|
+
//#endregion
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import"../../lib/focus-ring.js";import{createLazyContext as t}from"../../lib/create-lazy-context.js";import{LinkElement as n}from"../link-element/LinkElement.js";import{GhostText as r}from"../ghost-text/GhostText.js";import{bandCanvas as i,bandGap as a}from"./band-style.js";import{useContext as o}from"react";import{Fragment as s,jsx as c,jsxs as l}from"react/jsx-runtime";const u=/* @__PURE__ */ t(`plain`);function d({variant:t=`plain`,className:n,...r}){let o=u();return/* @__PURE__ */ c(o.Provider,{value:t,children:/* @__PURE__ */ c(`ul`,{...r,"data-variant":t,className:e(`text-ink`,t===`band`?[`flex flex-col`,i,a]:`divide-y divide-line`,n)})})}const f={sm:`min-h-10 py-2`,md:`min-h-12 py-2.5`},p={sm:`text-lg`,md:`text-xl`};function m({start:t,end:i,description:a,selected:d,completed:m=!1,completedWord:h=`DONE`,size:g=`md`,href:_,target:v,rel:y,render:b,onClick:x,disabled:S=!1,className:C,children:w,...T}){let E=o(u())===`band`,D=_!==void 0||b!==void 0,O=!D&&x!==void 0,k=(D||O)&&!S,A=e(`relative flex w-full items-center gap-3 px-4 text-left`,f[g],m&&`text-ink-secondary`,E&&`border border-line bg-surface text-ink`,d&&!E&&`bg-surface-muted before:absolute before:inset-y-0 before:left-0 before:w-1 before:bg-action before:content-['']`,k&&[`transition-colors duration-(--duration-fast) ease-standard`,!d&&(E?`hover:bg-surface-raised active:bg-surface-muted`:`hover:bg-ink/5 active:bg-ink/10`),`focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus`],S&&`cursor-not-allowed text-ink-disabled`),j=/* @__PURE__ */ l(s,{children:[t&&/* @__PURE__ */ c(`span`,{className:`flex shrink-0 items-center`,children:t}),/* @__PURE__ */ l(`span`,{className:`min-w-0 flex-1`,children:[/* @__PURE__ */ l(`span`,{className:e(`block truncate`,d&&`font-bold`),children:[w,m&&/* @__PURE__ */ c(`span`,{className:`sr-only`,children:`(已完成)`})]}),a&&/* @__PURE__ */ c(`span`,{className:e(`block truncate text-xs`,S?`text-ink-disabled`:`text-ink-secondary`),children:a})]}),m&&h!==null&&/* @__PURE__ */ c(r,{variant:`outline`,className:e(`hidden shrink-0 leading-none @sm:block`,p[g]),children:h}),i&&/* @__PURE__ */ c(`span`,{className:e(`flex shrink-0 items-center font-tech text-sm tabular-nums`,S?`text-ink-disabled`:d?`text-ink`:`text-ink-secondary`),children:i})]}),M;return M=D?/* @__PURE__ */ c(n,{render:b,href:S?void 0:_,role:S?`link`:void 0,"aria-disabled":S||void 0,target:v,rel:y,"aria-current":d?`true`:void 0,onClick:S?e=>e.preventDefault():x,className:A,children:j}):O?/* @__PURE__ */ c(`button`,{type:`button`,disabled:S,"aria-pressed":d,onClick:x,className:A,children:j}):/* @__PURE__ */ c(`div`,{className:A,children:j}),/* @__PURE__ */ c(`li`,{"data-theme":E?d?`light`:`dark`:void 0,...T,"data-selected":d?``:void 0,"data-completed":m?``:void 0,className:e(`@container`,C),children:M})}export{d as List,m as ListRow};
|