@endfield-ui/react 1.2.0 → 1.2.1
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/package.json +17 -11
- package/src/components/accordion/Accordion.tsx +13 -5
- package/src/components/avatar/AvatarSwitcher.tsx +7 -5
- 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/image-viewer/ImageViewer.tsx +6 -5
- package/src/components/list/List.tsx +7 -5
- package/src/components/nav-action/NavAction.tsx +4 -3
- package/src/components/nav-menu/NavMenu.tsx +13 -7
- 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/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,57 @@
|
|
|
1
|
+
|
|
2
|
+
import { CalendarProps, DateRange } from "../calendar/Calendar.js";
|
|
3
|
+
import { ControlSize, ControlVariant } from "../input/control-box.js";
|
|
4
|
+
import { ReactNode, Ref } from "react";
|
|
5
|
+
//#region src/components/date-picker/DateRangePicker.d.ts
|
|
6
|
+
export type DateRangePickerProps = Pick<CalendarProps, "min" | "max" | "isDateDisabled" | "weekStartsOn" | "locale" | "today"> & {
|
|
7
|
+
/** 选中的那一段,`[起, 止]`,两头都包含;没选是 `null` */
|
|
8
|
+
value?: DateRange | null;
|
|
9
|
+
defaultValue?: DateRange | null;
|
|
10
|
+
/** 一段选完才触发;清除之后拿到的是 `null` */
|
|
11
|
+
onValueChange?: (value: DateRange | null) => void;
|
|
12
|
+
/** 没选时显示的提示 */
|
|
13
|
+
placeholder?: ReactNode;
|
|
14
|
+
/** 表单字段名:起始日和结束日各一个,值是 `YYYY-MM-DD` */
|
|
15
|
+
startName?: string;
|
|
16
|
+
endName?: string;
|
|
17
|
+
/**
|
|
18
|
+
* 外框的画法,和输入框相同:
|
|
19
|
+
* - `sunken` 凹陷的底 + 一条底边线,默认;
|
|
20
|
+
* - `outline` 四边描边,放在凹陷底色的区域里时用。
|
|
21
|
+
*/
|
|
22
|
+
variant?: ControlVariant;
|
|
23
|
+
/** 32 / 40 / 56px 高 */
|
|
24
|
+
size?: ControlSize;
|
|
25
|
+
/** 每个日期怎么写。默认 `2026.10.09` */
|
|
26
|
+
format?: (date: string) => ReactNode;
|
|
27
|
+
/** 错误态。放在 `Field` 里时跟随它的 `error` */
|
|
28
|
+
invalid?: boolean;
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
/** 必填:面板里没有"清除" */
|
|
31
|
+
required?: boolean;
|
|
32
|
+
open?: boolean;
|
|
33
|
+
defaultOpen?: boolean;
|
|
34
|
+
onOpenChange?: (open: boolean) => void;
|
|
35
|
+
/** 面板的可访问名称 */
|
|
36
|
+
panelLabel?: string;
|
|
37
|
+
/** 面板底下那句提示 */
|
|
38
|
+
hint?: ReactNode;
|
|
39
|
+
clearLabel?: string;
|
|
40
|
+
/** 读屏在两端那两天的名称后面听到的词 */
|
|
41
|
+
startLabel?: string;
|
|
42
|
+
endLabel?: string;
|
|
43
|
+
id?: string;
|
|
44
|
+
"aria-label"?: string;
|
|
45
|
+
"aria-describedby"?: string;
|
|
46
|
+
/** 给外框 */
|
|
47
|
+
className?: string;
|
|
48
|
+
/** 给触发按钮 */
|
|
49
|
+
ref?: Ref<HTMLButtonElement>;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* 日期范围:一个字段,点开是一块带月历的面板,点两下选出起止两天。
|
|
53
|
+
* 值是 `[起, 止]`,两头都包含;结束日选完面板才关。
|
|
54
|
+
* 每个字段都要有标签:放进 `Field`,或者自己传 `aria-label`。
|
|
55
|
+
*/
|
|
56
|
+
export declare function DateRangePicker({ value: valueProp, defaultValue, onValueChange, placeholder, startName, endName, variant, size, format, invalid: invalidProp, disabled: disabledProp, required: requiredProp, open: openProp, defaultOpen, onOpenChange, panelLabel, hint, clearLabel, startLabel, endLabel, min, max, isDateDisabled, weekStartsOn, locale, today, id: idProp, "aria-label": ariaLabel, "aria-describedby": describedByProp, className, ref }: DateRangePickerProps): import("react").JSX.Element;
|
|
57
|
+
//#endregion
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{useControllableState as e}from"../../hooks/useControllableState.js";import{Calendar as t}from"../calendar/Calendar.js";import{useFieldControl as n}from"../field/Field.js";import{DateField as r,dateFooterButton as i,dottedDate as a}from"./DateField.js";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";function l({value:l,defaultValue:u=null,onValueChange:d,placeholder:f=`选择起止日期`,startName:p,endName:m,variant:h=`sunken`,size:g=`md`,format:_=a,invalid:v,disabled:y,required:b,open:x,defaultOpen:S=!1,onOpenChange:C,panelLabel:w=`选择起止日期`,hint:T=`先选起始日,再选结束日`,clearLabel:E=`清除`,startLabel:D,endLabel:O,min:k,max:A,isDateDisabled:j,weekStartsOn:M,locale:N,today:P,id:F,"aria-label":I,"aria-describedby":L,className:R,ref:z}){let{id:B,disabled:V,required:H,invalid:U,...W}=n({id:F,disabled:y,required:b,invalid:v,"aria-describedby":L}),[G,K]=e({value:l,defaultValue:u,onChange:d}),[q,J]=e({value:x,defaultValue:S,onChange:C}),Y=e=>{K(e),J(!1)};return/* @__PURE__ */ c(r,{ref:z,id:B,display:G===null?null:G[0]===G[1]?_(G[0]):/* @__PURE__ */ c(o,{children:[_(G[0]),/* @__PURE__ */ s(`span`,{"aria-hidden":`true`,className:`mx-1.5 text-ink-tertiary`,children:`–`}),/* @__PURE__ */ s(`span`,{className:`sr-only`,children:`至`}),_(G[1])]}),placeholder:f,variant:h,size:g,invalid:U,disabled:V,required:H,open:q,onOpenChange:J,panelLabel:w,"aria-label":I,"aria-describedby":W[`aria-describedby`],className:R,fields:/* @__PURE__ */ c(o,{children:[p!==void 0&&/* @__PURE__ */ s(`input`,{type:`hidden`,name:p,value:G?.[0]??``,disabled:V}),m!==void 0&&/* @__PURE__ */ s(`input`,{type:`hidden`,name:m,value:G?.[1]??``,disabled:V})]}),children:[/* @__PURE__ */ s(t,{range:!0,value:G,onValueChange:Y,min:k,max:A,isDateDisabled:j,weekStartsOn:M,locale:N,today:P,startLabel:D,endLabel:O}),/* @__PURE__ */ c(`div`,{className:`flex items-center justify-between gap-3 border-t border-line pt-2`,children:[/* @__PURE__ */ s(`p`,{className:`px-2 text-xs text-ink-secondary`,children:T}),!H&&/* @__PURE__ */ s(`button`,{type:`button`,disabled:G===null,onClick:()=>Y(null),className:i,children:E})]})]})}export{l as DateRangePicker};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
|
|
2
|
+
import { DatePicker, DatePickerProps, DatePickerSize, DatePickerVariant } from "./DatePicker.js";
|
|
3
|
+
import { DateRangePicker, DateRangePickerProps } from "./DateRangePicker.js";
|
|
4
|
+
export { DatePicker, type DatePickerProps, type DatePickerSize, type DatePickerVariant, DateRangePicker, type DateRangePickerProps };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
|
|
2
|
+
import { ComponentProps, ReactElement, ReactNode } from "react";
|
|
3
|
+
import { Dialog } from "@base-ui/react/dialog";
|
|
4
|
+
//#region src/components/dialog/Dialog.d.ts
|
|
5
|
+
export type DialogSize = "sm" | "md" | "lg";
|
|
6
|
+
type PopupProps = ComponentProps<typeof Dialog.Popup>;
|
|
7
|
+
export type DialogProps = Omit<ComponentProps<"div">, "title" | "children" | "className" | "style"> & {
|
|
8
|
+
/** 触发按钮。不传就用 `open` / `onOpenChange` 自己控制 */
|
|
9
|
+
trigger?: ReactElement<Record<string, unknown>>;
|
|
10
|
+
open?: boolean;
|
|
11
|
+
defaultOpen?: boolean;
|
|
12
|
+
onOpenChange?: (open: boolean) => void;
|
|
13
|
+
/** 标题,在深色标题带里居中。它也是弹窗的可访问名称 */
|
|
14
|
+
title: ReactNode;
|
|
15
|
+
/** 标题下的一段说明,会关联给读屏 */
|
|
16
|
+
description?: ReactNode;
|
|
17
|
+
/** 底部的行动区:按钮靠右,主要行动在最右 */
|
|
18
|
+
footer?: ReactNode;
|
|
19
|
+
/** 最大宽度 480 / 640 / 1040px,窄屏上通宽。默认 `md` */
|
|
20
|
+
size?: DialogSize;
|
|
21
|
+
/**
|
|
22
|
+
* 需要用户明确回应的确认(破坏性操作):角色是 `alertdialog`,点遮罩不关。
|
|
23
|
+
* `Esc` 和关闭图标仍然可用。
|
|
24
|
+
*/
|
|
25
|
+
alert?: boolean;
|
|
26
|
+
/** 标题下方加一排小方点。纯装饰 */
|
|
27
|
+
ornament?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* 左下角的线稿,纯装饰。本库不带线稿:传自己的原创图形,
|
|
30
|
+
* 用 `currentColor` 画会跟着取低对比的墨色。高 48px
|
|
31
|
+
*/
|
|
32
|
+
cornerArt?: ReactNode;
|
|
33
|
+
/** 关闭图标的可访问名称 */
|
|
34
|
+
closeLabel?: string;
|
|
35
|
+
/** 打开时焦点落在哪。默认是内容区里第一个可聚焦的元素:第一个字段,或者行动区的第一个按钮 */
|
|
36
|
+
initialFocus?: PopupProps["initialFocus"];
|
|
37
|
+
/** 关闭后焦点回到哪。默认是触发按钮 */
|
|
38
|
+
finalFocus?: PopupProps["finalFocus"];
|
|
39
|
+
/** 给弹窗本身 */
|
|
40
|
+
className?: string;
|
|
41
|
+
children?: ReactNode;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* 弹窗:深色斜纹标题带 + 点阵底的内容区。打开时焦点移入并被限制在内,
|
|
45
|
+
* 关闭后回到触发按钮;背景不可滚动、不可交互。不要弹窗套弹窗。
|
|
46
|
+
*/
|
|
47
|
+
declare function Dialog$1({ trigger, open, defaultOpen, onOpenChange, title, description, footer, size, alert, ornament, cornerArt, closeLabel, initialFocus, finalFocus, className, children, ...props }: DialogProps): import("react").JSX.Element;
|
|
48
|
+
export type DialogCloseProps = {
|
|
49
|
+
/** 点了就关掉弹窗的按钮,比如"取消" */
|
|
50
|
+
children: ReactElement<Record<string, unknown>>;
|
|
51
|
+
};
|
|
52
|
+
/** 包住行动区里"点了就关"的按钮。弹窗和抽屉里都能用。 */
|
|
53
|
+
export declare function DialogClose({ children }: DialogCloseProps): import("react").JSX.Element;
|
|
54
|
+
//#endregion
|
|
55
|
+
export { Dialog$1 as Dialog };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{Close as t}from"../../icons/Close.js";import{usePortalScope as n}from"../../hooks/usePortalScope.js";import{Texture as r}from"../texture/Texture.js";import{firstFocusableIn as i}from"./initial-focus.js";import{overlayBackdrop as a,overlayClose as o,overlayHeader as s,overlaySurface as c}from"./overlay-style.js";import{useRef as l}from"react";import{jsx as u,jsxs as d}from"react/jsx-runtime";import{AlertDialog as f}from"@base-ui/react/alert-dialog";import{Dialog as p}from"@base-ui/react/dialog";const m=[0,1,2,3,4,5],h={sm:`max-w-[30rem]`,md:`max-w-[40rem]`,lg:`max-w-[65rem]`};function g({trigger:g,open:_,defaultOpen:v,onOpenChange:y,title:b,description:x,footer:S,size:C=`md`,alert:w=!1,ornament:T=!1,cornerArt:E,closeLabel:D=`关闭`,initialFocus:O,finalFocus:k,className:A,children:j,...M}){let{anchorRef:N,portalRef:P}=n(),F=l(null),I=w?f:p;return/* @__PURE__ */ d(I.Root,{open:_,defaultOpen:v,onOpenChange:y&&(e=>y(e)),children:[g&&/* @__PURE__ */ u(I.Trigger,{ref:N,render:g}),/* @__PURE__ */ d(I.Portal,{ref:P,children:[/* @__PURE__ */ u(I.Backdrop,{className:a}),/* @__PURE__ */ u(I.Viewport,{className:`fixed inset-0 z-(--z-overlay) flex items-center justify-center overflow-hidden p-4`,children:/* @__PURE__ */ d(I.Popup,{...M,initialFocus:O??i(F),finalFocus:k,"data-size":C,className:e(c,`relative flex max-h-full min-h-0 w-full flex-col`,`transition-[opacity,translate] duration-[var(--duration-fast),var(--duration-base)] ease-[var(--ease-standard),var(--ease-exit)]`,`data-ending-style:opacity-0 data-starting-style:translate-y-(--motion-shift-lg) data-starting-style:opacity-0`,h[C],A),children:[/* @__PURE__ */ d(`div`,{"data-theme":`dark`,className:e(s,`min-h-16 justify-center px-12`),children:[/* @__PURE__ */ d(`div`,{className:`flex flex-col items-center gap-1.5 py-3`,children:[/* @__PURE__ */ u(I.Title,{className:`text-center text-xl font-normal wrap-anywhere`,children:b}),T&&/* @__PURE__ */ u(`span`,{"aria-hidden":`true`,"data-ornament":``,className:`flex gap-1`,children:m.map(e=>/* @__PURE__ */ u(`span`,{className:`size-1 bg-ink/50`},e))})]}),/* @__PURE__ */ u(I.Close,{"aria-label":D,className:o,children:/* @__PURE__ */ u(t,{size:24})})]}),/* @__PURE__ */ d(`div`,{ref:F,className:`relative flex min-h-0 flex-auto flex-col`,children:[/* @__PURE__ */ u(r,{}),/* @__PURE__ */ d(`div`,{className:`relative min-h-0 flex-auto overflow-y-auto overscroll-contain p-4`,children:[/* @__PURE__ */ d(`div`,{className:`bg-surface-raised p-5 wrap-anywhere`,children:[x&&/* @__PURE__ */ u(I.Description,{className:e(`text-ink-secondary`,j!==void 0&&`mb-4`),children:x}),j]}),E&&/* @__PURE__ */ u(`div`,{"aria-hidden":`true`,"data-corner-art":``,className:`pointer-events-none mt-3 flex h-12 items-end text-ink-tertiary [&_svg]:h-full [&_svg]:w-auto`,children:E})]}),S&&/* @__PURE__ */ u(`div`,{className:`relative flex shrink-0 flex-wrap justify-end gap-3 border-t border-line bg-surface-raised px-5 py-4`,children:S})]})]})})]})]})}function _({children:e}){return/* @__PURE__ */ u(p.Close,{render:e})}export{g as Dialog,_ as DialogClose};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const e=[`a[href]`,`button:not([disabled])`,`input:not([disabled]):not([type="hidden"])`,`select:not([disabled])`,`textarea:not([disabled])`,`[tabindex]:not([tabindex="-1"])`].join(`,`);function t(t){return()=>t.current?.querySelector(e)??!0}export{t as firstFocusableIn};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{focusRingInset as e}from"../../lib/focus-ring.js";const t=`fixed inset-0 z-(--z-overlay) bg-scrim transition-opacity duration-(--duration-fast) ease-standard data-ending-style:opacity-0 data-starting-style:opacity-0`,n=`hatch relative flex shrink-0 items-center border-b border-line bg-surface-raised text-ink`,r=[`absolute top-1/2 right-1 inline-flex size-10 -translate-y-1/2 items-center justify-center text-ink`,`active:text-neutral-300`,`[&_svg]:transition-transform [&_svg]:duration-(--duration-base) [&_svg]:ease-standard hover:[&_svg]:rotate-90`,e].join(` `),i=`bg-surface-raised text-ink shadow-lg outline-none forced-colors:border`;export{t as overlayBackdrop,r as overlayClose,n as overlayHeader,i as overlaySurface};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
|
|
2
|
+
import { ComponentProps, ReactElement, ReactNode } from "react";
|
|
3
|
+
import { Drawer } from "@base-ui/react/drawer";
|
|
4
|
+
//#region src/components/drawer/Drawer.d.ts
|
|
5
|
+
export type DrawerSide = "right" | "left" | "bottom";
|
|
6
|
+
export type DrawerSize = "sm" | "md" | "lg";
|
|
7
|
+
type PopupProps = ComponentProps<typeof Drawer.Popup>;
|
|
8
|
+
export type DrawerProps = Omit<ComponentProps<"div">, "title" | "children" | "className" | "style"> & {
|
|
9
|
+
/** 触发按钮。不传就用 `open` / `onOpenChange` 自己控制 */
|
|
10
|
+
trigger?: ReactElement<Record<string, unknown>>;
|
|
11
|
+
open?: boolean;
|
|
12
|
+
defaultOpen?: boolean;
|
|
13
|
+
onOpenChange?: (open: boolean) => void;
|
|
14
|
+
/** 标题,在深色标题带里左对齐。它也是抽屉的可访问名称 */
|
|
15
|
+
title: ReactNode;
|
|
16
|
+
/** 标题下的一段说明,会关联给读屏 */
|
|
17
|
+
description?: ReactNode;
|
|
18
|
+
/** 底部的行动区,不随内容滚动 */
|
|
19
|
+
footer?: ReactNode;
|
|
20
|
+
/**
|
|
21
|
+
* 从哪一边滑入:
|
|
22
|
+
* - `right` 详情、设置,默认;
|
|
23
|
+
* - `left` 导航;
|
|
24
|
+
* - `bottom` 移动端的操作菜单,带拖动把手。
|
|
25
|
+
* 都可以朝来的方向划走。
|
|
26
|
+
*/
|
|
27
|
+
side?: DrawerSide;
|
|
28
|
+
/** 侧边抽屉的宽度 320 / 400 / 480px,窄屏上通宽。默认 `md`。底部抽屉不用 */
|
|
29
|
+
size?: DrawerSize;
|
|
30
|
+
/** 靠页面内容的一侧加一条行动色的细条 */
|
|
31
|
+
accent?: boolean;
|
|
32
|
+
/** 关闭图标的可访问名称 */
|
|
33
|
+
closeLabel?: string;
|
|
34
|
+
/** 打开时焦点落在哪。默认是内容区里第一个可聚焦的元素 */
|
|
35
|
+
initialFocus?: PopupProps["initialFocus"];
|
|
36
|
+
/** 关闭后焦点回到哪。默认是触发按钮 */
|
|
37
|
+
finalFocus?: PopupProps["finalFocus"];
|
|
38
|
+
/** 给抽屉本身 */
|
|
39
|
+
className?: string;
|
|
40
|
+
children?: ReactNode;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* 抽屉:从屏幕一侧滑入的面板。在不离开当前页面的前提下查看、编辑一个条目,
|
|
44
|
+
* 或者在窄屏上替代侧栏。焦点与背景的处理和弹窗相同。
|
|
45
|
+
*/
|
|
46
|
+
declare function Drawer$1({ trigger, open, defaultOpen, onOpenChange, title, description, footer, side, size, accent, closeLabel, initialFocus, finalFocus, className, children, ...props }: DrawerProps): import("react").JSX.Element;
|
|
47
|
+
//#endregion
|
|
48
|
+
export { Drawer$1 as Drawer };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{Close as t}from"../../icons/Close.js";import{usePortalScope as n}from"../../hooks/usePortalScope.js";import{firstFocusableIn as r}from"../dialog/initial-focus.js";import{overlayBackdrop as i,overlayClose as a,overlayHeader as o,overlaySurface as s}from"../dialog/overlay-style.js";import{useRef as c}from"react";import{jsx as l,jsxs as u}from"react/jsx-runtime";import{Drawer as d}from"@base-ui/react/drawer";const f={right:`right`,left:`left`,bottom:`down`},p={right:`justify-end`,left:`justify-start`,bottom:`items-end`},m={sm:`max-w-80`,md:`max-w-100`,lg:`max-w-120`},h={right:`translate-x-[var(--drawer-swipe-movement-x,0px)] data-ending-style:translate-x-full data-starting-style:translate-x-full`,left:`translate-x-[var(--drawer-swipe-movement-x,0px)] data-ending-style:-translate-x-full data-starting-style:-translate-x-full`,bottom:`translate-y-[var(--drawer-swipe-movement-y,0px)] data-ending-style:translate-y-full data-starting-style:translate-y-full`},g={right:`border-l-4 border-l-action`,left:`border-r-4 border-r-action`,bottom:`border-t-4 border-t-action`};function _({trigger:_,open:v,defaultOpen:y,onOpenChange:b,title:x,description:S,footer:C,side:w=`right`,size:T=`md`,accent:E=!1,closeLabel:D=`关闭`,initialFocus:O,finalFocus:k,className:A,children:j,...M}){let{anchorRef:N,portalRef:P}=n(),F=c(null),I=w===`bottom`;return/* @__PURE__ */ u(d.Root,{open:v,defaultOpen:y,onOpenChange:b&&(e=>b(e)),swipeDirection:f[w],children:[_&&/* @__PURE__ */ l(d.Trigger,{ref:N,render:_}),/* @__PURE__ */ u(d.Portal,{ref:P,children:[/* @__PURE__ */ l(d.Backdrop,{className:e(i,`opacity-[calc(1-var(--drawer-swipe-progress,0))] data-swiping:duration-0`)}),/* @__PURE__ */ l(d.Viewport,{className:e(`fixed inset-0 z-(--z-overlay) flex overflow-hidden`,p[w]),children:/* @__PURE__ */ u(d.Popup,{...M,initialFocus:O??r(F),finalFocus:k,"data-side":w,className:e(s,`flex min-h-0 w-full flex-col`,I?`max-h-[85dvh]`:[`h-full`,m[T]],`transition-[translate] duration-(--duration-base) ease-exit data-swiping:duration-0 data-swiping:select-none`,h[w],E&&g[w],A),children:[/* @__PURE__ */ u(`div`,{"data-theme":`dark`,className:e(o,`min-h-12 pr-12 pl-4`,I&&`pt-2`),children:[I&&/* @__PURE__ */ l(`span`,{"aria-hidden":`true`,className:`absolute top-1.5 left-1/2 h-1 w-8 -translate-x-1/2 bg-line-strong`}),/* @__PURE__ */ l(d.Title,{className:`py-2.5 text-lg font-normal wrap-anywhere`,children:x}),/* @__PURE__ */ l(d.Close,{"aria-label":D,className:a,children:/* @__PURE__ */ l(t,{size:24})})]}),/* @__PURE__ */ u(`div`,{ref:F,className:`flex min-h-0 flex-auto flex-col`,children:[/* @__PURE__ */ u(d.Content,{className:`min-h-0 flex-auto overflow-y-auto overscroll-contain p-4 wrap-anywhere`,children:[S&&/* @__PURE__ */ l(d.Description,{className:e(`text-ink-secondary`,j!==void 0&&`mb-4`),children:S}),j]}),C&&/* @__PURE__ */ l(`div`,{className:`flex shrink-0 flex-wrap justify-end gap-3 border-t border-line px-4 py-3`,children:C})]})]})})]})]})}export{_ as Drawer};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
|
|
2
|
+
import { LinkRender } from "../link-element/LinkElement.js";
|
|
3
|
+
import { MenuVariant } from "./menu-style.js";
|
|
4
|
+
import { ComponentProps, MouseEvent, ReactElement, ReactNode } from "react";
|
|
5
|
+
//#region src/components/dropdown-menu/DropdownMenu.d.ts
|
|
6
|
+
export type DropdownMenuVariant = MenuVariant;
|
|
7
|
+
export type DropdownMenuSide = "top" | "bottom" | "left" | "right";
|
|
8
|
+
export type DropdownMenuAlign = "start" | "center" | "end";
|
|
9
|
+
export type DropdownMenuProps = {
|
|
10
|
+
/** 触发按钮 */
|
|
11
|
+
trigger: ReactElement<Record<string, unknown>>;
|
|
12
|
+
/**
|
|
13
|
+
* - `plain` 跟随主题的面板,默认;
|
|
14
|
+
* - `strong` 固定的深色面板,当前项整行黄底墨字。
|
|
15
|
+
*/
|
|
16
|
+
variant?: DropdownMenuVariant;
|
|
17
|
+
/** 面板出现在触发按钮的哪一侧,放不下时自动翻到对面。默认 `bottom` */
|
|
18
|
+
side?: DropdownMenuSide;
|
|
19
|
+
/** 和触发按钮的哪一边对齐。默认 `start` */
|
|
20
|
+
align?: DropdownMenuAlign;
|
|
21
|
+
open?: boolean;
|
|
22
|
+
defaultOpen?: boolean;
|
|
23
|
+
onOpenChange?: (open: boolean) => void;
|
|
24
|
+
/** 给面板 */
|
|
25
|
+
className?: string;
|
|
26
|
+
/**
|
|
27
|
+
* `DropdownMenuItem`、`DropdownMenuCheckboxItem`、`DropdownMenuGroup`、
|
|
28
|
+
* `DropdownMenuSeparator`、`DropdownMenuRadioGroup`、`DropdownMenuSub`
|
|
29
|
+
*/
|
|
30
|
+
children: ReactNode;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* 点击触发的一组操作或选项。方向键移动、回车选择、`Esc` 关闭、按首字母跳转。
|
|
34
|
+
* 危险项放在最后并和其他项隔开。
|
|
35
|
+
*/
|
|
36
|
+
export declare function DropdownMenu({ trigger, variant, side, align, open, defaultOpen, onOpenChange, className, children }: DropdownMenuProps): import("react").JSX.Element;
|
|
37
|
+
export type DropdownMenuItemTone = "neutral" | "danger";
|
|
38
|
+
type ItemOwnProps = {
|
|
39
|
+
/** `danger` 用于删除一类的操作:文字变红,放在最后并和其他项隔开 */
|
|
40
|
+
tone?: DropdownMenuItemTone;
|
|
41
|
+
/** 文字左侧的图标 */
|
|
42
|
+
iconStart?: ReactNode;
|
|
43
|
+
/** 行尾的补充:快捷键、计数 */
|
|
44
|
+
end?: ReactNode;
|
|
45
|
+
disabled?: boolean;
|
|
46
|
+
/** 点了之后是否关掉菜单。操作项默认关,链接项默认不关 */
|
|
47
|
+
closeOnClick?: boolean;
|
|
48
|
+
/** 传了就渲染成链接 */
|
|
49
|
+
href?: string;
|
|
50
|
+
target?: string;
|
|
51
|
+
rel?: string;
|
|
52
|
+
/** 用这个元素代替 `<a>`(路由库的链接组件)。传了就按链接处理 */
|
|
53
|
+
render?: LinkRender;
|
|
54
|
+
onClick?: (event: MouseEvent<HTMLElement>) => void;
|
|
55
|
+
};
|
|
56
|
+
export type DropdownMenuItemProps = ItemOwnProps & Omit<ComponentProps<"div">, keyof ItemOwnProps | "id" | "style">;
|
|
57
|
+
/** 菜单里的一个操作;传 `href` 就是一个链接。 */
|
|
58
|
+
export declare function DropdownMenuItem({ tone, iconStart, end, disabled, closeOnClick, href, target, rel, render, onClick, className, children, ...props }: DropdownMenuItemProps): import("react").JSX.Element;
|
|
59
|
+
export type DropdownMenuGroupProps = Omit<ComponentProps<"div">, "style"> & {
|
|
60
|
+
/** 分组的小标题 */
|
|
61
|
+
label?: ReactNode;
|
|
62
|
+
};
|
|
63
|
+
export declare function DropdownMenuGroup({ label, children, ...props }: DropdownMenuGroupProps): import("react").JSX.Element;
|
|
64
|
+
export type DropdownMenuSeparatorProps = Omit<ComponentProps<"div">, "style">;
|
|
65
|
+
export declare function DropdownMenuSeparator({ className, ...props }: DropdownMenuSeparatorProps): import("react").JSX.Element;
|
|
66
|
+
export type DropdownMenuRadioGroupProps = {
|
|
67
|
+
value?: string;
|
|
68
|
+
defaultValue?: string;
|
|
69
|
+
onValueChange?: (value: string) => void;
|
|
70
|
+
/** 这一组的小标题 */
|
|
71
|
+
label?: ReactNode;
|
|
72
|
+
disabled?: boolean;
|
|
73
|
+
children: ReactNode;
|
|
74
|
+
};
|
|
75
|
+
/** 一组里只有一个"当前项"的选项,比如语言、排序方式。 */
|
|
76
|
+
export declare function DropdownMenuRadioGroup({ value, defaultValue, onValueChange, label, disabled, children }: DropdownMenuRadioGroupProps): import("react").JSX.Element;
|
|
77
|
+
export type DropdownMenuRadioItemProps = Omit<ComponentProps<"div">, "id" | "style" | "onClick"> & {
|
|
78
|
+
value: string;
|
|
79
|
+
disabled?: boolean;
|
|
80
|
+
/** 行尾的补充 */
|
|
81
|
+
end?: ReactNode;
|
|
82
|
+
/** 选了之后是否关掉菜单,默认关 */
|
|
83
|
+
closeOnClick?: boolean;
|
|
84
|
+
};
|
|
85
|
+
export declare function DropdownMenuRadioItem({ value, disabled, end, closeOnClick, className, children, ...props }: DropdownMenuRadioItemProps): import("react").JSX.Element;
|
|
86
|
+
export type DropdownMenuCheckboxItemProps = Omit<ComponentProps<"div">, "id" | "style" | "onClick"> & {
|
|
87
|
+
checked?: boolean;
|
|
88
|
+
defaultChecked?: boolean;
|
|
89
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
90
|
+
disabled?: boolean;
|
|
91
|
+
/** 行尾的补充 */
|
|
92
|
+
end?: ReactNode;
|
|
93
|
+
/** 勾了之后是否关掉菜单。默认不关:可以连着改几项 */
|
|
94
|
+
closeOnClick?: boolean;
|
|
95
|
+
};
|
|
96
|
+
/** 能开能关的一项设置,比如"显示缩略图"。行首是一个小方格,没勾的时候也看得见。 */
|
|
97
|
+
export declare function DropdownMenuCheckboxItem({ checked, defaultChecked, onCheckedChange, disabled, end, closeOnClick, className, children, ...props }: DropdownMenuCheckboxItemProps): import("react").JSX.Element;
|
|
98
|
+
export type DropdownMenuSubProps = {
|
|
99
|
+
/** 这一行的文字 */
|
|
100
|
+
label: ReactNode;
|
|
101
|
+
/** 文字左侧的图标 */
|
|
102
|
+
iconStart?: ReactNode;
|
|
103
|
+
disabled?: boolean;
|
|
104
|
+
/** 给子面板 */
|
|
105
|
+
className?: string;
|
|
106
|
+
/** 子面板里的选项 */
|
|
107
|
+
children: ReactNode;
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* 子菜单:菜单里的一行,停留或按 `→` 时在侧边展开另一块面板。
|
|
111
|
+
* 只做一层,不要在子菜单里再套子菜单。
|
|
112
|
+
*/
|
|
113
|
+
export declare function DropdownMenuSub({ label, iconStart, disabled, className, children }: DropdownMenuSubProps): import("react").JSX.Element;
|
|
114
|
+
//#endregion
|
|
115
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{defined as t}from"../../lib/defined.js";import{usePortalScope as n}from"../../hooks/usePortalScope.js";import{TriangleRight as r}from"../../icons/TriangleRight.js";import{MenuCheck as i}from"./MenuCheck.js";import{getMenuVariantContext as a,menuGroupLabel as o,menuItem as s,menuItemCurrent as c,menuItemHover as l,menuPanel as u,menuSeparator as d}from"./menu-style.js";import{useContext as f}from"react";import{Fragment as p,jsx as m,jsxs as h}from"react/jsx-runtime";import{Menu as g}from"@base-ui/react/menu";function _({trigger:t,variant:r=`plain`,side:i=`bottom`,align:o=`start`,open:s,defaultOpen:c,onOpenChange:l,className:d,children:f}){let p=a(),{anchorRef:_,portalRef:v}=n();return/* @__PURE__ */ h(g.Root,{open:s,defaultOpen:c,onOpenChange:l&&(e=>l(e)),children:[/* @__PURE__ */ m(g.Trigger,{ref:_,render:t}),/* @__PURE__ */ m(g.Portal,{ref:v,children:/* @__PURE__ */ m(g.Positioner,{side:i,align:o,sideOffset:4,className:`z-(--z-overlay) outline-none`,children:/* @__PURE__ */ m(g.Popup,{"data-theme":r===`strong`?`dark`:void 0,"data-variant":r,className:e(u,`max-h-(--available-height) overflow-y-auto overscroll-contain`,d),children:/* @__PURE__ */ m(p.Provider,{value:r,children:f})})})})]})}function v(e,t,n){return/* @__PURE__ */ h(p,{children:[e&&/* @__PURE__ */ m(`span`,{"aria-hidden":`true`,className:`flex shrink-0 items-center [&_svg]:size-4`,children:e}),/* @__PURE__ */ m(`span`,{className:`min-w-0 flex-1 truncate`,children:t}),n&&/* @__PURE__ */ m(`span`,{className:`ml-4 flex shrink-0 items-center text-xs text-ink-secondary`,children:n})]})}function y({tone:n=`neutral`,iconStart:r,end:i,disabled:a,closeOnClick:o,href:c,target:u,rel:d,render:f,onClick:p,className:h,children:_,...y}){let b=e(s,l,n===`danger`&&`text-danger`,h),x=v(r,_,i);return c!==void 0||f!==void 0?/* @__PURE__ */ m(g.LinkItem,{render:f,...t({href:c,target:u,rel:d}),closeOnClick:o,onClick:p,"data-tone":n,className:b,children:x}):/* @__PURE__ */ m(g.Item,{...y,disabled:a,closeOnClick:o,onClick:p,"data-tone":n,className:b,children:x})}function b({label:e,children:t,...n}){return/* @__PURE__ */ h(g.Group,{...n,children:[e&&/* @__PURE__ */ m(g.GroupLabel,{className:`px-3 pt-2 pb-1 text-xs text-ink-tertiary`,children:e}),t]})}function x({className:t,...n}){return/* @__PURE__ */ m(g.Separator,{...n,className:e(d,t)})}function S({value:e,defaultValue:t,onValueChange:n,label:r,disabled:i,children:a}){let s=/* @__PURE__ */ m(g.RadioGroup,{value:e,defaultValue:t,onValueChange:n&&(e=>n(String(e))),disabled:i,children:a});return r?/* @__PURE__ */ h(g.Group,{children:[/* @__PURE__ */ m(g.GroupLabel,{className:o,children:r}),s]}):s}function C({value:t,disabled:n,end:r,closeOnClick:i=!0,className:o,children:u,...d}){let p=f(a());return/* @__PURE__ */ m(g.RadioItem,{...d,value:t,disabled:n,closeOnClick:i,className:t=>e(s,t.checked?c[p]:l,o),children:v(null,u,r)})}function w({checked:t,defaultChecked:n,onCheckedChange:r,disabled:a,end:o,closeOnClick:c=!1,className:u,children:d,...f}){return/* @__PURE__ */ m(g.CheckboxItem,{...f,checked:t,defaultChecked:n,onCheckedChange:r&&(e=>r(e)),disabled:a,closeOnClick:c,className:e(s,l,u),render:(e,t)=>/* @__PURE__ */ h(`div`,{...e,children:[/* @__PURE__ */ m(i,{checked:t.checked,disabled:t.disabled}),v(null,d,o)]})})}function T({label:t,iconStart:i,disabled:o,className:c,children:d}){let p=f(a()),{anchorRef:_,portalRef:y}=n();return/* @__PURE__ */ h(g.SubmenuRoot,{disabled:o,children:[/* @__PURE__ */ m(g.SubmenuTrigger,{ref:_,className:e(s,l,`data-popup-open:bg-ink/5`),children:v(i,t,/* @__PURE__ */ m(r,{size:10}))}),/* @__PURE__ */ m(g.Portal,{ref:y,children:/* @__PURE__ */ m(g.Positioner,{sideOffset:2,alignOffset:-5,className:`z-(--z-overlay) outline-none`,children:/* @__PURE__ */ m(g.Popup,{"data-theme":p===`strong`?`dark`:void 0,"data-variant":p,className:e(u,`max-h-(--available-height) overflow-y-auto overscroll-contain`,c),children:d})})})]})}export{_ as DropdownMenu,w as DropdownMenuCheckboxItem,b as DropdownMenuGroup,y as DropdownMenuItem,S as DropdownMenuRadioGroup,C as DropdownMenuRadioItem,x as DropdownMenuSeparator,T as DropdownMenuSub};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{Check as t}from"../../icons/Check.js";import{jsx as n}from"react/jsx-runtime";function r({checked:r,disabled:i=!1}){return/* @__PURE__ */ n(`span`,{"aria-hidden":`true`,"data-checked":r?``:void 0,className:`flex size-4 shrink-0 items-center justify-center`,children:/* @__PURE__ */ n(`span`,{className:e(`flex size-4 items-center justify-center border-2 transition-colors duration-(--duration-fast) ease-standard choice-diamond:size-3 choice-diamond:rotate-45`,i?[`border-ink-disabled bg-surface-sunken text-ink-disabled`,r&&`choice-diamond:bg-ink-disabled forced-colors:choice-diamond:bg-[GrayText]`]:r?`border-surface-inverse bg-surface-inverse text-accent-ink-inverse forced-colors:border-[Highlight] forced-colors:bg-[Highlight] forced-colors:text-[HighlightText]`:`border-line-strong bg-surface-sunken`),children:r&&/* @__PURE__ */ n(t,{size:10,strokeWidth:4,className:`choice-diamond:hidden`})})})}export{r as MenuCheck};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
|
|
2
|
+
import { DropdownMenu, DropdownMenuAlign, DropdownMenuCheckboxItem, DropdownMenuCheckboxItemProps, DropdownMenuGroup, DropdownMenuGroupProps, DropdownMenuItem, DropdownMenuItemProps, DropdownMenuItemTone, DropdownMenuProps, DropdownMenuRadioGroup, DropdownMenuRadioGroupProps, DropdownMenuRadioItem, DropdownMenuRadioItemProps, DropdownMenuSeparator, DropdownMenuSeparatorProps, DropdownMenuSide, DropdownMenuSub, DropdownMenuSubProps, DropdownMenuVariant } from "./DropdownMenu.js";
|
|
3
|
+
export { DropdownMenu, type DropdownMenuAlign, DropdownMenuCheckboxItem, type DropdownMenuCheckboxItemProps, DropdownMenuGroup, type DropdownMenuGroupProps, DropdownMenuItem, type DropdownMenuItemProps, type DropdownMenuItemTone, type DropdownMenuProps, DropdownMenuRadioGroup, type DropdownMenuRadioGroupProps, DropdownMenuRadioItem, type DropdownMenuRadioItemProps, DropdownMenuSeparator, type DropdownMenuSeparatorProps, type DropdownMenuSide, DropdownMenuSub, type DropdownMenuSubProps, type DropdownMenuVariant };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{focusRingInset as e}from"../../lib/focus-ring.js";import{createLazyContext as t}from"../../lib/create-lazy-context.js";import{enterFromSide as n}from"../../lib/motion.js";const r=/* @__PURE__ */ t(`plain`),i=[`relative min-w-40 border border-line bg-surface-raised py-1 text-ink shadow-sm outline-none`,`origin-(--transform-origin) transition-[opacity,translate] duration-[var(--duration-fast),var(--duration-base)] ease-[var(--ease-standard),var(--ease-exit)]`,`data-ending-style:opacity-0 data-starting-style:opacity-0`,n,`before:pointer-events-none before:absolute before:-top-px before:-left-px before:z-1 before:h-[7px] before:w-1/2 before:origin-left before:bg-action before:content-['']`,`before:[clip-path:polygon(0_0,100%_0,100%_3px,36px_3px,32px_100%,28px_3px,0_3px)]`,`before:transition-transform before:duration-(--duration-base) before:ease-exit data-starting-style:before:scale-x-0`,`forced-colors:before:hidden`].join(` `),a=[`relative flex min-h-9 cursor-default items-center gap-2 px-3 py-1.5 text-sm select-none`,`data-disabled:text-ink-disabled`,e].join(` `),o=`data-highlighted:bg-ink/5`,s={plain:`bg-surface-muted font-medium before:absolute before:inset-y-0 before:left-0 before:w-[3px] before:bg-ink before:content-[''] forced-colors:before:bg-[Highlight]`,strong:`bg-action font-medium text-on-action focus-visible:-outline-offset-4 focus-visible:outline-on-action forced-colors:before:absolute forced-colors:before:inset-y-0 forced-colors:before:left-0 forced-colors:before:w-[3px] forced-colors:before:bg-[Highlight] forced-colors:before:content-['']`},c=`px-3 pt-2 pb-1 text-xs text-ink-tertiary`,l=`my-1 h-px bg-line`;export{r as getMenuVariantContext,c as menuGroupLabel,a as menuItem,s as menuItemCurrent,o as menuItemHover,i as menuPanel,l as menuSeparator};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
import { ComponentProps, ReactNode } from "react";
|
|
3
|
+
//#region src/components/empty-state/EmptyState.d.ts
|
|
4
|
+
export type EmptyStateProps = Omit<ComponentProps<"div">, "title"> & {
|
|
5
|
+
/** 一句话说明现状:"暂无记录" */
|
|
6
|
+
title: ReactNode;
|
|
7
|
+
/** 一句话说明原因或下一步 */
|
|
8
|
+
description?: ReactNode;
|
|
9
|
+
/** 可选的一个行动,通常是一个 `control` 按钮 */
|
|
10
|
+
action?: ReactNode;
|
|
11
|
+
/** 图形。默认是取景角 + 准星;传 `null` 去掉 */
|
|
12
|
+
icon?: ReactNode;
|
|
13
|
+
/** 虚线描边,默认有 */
|
|
14
|
+
bordered?: boolean;
|
|
15
|
+
/** 标题层级,默认 3(`<h3>`) */
|
|
16
|
+
level?: 2 | 3 | 4 | 5 | 6;
|
|
17
|
+
/** 挂上时淡入一次,不"啪"地一下出现。默认开启 */
|
|
18
|
+
animate?: boolean;
|
|
19
|
+
};
|
|
20
|
+
/** 没有内容时的占位。说清楚为什么为空、接下来能做什么;不要用大幅插画填满。 */
|
|
21
|
+
export declare function EmptyState({ title, description, action, icon, bordered, level, animate, className, children, ...props }: EmptyStateProps): import("react").JSX.Element;
|
|
22
|
+
//#endregion
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{jsx as t,jsxs as n}from"react/jsx-runtime";function r(){return/* @__PURE__ */ n(`svg`,{width:56,height:56,viewBox:`0 0 48 48`,fill:`none`,stroke:`currentColor`,strokeWidth:1.5,strokeLinecap:`butt`,strokeLinejoin:`miter`,"aria-hidden":`true`,focusable:`false`,children:[/* @__PURE__ */ t(`path`,{d:`M4 14V4h10M34 4h10v10M44 34v10H34M14 44H4V34`}),/* @__PURE__ */ t(`path`,{d:`M24 18v12M18 24h12`})]})}function i({title:i,description:a,action:o,icon:s,bordered:c=!0,level:l=3,animate:u=!0,className:d,children:f,...p}){let m=`h${l}`,h=s===void 0?/* @__PURE__ */ t(r,{}):s;return/* @__PURE__ */ n(`div`,{...p,className:e(`flex flex-col items-center px-6 py-10 text-center text-ink`,c&&`border border-dashed border-line-strong`,u&&`animate-fade-in`,d),children:[h!==null&&/* @__PURE__ */ t(`div`,{"aria-hidden":`true`,className:`mb-4 text-ink-tertiary`,children:h}),/* @__PURE__ */ t(m,{className:`text-base font-medium`,children:i}),a&&/* @__PURE__ */ t(`p`,{className:`mt-1 max-w-[40ch] text-sm text-ink-secondary`,children:a}),f,o&&/* @__PURE__ */ t(`div`,{className:`mt-5`,children:o})]})}export{i as EmptyState};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
import { HTMLAttributes, ReactNode } from "react";
|
|
3
|
+
//#region src/components/field/Field.d.ts
|
|
4
|
+
type FieldContextValue = {
|
|
5
|
+
/** 单个控件的 id;`group` 字段里有多个控件,不提供 */
|
|
6
|
+
controlId: string | undefined;
|
|
7
|
+
labelId: string;
|
|
8
|
+
describedBy: string | undefined;
|
|
9
|
+
invalid: boolean;
|
|
10
|
+
disabled: boolean;
|
|
11
|
+
required: boolean;
|
|
12
|
+
group: boolean;
|
|
13
|
+
};
|
|
14
|
+
/** 给成组的控件(单选组)读取所在字段的状态。不在 `Field` 里时返回 `null`。 */
|
|
15
|
+
export declare function useFieldContext(): FieldContextValue | null;
|
|
16
|
+
type ControlProps = {
|
|
17
|
+
id?: string;
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
required?: boolean;
|
|
20
|
+
/** 错误态。不传时跟随所在的 `Field` */
|
|
21
|
+
invalid?: boolean;
|
|
22
|
+
"aria-describedby"?: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* 把所在 `Field` 的 id、说明文字、错误态、禁用、必填并进控件自己的属性。
|
|
26
|
+
* 控件上显式传的值优先。自定义控件用它接入 `Field`。
|
|
27
|
+
*/
|
|
28
|
+
export declare function useFieldControl({ id, disabled, required, invalid, "aria-describedby": describedBy }: ControlProps): {
|
|
29
|
+
id: string | undefined;
|
|
30
|
+
disabled: boolean;
|
|
31
|
+
required: boolean;
|
|
32
|
+
invalid: boolean;
|
|
33
|
+
"aria-describedby": string | undefined;
|
|
34
|
+
};
|
|
35
|
+
export type FieldProps = Omit<HTMLAttributes<HTMLElement>, "children"> & {
|
|
36
|
+
/** 标签,在控件上方。不要用占位文字代替它 */
|
|
37
|
+
label: ReactNode;
|
|
38
|
+
/** 帮助文字,在控件下方 */
|
|
39
|
+
help?: ReactNode;
|
|
40
|
+
/** 错误说明:写"哪里不对、怎么改"。有值即为错误态 */
|
|
41
|
+
error?: ReactNode;
|
|
42
|
+
/** 必填:标签后加一个小菱形,并交给里面的控件 */
|
|
43
|
+
required?: boolean;
|
|
44
|
+
/** 禁用:标签变浅,并交给里面的控件 */
|
|
45
|
+
disabled?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* 里面是一组控件(几个复选、一个单选组)而不是单个输入框时打开:
|
|
48
|
+
* 渲染成 `<fieldset>` + `<legend>`。
|
|
49
|
+
*/
|
|
50
|
+
group?: boolean;
|
|
51
|
+
/** 单个控件的 id,缺省自动生成 */
|
|
52
|
+
controlId?: string;
|
|
53
|
+
children: ReactNode;
|
|
54
|
+
};
|
|
55
|
+
/** 表单字段:标签在上、控件在下,下面是帮助与错误文字,三者自动关联。 */
|
|
56
|
+
export declare function Field({ label, help, error, required, disabled, group, controlId, className, children, ...props }: FieldProps): import("react").JSX.Element;
|
|
57
|
+
//#endregion
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{cn as e}from"../../lib/cn.js";import{createLazyContext as t}from"../../lib/create-lazy-context.js";import{usePresence as n}from"../../hooks/usePresence.js";import{StatusDanger as r}from"../../icons/StatusDanger.js";import{collapse as i}from"../../lib/motion.js";import{useContext as a,useId as o,useMemo as s,useState as c}from"react";import{Fragment as l,jsx as u,jsxs as d}from"react/jsx-runtime";const f=/* @__PURE__ */ t(null);function p(){return a(f())}function m({id:e,disabled:t,required:n,invalid:r,"aria-describedby":i}){let o=a(f()),s=[i,o?.describedBy].filter(Boolean).join(` `)||void 0;return{id:e??o?.controlId,disabled:t??o?.disabled??!1,required:n??o?.required??!1,invalid:r??o?.invalid??!1,"aria-describedby":s}}function h({label:t,help:a,error:p,required:m=!1,disabled:h=!1,group:g=!1,controlId:_,className:v,children:y,...b}){let x=f(),S=o(),C=_??`${S}-control`,w=`${S}-label`,T=`${S}-help`,E=`${S}-error`,D=p!=null&&p!==!1,O=a!=null&&a!==!1,k=[D&&E,O&&T].filter(Boolean).join(` `)||void 0,{ref:A,mounted:j,leaving:M,entered:N}=n(D),[P,F]=c(p);D&&!Object.is(P,p)&&F(p);let I=s(()=>({controlId:g?void 0:C,labelId:w,describedBy:k,invalid:D,disabled:h,required:m,group:g}),[g,C,w,k,D,h,m]),L=e(`block text-sm font-medium`,h?`text-ink-disabled`:`text-ink`),R=/* @__PURE__ */ d(l,{children:[t,m&&/* @__PURE__ */ u(`span`,{"aria-hidden":`true`,"data-required":``,className:e(`ml-1.5 inline-block size-1.5 rotate-45 align-middle`,h?`bg-ink-disabled`:`bg-accent-ink`)})]}),z=/* @__PURE__ */ d(l,{children:[j&&/* @__PURE__ */ u(`div`,{ref:A,"data-leaving":M?``:void 0,"aria-hidden":M||void 0,className:e(i,`transition-[grid-template-rows,opacity] duration-(--duration-fast) data-leaving:opacity-0`,N&&[`starting:grid-rows-[0fr]`,`starting:opacity-0`]),children:/* @__PURE__ */ u(`div`,{className:`min-h-0 min-w-0 overflow-y-clip`,children:/* @__PURE__ */ d(`p`,{id:E,className:`flex items-start gap-1.5 pt-1.5 text-sm text-danger`,children:[/* @__PURE__ */ u(r,{size:16,className:`mt-0.5 shrink-0`}),/* @__PURE__ */ u(`span`,{className:`min-w-0 wrap-anywhere`,children:D?p:P})]})})}),O&&/* @__PURE__ */ u(`p`,{id:T,className:e(`mt-1.5 text-sm`,h?`text-ink-disabled`:`text-ink-secondary`),children:a})]});return g?/* @__PURE__ */ d(`fieldset`,{...b,disabled:h,"aria-describedby":k,"data-invalid":D?``:void 0,className:e(`min-w-0`,v),children:[/* @__PURE__ */ u(`legend`,{id:w,className:e(L,`mb-1.5`),children:R}),/* @__PURE__ */ u(`div`,{className:`flex flex-col items-start`,children:/* @__PURE__ */ u(x.Provider,{value:I,children:y})}),z]}):/* @__PURE__ */ d(`div`,{...b,"data-invalid":D?``:void 0,className:e(`min-w-0`,v),children:[/* @__PURE__ */ u(`label`,{id:w,htmlFor:C,className:e(L,`mb-1.5`),children:R}),/* @__PURE__ */ u(x.Provider,{value:I,children:y}),z]})}export{h as Field,p as useFieldContext,m as useFieldControl};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
|
|
2
|
+
import { LinkRender } from "../link-element/LinkElement.js";
|
|
3
|
+
import { ComponentProps, ReactNode } from "react";
|
|
4
|
+
//#region src/components/file-upload/FileItem.d.ts
|
|
5
|
+
export type FileItemStatus = "uploading" | "done" | "error";
|
|
6
|
+
type OwnProps = {
|
|
7
|
+
/** 文件名。前面的扩展名标签是从它里面取的 */
|
|
8
|
+
name: string;
|
|
9
|
+
/** 大小,字节 */
|
|
10
|
+
size?: number;
|
|
11
|
+
/**
|
|
12
|
+
* 传到哪一步了,由使用方给:
|
|
13
|
+
* - 不传:只是列出来;
|
|
14
|
+
* - `uploading` 行底一条进度条,大小的位置换成百分比;
|
|
15
|
+
* - `done` 多一个成功图标;
|
|
16
|
+
* - `error` 文件名下面一行错误说明。
|
|
17
|
+
*/
|
|
18
|
+
status?: FileItemStatus;
|
|
19
|
+
/** `uploading` 时的进度,0 – 100。不传就是不确定进度 */
|
|
20
|
+
progress?: number;
|
|
21
|
+
/** `error` 时的说明:写"怎么了、怎么办" */
|
|
22
|
+
error?: ReactNode;
|
|
23
|
+
/** 传了右端就有移除钮 */
|
|
24
|
+
onRemove?: () => void;
|
|
25
|
+
/** 传了、且是 `error` 时,多一个"重试" */
|
|
26
|
+
onRetry?: () => void;
|
|
27
|
+
/** 移除钮的可访问名称,默认"移除某某" */
|
|
28
|
+
removeLabel?: string;
|
|
29
|
+
/** "重试"两个字 */
|
|
30
|
+
retryLabel?: ReactNode;
|
|
31
|
+
/** `done` 时读屏多听到的一句,默认"已上传" */
|
|
32
|
+
doneLabel?: string;
|
|
33
|
+
/** 进度条的可访问名称,默认"某某的上传进度" */
|
|
34
|
+
progressLabel?: string;
|
|
35
|
+
/** 传了文件名就是链接:已有的附件可以点开 */
|
|
36
|
+
href?: string;
|
|
37
|
+
target?: string;
|
|
38
|
+
rel?: string;
|
|
39
|
+
/** 用这个元素代替 `<a>`(路由库的链接组件)。传了就按链接处理 */
|
|
40
|
+
render?: LinkRender;
|
|
41
|
+
disabled?: boolean;
|
|
42
|
+
};
|
|
43
|
+
export type FileItemProps = OwnProps & Omit<ComponentProps<"div">, keyof OwnProps | "children">;
|
|
44
|
+
/**
|
|
45
|
+
* 一个文件一行:扩展名、文件名、大小、状态、移除钮。
|
|
46
|
+
* `FileUpload` 里每个文件默认渲染一行;也可以单独拿去列"已有的附件"。
|
|
47
|
+
*/
|
|
48
|
+
export declare function FileItem({ name, size, status, progress, error, onRemove, onRetry, removeLabel, retryLabel, doneLabel, progressLabel, href, target, rel, render, disabled, className, ...props }: FileItemProps): import("react").JSX.Element;
|
|
49
|
+
//#endregion
|
|
50
|
+
export {};
|
|
@@ -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{Close as n}from"../../icons/Close.js";import{StatusDanger as r}from"../../icons/StatusDanger.js";import{StatusSuccess as i}from"../../icons/StatusSuccess.js";import{LinkElement as a}from"../link-element/LinkElement.js";import{fileExtension as o,formatFileSize as s}from"../../lib/file.js";import{Progress as c}from"../progress/Progress.js";import{Tag as l}from"../tag/Tag.js";import{Fragment as u,jsx as d,jsxs as f}from"react/jsx-runtime";function p({name:p,size:m,status:h,progress:g,error:_,onRemove:v,onRetry:y,removeLabel:b=`移除${p}`,retryLabel:x=`重试`,doneLabel:S=`已上传`,progressLabel:C=`${p}的上传进度`,href:w,target:T,rel:E,render:D,disabled:O=!1,className:k,...A}){let j=h===`uploading`,M=h===`error`,N=w!==void 0||D!==void 0,P=null;return j&&g!==void 0?P=`${Math.round(Math.min(Math.max(g,0),100))}%`:!j&&m!==void 0&&(P=s(m)),/* @__PURE__ */ f(`div`,{...A,"data-status":h,className:e(`relative flex min-h-10 items-center gap-3 bg-surface-muted pl-2 text-sm`,O?`text-ink-disabled`:`text-ink`,!v&&`pr-3`,k),children:[/* @__PURE__ */ d(l,{variant:O?`muted`:`inverse`,size:`sm`,"aria-hidden":`true`,"data-extension":``,className:e(`min-w-10 justify-center font-tech font-bold`,O&&`text-ink-disabled`),children:o(p)||`FILE`}),/* @__PURE__ */ f(`span`,{className:`flex min-w-0 flex-1 flex-col py-1.5`,children:[N?/* @__PURE__ */ d(a,{render:D,href:w,target:T,rel:E,title:p,className:e(`truncate underline underline-offset-4`,t),children:p}):/* @__PURE__ */ d(`span`,{title:p,className:`truncate`,children:p}),M&&_&&/* @__PURE__ */ f(`span`,{className:`flex items-start gap-1 text-xs text-danger`,children:[/* @__PURE__ */ d(r,{size:12,className:`mt-0.5 shrink-0`}),/* @__PURE__ */ d(`span`,{className:`min-w-0 wrap-anywhere`,children:_})]})]}),P!==null&&/* @__PURE__ */ d(`span`,{"data-meta":``,className:e(`shrink-0 font-tech text-xs tabular-nums`,O?`text-ink-disabled`:`text-ink-secondary`),children:P}),h===`done`&&/* @__PURE__ */ f(u,{children:[/* @__PURE__ */ d(i,{size:16,className:`shrink-0 text-success`}),/* @__PURE__ */ d(`span`,{className:`sr-only`,children:S})]}),M&&y&&/* @__PURE__ */ d(`button`,{type:`button`,disabled:O,onClick:y,className:e(`shrink-0 font-medium underline underline-offset-4`,`focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus`),children:x}),v&&/* @__PURE__ */ d(`button`,{type:`button`,"data-file-remove":``,"aria-label":b,disabled:O,onClick:v,className:e(`flex size-8 shrink-0 items-center justify-center self-center`,`transition-colors duration-(--duration-fast) ease-standard`,O?`cursor-not-allowed text-ink-disabled`:`text-ink-secondary hover:bg-line hover:text-ink`,`focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus`),children:/* @__PURE__ */ d(n,{size:14})}),j&&/* @__PURE__ */ d(c,{size:`sm`,value:g,"aria-label":C,className:`absolute inset-x-0 bottom-0`})]})}export{p as FileItem};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
|
|
2
|
+
import { ReactNode, Ref } from "react";
|
|
3
|
+
//#region src/components/file-upload/FileUpload.d.ts
|
|
4
|
+
export type FileUploadSize = "sm" | "md";
|
|
5
|
+
/** 没收的原因:类型不对、太大、个数超了 */
|
|
6
|
+
export type FileRejectReason = "type" | "size" | "count";
|
|
7
|
+
export type FileRejection = {
|
|
8
|
+
file: File;
|
|
9
|
+
reason: FileRejectReason;
|
|
10
|
+
};
|
|
11
|
+
/** 文件列表的名称、没收时的那几句话 */
|
|
12
|
+
export type FileUploadLabels = {
|
|
13
|
+
/** 文件列表的可访问名称 */
|
|
14
|
+
list: string;
|
|
15
|
+
/** 选了几个:读屏的播报 */
|
|
16
|
+
selected: (count: number) => string;
|
|
17
|
+
/** 没收了几个:那一行说明的开头 */
|
|
18
|
+
rejected: (count: number) => string;
|
|
19
|
+
type: string;
|
|
20
|
+
size: (limit: string) => string;
|
|
21
|
+
count: (max: number) => string;
|
|
22
|
+
};
|
|
23
|
+
export type FileUploadProps = {
|
|
24
|
+
/** 受控的值 */
|
|
25
|
+
value?: File[];
|
|
26
|
+
/** 非受控时的初始值 */
|
|
27
|
+
defaultValue?: File[];
|
|
28
|
+
onValueChange?: (files: File[]) => void;
|
|
29
|
+
/** 可以选几个。不开时新选的替掉原来的 */
|
|
30
|
+
multiple?: boolean;
|
|
31
|
+
/** 收哪些类型,写法和原生的一样:`.pdf,image/*` */
|
|
32
|
+
accept?: string;
|
|
33
|
+
/** 单个文件最大多少字节 */
|
|
34
|
+
maxSize?: number;
|
|
35
|
+
/** 最多几个(`multiple` 时) */
|
|
36
|
+
maxFiles?: number;
|
|
37
|
+
/** 有文件没收:拿到每个文件和原因 */
|
|
38
|
+
onReject?: (rejections: FileRejection[]) => void;
|
|
39
|
+
/** 表单字段名:列表里的文件随表单提交 */
|
|
40
|
+
name?: string;
|
|
41
|
+
/** 投放区的第一行字,后面跟着 `browseLabel` */
|
|
42
|
+
title?: ReactNode;
|
|
43
|
+
/** 带下划线的那几个字 */
|
|
44
|
+
browseLabel?: ReactNode;
|
|
45
|
+
/** 文件拖到上面时换成的字 */
|
|
46
|
+
dropLabel?: ReactNode;
|
|
47
|
+
/** 第二行:把限制写清楚——"PDF 或图片,单个不超过 10 MB" */
|
|
48
|
+
description?: ReactNode;
|
|
49
|
+
/** `md` 两行,默认;`sm` 是 40px 高的一行 */
|
|
50
|
+
size?: FileUploadSize;
|
|
51
|
+
/** 错误态。放在 `Field` 里时跟随它的 `error` */
|
|
52
|
+
invalid?: boolean;
|
|
53
|
+
disabled?: boolean;
|
|
54
|
+
required?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* 自己画每个文件的那一行:选了就要传、要显示进度时用,返回一个带 `status` 的 `FileItem`。
|
|
57
|
+
* 不传就是一行不带状态的 `FileItem`
|
|
58
|
+
*/
|
|
59
|
+
renderFile?: (file: File, actions: {
|
|
60
|
+
remove: () => void;
|
|
61
|
+
index: number;
|
|
62
|
+
}) => ReactNode;
|
|
63
|
+
/** 移除钮的可访问名称,拿到的是文件名。默认"移除某某" */
|
|
64
|
+
removeLabel?: (name: string) => string;
|
|
65
|
+
/** 文件列表的名称、没收时的那几句话,换哪句传哪句 */
|
|
66
|
+
labels?: Partial<FileUploadLabels>;
|
|
67
|
+
id?: string;
|
|
68
|
+
"aria-label"?: string;
|
|
69
|
+
"aria-describedby"?: string;
|
|
70
|
+
/** 给最外面那一层 */
|
|
71
|
+
className?: string;
|
|
72
|
+
/** 给里面的 `<input type="file">` */
|
|
73
|
+
ref?: Ref<HTMLInputElement>;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* 文件上传:选文件,或者把文件拖进来。它只管"选"和"列"——发请求、算进度是使用方的事。
|
|
77
|
+
*
|
|
78
|
+
* 里面是一个真的 `<input type="file">`,铺满整个投放区:点哪儿都是打开系统的文件框。
|
|
79
|
+
* 每个文件上传都要有标签:放进 `Field`,或者自己传 `aria-label`。
|
|
80
|
+
*/
|
|
81
|
+
export declare function FileUpload({ value, defaultValue, onValueChange, multiple, accept, maxSize, maxFiles, onReject, name, title, browseLabel, dropLabel, description, size, invalid: invalidProp, disabled: disabledProp, required: requiredProp, renderFile, removeLabel, labels: labelsProp, id: idProp, "aria-label": ariaLabel, "aria-describedby": describedByProp, className, ref }: FileUploadProps): import("react").JSX.Element;
|
|
82
|
+
//#endregion
|