@zerodep-dev/vue-tsx-pro-ui 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +32 -2
- package/dist/base/Badge.d.ts +28 -0
- package/dist/base/Badge.js +72 -0
- package/dist/base/Badge.js.map +1 -0
- package/dist/base/Blockquote.d.ts +13 -0
- package/dist/base/Blockquote.js +26 -0
- package/dist/base/Blockquote.js.map +1 -0
- package/dist/base/Button.d.ts +18 -0
- package/dist/base/Button.js +86 -0
- package/dist/base/Button.js.map +1 -0
- package/dist/base/ButtonBase.d.ts +21 -0
- package/dist/base/ButtonBase.js +51 -0
- package/dist/base/ButtonBase.js.map +1 -0
- package/dist/base/ButtonGroup.d.ts +24 -0
- package/dist/base/ButtonGroup.js +52 -0
- package/dist/base/ButtonGroup.js.map +1 -0
- package/dist/base/CloseButton.d.ts +15 -0
- package/dist/base/CloseButton.js +38 -0
- package/dist/base/CloseButton.js.map +1 -0
- package/dist/base/Code.d.ts +13 -0
- package/dist/base/Code.js +27 -0
- package/dist/base/Code.js.map +1 -0
- package/dist/base/CodeBlock.d.ts +89 -0
- package/dist/base/CodeBlock.js +265 -0
- package/dist/base/CodeBlock.js.map +1 -0
- package/dist/base/CopyButton.d.ts +40 -0
- package/dist/base/CopyButton.js +113 -0
- package/dist/base/CopyButton.js.map +1 -0
- package/dist/base/Heading.d.ts +49 -0
- package/dist/base/Heading.js +122 -0
- package/dist/base/Heading.js.map +1 -0
- package/dist/base/Icon.d.ts +48 -0
- package/dist/base/Icon.js +110 -0
- package/dist/base/Icon.js.map +1 -0
- package/dist/base/IconButton.d.ts +34 -0
- package/dist/base/IconButton.js +81 -0
- package/dist/base/IconButton.js.map +1 -0
- package/dist/base/IconLinkButton.d.ts +34 -0
- package/dist/base/IconLinkButton.js +81 -0
- package/dist/base/IconLinkButton.js.map +1 -0
- package/dist/base/Indicator.d.ts +126 -0
- package/dist/base/Indicator.js +158 -0
- package/dist/base/Indicator.js.map +1 -0
- package/dist/base/Kbd.d.ts +13 -0
- package/dist/base/Kbd.js +34 -0
- package/dist/base/Kbd.js.map +1 -0
- package/dist/base/Link.d.ts +61 -0
- package/dist/base/Link.js +114 -0
- package/dist/base/Link.js.map +1 -0
- package/dist/base/LinkButton.d.ts +18 -0
- package/dist/base/LinkButton.js +109 -0
- package/dist/base/LinkButton.js.map +1 -0
- package/dist/base/List.d.ts +61 -0
- package/dist/base/List.js +116 -0
- package/dist/base/List.js.map +1 -0
- package/dist/base/Mark.d.ts +13 -0
- package/dist/base/Mark.js +23 -0
- package/dist/base/Mark.js.map +1 -0
- package/dist/base/Spinner.d.ts +20 -0
- package/dist/base/Spinner.js +59 -0
- package/dist/base/Spinner.js.map +1 -0
- package/dist/base/StatusDot.d.ts +48 -0
- package/dist/base/StatusDot.js +62 -0
- package/dist/base/StatusDot.js.map +1 -0
- package/dist/base/Tag.d.ts +29 -0
- package/dist/base/Tag.js +92 -0
- package/dist/base/Tag.js.map +1 -0
- package/dist/base/Text.d.ts +57 -0
- package/dist/base/Text.js +74 -0
- package/dist/base/Text.js.map +1 -0
- package/dist/base/VisuallyHidden.d.ts +13 -0
- package/dist/base/VisuallyHidden.js +28 -0
- package/dist/base/VisuallyHidden.js.map +1 -0
- package/dist/base/badge-styles.d.ts +57 -0
- package/dist/base/badge-styles.js +329 -0
- package/dist/base/badge-styles.js.map +1 -0
- package/dist/base/button-core.d.ts +191 -0
- package/dist/base/button-core.js +660 -0
- package/dist/base/button-core.js.map +1 -0
- package/dist/charts/AreaChart.d.ts +18 -0
- package/dist/charts/AreaChart.js +90 -0
- package/dist/charts/AreaChart.js.map +1 -0
- package/dist/charts/BarChart.d.ts +19 -0
- package/dist/charts/BarChart.js +88 -0
- package/dist/charts/BarChart.js.map +1 -0
- package/dist/charts/ChordChart.d.ts +48 -0
- package/dist/charts/ChordChart.js +149 -0
- package/dist/charts/ChordChart.js.map +1 -0
- package/dist/charts/ComboChart.d.ts +30 -0
- package/dist/charts/ComboChart.js +157 -0
- package/dist/charts/ComboChart.js.map +1 -0
- package/dist/charts/DonutChart.d.ts +65 -0
- package/dist/charts/DonutChart.js +162 -0
- package/dist/charts/DonutChart.js.map +1 -0
- package/dist/charts/FunnelChart.d.ts +69 -0
- package/dist/charts/FunnelChart.js +181 -0
- package/dist/charts/FunnelChart.js.map +1 -0
- package/dist/charts/GraphChart.d.ts +135 -0
- package/dist/charts/GraphChart.js +274 -0
- package/dist/charts/GraphChart.js.map +1 -0
- package/dist/charts/LineChart.d.ts +50 -0
- package/dist/charts/LineChart.js +94 -0
- package/dist/charts/LineChart.js.map +1 -0
- package/dist/charts/MapChart.d.ts +167 -0
- package/dist/charts/MapChart.js +627 -0
- package/dist/charts/MapChart.js.map +1 -0
- package/dist/charts/RadarChart.d.ts +60 -0
- package/dist/charts/RadarChart.js +224 -0
- package/dist/charts/RadarChart.js.map +1 -0
- package/dist/charts/SankeyChart.d.ts +57 -0
- package/dist/charts/SankeyChart.js +150 -0
- package/dist/charts/SankeyChart.js.map +1 -0
- package/dist/charts/ScatterChart.d.ts +18 -0
- package/dist/charts/ScatterChart.js +82 -0
- package/dist/charts/ScatterChart.js.map +1 -0
- package/dist/charts/TimelineChart.d.ts +71 -0
- package/dist/charts/TimelineChart.js +267 -0
- package/dist/charts/TimelineChart.js.map +1 -0
- package/dist/charts/TreemapChart.d.ts +40 -0
- package/dist/charts/TreemapChart.js +155 -0
- package/dist/charts/TreemapChart.js.map +1 -0
- package/dist/charts/WaterfallChart.d.ts +61 -0
- package/dist/charts/WaterfallChart.js +167 -0
- package/dist/charts/WaterfallChart.js.map +1 -0
- package/dist/charts/XYChart.d.ts +206 -0
- package/dist/charts/XYChart.js +520 -0
- package/dist/charts/XYChart.js.map +1 -0
- package/dist/charts/axis-ticks.d.ts +23 -0
- package/dist/charts/axis-ticks.js +59 -0
- package/dist/charts/axis-ticks.js.map +1 -0
- package/dist/charts/export.d.ts +17 -0
- package/dist/charts/export.js +65 -0
- package/dist/charts/export.js.map +1 -0
- package/dist/charts/flow.d.ts +53 -0
- package/dist/charts/flow.js +29 -0
- package/dist/charts/flow.js.map +1 -0
- package/dist/charts/frame.d.ts +147 -0
- package/dist/charts/frame.js +358 -0
- package/dist/charts/frame.js.map +1 -0
- package/dist/charts/index.d.ts +30 -0
- package/dist/charts/index.js +24 -0
- package/dist/charts/label-layout.d.ts +59 -0
- package/dist/charts/label-layout.js +64 -0
- package/dist/charts/label-layout.js.map +1 -0
- package/dist/charts/series.d.ts +36 -0
- package/dist/charts/series.js +60 -0
- package/dist/charts/series.js.map +1 -0
- package/dist/charts/single.d.ts +41 -0
- package/dist/charts/single.js +65 -0
- package/dist/charts/single.js.map +1 -0
- package/dist/config/Provider.d.ts +52 -0
- package/dist/config/Provider.js +111 -0
- package/dist/config/Provider.js.map +1 -0
- package/dist/config/context.d.ts +90 -0
- package/dist/config/context.js +58 -0
- package/dist/config/context.js.map +1 -0
- package/dist/config/createUi.d.ts +52 -0
- package/dist/config/createUi.js +96 -0
- package/dist/config/createUi.js.map +1 -0
- package/dist/config/defaults.d.ts +71 -0
- package/dist/config/defaults.js +45 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/lang/en-US.d.ts +3 -0
- package/dist/config/lang/en-US.js +386 -0
- package/dist/config/lang/en-US.js.map +1 -0
- package/dist/config/lang/format.d.ts +50 -0
- package/dist/config/lang/format.js +113 -0
- package/dist/config/lang/format.js.map +1 -0
- package/dist/config/lang/lang.d.ts +653 -0
- package/dist/config/lang/lang.js +22 -0
- package/dist/config/lang/lang.js.map +1 -0
- package/dist/config/lang/messages.d.ts +12 -0
- package/dist/config/lang/messages.js +36 -0
- package/dist/config/lang/messages.js.map +1 -0
- package/dist/config/lang/zh-CN.d.ts +3 -0
- package/dist/config/lang/zh-CN.js +386 -0
- package/dist/config/lang/zh-CN.js.map +1 -0
- package/dist/config/pinyin.d.ts +3 -0
- package/dist/config/pinyin.js +26 -0
- package/dist/config/pinyin.js.map +1 -0
- package/dist/config/query-state.d.ts +61 -0
- package/dist/config/query-state.js +113 -0
- package/dist/config/query-state.js.map +1 -0
- package/dist/config/shiki.d.ts +13 -0
- package/dist/config/shiki.js +97 -0
- package/dist/config/shiki.js.map +1 -0
- package/dist/config/styles.d.ts +108 -0
- package/dist/config/styles.js +59 -0
- package/dist/config/styles.js.map +1 -0
- package/dist/config/theme/boot.d.ts +97 -0
- package/dist/config/theme/boot.js +90 -0
- package/dist/config/theme/boot.js.map +1 -0
- package/dist/config/theme/builtin.d.ts +21 -0
- package/dist/config/theme/builtin.js +58 -0
- package/dist/config/theme/builtin.js.map +1 -0
- package/dist/config/theme/coffee.d.ts +84 -0
- package/dist/config/theme/coffee.js +102 -0
- package/dist/config/theme/coffee.js.map +1 -0
- package/dist/config/theme/cyberpunk.d.ts +110 -0
- package/dist/config/theme/cyberpunk.js +125 -0
- package/dist/config/theme/cyberpunk.js.map +1 -0
- package/dist/config/theme/dark.d.ts +90 -0
- package/dist/config/theme/dark.js +106 -0
- package/dist/config/theme/dark.js.map +1 -0
- package/dist/config/theme/festive.d.ts +93 -0
- package/dist/config/theme/festive.js +110 -0
- package/dist/config/theme/festive.js.map +1 -0
- package/dist/config/theme/forest.d.ts +93 -0
- package/dist/config/theme/forest.js +109 -0
- package/dist/config/theme/forest.js.map +1 -0
- package/dist/config/theme/high-contrast.d.ts +103 -0
- package/dist/config/theme/high-contrast.js +119 -0
- package/dist/config/theme/high-contrast.js.map +1 -0
- package/dist/config/theme/lemon.d.ts +103 -0
- package/dist/config/theme/lemon.js +119 -0
- package/dist/config/theme/lemon.js.map +1 -0
- package/dist/config/theme/light.d.ts +107 -0
- package/dist/config/theme/light.js +122 -0
- package/dist/config/theme/light.js.map +1 -0
- package/dist/config/theme/midnight.d.ts +86 -0
- package/dist/config/theme/midnight.js +103 -0
- package/dist/config/theme/midnight.js.map +1 -0
- package/dist/config/theme/ocean.d.ts +103 -0
- package/dist/config/theme/ocean.js +119 -0
- package/dist/config/theme/ocean.js.map +1 -0
- package/dist/config/theme/paper.d.ts +101 -0
- package/dist/config/theme/paper.js +117 -0
- package/dist/config/theme/paper.js.map +1 -0
- package/dist/config/theme/preference.d.ts +34 -0
- package/dist/config/theme/preference.js +67 -0
- package/dist/config/theme/preference.js.map +1 -0
- package/dist/config/theme/sakura.d.ts +103 -0
- package/dist/config/theme/sakura.js +119 -0
- package/dist/config/theme/sakura.js.map +1 -0
- package/dist/config/theme/theme.d.ts +59 -0
- package/dist/config/theme/theme.js +68 -0
- package/dist/config/theme/theme.js.map +1 -0
- package/dist/config/theme/token-names.d.ts +1897 -0
- package/dist/config/theme/tokens.d.ts +833 -0
- package/dist/config/theme/tokens.js +480 -0
- package/dist/config/theme/tokens.js.map +1 -0
- package/dist/config/vue-router.d.ts +67 -0
- package/dist/config/vue-router.js +143 -0
- package/dist/config/vue-router.js.map +1 -0
- package/dist/date/Calendar.d.ts +36 -0
- package/dist/date/Calendar.js +83 -0
- package/dist/date/Calendar.js.map +1 -0
- package/dist/date/CalendarBoard.d.ts +79 -0
- package/dist/date/CalendarBoard.js +403 -0
- package/dist/date/CalendarBoard.js.map +1 -0
- package/dist/date/CalendarView.d.ts +86 -0
- package/dist/date/CalendarView.js +427 -0
- package/dist/date/CalendarView.js.map +1 -0
- package/dist/date/Countdown.d.ts +45 -0
- package/dist/date/Countdown.js +75 -0
- package/dist/date/Countdown.js.map +1 -0
- package/dist/date/DateField.d.ts +34 -0
- package/dist/date/DateField.js +124 -0
- package/dist/date/DateField.js.map +1 -0
- package/dist/date/DatePicker.d.ts +41 -0
- package/dist/date/DatePicker.js +272 -0
- package/dist/date/DatePicker.js.map +1 -0
- package/dist/date/DateRangePicker.d.ts +71 -0
- package/dist/date/DateRangePicker.js +411 -0
- package/dist/date/DateRangePicker.js.map +1 -0
- package/dist/date/DateSegmentGroup.d.ts +38 -0
- package/dist/date/DateSegmentGroup.js +176 -0
- package/dist/date/DateSegmentGroup.js.map +1 -0
- package/dist/date/DateTime.d.ts +21 -0
- package/dist/date/DateTime.js +39 -0
- package/dist/date/DateTime.js.map +1 -0
- package/dist/date/QuarterCalendar.d.ts +22 -0
- package/dist/date/QuarterCalendar.js +231 -0
- package/dist/date/QuarterCalendar.js.map +1 -0
- package/dist/date/RangeCalendar.d.ts +24 -0
- package/dist/date/RangeCalendar.js +89 -0
- package/dist/date/RangeCalendar.js.map +1 -0
- package/dist/date/RelativeTime.d.ts +16 -0
- package/dist/date/RelativeTime.js +61 -0
- package/dist/date/RelativeTime.js.map +1 -0
- package/dist/date/SegmentedField.d.ts +60 -0
- package/dist/date/SegmentedField.js +175 -0
- package/dist/date/SegmentedField.js.map +1 -0
- package/dist/date/TimeField.d.ts +36 -0
- package/dist/date/TimeField.js +56 -0
- package/dist/date/TimeField.js.map +1 -0
- package/dist/date/TimePicker.d.ts +25 -0
- package/dist/date/TimePicker.js +206 -0
- package/dist/date/TimePicker.js.map +1 -0
- package/dist/date/calendar-state.d.ts +119 -0
- package/dist/date/calendar-state.js +267 -0
- package/dist/date/calendar-state.js.map +1 -0
- package/dist/date/clock.d.ts +11 -0
- package/dist/date/clock.js +37 -0
- package/dist/date/clock.js.map +1 -0
- package/dist/date/date-locale.d.ts +67 -0
- package/dist/date/date-locale.js +89 -0
- package/dist/date/date-locale.js.map +1 -0
- package/dist/date/date-segments.d.ts +132 -0
- package/dist/date/date-segments.js +410 -0
- package/dist/date/date-segments.js.map +1 -0
- package/dist/date/picker-popover.d.ts +88 -0
- package/dist/date/picker-popover.js +126 -0
- package/dist/date/picker-popover.js.map +1 -0
- package/dist/diagram/Diagram.d.ts +223 -0
- package/dist/diagram/Diagram.js +1121 -0
- package/dist/diagram/Diagram.js.map +1 -0
- package/dist/diagram/DiagramControls.d.ts +35 -0
- package/dist/diagram/DiagramControls.js +114 -0
- package/dist/diagram/DiagramControls.js.map +1 -0
- package/dist/diagram/DiagramLanes.d.ts +49 -0
- package/dist/diagram/DiagramLanes.js +92 -0
- package/dist/diagram/DiagramLanes.js.map +1 -0
- package/dist/diagram/DiagramMinimap.d.ts +39 -0
- package/dist/diagram/DiagramMinimap.js +133 -0
- package/dist/diagram/DiagramMinimap.js.map +1 -0
- package/dist/diagram/DiagramNode.d.ts +65 -0
- package/dist/diagram/DiagramNode.js +142 -0
- package/dist/diagram/DiagramNode.js.map +1 -0
- package/dist/diagram/controller.d.ts +68 -0
- package/dist/diagram/controller.js +117 -0
- package/dist/diagram/controller.js.map +1 -0
- package/dist/diagram/export.d.ts +14 -0
- package/dist/diagram/export.js +115 -0
- package/dist/diagram/export.js.map +1 -0
- package/dist/diagram/geometry.d.ts +65 -0
- package/dist/diagram/geometry.js +219 -0
- package/dist/diagram/geometry.js.map +1 -0
- package/dist/diagram/index.d.ts +19 -0
- package/dist/diagram/index.js +11 -0
- package/dist/diagram/messages.d.ts +28 -0
- package/dist/diagram/messages.js +30 -0
- package/dist/diagram/messages.js.map +1 -0
- package/dist/diagram/route.d.ts +81 -0
- package/dist/diagram/route.js +327 -0
- package/dist/diagram/route.js.map +1 -0
- package/dist/display/Accordion.d.ts +71 -0
- package/dist/display/Accordion.js +219 -0
- package/dist/display/Accordion.js.map +1 -0
- package/dist/display/AnimatedNumber.d.ts +44 -0
- package/dist/display/AnimatedNumber.js +97 -0
- package/dist/display/AnimatedNumber.js.map +1 -0
- package/dist/display/Avatar.d.ts +74 -0
- package/dist/display/Avatar.js +158 -0
- package/dist/display/Avatar.js.map +1 -0
- package/dist/display/AvatarGroup.d.ts +29 -0
- package/dist/display/AvatarGroup.js +67 -0
- package/dist/display/AvatarGroup.js.map +1 -0
- package/dist/display/Card.d.ts +219 -0
- package/dist/display/Card.js +319 -0
- package/dist/display/Card.js.map +1 -0
- package/dist/display/Checklist.d.ts +93 -0
- package/dist/display/Checklist.js +260 -0
- package/dist/display/Checklist.js.map +1 -0
- package/dist/display/Collapse.d.ts +24 -0
- package/dist/display/Collapse.js +65 -0
- package/dist/display/Collapse.js.map +1 -0
- package/dist/display/Collapsible.d.ts +12 -0
- package/dist/display/Collapsible.js +41 -0
- package/dist/display/Collapsible.js.map +1 -0
- package/dist/display/Descriptions.d.ts +88 -0
- package/dist/display/Descriptions.js +185 -0
- package/dist/display/Descriptions.js.map +1 -0
- package/dist/display/Ellipsis.d.ts +29 -0
- package/dist/display/Ellipsis.js +111 -0
- package/dist/display/Ellipsis.js.map +1 -0
- package/dist/display/FieldCompare.d.ts +58 -0
- package/dist/display/FieldCompare.js +205 -0
- package/dist/display/FieldCompare.js.map +1 -0
- package/dist/display/Gauge.d.ts +60 -0
- package/dist/display/Gauge.js +215 -0
- package/dist/display/Gauge.js.map +1 -0
- package/dist/display/Image.d.ts +87 -0
- package/dist/display/Image.js +212 -0
- package/dist/display/Image.js.map +1 -0
- package/dist/display/ItemList.d.ts +69 -0
- package/dist/display/ItemList.js +147 -0
- package/dist/display/ItemList.js.map +1 -0
- package/dist/display/Marquee.d.ts +59 -0
- package/dist/display/Marquee.js +155 -0
- package/dist/display/Marquee.js.map +1 -0
- package/dist/display/ProportionBar.d.ts +55 -0
- package/dist/display/ProportionBar.js +99 -0
- package/dist/display/ProportionBar.js.map +1 -0
- package/dist/display/Sortable.d.ts +43 -0
- package/dist/display/Sortable.js +163 -0
- package/dist/display/Sortable.js.map +1 -0
- package/dist/display/Sparkline.d.ts +48 -0
- package/dist/display/Sparkline.js +130 -0
- package/dist/display/Sparkline.js.map +1 -0
- package/dist/display/Stat.d.ts +105 -0
- package/dist/display/Stat.js +268 -0
- package/dist/display/Stat.js.map +1 -0
- package/dist/display/Timeline.d.ts +106 -0
- package/dist/display/Timeline.js +257 -0
- package/dist/display/Timeline.js.map +1 -0
- package/dist/display/Tree.d.ts +132 -0
- package/dist/display/Tree.js +645 -0
- package/dist/display/Tree.js.map +1 -0
- package/dist/display/VirtualList.d.ts +80 -0
- package/dist/display/VirtualList.js +166 -0
- package/dist/display/VirtualList.js.map +1 -0
- package/dist/display/Watermark.d.ts +39 -0
- package/dist/display/Watermark.js +130 -0
- package/dist/display/Watermark.js.map +1 -0
- package/dist/docs-kit/CodeGroup.d.ts +29 -0
- package/dist/docs-kit/CodeGroup.js +81 -0
- package/dist/docs-kit/CodeGroup.js.map +1 -0
- package/dist/docs-kit/CodePreview.d.ts +60 -0
- package/dist/docs-kit/CodePreview.js +183 -0
- package/dist/docs-kit/CodePreview.js.map +1 -0
- package/dist/docs-kit/ColorSwatch.d.ts +28 -0
- package/dist/docs-kit/ColorSwatch.js +85 -0
- package/dist/docs-kit/ColorSwatch.js.map +1 -0
- package/dist/docs-kit/PropsTable.d.ts +73 -0
- package/dist/docs-kit/PropsTable.js +122 -0
- package/dist/docs-kit/PropsTable.js.map +1 -0
- package/dist/docs-kit/index.d.ts +13 -0
- package/dist/docs-kit/index.js +6 -0
- package/dist/docs-kit/messages.d.ts +25 -0
- package/dist/docs-kit/messages.js +30 -0
- package/dist/docs-kit/messages.js.map +1 -0
- package/dist/feedback/Alert.d.ts +83 -0
- package/dist/feedback/Alert.js +179 -0
- package/dist/feedback/Alert.js.map +1 -0
- package/dist/feedback/Banner.d.ts +60 -0
- package/dist/feedback/Banner.js +122 -0
- package/dist/feedback/Banner.js.map +1 -0
- package/dist/feedback/Empty.d.ts +38 -0
- package/dist/feedback/Empty.js +114 -0
- package/dist/feedback/Empty.js.map +1 -0
- package/dist/feedback/LoadingBar.d.ts +45 -0
- package/dist/feedback/LoadingBar.js +124 -0
- package/dist/feedback/LoadingBar.js.map +1 -0
- package/dist/feedback/LoadingOverlay.d.ts +29 -0
- package/dist/feedback/LoadingOverlay.js +70 -0
- package/dist/feedback/LoadingOverlay.js.map +1 -0
- package/dist/feedback/Progress.d.ts +215 -0
- package/dist/feedback/Progress.js +437 -0
- package/dist/feedback/Progress.js.map +1 -0
- package/dist/feedback/Result.d.ts +69 -0
- package/dist/feedback/Result.js +165 -0
- package/dist/feedback/Result.js.map +1 -0
- package/dist/feedback/Skeleton.d.ts +50 -0
- package/dist/feedback/Skeleton.js +100 -0
- package/dist/feedback/Skeleton.js.map +1 -0
- package/dist/feedback/SkeletonText.d.ts +25 -0
- package/dist/feedback/SkeletonText.js +40 -0
- package/dist/feedback/SkeletonText.js.map +1 -0
- package/dist/feedback/Toast.d.ts +204 -0
- package/dist/feedback/Toast.js +572 -0
- package/dist/feedback/Toast.js.map +1 -0
- package/dist/form/Field.d.ts +158 -0
- package/dist/form/Field.js +327 -0
- package/dist/form/Field.js.map +1 -0
- package/dist/form/Form.d.ts +14 -0
- package/dist/form/Form.js +66 -0
- package/dist/form/Form.js.map +1 -0
- package/dist/form/FormErrorSummary.d.ts +23 -0
- package/dist/form/FormErrorSummary.js +102 -0
- package/dist/form/FormErrorSummary.js.map +1 -0
- package/dist/form/FormSection.d.ts +66 -0
- package/dist/form/FormSection.js +227 -0
- package/dist/form/FormSection.js.map +1 -0
- package/dist/form/FormValue.d.ts +17 -0
- package/dist/form/FormValue.js +40 -0
- package/dist/form/FormValue.js.map +1 -0
- package/dist/form/field-layout.d.ts +34 -0
- package/dist/form/field-layout.js +39 -0
- package/dist/form/field-layout.js.map +1 -0
- package/dist/form/form-constraints.d.ts +38 -0
- package/dist/form/form-constraints.js +131 -0
- package/dist/form/form-constraints.js.map +1 -0
- package/dist/form/leave-confirmation.d.ts +9 -0
- package/dist/form/leave-confirmation.js +31 -0
- package/dist/form/leave-confirmation.js.map +1 -0
- package/dist/form/schemas.d.ts +52 -0
- package/dist/form/schemas.js +97 -0
- package/dist/form/schemas.js.map +1 -0
- package/dist/form/useForm.d.ts +192 -0
- package/dist/form/useForm.js +394 -0
- package/dist/form/useForm.js.map +1 -0
- package/dist/index.d.ts +282 -0
- package/dist/index.js +282 -0
- package/dist/input/Autocomplete.d.ts +14 -0
- package/dist/input/Autocomplete.js +35 -0
- package/dist/input/Autocomplete.js.map +1 -0
- package/dist/input/Cascader.d.ts +86 -0
- package/dist/input/Cascader.js +593 -0
- package/dist/input/Cascader.js.map +1 -0
- package/dist/input/CharacterCount.d.ts +21 -0
- package/dist/input/CharacterCount.js +47 -0
- package/dist/input/CharacterCount.js.map +1 -0
- package/dist/input/Checkbox.d.ts +93 -0
- package/dist/input/Checkbox.js +250 -0
- package/dist/input/Checkbox.js.map +1 -0
- package/dist/input/ColorField.d.ts +37 -0
- package/dist/input/ColorField.js +143 -0
- package/dist/input/ColorField.js.map +1 -0
- package/dist/input/Combobox.d.ts +75 -0
- package/dist/input/Combobox.js +321 -0
- package/dist/input/Combobox.js.map +1 -0
- package/dist/input/ConditionBuilder.d.ts +55 -0
- package/dist/input/ConditionBuilder.js +471 -0
- package/dist/input/ConditionBuilder.js.map +1 -0
- package/dist/input/ControlGroup.d.ts +26 -0
- package/dist/input/ControlGroup.js +50 -0
- package/dist/input/ControlGroup.js.map +1 -0
- package/dist/input/FileDrop.d.ts +49 -0
- package/dist/input/FileDrop.js +201 -0
- package/dist/input/FileDrop.js.map +1 -0
- package/dist/input/ListPopover.d.ts +39 -0
- package/dist/input/ListPopover.js +81 -0
- package/dist/input/ListPopover.js.map +1 -0
- package/dist/input/Listbox.d.ts +91 -0
- package/dist/input/Listbox.js +408 -0
- package/dist/input/Listbox.js.map +1 -0
- package/dist/input/Mentions.d.ts +74 -0
- package/dist/input/Mentions.js +287 -0
- package/dist/input/Mentions.js.map +1 -0
- package/dist/input/NumberField.d.ts +64 -0
- package/dist/input/NumberField.js +288 -0
- package/dist/input/NumberField.js.map +1 -0
- package/dist/input/NumberRangeField.d.ts +58 -0
- package/dist/input/NumberRangeField.js +157 -0
- package/dist/input/NumberRangeField.js.map +1 -0
- package/dist/input/OtpField.d.ts +58 -0
- package/dist/input/OtpField.js +200 -0
- package/dist/input/OtpField.js.map +1 -0
- package/dist/input/PeoplePicker.d.ts +42 -0
- package/dist/input/PeoplePicker.js +185 -0
- package/dist/input/PeoplePicker.js.map +1 -0
- package/dist/input/PeoplePickerPanel.d.ts +42 -0
- package/dist/input/PeoplePickerPanel.js +357 -0
- package/dist/input/PeoplePickerPanel.js.map +1 -0
- package/dist/input/Radio.d.ts +90 -0
- package/dist/input/Radio.js +211 -0
- package/dist/input/Radio.js.map +1 -0
- package/dist/input/Rating.d.ts +62 -0
- package/dist/input/Rating.js +225 -0
- package/dist/input/Rating.js.map +1 -0
- package/dist/input/Select.d.ts +97 -0
- package/dist/input/Select.js +455 -0
- package/dist/input/Select.js.map +1 -0
- package/dist/input/SelectedTags.d.ts +28 -0
- package/dist/input/SelectedTags.js +81 -0
- package/dist/input/SelectedTags.js.map +1 -0
- package/dist/input/Slider.d.ts +99 -0
- package/dist/input/Slider.js +343 -0
- package/dist/input/Slider.js.map +1 -0
- package/dist/input/Switch.d.ts +63 -0
- package/dist/input/Switch.js +198 -0
- package/dist/input/Switch.js.map +1 -0
- package/dist/input/TagsInput.d.ts +70 -0
- package/dist/input/TagsInput.js +314 -0
- package/dist/input/TagsInput.js.map +1 -0
- package/dist/input/TextField.d.ts +51 -0
- package/dist/input/TextField.js +185 -0
- package/dist/input/TextField.js.map +1 -0
- package/dist/input/Textarea.d.ts +50 -0
- package/dist/input/Textarea.js +146 -0
- package/dist/input/Textarea.js.map +1 -0
- package/dist/input/ToggleGroup.d.ts +82 -0
- package/dist/input/ToggleGroup.js +211 -0
- package/dist/input/ToggleGroup.js.map +1 -0
- package/dist/input/Transfer.d.ts +67 -0
- package/dist/input/Transfer.js +407 -0
- package/dist/input/Transfer.js.map +1 -0
- package/dist/input/TreeSelect.d.ts +94 -0
- package/dist/input/TreeSelect.js +412 -0
- package/dist/input/TreeSelect.js.map +1 -0
- package/dist/input/Upload.d.ts +143 -0
- package/dist/input/Upload.js +597 -0
- package/dist/input/Upload.js.map +1 -0
- package/dist/input/choice-styles.d.ts +117 -0
- package/dist/input/choice-styles.js +176 -0
- package/dist/input/choice-styles.js.map +1 -0
- package/dist/input/condition.d.ts +153 -0
- package/dist/input/condition.js +169 -0
- package/dist/input/condition.js.map +1 -0
- package/dist/input/control.d.ts +160 -0
- package/dist/input/control.js +236 -0
- package/dist/input/control.js.map +1 -0
- package/dist/input/list-state.d.ts +118 -0
- package/dist/input/list-state.js +186 -0
- package/dist/input/list-state.js.map +1 -0
- package/dist/input/people.d.ts +65 -0
- package/dist/input/people.js +47 -0
- package/dist/input/people.js.map +1 -0
- package/dist/input/remote-items.d.ts +20 -0
- package/dist/input/remote-items.js +36 -0
- package/dist/input/remote-items.js.map +1 -0
- package/dist/input/text-format.d.ts +46 -0
- package/dist/input/text-format.js +64 -0
- package/dist/input/text-format.js.map +1 -0
- package/dist/layout/Affix.d.ts +32 -0
- package/dist/layout/Affix.js +81 -0
- package/dist/layout/Affix.js.map +1 -0
- package/dist/layout/AsideLayout.d.ts +45 -0
- package/dist/layout/AsideLayout.js +69 -0
- package/dist/layout/AsideLayout.js.map +1 -0
- package/dist/layout/BackTop.d.ts +16 -0
- package/dist/layout/BackTop.js +83 -0
- package/dist/layout/BackTop.js.map +1 -0
- package/dist/layout/Container.d.ts +60 -0
- package/dist/layout/Container.js +62 -0
- package/dist/layout/Container.js.map +1 -0
- package/dist/layout/Flex.d.ts +116 -0
- package/dist/layout/Flex.js +109 -0
- package/dist/layout/Flex.js.map +1 -0
- package/dist/layout/Grid.d.ts +139 -0
- package/dist/layout/Grid.js +168 -0
- package/dist/layout/Grid.js.map +1 -0
- package/dist/layout/PageScrollbar.d.ts +20 -0
- package/dist/layout/PageScrollbar.js +49 -0
- package/dist/layout/PageScrollbar.js.map +1 -0
- package/dist/layout/Prose.d.ts +19 -0
- package/dist/layout/Prose.js +37 -0
- package/dist/layout/Prose.js.map +1 -0
- package/dist/layout/ResizeHandle.d.ts +28 -0
- package/dist/layout/ResizeHandle.js +94 -0
- package/dist/layout/ResizeHandle.js.map +1 -0
- package/dist/layout/ScrollArea.d.ts +99 -0
- package/dist/layout/ScrollArea.js +344 -0
- package/dist/layout/ScrollArea.js.map +1 -0
- package/dist/layout/Separator.d.ts +47 -0
- package/dist/layout/Separator.js +96 -0
- package/dist/layout/Separator.js.map +1 -0
- package/dist/layout/Splitter.d.ts +75 -0
- package/dist/layout/Splitter.js +236 -0
- package/dist/layout/Splitter.js.map +1 -0
- package/dist/layout/ViewportFill.d.ts +26 -0
- package/dist/layout/ViewportFill.js +59 -0
- package/dist/layout/ViewportFill.js.map +1 -0
- package/dist/navigation/Breadcrumbs.d.ts +59 -0
- package/dist/navigation/Breadcrumbs.js +150 -0
- package/dist/navigation/Breadcrumbs.js.map +1 -0
- package/dist/navigation/NavBar.d.ts +35 -0
- package/dist/navigation/NavBar.js +182 -0
- package/dist/navigation/NavBar.js.map +1 -0
- package/dist/navigation/NavList.d.ts +112 -0
- package/dist/navigation/NavList.js +375 -0
- package/dist/navigation/NavList.js.map +1 -0
- package/dist/navigation/PageJump.d.ts +27 -0
- package/dist/navigation/PageJump.js +77 -0
- package/dist/navigation/PageJump.js.map +1 -0
- package/dist/navigation/PageSizeSelect.d.ts +19 -0
- package/dist/navigation/PageSizeSelect.js +65 -0
- package/dist/navigation/PageSizeSelect.js.map +1 -0
- package/dist/navigation/Pager.d.ts +30 -0
- package/dist/navigation/Pager.js +111 -0
- package/dist/navigation/Pager.js.map +1 -0
- package/dist/navigation/Pagination.d.ts +51 -0
- package/dist/navigation/Pagination.js +157 -0
- package/dist/navigation/Pagination.js.map +1 -0
- package/dist/navigation/PaginationBar.d.ts +54 -0
- package/dist/navigation/PaginationBar.js +125 -0
- package/dist/navigation/PaginationBar.js.map +1 -0
- package/dist/navigation/SkipLink.d.ts +16 -0
- package/dist/navigation/SkipLink.js +58 -0
- package/dist/navigation/SkipLink.js.map +1 -0
- package/dist/navigation/Steps.d.ts +93 -0
- package/dist/navigation/Steps.js +198 -0
- package/dist/navigation/Steps.js.map +1 -0
- package/dist/navigation/TableOfContents.d.ts +32 -0
- package/dist/navigation/TableOfContents.js +119 -0
- package/dist/navigation/TableOfContents.js.map +1 -0
- package/dist/navigation/Tabs.d.ts +208 -0
- package/dist/navigation/Tabs.js +626 -0
- package/dist/navigation/Tabs.js.map +1 -0
- package/dist/navigation/Toolbar.d.ts +39 -0
- package/dist/navigation/Toolbar.js +67 -0
- package/dist/navigation/Toolbar.js.map +1 -0
- package/dist/overlay/AlertDialog.d.ts +43 -0
- package/dist/overlay/AlertDialog.js +106 -0
- package/dist/overlay/AlertDialog.js.map +1 -0
- package/dist/overlay/CommandPalette.d.ts +64 -0
- package/dist/overlay/CommandPalette.js +250 -0
- package/dist/overlay/CommandPalette.js.map +1 -0
- package/dist/overlay/ContextMenu.d.ts +21 -0
- package/dist/overlay/ContextMenu.js +76 -0
- package/dist/overlay/ContextMenu.js.map +1 -0
- package/dist/overlay/Dialog.d.ts +70 -0
- package/dist/overlay/Dialog.js +91 -0
- package/dist/overlay/Dialog.js.map +1 -0
- package/dist/overlay/Drawer.d.ts +186 -0
- package/dist/overlay/Drawer.js +214 -0
- package/dist/overlay/Drawer.js.map +1 -0
- package/dist/overlay/HoverCard.d.ts +48 -0
- package/dist/overlay/HoverCard.js +86 -0
- package/dist/overlay/HoverCard.js.map +1 -0
- package/dist/overlay/Lightbox.d.ts +57 -0
- package/dist/overlay/Lightbox.js +374 -0
- package/dist/overlay/Lightbox.js.map +1 -0
- package/dist/overlay/Menu.d.ts +218 -0
- package/dist/overlay/Menu.js +816 -0
- package/dist/overlay/Menu.js.map +1 -0
- package/dist/overlay/ModalCore.d.ts +132 -0
- package/dist/overlay/ModalCore.js +274 -0
- package/dist/overlay/ModalCore.js.map +1 -0
- package/dist/overlay/Popconfirm.d.ts +49 -0
- package/dist/overlay/Popconfirm.js +167 -0
- package/dist/overlay/Popconfirm.js.map +1 -0
- package/dist/overlay/Popover.d.ts +40 -0
- package/dist/overlay/Popover.js +96 -0
- package/dist/overlay/Popover.js.map +1 -0
- package/dist/overlay/Tooltip.d.ts +47 -0
- package/dist/overlay/Tooltip.js +86 -0
- package/dist/overlay/Tooltip.js.map +1 -0
- package/dist/overlay/Tour.d.ts +74 -0
- package/dist/overlay/Tour.js +309 -0
- package/dist/overlay/Tour.js.map +1 -0
- package/dist/overlay/detached.d.ts +40 -0
- package/dist/overlay/detached.js +109 -0
- package/dist/overlay/detached.js.map +1 -0
- package/dist/patterns/ActionBar.d.ts +29 -0
- package/dist/patterns/ActionBar.js +75 -0
- package/dist/patterns/ActionBar.js.map +1 -0
- package/dist/patterns/AppShell.d.ts +168 -0
- package/dist/patterns/AppShell.js +620 -0
- package/dist/patterns/AppShell.js.map +1 -0
- package/dist/patterns/CommentThread.d.ts +128 -0
- package/dist/patterns/CommentThread.js +386 -0
- package/dist/patterns/CommentThread.js.map +1 -0
- package/dist/patterns/DataImport.d.ts +72 -0
- package/dist/patterns/DataImport.js +486 -0
- package/dist/patterns/DataImport.js.map +1 -0
- package/dist/patterns/DeadlineBadge.d.ts +21 -0
- package/dist/patterns/DeadlineBadge.js +76 -0
- package/dist/patterns/DeadlineBadge.js.map +1 -0
- package/dist/patterns/FilterBar.d.ts +66 -0
- package/dist/patterns/FilterBar.js +254 -0
- package/dist/patterns/FilterBar.js.map +1 -0
- package/dist/patterns/KanbanBoard.d.ts +79 -0
- package/dist/patterns/KanbanBoard.js +294 -0
- package/dist/patterns/KanbanBoard.js.map +1 -0
- package/dist/patterns/NotificationCenter.d.ts +110 -0
- package/dist/patterns/NotificationCenter.js +342 -0
- package/dist/patterns/NotificationCenter.js.map +1 -0
- package/dist/patterns/PageTabs.d.ts +30 -0
- package/dist/patterns/PageTabs.js +97 -0
- package/dist/patterns/PageTabs.js.map +1 -0
- package/dist/patterns/QueryTable.d.ts +64 -0
- package/dist/patterns/QueryTable.js +276 -0
- package/dist/patterns/QueryTable.js.map +1 -0
- package/dist/patterns/StepsForm.d.ts +49 -0
- package/dist/patterns/StepsForm.js +130 -0
- package/dist/patterns/StepsForm.js.map +1 -0
- package/dist/patterns/ThemeSwitcher.d.ts +20 -0
- package/dist/patterns/ThemeSwitcher.js +102 -0
- package/dist/patterns/ThemeSwitcher.js.map +1 -0
- package/dist/patterns/form-dialog.d.ts +62 -0
- package/dist/patterns/form-dialog.js +143 -0
- package/dist/patterns/form-dialog.js.map +1 -0
- package/dist/patterns/index.d.ts +24 -0
- package/dist/patterns/index.js +15 -0
- package/dist/patterns/messages.d.ts +172 -0
- package/dist/patterns/messages.js +184 -0
- package/dist/patterns/messages.js.map +1 -0
- package/dist/table/ColumnHeaderActions.d.ts +71 -0
- package/dist/table/ColumnHeaderActions.js +247 -0
- package/dist/table/ColumnHeaderActions.js.map +1 -0
- package/dist/table/ColumnResizer.d.ts +12 -0
- package/dist/table/ColumnResizer.js +32 -0
- package/dist/table/ColumnResizer.js.map +1 -0
- package/dist/table/ColumnSettings.d.ts +34 -0
- package/dist/table/ColumnSettings.js +136 -0
- package/dist/table/ColumnSettings.js.map +1 -0
- package/dist/table/ColumnTable.d.ts +51 -0
- package/dist/table/ColumnTable.js +140 -0
- package/dist/table/ColumnTable.js.map +1 -0
- package/dist/table/DataTable.d.ts +44 -0
- package/dist/table/DataTable.js +453 -0
- package/dist/table/DataTable.js.map +1 -0
- package/dist/table/DataTableView.d.ts +328 -0
- package/dist/table/DataTableView.js +963 -0
- package/dist/table/DataTableView.js.map +1 -0
- package/dist/table/PivotTable.d.ts +66 -0
- package/dist/table/PivotTable.js +122 -0
- package/dist/table/PivotTable.js.map +1 -0
- package/dist/table/SelectionBar.d.ts +29 -0
- package/dist/table/SelectionBar.js +86 -0
- package/dist/table/SelectionBar.js.map +1 -0
- package/dist/table/Table.d.ts +169 -0
- package/dist/table/Table.js +304 -0
- package/dist/table/Table.js.map +1 -0
- package/dist/table/TreeDataTable.d.ts +36 -0
- package/dist/table/TreeDataTable.js +168 -0
- package/dist/table/TreeDataTable.js.map +1 -0
- package/dist/table/column-display.d.ts +20 -0
- package/dist/table/column-display.js +43 -0
- package/dist/table/column-display.js.map +1 -0
- package/dist/table/columns.d.ts +244 -0
- package/dist/table/columns.js +271 -0
- package/dist/table/columns.js.map +1 -0
- package/dist/table/csv.d.ts +24 -0
- package/dist/table/csv.js +35 -0
- package/dist/table/csv.js.map +1 -0
- package/dist/table/pivot.d.ts +66 -0
- package/dist/table/pivot.js +85 -0
- package/dist/table/pivot.js.map +1 -0
- package/dist/table/sheet.d.ts +44 -0
- package/dist/table/sheet.js +78 -0
- package/dist/table/sheet.js.map +1 -0
- package/dist/table/table-styles.d.ts +136 -0
- package/dist/table/table-styles.js +403 -0
- package/dist/table/table-styles.js.map +1 -0
- package/dist/table/use-table-query.d.ts +89 -0
- package/dist/table/use-table-query.js +194 -0
- package/dist/table/use-table-query.js.map +1 -0
- package/dist/theme-customize/ThemeCustomizer.d.ts +63 -0
- package/dist/theme-customize/ThemeCustomizer.js +361 -0
- package/dist/theme-customize/ThemeCustomizer.js.map +1 -0
- package/dist/theme-customize/ThemeThumbnail.d.ts +20 -0
- package/dist/theme-customize/ThemeThumbnail.js +82 -0
- package/dist/theme-customize/ThemeThumbnail.js.map +1 -0
- package/dist/theme-customize/contrast.d.ts +27 -0
- package/dist/theme-customize/contrast.js +251 -0
- package/dist/theme-customize/contrast.js.map +1 -0
- package/dist/theme-customize/customize.d.ts +65 -0
- package/dist/theme-customize/customize.js +105 -0
- package/dist/theme-customize/customize.js.map +1 -0
- package/dist/theme-customize/design-tokens.d.ts +31 -0
- package/dist/theme-customize/design-tokens.js +183 -0
- package/dist/theme-customize/design-tokens.js.map +1 -0
- package/dist/theme-customize/index.d.ts +20 -0
- package/dist/theme-customize/index.js +9 -0
- package/dist/theme-customize/messages.d.ts +74 -0
- package/dist/theme-customize/messages.js +142 -0
- package/dist/theme-customize/messages.js.map +1 -0
- package/dist/theme-customize/palette.d.ts +898 -0
- package/dist/theme-customize/palette.js +111 -0
- package/dist/theme-customize/palette.js.map +1 -0
- package/dist/theme-customize/token-catalog.d.ts +20 -0
- package/dist/theme-customize/token-catalog.js +836 -0
- package/dist/theme-customize/token-catalog.js.map +1 -0
- package/dist/three/background/AuroraBackground.d.ts +30 -0
- package/dist/three/background/AuroraBackground.js +80 -0
- package/dist/three/background/AuroraBackground.js.map +1 -0
- package/dist/three/background/MeshGradient.d.ts +28 -0
- package/dist/three/background/MeshGradient.js +76 -0
- package/dist/three/background/MeshGradient.js.map +1 -0
- package/dist/three/background/ShaderBackground.d.ts +25 -0
- package/dist/three/background/ShaderBackground.js +107 -0
- package/dist/three/background/ShaderBackground.js.map +1 -0
- package/dist/three/core/EffectSurface.d.ts +41 -0
- package/dist/three/core/EffectSurface.js +62 -0
- package/dist/three/core/EffectSurface.js.map +1 -0
- package/dist/three/core/ThreeCanvas.d.ts +39 -0
- package/dist/three/core/ThreeCanvas.js +77 -0
- package/dist/three/core/ThreeCanvas.js.map +1 -0
- package/dist/three/core/dispose.d.ts +9 -0
- package/dist/three/core/dispose.js +26 -0
- package/dist/three/core/dispose.js.map +1 -0
- package/dist/three/core/orbit.d.ts +31 -0
- package/dist/three/core/orbit.js +83 -0
- package/dist/three/core/orbit.js.map +1 -0
- package/dist/three/core/quality.d.ts +59 -0
- package/dist/three/core/quality.js +80 -0
- package/dist/three/core/quality.js.map +1 -0
- package/dist/three/core/renderer.d.ts +110 -0
- package/dist/three/core/renderer.js +303 -0
- package/dist/three/core/renderer.js.map +1 -0
- package/dist/three/core/shaders.d.ts +19 -0
- package/dist/three/core/shaders.js +100 -0
- package/dist/three/core/shaders.js.map +1 -0
- package/dist/three/core/theme-colors.d.ts +30 -0
- package/dist/three/core/theme-colors.js +113 -0
- package/dist/three/core/theme-colors.js.map +1 -0
- package/dist/three/effects/Confetti.d.ts +62 -0
- package/dist/three/effects/Confetti.js +242 -0
- package/dist/three/effects/Confetti.js.map +1 -0
- package/dist/three/effects/ParticleField.d.ts +39 -0
- package/dist/three/effects/ParticleField.js +266 -0
- package/dist/three/effects/ParticleField.js.map +1 -0
- package/dist/three/effects/WaveGrid.d.ts +37 -0
- package/dist/three/effects/WaveGrid.js +130 -0
- package/dist/three/effects/WaveGrid.js.map +1 -0
- package/dist/three/globe/Globe.d.ts +70 -0
- package/dist/three/globe/Globe.js +337 -0
- package/dist/three/globe/Globe.js.map +1 -0
- package/dist/three/globe/land.d.ts +9 -0
- package/dist/three/globe/land.js +14 -0
- package/dist/three/globe/land.js.map +1 -0
- package/dist/three/index.d.ts +24 -0
- package/dist/three/index.js +18 -0
- package/dist/three/model/ModelViewer.d.ts +63 -0
- package/dist/three/model/ModelViewer.js +193 -0
- package/dist/three/model/ModelViewer.js.map +1 -0
- package/dist/utils/data/collation.d.ts +36 -0
- package/dist/utils/data/collation.js +69 -0
- package/dist/utils/data/collation.js.map +1 -0
- package/dist/utils/data/color.d.ts +32 -0
- package/dist/utils/data/color.js +90 -0
- package/dist/utils/data/color.js.map +1 -0
- package/dist/utils/data/date.d.ts +186 -0
- package/dist/utils/data/date.js +409 -0
- package/dist/utils/data/date.js.map +1 -0
- package/dist/utils/data/diff.d.ts +21 -0
- package/dist/utils/data/diff.js +43 -0
- package/dist/utils/data/diff.js.map +1 -0
- package/dist/utils/data/equality.d.ts +5 -0
- package/dist/utils/data/equality.js +24 -0
- package/dist/utils/data/equality.js.map +1 -0
- package/dist/utils/data/history.d.ts +59 -0
- package/dist/utils/data/history.js +132 -0
- package/dist/utils/data/history.js.map +1 -0
- package/dist/utils/data/intl-cache.d.ts +8 -0
- package/dist/utils/data/intl-cache.js +19 -0
- package/dist/utils/data/intl-cache.js.map +1 -0
- package/dist/utils/data/number-parse.d.ts +7 -0
- package/dist/utils/data/number-parse.js +45 -0
- package/dist/utils/data/number-parse.js.map +1 -0
- package/dist/utils/data/number.d.ts +10 -0
- package/dist/utils/data/number.js +28 -0
- package/dist/utils/data/number.js.map +1 -0
- package/dist/utils/data/numeric.d.ts +55 -0
- package/dist/utils/data/numeric.js +133 -0
- package/dist/utils/data/numeric.js.map +1 -0
- package/dist/utils/data/pagination.d.ts +21 -0
- package/dist/utils/data/pagination.js +22 -0
- package/dist/utils/data/pagination.js.map +1 -0
- package/dist/utils/data/selection.d.ts +41 -0
- package/dist/utils/data/selection.js +21 -0
- package/dist/utils/data/selection.js.map +1 -0
- package/dist/utils/data/status.d.ts +43 -0
- package/dist/utils/data/status.js +27 -0
- package/dist/utils/data/status.js.map +1 -0
- package/dist/utils/data/text.d.ts +12 -0
- package/dist/utils/data/text.js +30 -0
- package/dist/utils/data/text.js.map +1 -0
- package/dist/utils/data/tree.d.ts +140 -0
- package/dist/utils/data/tree.js +273 -0
- package/dist/utils/data/tree.js.map +1 -0
- package/dist/utils/data/workdays.d.ts +67 -0
- package/dist/utils/data/workdays.js +67 -0
- package/dist/utils/data/workdays.js.map +1 -0
- package/dist/utils/dom/announcer.d.ts +11 -0
- package/dist/utils/dom/announcer.js +53 -0
- package/dist/utils/dom/announcer.js.map +1 -0
- package/dist/utils/dom/caret.d.ts +14 -0
- package/dist/utils/dom/caret.js +72 -0
- package/dist/utils/dom/caret.js.map +1 -0
- package/dist/utils/dom/clipboard.d.ts +16 -0
- package/dist/utils/dom/clipboard.js +66 -0
- package/dist/utils/dom/clipboard.js.map +1 -0
- package/dist/utils/dom/direction.d.ts +12 -0
- package/dist/utils/dom/direction.js +20 -0
- package/dist/utils/dom/direction.js.map +1 -0
- package/dist/utils/dom/download.d.ts +7 -0
- package/dist/utils/dom/download.js +19 -0
- package/dist/utils/dom/download.js.map +1 -0
- package/dist/utils/dom/element.d.ts +3 -0
- package/dist/utils/dom/element.js +12 -0
- package/dist/utils/dom/element.js.map +1 -0
- package/dist/utils/dom/event-listener.d.ts +8 -0
- package/dist/utils/dom/event-listener.js +35 -0
- package/dist/utils/dom/event-listener.js.map +1 -0
- package/dist/utils/dom/floating.d.ts +149 -0
- package/dist/utils/dom/floating.js +262 -0
- package/dist/utils/dom/floating.js.map +1 -0
- package/dist/utils/dom/focus.d.ts +28 -0
- package/dist/utils/dom/focus.js +105 -0
- package/dist/utils/dom/focus.js.map +1 -0
- package/dist/utils/dom/fullscreen.d.ts +11 -0
- package/dist/utils/dom/fullscreen.js +43 -0
- package/dist/utils/dom/fullscreen.js.map +1 -0
- package/dist/utils/dom/hotkeys.d.ts +43 -0
- package/dist/utils/dom/hotkeys.js +174 -0
- package/dist/utils/dom/hotkeys.js.map +1 -0
- package/dist/utils/dom/hover-intent.d.ts +47 -0
- package/dist/utils/dom/hover-intent.js +72 -0
- package/dist/utils/dom/hover-intent.js.map +1 -0
- package/dist/utils/dom/hover-layer.d.ts +36 -0
- package/dist/utils/dom/hover-layer.js +74 -0
- package/dist/utils/dom/hover-layer.js.map +1 -0
- package/dist/utils/dom/intersection.d.ts +13 -0
- package/dist/utils/dom/intersection.js +36 -0
- package/dist/utils/dom/intersection.js.map +1 -0
- package/dist/utils/dom/layout-batch.d.ts +14 -0
- package/dist/utils/dom/layout-batch.js +26 -0
- package/dist/utils/dom/layout-batch.js.map +1 -0
- package/dist/utils/dom/link.d.ts +18 -0
- package/dist/utils/dom/link.js +44 -0
- package/dist/utils/dom/link.js.map +1 -0
- package/dist/utils/dom/media-query.d.ts +18 -0
- package/dist/utils/dom/media-query.js +36 -0
- package/dist/utils/dom/media-query.js.map +1 -0
- package/dist/utils/dom/move.d.ts +47 -0
- package/dist/utils/dom/move.js +69 -0
- package/dist/utils/dom/move.js.map +1 -0
- package/dist/utils/dom/open-change.d.ts +51 -0
- package/dist/utils/dom/open-change.js +21 -0
- package/dist/utils/dom/open-change.js.map +1 -0
- package/dist/utils/dom/overflow.d.ts +29 -0
- package/dist/utils/dom/overflow.js +108 -0
- package/dist/utils/dom/overflow.js.map +1 -0
- package/dist/utils/dom/overlay.d.ts +35 -0
- package/dist/utils/dom/overlay.js +104 -0
- package/dist/utils/dom/overlay.js.map +1 -0
- package/dist/utils/dom/page-visibility.d.ts +10 -0
- package/dist/utils/dom/page-visibility.js +22 -0
- package/dist/utils/dom/page-visibility.js.map +1 -0
- package/dist/utils/dom/pan-zoom.d.ts +109 -0
- package/dist/utils/dom/pan-zoom.js +257 -0
- package/dist/utils/dom/pan-zoom.js.map +1 -0
- package/dist/utils/dom/rasterize.d.ts +18 -0
- package/dist/utils/dom/rasterize.js +41 -0
- package/dist/utils/dom/rasterize.js.map +1 -0
- package/dist/utils/dom/resize.d.ts +4 -0
- package/dist/utils/dom/resize.js +65 -0
- package/dist/utils/dom/resize.js.map +1 -0
- package/dist/utils/dom/ripple.d.ts +40 -0
- package/dist/utils/dom/ripple.js +96 -0
- package/dist/utils/dom/ripple.js.map +1 -0
- package/dist/utils/dom/roving-focus.d.ts +44 -0
- package/dist/utils/dom/roving-focus.js +184 -0
- package/dist/utils/dom/roving-focus.js.map +1 -0
- package/dist/utils/dom/scroll-spy.d.ts +30 -0
- package/dist/utils/dom/scroll-spy.js +55 -0
- package/dist/utils/dom/scroll-spy.js.map +1 -0
- package/dist/utils/dom/sortable.d.ts +82 -0
- package/dist/utils/dom/sortable.js +437 -0
- package/dist/utils/dom/sortable.js.map +1 -0
- package/dist/utils/dom/storage.d.ts +21 -0
- package/dist/utils/dom/storage.js +66 -0
- package/dist/utils/dom/storage.js.map +1 -0
- package/dist/utils/dom/typeahead.d.ts +15 -0
- package/dist/utils/dom/typeahead.js +26 -0
- package/dist/utils/dom/typeahead.js.map +1 -0
- package/dist/utils/motion/active-indicator.d.ts +24 -0
- package/dist/utils/motion/active-indicator.js +58 -0
- package/dist/utils/motion/active-indicator.js.map +1 -0
- package/dist/utils/motion/animation.d.ts +58 -0
- package/dist/utils/motion/animation.js +83 -0
- package/dist/utils/motion/animation.js.map +1 -0
- package/dist/utils/motion/delayed-loading.d.ts +18 -0
- package/dist/utils/motion/delayed-loading.js +38 -0
- package/dist/utils/motion/delayed-loading.js.map +1 -0
- package/dist/utils/motion/layout.d.ts +17 -0
- package/dist/utils/motion/layout.js +43 -0
- package/dist/utils/motion/layout.js.map +1 -0
- package/dist/utils/motion/pointer.d.ts +14 -0
- package/dist/utils/motion/pointer.js +72 -0
- package/dist/utils/motion/pointer.js.map +1 -0
- package/dist/utils/motion/presence.d.ts +57 -0
- package/dist/utils/motion/presence.js +100 -0
- package/dist/utils/motion/presence.js.map +1 -0
- package/dist/utils/motion/reveal.d.ts +9 -0
- package/dist/utils/motion/reveal.js +68 -0
- package/dist/utils/motion/reveal.js.map +1 -0
- package/dist/utils/motion/tween.d.ts +34 -0
- package/dist/utils/motion/tween.js +50 -0
- package/dist/utils/motion/tween.js.map +1 -0
- package/dist/utils/props.d.ts +84 -0
- package/dist/utils/props.js +189 -0
- package/dist/utils/props.js.map +1 -0
- package/dist/utils/request/http.d.ts +101 -0
- package/dist/utils/request/http.js +154 -0
- package/dist/utils/request/http.js.map +1 -0
- package/dist/utils/request/use-request.d.ts +37 -0
- package/dist/utils/request/use-request.js +90 -0
- package/dist/utils/request/use-request.js.map +1 -0
- package/dist/utils/request/wire.d.ts +48 -0
- package/dist/utils/request/wire.js +208 -0
- package/dist/utils/request/wire.js.map +1 -0
- package/dist/utils/style/attached.d.ts +25 -0
- package/dist/utils/style/attached.js +82 -0
- package/dist/utils/style/attached.js.map +1 -0
- package/dist/utils/style/item-styles.d.ts +18 -0
- package/dist/utils/style/item-styles.js +79 -0
- package/dist/utils/style/item-styles.js.map +1 -0
- package/dist/utils/style/markers.d.ts +6 -0
- package/dist/utils/style/markers.js +11 -0
- package/dist/utils/style/markers.js.map +1 -0
- package/dist/utils/style/shimmer.d.ts +20 -0
- package/dist/utils/style/shimmer.js +58 -0
- package/dist/utils/style/shimmer.js.map +1 -0
- package/dist/utils/style/styles.d.ts +118 -0
- package/dist/utils/style/styles.js +114 -0
- package/dist/utils/style/styles.js.map +1 -0
- package/dist/utils/style/swatch-styles.d.ts +10 -0
- package/dist/utils/style/swatch-styles.js +19 -0
- package/dist/utils/style/swatch-styles.js.map +1 -0
- package/dist/utils/style/tone-styles.d.ts +58 -0
- package/dist/utils/style/tone-styles.js +180 -0
- package/dist/utils/style/tone-styles.js.map +1 -0
- package/dist/utils/style/transitions.d.ts +43 -0
- package/dist/utils/style/transitions.js +118 -0
- package/dist/utils/style/transitions.js.map +1 -0
- package/dist/utils/style/typography.d.ts +155 -0
- package/dist/utils/style/typography.js +80 -0
- package/dist/utils/style/typography.js.map +1 -0
- package/dist/utils/style/vars.d.ts +18 -0
- package/dist/utils/style/vars.js +21 -0
- package/dist/utils/style/vars.js.map +1 -0
- package/dist/utils/virtual/use-virtualizer.d.ts +43 -0
- package/dist/utils/virtual/use-virtualizer.js +94 -0
- package/dist/utils/virtual/use-virtualizer.js.map +1 -0
- package/dist/utils/virtual/virtualizer.d.ts +145 -0
- package/dist/utils/virtual/virtualizer.js +316 -0
- package/dist/utils/virtual/virtualizer.js.map +1 -0
- package/dist/xlsx/index.d.ts +7 -0
- package/dist/xlsx/index.js +1 -0
- package/dist/xlsx/workbook.d.ts +33 -0
- package/dist/xlsx/workbook.js +195 -0
- package/dist/xlsx/workbook.js.map +1 -0
- package/package.json +205 -3
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { onScopeDispose, shallowRef } from "vue";
|
|
2
|
+
//#region src/utils/dom/fullscreen.ts
|
|
3
|
+
/**
|
|
4
|
+
* 让一个元素全屏(Fullscreen API):表格、看板、图表的“全屏”按钮。按 Esc 或浏览器的退出全屏时 active 跟着变。在 setup 里调用。
|
|
5
|
+
*
|
|
6
|
+
* const fullscreen = useFullscreen(() => panel);
|
|
7
|
+
* <IconButton icon={fullscreen.active ? Minimize : Maximize} onClick={fullscreen.toggle} />
|
|
8
|
+
*
|
|
9
|
+
* 浏览器不支持(iOS Safari 的非视频元素)或被拒绝时什么也不做,supported 为 false 时可以不显示按钮。
|
|
10
|
+
*/
|
|
11
|
+
/** 元素的全屏状态与切换 */
|
|
12
|
+
function useFullscreen(target) {
|
|
13
|
+
const active = shallowRef(false);
|
|
14
|
+
const supported = typeof document !== "undefined" && document.fullscreenEnabled === true;
|
|
15
|
+
const sync = () => {
|
|
16
|
+
const element = target();
|
|
17
|
+
active.value = !!element && document.fullscreenElement === element;
|
|
18
|
+
};
|
|
19
|
+
if (typeof document !== "undefined") {
|
|
20
|
+
document.addEventListener("fullscreenchange", sync);
|
|
21
|
+
onScopeDispose(() => document.removeEventListener("fullscreenchange", sync));
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
get active() {
|
|
25
|
+
return active.value;
|
|
26
|
+
},
|
|
27
|
+
supported,
|
|
28
|
+
async toggle() {
|
|
29
|
+
const element = target();
|
|
30
|
+
if (!supported || !element) return;
|
|
31
|
+
try {
|
|
32
|
+
if (document.fullscreenElement === element) await document.exitFullscreen();
|
|
33
|
+
else await element.requestFullscreen();
|
|
34
|
+
} catch (error) {
|
|
35
|
+
console.warn("全屏切换被浏览器拒绝", error);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { useFullscreen };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=fullscreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fullscreen.js","names":[],"sources":["../../../src/utils/dom/fullscreen.ts"],"sourcesContent":["/**\n * 让一个元素全屏(Fullscreen API):表格、看板、图表的“全屏”按钮。按 Esc 或浏览器的退出全屏时 active 跟着变。在 setup 里调用。\n *\n * const fullscreen = useFullscreen(() => panel);\n * <IconButton icon={fullscreen.active ? Minimize : Maximize} onClick={fullscreen.toggle} />\n *\n * 浏览器不支持(iOS Safari 的非视频元素)或被拒绝时什么也不做,supported 为 false 时可以不显示按钮。\n */\nimport { onScopeDispose, shallowRef } from 'vue';\n\n/** useFullscreen 的返回值 */\nexport interface Fullscreen {\n /** 这个元素正在全屏 */\n readonly active: boolean;\n /** 浏览器支持全屏 */\n readonly supported: boolean;\n /** 进入或退出全屏 */\n toggle(): Promise<void>;\n}\n\n/** 元素的全屏状态与切换 */\nexport function useFullscreen(target: () => HTMLElement | null | undefined): Fullscreen {\n const active = shallowRef(false);\n const supported = typeof document !== 'undefined' && document.fullscreenEnabled === true;\n\n const sync = () => {\n const element = target();\n active.value = !!element && document.fullscreenElement === element;\n };\n if (typeof document !== 'undefined') {\n document.addEventListener('fullscreenchange', sync);\n onScopeDispose(() => document.removeEventListener('fullscreenchange', sync));\n }\n\n return {\n get active() {\n return active.value;\n },\n supported,\n async toggle() {\n const element = target();\n if (!supported || !element) return;\n try {\n if (document.fullscreenElement === element) await document.exitFullscreen();\n else await element.requestFullscreen();\n } catch (error) {\n // 被浏览器拒绝(不是用户手势触发、权限策略):保持原样,留下记录\n console.warn('全屏切换被浏览器拒绝', error);\n }\n },\n };\n}\n"],"mappings":";;;;;;;;;;;AAqBA,SAAgB,cAAc,QAA0D;CACtF,MAAM,SAAS,WAAW,KAAK;CAC/B,MAAM,YAAY,OAAO,aAAa,eAAe,SAAS,sBAAsB;CAEpF,MAAM,aAAa;EACjB,MAAM,UAAU,OAAO;EACvB,OAAO,QAAQ,CAAC,CAAC,WAAW,SAAS,sBAAsB;CAC7D;CACA,IAAI,OAAO,aAAa,aAAa;EACnC,SAAS,iBAAiB,oBAAoB,IAAI;EAClD,qBAAqB,SAAS,oBAAoB,oBAAoB,IAAI,CAAC;CAC7E;CAEA,OAAO;EACL,IAAI,SAAS;GACX,OAAO,OAAO;EAChB;EACA;EACA,MAAM,SAAS;GACb,MAAM,UAAU,OAAO;GACvB,IAAI,CAAC,aAAa,CAAC,SAAS;GAC5B,IAAI;IACF,IAAI,SAAS,sBAAsB,SAAS,MAAM,SAAS,eAAe;SACrE,MAAM,QAAQ,kBAAkB;GACvC,SAAS,OAAO;IAEd,QAAQ,KAAK,cAAc,KAAK;GAClC;EACF;CACF;AACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** useHotkeys 的选项 */
|
|
2
|
+
export interface HotkeyOptions {
|
|
3
|
+
/** 焦点在输入框、文本框、下拉框、可编辑区域里时也触发,默认 false */
|
|
4
|
+
inInputs?: boolean;
|
|
5
|
+
/**
|
|
6
|
+
* 只在这个元素(或它里面)有焦点时生效;默认整个页面。getter 要读响应式的值(ref 存在 `_state.raw` 里),
|
|
7
|
+
* 元素挂上之后才会重新绑定:存在普通变量里时 getter 只在 setup 时读一次,拿到的是 null
|
|
8
|
+
*/
|
|
9
|
+
target?: () => HTMLElement | null | undefined;
|
|
10
|
+
}
|
|
11
|
+
/** 快捷键 → 处理函数;匹配时先 preventDefault 再调用 */
|
|
12
|
+
export type HotkeyMap = Record<string, (event: KeyboardEvent) => void>;
|
|
13
|
+
interface Hotkey {
|
|
14
|
+
key: string;
|
|
15
|
+
ctrl: boolean;
|
|
16
|
+
alt: boolean;
|
|
17
|
+
shift: boolean;
|
|
18
|
+
meta: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** 是否 Apple 平台:Mod 取 ⌘ */
|
|
21
|
+
export declare function isApplePlatform(): boolean;
|
|
22
|
+
/** 'Mod+Shift+K' → 各修饰键与键名(小写);同一个写法只解析一次 */
|
|
23
|
+
export declare function parseHotkey(combo: string): Hotkey;
|
|
24
|
+
/** 事件是否匹配这个快捷键 */
|
|
25
|
+
export declare function matchesHotkey(event: KeyboardEvent, combo: string | Hotkey): boolean;
|
|
26
|
+
/** 快捷键的显示文字:macOS 上用符号(⌘⇧K),其他系统用 Ctrl+Shift+K;方向键显示成箭头 */
|
|
27
|
+
export declare function formatHotkey(combo: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* 快捷键的 aria-keyshortcuts 写法(读屏念出来):'Mod+K' → 'Control+K',macOS 上 'Meta+K'。
|
|
30
|
+
* 显示快捷键的 Kbd 对读屏隐藏、改由这个属性提供时,按钮的名称与看得见的文字才对得上。
|
|
31
|
+
* 序列键('G I')表达不了(aria-keyshortcuts 里空格表示“或”):返回 undefined,显示的文字就别对读屏隐藏
|
|
32
|
+
*/
|
|
33
|
+
export declare function ariaKeyShortcut(combo: string): string | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* 这次按键属于输入法的组合输入(拼音选词时的回车、方向键、空格):快捷键与列表的键盘操作都不该处理它。
|
|
36
|
+
* Chrome、Firefox 组合中是 isComposing;Safari 先派发 compositionend、再派发确认用的 keydown,只能看 keyCode 229
|
|
37
|
+
*/
|
|
38
|
+
export declare function isComposingKey(event: KeyboardEvent): boolean;
|
|
39
|
+
/** 事件目标是不是可编辑的元素(输入框、文本域、下拉、contenteditable):方向键、字母键这时留给它 */
|
|
40
|
+
export declare function isEditable(target: EventTarget | null): boolean;
|
|
41
|
+
/** 注册快捷键(在 setup 里调用);read 在按键时读取,处理函数总是最新的 */
|
|
42
|
+
export declare function useHotkeys(read: () => HotkeyMap, { inInputs, target }?: HotkeyOptions): void;
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { topModal } from "./overlay.js";
|
|
2
|
+
import { useEventListener } from "./event-listener.js";
|
|
3
|
+
//#region src/utils/dom/hotkeys.ts
|
|
4
|
+
/**
|
|
5
|
+
* 键盘快捷键:在 document 上监听,组件卸载时注销。
|
|
6
|
+
*
|
|
7
|
+
* useHotkeys(() => ({ 'Mod+K': openSearch, 'Shift+?': showHelp, Escape: close, 'G I': goInbox }));
|
|
8
|
+
* formatHotkey('Mod+K') // macOS 上 '⌘K',其他系统 'Ctrl+K':Menu 等显示用
|
|
9
|
+
*
|
|
10
|
+
* 写法:修饰键(Mod、Ctrl、Alt、Shift、Meta)加一个键,用 + 连接,不分大小写;
|
|
11
|
+
* Mod 在 macOS 上是 ⌘(Meta),其他系统是 Ctrl。键名同 KeyboardEvent.key(Enter、ArrowUp、/);
|
|
12
|
+
* 字母按物理键也能匹配(macOS 上 Option 会改变 key)。没写的修饰键必须没按下;符号键(? ! 等)不检查 Shift。
|
|
13
|
+
* 焦点在输入框、可编辑区域里时默认不触发,输入法组字时也不触发。
|
|
14
|
+
*
|
|
15
|
+
* 序列键用空格分隔('G I':先按 g 再按 i,两次之间不超过 1.5 秒,同 GitHub 的 hotkey);序列比单键优先。
|
|
16
|
+
* 所以组合键里的 + 两边不要加空格(写 'Mod+K',不写 'Mod + K')。
|
|
17
|
+
* 作用域:默认在整个页面上监听,但有模态对话框打开时只认对话框里的按键(页面已经不可操作);
|
|
18
|
+
* target 让快捷键只在某个区域里有焦点时生效(编辑器、表格)。
|
|
19
|
+
*/
|
|
20
|
+
/** 是否 Apple 平台:Mod 取 ⌘ */
|
|
21
|
+
function isApplePlatform() {
|
|
22
|
+
const nav = globalThis.navigator;
|
|
23
|
+
const platform = nav?.userAgentData?.platform ?? nav?.platform ?? "";
|
|
24
|
+
return /mac|iphone|ipad|ipod/i.test(platform);
|
|
25
|
+
}
|
|
26
|
+
var KEY_ALIASES = {
|
|
27
|
+
space: " ",
|
|
28
|
+
esc: "escape",
|
|
29
|
+
up: "arrowup",
|
|
30
|
+
down: "arrowdown",
|
|
31
|
+
left: "arrowleft",
|
|
32
|
+
right: "arrowright"
|
|
33
|
+
};
|
|
34
|
+
var parsed = /* @__PURE__ */ new Map();
|
|
35
|
+
/** 'Mod+Shift+K' → 各修饰键与键名(小写);同一个写法只解析一次 */
|
|
36
|
+
function parseHotkey(combo) {
|
|
37
|
+
const key = `${isApplePlatform() ? "apple" : "other"}:${combo}`;
|
|
38
|
+
let hotkey = parsed.get(key);
|
|
39
|
+
if (!hotkey) parsed.set(key, hotkey = parse(combo));
|
|
40
|
+
return hotkey;
|
|
41
|
+
}
|
|
42
|
+
function parse(combo) {
|
|
43
|
+
const parts = combo.split("+").map((part) => part.trim());
|
|
44
|
+
const name = (combo.endsWith("++") ? "+" : parts.pop()).toLowerCase();
|
|
45
|
+
const key = KEY_ALIASES[name] ?? name;
|
|
46
|
+
const modifiers = new Set(parts.filter(Boolean).map((part) => part.toLowerCase()));
|
|
47
|
+
const apple = isApplePlatform();
|
|
48
|
+
return {
|
|
49
|
+
key,
|
|
50
|
+
ctrl: modifiers.has("ctrl") || modifiers.has("mod") && !apple,
|
|
51
|
+
alt: modifiers.has("alt") || modifiers.has("option"),
|
|
52
|
+
shift: modifiers.has("shift"),
|
|
53
|
+
meta: modifiers.has("meta") || modifiers.has("cmd") || modifiers.has("mod") && apple
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** 事件是否匹配这个快捷键 */
|
|
57
|
+
function matchesHotkey(event, combo) {
|
|
58
|
+
const hotkey = typeof combo === "string" ? parseHotkey(combo) : combo;
|
|
59
|
+
const letter = /^[a-z]$/.test(hotkey.key);
|
|
60
|
+
const symbol = hotkey.key.length === 1 && !letter && !/^\d$/.test(hotkey.key);
|
|
61
|
+
if (event.ctrlKey !== hotkey.ctrl || event.altKey !== hotkey.alt || event.metaKey !== hotkey.meta) return false;
|
|
62
|
+
if (!symbol && event.shiftKey !== hotkey.shift) return false;
|
|
63
|
+
return event.key.toLowerCase() === hotkey.key || letter && event.code === `Key${hotkey.key.toUpperCase()}`;
|
|
64
|
+
}
|
|
65
|
+
var KEY_NAMES = {
|
|
66
|
+
" ": "Space",
|
|
67
|
+
arrowup: "ArrowUp",
|
|
68
|
+
arrowdown: "ArrowDown",
|
|
69
|
+
arrowleft: "ArrowLeft",
|
|
70
|
+
arrowright: "ArrowRight",
|
|
71
|
+
pageup: "PageUp",
|
|
72
|
+
pagedown: "PageDown"
|
|
73
|
+
};
|
|
74
|
+
var keyName = (key) => KEY_NAMES[key] ?? (key.length === 1 ? key.toUpperCase() : key.charAt(0).toUpperCase() + key.slice(1));
|
|
75
|
+
var modifiersOf = (hotkey) => [
|
|
76
|
+
"ctrl",
|
|
77
|
+
"alt",
|
|
78
|
+
"shift",
|
|
79
|
+
"meta"
|
|
80
|
+
].filter((name) => hotkey[name]);
|
|
81
|
+
var SYMBOLS = {
|
|
82
|
+
ctrl: "⌃",
|
|
83
|
+
alt: "⌥",
|
|
84
|
+
shift: "⇧",
|
|
85
|
+
meta: "⌘"
|
|
86
|
+
};
|
|
87
|
+
var ARROWS = {
|
|
88
|
+
ArrowUp: "↑",
|
|
89
|
+
ArrowDown: "↓",
|
|
90
|
+
ArrowLeft: "←",
|
|
91
|
+
ArrowRight: "→"
|
|
92
|
+
};
|
|
93
|
+
/** 快捷键的显示文字:macOS 上用符号(⌘⇧K),其他系统用 Ctrl+Shift+K;方向键显示成箭头 */
|
|
94
|
+
function formatHotkey(combo) {
|
|
95
|
+
return combo.trim().split(/\s+/).map(formatStep).join(" ");
|
|
96
|
+
}
|
|
97
|
+
function formatStep(combo) {
|
|
98
|
+
const hotkey = parseHotkey(combo);
|
|
99
|
+
const key = keyName(hotkey.key);
|
|
100
|
+
const shown = ARROWS[key] ?? key;
|
|
101
|
+
if (isApplePlatform()) return modifiersOf(hotkey).map((name) => SYMBOLS[name]).join("") + shown;
|
|
102
|
+
const names = {
|
|
103
|
+
ctrl: "Ctrl",
|
|
104
|
+
alt: "Alt",
|
|
105
|
+
shift: "Shift",
|
|
106
|
+
meta: "Win"
|
|
107
|
+
};
|
|
108
|
+
return [...modifiersOf(hotkey).map((name) => names[name]), shown].join("+");
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 快捷键的 aria-keyshortcuts 写法(读屏念出来):'Mod+K' → 'Control+K',macOS 上 'Meta+K'。
|
|
112
|
+
* 显示快捷键的 Kbd 对读屏隐藏、改由这个属性提供时,按钮的名称与看得见的文字才对得上。
|
|
113
|
+
* 序列键('G I')表达不了(aria-keyshortcuts 里空格表示“或”):返回 undefined,显示的文字就别对读屏隐藏
|
|
114
|
+
*/
|
|
115
|
+
function ariaKeyShortcut(combo) {
|
|
116
|
+
if (/\s/.test(combo.trim())) return void 0;
|
|
117
|
+
const hotkey = parseHotkey(combo);
|
|
118
|
+
const names = {
|
|
119
|
+
ctrl: "Control",
|
|
120
|
+
alt: "Alt",
|
|
121
|
+
shift: "Shift",
|
|
122
|
+
meta: "Meta"
|
|
123
|
+
};
|
|
124
|
+
return [...modifiersOf(hotkey).map((name) => names[name]), keyName(hotkey.key)].join("+");
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 这次按键属于输入法的组合输入(拼音选词时的回车、方向键、空格):快捷键与列表的键盘操作都不该处理它。
|
|
128
|
+
* Chrome、Firefox 组合中是 isComposing;Safari 先派发 compositionend、再派发确认用的 keydown,只能看 keyCode 229
|
|
129
|
+
*/
|
|
130
|
+
function isComposingKey(event) {
|
|
131
|
+
return event.isComposing || event.keyCode === 229;
|
|
132
|
+
}
|
|
133
|
+
/** 事件目标是不是可编辑的元素(输入框、文本域、下拉、contenteditable):方向键、字母键这时留给它 */
|
|
134
|
+
function isEditable(target) {
|
|
135
|
+
if (!(target instanceof HTMLElement)) return false;
|
|
136
|
+
return target.isContentEditable || /^(input|textarea|select)$/i.test(target.tagName);
|
|
137
|
+
}
|
|
138
|
+
/** 序列键两次按键之间最多隔多久(毫秒) */
|
|
139
|
+
var SEQUENCE_TIMEOUT = 1500;
|
|
140
|
+
/** 注册快捷键(在 setup 里调用);read 在按键时读取,处理函数总是最新的 */
|
|
141
|
+
function useHotkeys(read, { inInputs = false, target } = {}) {
|
|
142
|
+
if (typeof document === "undefined") return;
|
|
143
|
+
let recent = [];
|
|
144
|
+
const onKeydown = (event) => {
|
|
145
|
+
if (isComposingKey(event) || event.defaultPrevented) return;
|
|
146
|
+
if (!inInputs && isEditable(event.target)) return;
|
|
147
|
+
const modal = topModal();
|
|
148
|
+
if (!target && modal && !(event.target instanceof Node && modal.contains(event.target))) return;
|
|
149
|
+
const now = performance.now();
|
|
150
|
+
recent = [...recent.filter((item) => now - item.at < SEQUENCE_TIMEOUT), {
|
|
151
|
+
event,
|
|
152
|
+
at: now
|
|
153
|
+
}].slice(-4);
|
|
154
|
+
const entries = Object.entries(read()).map(([combo, handler]) => ({
|
|
155
|
+
steps: combo.trim().split(/\s+/),
|
|
156
|
+
handler
|
|
157
|
+
}));
|
|
158
|
+
entries.sort((a, b) => b.steps.length - a.steps.length);
|
|
159
|
+
for (const { steps, handler } of entries) {
|
|
160
|
+
const tail = recent.slice(-steps.length);
|
|
161
|
+
if (tail.length < steps.length) continue;
|
|
162
|
+
if (!steps.every((step, index) => matchesHotkey(tail[index].event, step))) continue;
|
|
163
|
+
event.preventDefault();
|
|
164
|
+
recent = [];
|
|
165
|
+
handler(event);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
useEventListener(target ?? document, "keydown", onKeydown);
|
|
170
|
+
}
|
|
171
|
+
//#endregion
|
|
172
|
+
export { ariaKeyShortcut, formatHotkey, isApplePlatform, isComposingKey, isEditable, matchesHotkey, parseHotkey, useHotkeys };
|
|
173
|
+
|
|
174
|
+
//# sourceMappingURL=hotkeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hotkeys.js","names":[],"sources":["../../../src/utils/dom/hotkeys.ts"],"sourcesContent":["/**\n * 键盘快捷键:在 document 上监听,组件卸载时注销。\n *\n * useHotkeys(() => ({ 'Mod+K': openSearch, 'Shift+?': showHelp, Escape: close, 'G I': goInbox }));\n * formatHotkey('Mod+K') // macOS 上 '⌘K',其他系统 'Ctrl+K':Menu 等显示用\n *\n * 写法:修饰键(Mod、Ctrl、Alt、Shift、Meta)加一个键,用 + 连接,不分大小写;\n * Mod 在 macOS 上是 ⌘(Meta),其他系统是 Ctrl。键名同 KeyboardEvent.key(Enter、ArrowUp、/);\n * 字母按物理键也能匹配(macOS 上 Option 会改变 key)。没写的修饰键必须没按下;符号键(? ! 等)不检查 Shift。\n * 焦点在输入框、可编辑区域里时默认不触发,输入法组字时也不触发。\n *\n * 序列键用空格分隔('G I':先按 g 再按 i,两次之间不超过 1.5 秒,同 GitHub 的 hotkey);序列比单键优先。\n * 所以组合键里的 + 两边不要加空格(写 'Mod+K',不写 'Mod + K')。\n * 作用域:默认在整个页面上监听,但有模态对话框打开时只认对话框里的按键(页面已经不可操作);\n * target 让快捷键只在某个区域里有焦点时生效(编辑器、表格)。\n */\nimport { useEventListener } from './event-listener';\nimport { topModal } from './overlay';\n\n/** useHotkeys 的选项 */\nexport interface HotkeyOptions {\n /** 焦点在输入框、文本框、下拉框、可编辑区域里时也触发,默认 false */\n inInputs?: boolean;\n /**\n * 只在这个元素(或它里面)有焦点时生效;默认整个页面。getter 要读响应式的值(ref 存在 `_state.raw` 里),\n * 元素挂上之后才会重新绑定:存在普通变量里时 getter 只在 setup 时读一次,拿到的是 null\n */\n target?: () => HTMLElement | null | undefined;\n}\n\n/** 快捷键 → 处理函数;匹配时先 preventDefault 再调用 */\nexport type HotkeyMap = Record<string, (event: KeyboardEvent) => void>;\n\ninterface Hotkey {\n key: string;\n ctrl: boolean;\n alt: boolean;\n shift: boolean;\n meta: boolean;\n}\n\n/** 是否 Apple 平台:Mod 取 ⌘ */\nexport function isApplePlatform(): boolean {\n const nav = globalThis.navigator as\n (Navigator & { userAgentData?: { platform: string } }) | undefined;\n const platform = nav?.userAgentData?.platform ?? nav?.platform ?? '';\n return /mac|iphone|ipad|ipod/i.test(platform);\n}\n\n// 好写的别名 → KeyboardEvent.key\nconst KEY_ALIASES: Record<string, string> = {\n space: ' ',\n esc: 'escape',\n up: 'arrowup',\n down: 'arrowdown',\n left: 'arrowleft',\n right: 'arrowright',\n};\n\nconst parsed = new Map<string, Hotkey>();\n\n/** 'Mod+Shift+K' → 各修饰键与键名(小写);同一个写法只解析一次 */\nexport function parseHotkey(combo: string): Hotkey {\n // Mod 按平台解析:平台也算进键里\n const key = `${isApplePlatform() ? 'apple' : 'other'}:${combo}`;\n let hotkey = parsed.get(key);\n if (!hotkey) parsed.set(key, (hotkey = parse(combo)));\n return hotkey;\n}\n\nfunction parse(combo: string): Hotkey {\n const parts = combo.split('+').map((part) => part.trim());\n // 'Mod++' 这类以加号为键的写法:split 后末尾是两个空串\n const name = (combo.endsWith('++') ? '+' : parts.pop()!).toLowerCase();\n const key = KEY_ALIASES[name] ?? name;\n const modifiers = new Set(parts.filter(Boolean).map((part) => part.toLowerCase()));\n const apple = isApplePlatform();\n return {\n key,\n ctrl: modifiers.has('ctrl') || (modifiers.has('mod') && !apple),\n alt: modifiers.has('alt') || modifiers.has('option'),\n shift: modifiers.has('shift'),\n meta: modifiers.has('meta') || modifiers.has('cmd') || (modifiers.has('mod') && apple),\n };\n}\n\n/** 事件是否匹配这个快捷键 */\nexport function matchesHotkey(event: KeyboardEvent, combo: string | Hotkey): boolean {\n const hotkey = typeof combo === 'string' ? parseHotkey(combo) : combo;\n const letter = /^[a-z]$/.test(hotkey.key);\n const symbol = hotkey.key.length === 1 && !letter && !/^\\d$/.test(hotkey.key);\n if (\n event.ctrlKey !== hotkey.ctrl ||\n event.altKey !== hotkey.alt ||\n event.metaKey !== hotkey.meta\n ) {\n return false;\n }\n if (!symbol && event.shiftKey !== hotkey.shift) return false;\n const key = event.key.toLowerCase();\n return key === hotkey.key || (letter && event.code === `Key${hotkey.key.toUpperCase()}`);\n}\n\n// 小写的键名 → KeyboardEvent.key 的写法(多个单词的每个词首字母大写)\nconst KEY_NAMES: Record<string, string> = {\n ' ': 'Space',\n arrowup: 'ArrowUp',\n arrowdown: 'ArrowDown',\n arrowleft: 'ArrowLeft',\n arrowright: 'ArrowRight',\n pageup: 'PageUp',\n pagedown: 'PageDown',\n};\nconst keyName = (key: string) =>\n KEY_NAMES[key] ??\n (key.length === 1 ? key.toUpperCase() : key.charAt(0).toUpperCase() + key.slice(1));\nconst modifiersOf = (hotkey: Hotkey) =>\n (['ctrl', 'alt', 'shift', 'meta'] as const).filter((name) => hotkey[name]);\n\nconst SYMBOLS: Record<string, string> = { ctrl: '⌃', alt: '⌥', shift: '⇧', meta: '⌘' };\nconst ARROWS: Record<string, string> = {\n ArrowUp: '↑',\n ArrowDown: '↓',\n ArrowLeft: '←',\n ArrowRight: '→',\n};\n\n/** 快捷键的显示文字:macOS 上用符号(⌘⇧K),其他系统用 Ctrl+Shift+K;方向键显示成箭头 */\nexport function formatHotkey(combo: string): string {\n return combo.trim().split(/\\s+/).map(formatStep).join(' ');\n}\n\nfunction formatStep(combo: string): string {\n const hotkey = parseHotkey(combo);\n const key = keyName(hotkey.key);\n const shown = ARROWS[key] ?? key;\n if (isApplePlatform())\n return (\n modifiersOf(hotkey)\n .map((name) => SYMBOLS[name])\n .join('') + shown\n );\n const names = { ctrl: 'Ctrl', alt: 'Alt', shift: 'Shift', meta: 'Win' };\n return [...modifiersOf(hotkey).map((name) => names[name]), shown].join('+');\n}\n\n/**\n * 快捷键的 aria-keyshortcuts 写法(读屏念出来):'Mod+K' → 'Control+K',macOS 上 'Meta+K'。\n * 显示快捷键的 Kbd 对读屏隐藏、改由这个属性提供时,按钮的名称与看得见的文字才对得上。\n * 序列键('G I')表达不了(aria-keyshortcuts 里空格表示“或”):返回 undefined,显示的文字就别对读屏隐藏\n */\nexport function ariaKeyShortcut(combo: string): string | undefined {\n if (/\\s/.test(combo.trim())) return undefined;\n const hotkey = parseHotkey(combo);\n const names = { ctrl: 'Control', alt: 'Alt', shift: 'Shift', meta: 'Meta' };\n return [...modifiersOf(hotkey).map((name) => names[name]), keyName(hotkey.key)].join('+');\n}\n\n/**\n * 这次按键属于输入法的组合输入(拼音选词时的回车、方向键、空格):快捷键与列表的键盘操作都不该处理它。\n * Chrome、Firefox 组合中是 isComposing;Safari 先派发 compositionend、再派发确认用的 keydown,只能看 keyCode 229\n */\nexport function isComposingKey(event: KeyboardEvent): boolean {\n return event.isComposing || event.keyCode === 229;\n}\n\n/** 事件目标是不是可编辑的元素(输入框、文本域、下拉、contenteditable):方向键、字母键这时留给它 */\nexport function isEditable(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n return target.isContentEditable || /^(input|textarea|select)$/i.test(target.tagName);\n}\n\n/** 序列键两次按键之间最多隔多久(毫秒) */\nconst SEQUENCE_TIMEOUT = 1500;\n\n/** 注册快捷键(在 setup 里调用);read 在按键时读取,处理函数总是最新的 */\nexport function useHotkeys(\n read: () => HotkeyMap,\n { inInputs = false, target }: HotkeyOptions = {},\n): void {\n if (typeof document === 'undefined') return;\n // 最近的按键(序列键用):超过时限的丢掉\n let recent: { event: KeyboardEvent; at: number }[] = [];\n const onKeydown = (event: KeyboardEvent) => {\n if (isComposingKey(event) || event.defaultPrevented) return;\n if (!inInputs && isEditable(event.target)) return;\n // 页面级的快捷键:模态对话框打开时只认对话框里的按键\n const modal = topModal();\n if (!target && modal && !(event.target instanceof Node && modal.contains(event.target))) return;\n const now = performance.now();\n recent = [\n ...recent.filter((item) => now - item.at < SEQUENCE_TIMEOUT),\n { event, at: now },\n ].slice(-4);\n const entries = Object.entries(read()).map(([combo, handler]) => ({\n steps: combo.trim().split(/\\s+/),\n handler,\n }));\n // 序列比单键优先:'G I' 按完时不再触发单独的 'I'\n entries.sort((a, b) => b.steps.length - a.steps.length);\n for (const { steps, handler } of entries) {\n const tail = recent.slice(-steps.length);\n if (tail.length < steps.length) continue;\n if (!steps.every((step, index) => matchesHotkey(tail[index]!.event, step))) continue;\n event.preventDefault();\n recent = [];\n handler(event);\n return;\n }\n };\n useEventListener(target ?? document, 'keydown', onKeydown);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0CA,SAAgB,kBAA2B;CACzC,MAAM,MAAM,WAAW;CAEvB,MAAM,WAAW,KAAK,eAAe,YAAY,KAAK,YAAY;CAClE,OAAO,wBAAwB,KAAK,QAAQ;AAC9C;AAGA,IAAM,cAAsC;CAC1C,OAAO;CACP,KAAK;CACL,IAAI;CACJ,MAAM;CACN,MAAM;CACN,OAAO;AACT;AAEA,IAAM,yBAAS,IAAI,IAAoB;;AAGvC,SAAgB,YAAY,OAAuB;CAEjD,MAAM,MAAM,GAAG,gBAAgB,IAAI,UAAU,QAAO,GAAI;CACxD,IAAI,SAAS,OAAO,IAAI,GAAG;CAC3B,IAAI,CAAC,QAAQ,OAAO,IAAI,KAAM,SAAS,MAAM,KAAK,CAAE;CACpD,OAAO;AACT;AAEA,SAAS,MAAM,OAAuB;CACpC,MAAM,QAAQ,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,SAAS,KAAK,KAAK,CAAC;CAExD,MAAM,QAAQ,MAAM,SAAS,IAAI,IAAI,MAAM,MAAM,IAAI,EAAA,CAAI,YAAY;CACrE,MAAM,MAAM,YAAY,SAAS;CACjC,MAAM,YAAY,IAAI,IAAI,MAAM,OAAO,OAAO,CAAC,CAAC,KAAK,SAAS,KAAK,YAAY,CAAC,CAAC;CACjF,MAAM,QAAQ,gBAAgB;CAC9B,OAAO;EACL;EACA,MAAM,UAAU,IAAI,MAAM,KAAM,UAAU,IAAI,KAAK,KAAK,CAAC;EACzD,KAAK,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,QAAQ;EACnD,OAAO,UAAU,IAAI,OAAO;EAC5B,MAAM,UAAU,IAAI,MAAM,KAAK,UAAU,IAAI,KAAK,KAAM,UAAU,IAAI,KAAK,KAAK;CAClF;AACF;;AAGA,SAAgB,cAAc,OAAsB,OAAiC;CACnF,MAAM,SAAS,OAAO,UAAU,WAAW,YAAY,KAAK,IAAI;CAChE,MAAM,SAAS,UAAU,KAAK,OAAO,GAAG;CACxC,MAAM,SAAS,OAAO,IAAI,WAAW,KAAK,CAAC,UAAU,CAAC,OAAO,KAAK,OAAO,GAAG;CAC5E,IACE,MAAM,YAAY,OAAO,QACzB,MAAM,WAAW,OAAO,OACxB,MAAM,YAAY,OAAO,MAEzB,OAAO;CAET,IAAI,CAAC,UAAU,MAAM,aAAa,OAAO,OAAO,OAAO;CAEvD,OADY,MAAM,IAAI,YACf,MAAQ,OAAO,OAAQ,UAAU,MAAM,SAAS,MAAM,OAAO,IAAI,YAAY;AACtF;AAGA,IAAM,YAAoC;CACxC,KAAK;CACL,SAAS;CACT,WAAW;CACX,WAAW;CACX,YAAY;CACZ,QAAQ;CACR,UAAU;AACZ;AACA,IAAM,WAAW,QACf,UAAU,SACT,IAAI,WAAW,IAAI,IAAI,YAAY,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,IAAI,MAAM,CAAC;AACnF,IAAM,eAAe,WAClB;CAAC;CAAQ;CAAO;CAAS;AAAM,CAAC,CAAW,QAAQ,SAAS,OAAO,KAAK;AAE3E,IAAM,UAAkC;CAAE,MAAM;CAAK,KAAK;CAAK,OAAO;CAAK,MAAM;AAAI;AACrF,IAAM,SAAiC;CACrC,SAAS;CACT,WAAW;CACX,WAAW;CACX,YAAY;AACd;;AAGA,SAAgB,aAAa,OAAuB;CAClD,OAAO,MAAM,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,KAAK,GAAG;AAC3D;AAEA,SAAS,WAAW,OAAuB;CACzC,MAAM,SAAS,YAAY,KAAK;CAChC,MAAM,MAAM,QAAQ,OAAO,GAAG;CAC9B,MAAM,QAAQ,OAAO,QAAQ;CAC7B,IAAI,gBAAgB,GAClB,OACE,YAAY,MAAM,CAAC,CAChB,KAAK,SAAS,QAAQ,KAAK,CAAC,CAC5B,KAAK,EAAE,IAAI;CAElB,MAAM,QAAQ;EAAE,MAAM;EAAQ,KAAK;EAAO,OAAO;EAAS,MAAM;CAAM;CACtE,OAAO,CAAC,GAAG,YAAY,MAAM,CAAC,CAAC,KAAK,SAAS,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,GAAG;AAC5E;;;;;;AAOA,SAAgB,gBAAgB,OAAmC;CACjE,IAAI,KAAK,KAAK,MAAM,KAAK,CAAC,GAAG,OAAO,KAAA;CACpC,MAAM,SAAS,YAAY,KAAK;CAChC,MAAM,QAAQ;EAAE,MAAM;EAAW,KAAK;EAAO,OAAO;EAAS,MAAM;CAAO;CAC1E,OAAO,CAAC,GAAG,YAAY,MAAM,CAAC,CAAC,KAAK,SAAS,MAAM,KAAK,GAAG,QAAQ,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;AAC1F;;;;;AAMA,SAAgB,eAAe,OAA+B;CAC5D,OAAO,MAAM,eAAe,MAAM,YAAY;AAChD;;AAGA,SAAgB,WAAW,QAAqC;CAC9D,IAAI,EAAE,kBAAkB,cAAc,OAAO;CAC7C,OAAO,OAAO,qBAAqB,6BAA6B,KAAK,OAAO,OAAO;AACrF;;AAGA,IAAM,mBAAmB;;AAGzB,SAAgB,WACd,MACA,EAAE,WAAW,OAAO,WAA0B,CAAC,GACzC;CACN,IAAI,OAAO,aAAa,aAAa;CAErC,IAAI,SAAiD,CAAA;CACrD,MAAM,aAAa,UAAyB;EAC1C,IAAI,eAAe,KAAK,KAAK,MAAM,kBAAkB;EACrD,IAAI,CAAC,YAAY,WAAW,MAAM,MAAM,GAAG;EAE3C,MAAM,QAAQ,SAAS;EACvB,IAAI,CAAC,UAAU,SAAS,EAAE,MAAM,kBAAkB,QAAQ,MAAM,SAAS,MAAM,MAAM,IAAI;EACzF,MAAM,MAAM,YAAY,IAAI;EAC5B,SAAS,CACP,GAAG,OAAO,QAAQ,SAAS,MAAM,KAAK,KAAK,gBAAgB,GAC3D;GAAE;GAAO,IAAI;EAAI,CAAC,CACnB,CAAC,MAAM,EAAE;EACV,MAAM,UAAU,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc;GAChE,OAAO,MAAM,KAAK,CAAC,CAAC,MAAM,KAAK;GAC/B;EACF,EAAE;EAEF,QAAQ,MAAM,GAAG,MAAM,EAAE,MAAM,SAAS,EAAE,MAAM,MAAM;EACtD,KAAK,MAAM,EAAE,OAAO,aAAa,SAAS;GACxC,MAAM,OAAO,OAAO,MAAM,CAAC,MAAM,MAAM;GACvC,IAAI,KAAK,SAAS,MAAM,QAAQ;GAChC,IAAI,CAAC,MAAM,OAAO,MAAM,UAAU,cAAc,KAAK,MAAM,CAAE,OAAO,IAAI,CAAC,GAAG;GAC5E,MAAM,eAAe;GACrB,SAAS,CAAA;GACT,QAAQ,KAAK;GACb;EACF;CACF;CACA,iBAAiB,UAAU,UAAU,WAAW,SAAS;AAC3D"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { OpenChangeReasons, SetOpen } from './open-change';
|
|
2
|
+
/** 一组悬停浮层共用的状态:正在显示的那个与上次关闭的时间 */
|
|
3
|
+
export interface HoverGroup {
|
|
4
|
+
/** 正在显示的那个(同一时间只显示一个) */
|
|
5
|
+
shown: {
|
|
6
|
+
close: () => void;
|
|
7
|
+
} | undefined;
|
|
8
|
+
/** 上次关闭的时间(毫秒时间戳) */
|
|
9
|
+
lastClosed: number;
|
|
10
|
+
/** 刚关掉一个后多久之内,下一个直接打开(毫秒) */
|
|
11
|
+
readonly skipDelay: number;
|
|
12
|
+
}
|
|
13
|
+
/** 新建一组悬停浮层;skipDelay 默认 300(同 Radix 的 skipDelayDuration) */
|
|
14
|
+
export declare function createHoverGroup(skipDelay?: number): HoverGroup;
|
|
15
|
+
/** useHoverIntent 每次读取的选项 */
|
|
16
|
+
export interface HoverIntentOptions {
|
|
17
|
+
/** 指针停留多久后打开(毫秒) */
|
|
18
|
+
delay: number;
|
|
19
|
+
/** 指针离开多久后关闭(毫秒):留出移到浮层上的时间 */
|
|
20
|
+
closeDelay: number;
|
|
21
|
+
/** 不打开 */
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** useHoverIntent 的返回值 */
|
|
25
|
+
export interface HoverIntent {
|
|
26
|
+
/** 展开到触发器上的事件 */
|
|
27
|
+
readonly trigger: {
|
|
28
|
+
onPointerenter: (event: PointerEvent) => void;
|
|
29
|
+
onPointerleave: (event: PointerEvent) => void;
|
|
30
|
+
onPointerdown: (event: PointerEvent) => void;
|
|
31
|
+
onFocus: (event: FocusEvent) => void;
|
|
32
|
+
onBlur: (event: FocusEvent) => void;
|
|
33
|
+
};
|
|
34
|
+
/** 展开到浮层上的事件:指针移到浮层上不关闭,离开浮层后再关闭 */
|
|
35
|
+
readonly panel: {
|
|
36
|
+
onPointerenter: () => void;
|
|
37
|
+
onPointerleave: (event: PointerEvent) => void;
|
|
38
|
+
};
|
|
39
|
+
/** 立即关闭:Esc、焦点离开 */
|
|
40
|
+
closeNow(reason: keyof OpenChangeReasons, event?: Event): void;
|
|
41
|
+
/** 浮层显示了:关掉同组正显示的另一个 */
|
|
42
|
+
opened(): void;
|
|
43
|
+
/** 浮层隐藏了:记下时间,供下一个跳过延迟 */
|
|
44
|
+
closed(): void;
|
|
45
|
+
}
|
|
46
|
+
/** 悬停、聚焦打开的时机(在 setup 里调用);setOpen 写组件的 open 并带上原因(hover、focus、trigger) */
|
|
47
|
+
export declare function useHoverIntent(group: HoverGroup, read: () => HoverIntentOptions, setOpen: SetOpen): HoverIntent;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { onScopeDispose } from "vue";
|
|
2
|
+
//#region src/utils/dom/hover-intent.ts
|
|
3
|
+
/**
|
|
4
|
+
* 悬停浮层的开关时机(Tooltip、HoverCard 共用):指针停留 delay 后打开,离开 closeDelay 后关闭(可以移到浮层上),
|
|
5
|
+
* 键盘聚焦(:focus-visible)立即打开,按下触发器、失焦时关闭,触屏不打开(没有悬停)。
|
|
6
|
+
* 同一组(createHoverGroup)里同一时间只开一个;刚关掉一个(skipDelay 内)时下一个直接打开,在一排触发器上移动不用每次等。
|
|
7
|
+
*
|
|
8
|
+
* const tooltips = createHoverGroup(); // 模块级:所有 Tooltip 一组
|
|
9
|
+
* const hover = useHoverIntent(tooltips, () => ({ delay, closeDelay: 100, disabled }), setOpen); // setOpen 见 openSetter
|
|
10
|
+
* trigger({ ...hover.trigger }) / <div {...hover.panel}>
|
|
11
|
+
* hover.opened() / hover.closed() // 浮层真的显示、隐藏时告诉组(关掉同组的另一个、记下关闭时间)
|
|
12
|
+
*/
|
|
13
|
+
/** 新建一组悬停浮层;skipDelay 默认 300(同 Radix 的 skipDelayDuration) */
|
|
14
|
+
function createHoverGroup(skipDelay = 300) {
|
|
15
|
+
return {
|
|
16
|
+
shown: void 0,
|
|
17
|
+
lastClosed: 0,
|
|
18
|
+
skipDelay
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** 悬停、聚焦打开的时机(在 setup 里调用);setOpen 写组件的 open 并带上原因(hover、focus、trigger) */
|
|
22
|
+
function useHoverIntent(group, read, setOpen) {
|
|
23
|
+
let timer;
|
|
24
|
+
let visible = false;
|
|
25
|
+
const self = { close: () => setOpen(false, "hover") };
|
|
26
|
+
function schedule(next, wait, reason, event) {
|
|
27
|
+
clearTimeout(timer);
|
|
28
|
+
if (wait <= 0) setOpen(next, reason, event);
|
|
29
|
+
else timer = setTimeout(() => setOpen(next, reason, event), wait);
|
|
30
|
+
}
|
|
31
|
+
const warm = () => group.shown != null || Date.now() - group.lastClosed < group.skipDelay;
|
|
32
|
+
const closeSoon = (event) => schedule(false, read().closeDelay, "hover", event);
|
|
33
|
+
const closeNow = (reason, event) => schedule(false, 0, reason, event);
|
|
34
|
+
onScopeDispose(() => {
|
|
35
|
+
clearTimeout(timer);
|
|
36
|
+
if (group.shown === self) group.shown = void 0;
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
trigger: {
|
|
40
|
+
onPointerenter(event) {
|
|
41
|
+
if (read().disabled || event.pointerType === "touch") return;
|
|
42
|
+
schedule(true, warm() ? 0 : read().delay, "hover", event);
|
|
43
|
+
},
|
|
44
|
+
onPointerleave: closeSoon,
|
|
45
|
+
onPointerdown: (event) => closeNow("trigger", event),
|
|
46
|
+
onFocus(event) {
|
|
47
|
+
if (read().disabled) return;
|
|
48
|
+
if (event.target.matches(":focus-visible")) schedule(true, 0, "focus", event);
|
|
49
|
+
},
|
|
50
|
+
onBlur: (event) => closeNow("focus", event)
|
|
51
|
+
},
|
|
52
|
+
panel: {
|
|
53
|
+
onPointerenter: () => clearTimeout(timer),
|
|
54
|
+
onPointerleave: closeSoon
|
|
55
|
+
},
|
|
56
|
+
closeNow,
|
|
57
|
+
opened() {
|
|
58
|
+
visible = true;
|
|
59
|
+
if (group.shown !== self) group.shown?.close();
|
|
60
|
+
group.shown = self;
|
|
61
|
+
},
|
|
62
|
+
closed() {
|
|
63
|
+
if (visible) group.lastClosed = Date.now();
|
|
64
|
+
visible = false;
|
|
65
|
+
if (group.shown === self) group.shown = void 0;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//#endregion
|
|
70
|
+
export { createHoverGroup, useHoverIntent };
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=hover-intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hover-intent.js","names":[],"sources":["../../../src/utils/dom/hover-intent.ts"],"sourcesContent":["/**\n * 悬停浮层的开关时机(Tooltip、HoverCard 共用):指针停留 delay 后打开,离开 closeDelay 后关闭(可以移到浮层上),\n * 键盘聚焦(:focus-visible)立即打开,按下触发器、失焦时关闭,触屏不打开(没有悬停)。\n * 同一组(createHoverGroup)里同一时间只开一个;刚关掉一个(skipDelay 内)时下一个直接打开,在一排触发器上移动不用每次等。\n *\n * const tooltips = createHoverGroup(); // 模块级:所有 Tooltip 一组\n * const hover = useHoverIntent(tooltips, () => ({ delay, closeDelay: 100, disabled }), setOpen); // setOpen 见 openSetter\n * trigger({ ...hover.trigger }) / <div {...hover.panel}>\n * hover.opened() / hover.closed() // 浮层真的显示、隐藏时告诉组(关掉同组的另一个、记下关闭时间)\n */\nimport { onScopeDispose } from 'vue';\nimport type { OpenChangeReasons, SetOpen } from './open-change';\n\n/** 一组悬停浮层共用的状态:正在显示的那个与上次关闭的时间 */\nexport interface HoverGroup {\n /** 正在显示的那个(同一时间只显示一个) */\n shown: { close: () => void } | undefined;\n /** 上次关闭的时间(毫秒时间戳) */\n lastClosed: number;\n /** 刚关掉一个后多久之内,下一个直接打开(毫秒) */\n readonly skipDelay: number;\n}\n\n/** 新建一组悬停浮层;skipDelay 默认 300(同 Radix 的 skipDelayDuration) */\nexport function createHoverGroup(skipDelay = 300): HoverGroup {\n return { shown: undefined, lastClosed: 0, skipDelay };\n}\n\n/** useHoverIntent 每次读取的选项 */\nexport interface HoverIntentOptions {\n /** 指针停留多久后打开(毫秒) */\n delay: number;\n /** 指针离开多久后关闭(毫秒):留出移到浮层上的时间 */\n closeDelay: number;\n /** 不打开 */\n disabled?: boolean;\n}\n\n/** useHoverIntent 的返回值 */\nexport interface HoverIntent {\n /** 展开到触发器上的事件 */\n readonly trigger: {\n onPointerenter: (event: PointerEvent) => void;\n onPointerleave: (event: PointerEvent) => void;\n onPointerdown: (event: PointerEvent) => void;\n onFocus: (event: FocusEvent) => void;\n onBlur: (event: FocusEvent) => void;\n };\n /** 展开到浮层上的事件:指针移到浮层上不关闭,离开浮层后再关闭 */\n readonly panel: {\n onPointerenter: () => void;\n onPointerleave: (event: PointerEvent) => void;\n };\n /** 立即关闭:Esc、焦点离开 */\n closeNow(reason: keyof OpenChangeReasons, event?: Event): void;\n /** 浮层显示了:关掉同组正显示的另一个 */\n opened(): void;\n /** 浮层隐藏了:记下时间,供下一个跳过延迟 */\n closed(): void;\n}\n\n/** 悬停、聚焦打开的时机(在 setup 里调用);setOpen 写组件的 open 并带上原因(hover、focus、trigger) */\nexport function useHoverIntent(\n group: HoverGroup,\n read: () => HoverIntentOptions,\n setOpen: SetOpen,\n): HoverIntent {\n let timer: ReturnType<typeof setTimeout> | undefined;\n let visible = false;\n // 同组的另一个打开了:算指针移走\n const self = { close: () => setOpen(false, 'hover') };\n\n function schedule(next: boolean, wait: number, reason: keyof OpenChangeReasons, event?: Event) {\n clearTimeout(timer);\n if (wait <= 0) setOpen(next, reason, event);\n else timer = setTimeout(() => setOpen(next, reason, event), wait);\n }\n const warm = () => group.shown != null || Date.now() - group.lastClosed < group.skipDelay;\n const closeSoon = (event: PointerEvent) => schedule(false, read().closeDelay, 'hover', event);\n const closeNow = (reason: keyof OpenChangeReasons, event?: Event) =>\n schedule(false, 0, reason, event);\n\n onScopeDispose(() => {\n clearTimeout(timer);\n if (group.shown === self) group.shown = undefined;\n });\n\n return {\n trigger: {\n onPointerenter(event) {\n if (read().disabled || event.pointerType === 'touch') return;\n schedule(true, warm() ? 0 : read().delay, 'hover', event);\n },\n onPointerleave: closeSoon,\n onPointerdown: (event) => closeNow('trigger', event),\n onFocus(event) {\n if (read().disabled) return;\n // 只在键盘聚焦时打开;点击聚焦(按钮被按下)时不打开\n if ((event.target as Element).matches(':focus-visible')) schedule(true, 0, 'focus', event);\n },\n onBlur: (event) => closeNow('focus', event),\n },\n panel: {\n onPointerenter: () => clearTimeout(timer),\n onPointerleave: closeSoon,\n },\n closeNow,\n opened() {\n visible = true;\n if (group.shown !== self) group.shown?.close();\n group.shown = self;\n },\n closed() {\n if (visible) group.lastClosed = Date.now();\n visible = false;\n if (group.shown === self) group.shown = undefined;\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAwBA,SAAgB,iBAAiB,YAAY,KAAiB;CAC5D,OAAO;EAAE,OAAO,KAAA;EAAW,YAAY;EAAG;CAAU;AACtD;;AAoCA,SAAgB,eACd,OACA,MACA,SACa;CACb,IAAI;CACJ,IAAI,UAAU;CAEd,MAAM,OAAO,EAAE,aAAa,QAAQ,OAAO,OAAO,EAAE;CAEpD,SAAS,SAAS,MAAe,MAAc,QAAiC,OAAe;EAC7F,aAAa,KAAK;EAClB,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,KAAK;OACrC,QAAQ,iBAAiB,QAAQ,MAAM,QAAQ,KAAK,GAAG,IAAI;CAClE;CACA,MAAM,aAAa,MAAM,SAAS,QAAQ,KAAK,IAAI,IAAI,MAAM,aAAa,MAAM;CAChF,MAAM,aAAa,UAAwB,SAAS,OAAO,KAAK,CAAC,CAAC,YAAY,SAAS,KAAK;CAC5F,MAAM,YAAY,QAAiC,UACjD,SAAS,OAAO,GAAG,QAAQ,KAAK;CAElC,qBAAqB;EACnB,aAAa,KAAK;EAClB,IAAI,MAAM,UAAU,MAAM,MAAM,QAAQ,KAAA;CAC1C,CAAC;CAED,OAAO;EACL,SAAS;GACP,eAAe,OAAO;IACpB,IAAI,KAAK,CAAC,CAAC,YAAY,MAAM,gBAAgB,SAAS;IACtD,SAAS,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,OAAO,SAAS,KAAK;GAC1D;GACA,gBAAgB;GAChB,gBAAgB,UAAU,SAAS,WAAW,KAAK;GACnD,QAAQ,OAAO;IACb,IAAI,KAAK,CAAC,CAAC,UAAU;IAErB,IAAK,MAAM,OAAmB,QAAQ,gBAAgB,GAAG,SAAS,MAAM,GAAG,SAAS,KAAK;GAC3F;GACA,SAAS,UAAU,SAAS,SAAS,KAAK;EAC5C;EACA,OAAO;GACL,sBAAsB,aAAa,KAAK;GACxC,gBAAgB;EAClB;EACA;EACA,SAAS;GACP,UAAU;GACV,IAAI,MAAM,UAAU,MAAM,MAAM,OAAO,MAAM;GAC7C,MAAM,QAAQ;EAChB;EACA,SAAS;GACP,IAAI,SAAS,MAAM,aAAa,KAAK,IAAI;GACzC,UAAU;GACV,IAAI,MAAM,UAAU,MAAM,MAAM,QAAQ,KAAA;EAC1C;CACF;AACF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type PartProps } from '../props';
|
|
2
|
+
import { type FloatingPlacement } from './floating';
|
|
3
|
+
import { type HoverGroup, type HoverIntent } from './hover-intent';
|
|
4
|
+
import type { SetOpen } from './open-change';
|
|
5
|
+
/** useHoverLayer 每次读取的选项 */
|
|
6
|
+
export interface HoverLayerOptions {
|
|
7
|
+
/** 是否打开 */
|
|
8
|
+
open: boolean;
|
|
9
|
+
/** 不打开(触发器照常渲染) */
|
|
10
|
+
disabled: boolean;
|
|
11
|
+
/** 弹出位置 */
|
|
12
|
+
placement: FloatingPlacement;
|
|
13
|
+
/** 与触发器的距离 */
|
|
14
|
+
offset?: number;
|
|
15
|
+
/** 指针停留多久后打开(毫秒) */
|
|
16
|
+
delay: number;
|
|
17
|
+
/** 指针离开多久后关闭(毫秒):留出移到浮层上的时间 */
|
|
18
|
+
closeDelay: number;
|
|
19
|
+
}
|
|
20
|
+
/** useHoverLayer 的返回值 */
|
|
21
|
+
export interface HoverLayer {
|
|
22
|
+
/** 面板的 id:Tooltip 给触发器的 aria-describedby */
|
|
23
|
+
readonly id: string;
|
|
24
|
+
/** 开关时机:trigger 展开到触发器上,panel 展开到面板上 */
|
|
25
|
+
readonly hover: HoverIntent;
|
|
26
|
+
/** 触发器元素的 ref(定位的参照) */
|
|
27
|
+
anchorRef: (element: unknown) => void;
|
|
28
|
+
/** 面板元素的 ref */
|
|
29
|
+
panelRef: (element: unknown) => void;
|
|
30
|
+
/** 箭头节点的属性:样式、ref、对读屏隐藏,使用方的 propsArrow 合进去 */
|
|
31
|
+
arrowProps: (propsArrow?: PartProps<'span'>) => Record<string, unknown>;
|
|
32
|
+
/** 元素在触发器或面板里:焦点在两者之间移动时不关 */
|
|
33
|
+
contains: (target: EventTarget | null) => boolean;
|
|
34
|
+
}
|
|
35
|
+
/** 悬停浮层:停留后打开、锚定到触发器、Esc 关闭 */
|
|
36
|
+
export declare function useHoverLayer(group: HoverGroup, read: () => HoverLayerOptions, setOpen: SetOpen): HoverLayer;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { mergeAttrs } from "../props.js";
|
|
2
|
+
import { toElement } from "./element.js";
|
|
3
|
+
import { createAnchoredLayer, floatingStyles } from "./floating.js";
|
|
4
|
+
import { useHoverIntent } from "./hover-intent.js";
|
|
5
|
+
import { onScopeDispose, shallowRef, useId, watchEffect } from "vue";
|
|
6
|
+
//#region src/utils/dom/hover-layer.ts
|
|
7
|
+
/**
|
|
8
|
+
* 悬停浮层的壳:Tooltip 与 HoverCard 共用。触发器、面板、箭头三个元素,停留后打开(useHoverIntent),
|
|
9
|
+
* 打开时锚定到触发器(createAnchoredLayer),Esc 关闭,卸载时收起。在 setup 里调用。
|
|
10
|
+
*
|
|
11
|
+
* const layer = useHoverLayer(tooltips, () => ({ open, disabled, placement, offset, delay, closeDelay }), setOpen);
|
|
12
|
+
* trigger({ ref: layer.anchorRef, ...layer.hover.trigger })
|
|
13
|
+
* <div {...mergeAttrs({ sx }, rest, { ref: layer.panelRef, id: layer.id, popover: 'manual', ...layer.hover.panel })}>
|
|
14
|
+
* {children}
|
|
15
|
+
* {arrow && <span {...layer.arrowProps(propsArrow)} />}
|
|
16
|
+
* </div>
|
|
17
|
+
*
|
|
18
|
+
* 面板用 popover="manual":不是 auto,不会关掉正打开的菜单或弹出框;manual 没有原生的 Esc,所以这里处理。
|
|
19
|
+
*/
|
|
20
|
+
/** 悬停浮层:停留后打开、锚定到触发器、Esc 关闭 */
|
|
21
|
+
function useHoverLayer(group, read, setOpen) {
|
|
22
|
+
const id = useId();
|
|
23
|
+
const anchor = shallowRef(null);
|
|
24
|
+
const panel = shallowRef(null);
|
|
25
|
+
const arrow = shallowRef(null);
|
|
26
|
+
const layer = createAnchoredLayer();
|
|
27
|
+
const hover = useHoverIntent(group, () => {
|
|
28
|
+
const { delay, closeDelay, disabled } = read();
|
|
29
|
+
return {
|
|
30
|
+
delay,
|
|
31
|
+
closeDelay,
|
|
32
|
+
disabled
|
|
33
|
+
};
|
|
34
|
+
}, setOpen);
|
|
35
|
+
function onKeydown(event) {
|
|
36
|
+
if (event.key !== "Escape" || !read().open) return;
|
|
37
|
+
event.preventDefault();
|
|
38
|
+
event.stopPropagation();
|
|
39
|
+
hover.closeNow("escape", event);
|
|
40
|
+
}
|
|
41
|
+
watchEffect((onCleanup) => {
|
|
42
|
+
const { open, disabled, placement, offset } = read();
|
|
43
|
+
if (!open || disabled) {
|
|
44
|
+
layer.hide({ restoreFocus: false });
|
|
45
|
+
hover.closed();
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (!anchor.value || !panel.value) return;
|
|
49
|
+
hover.opened();
|
|
50
|
+
layer.show(anchor.value, panel.value, {
|
|
51
|
+
placement,
|
|
52
|
+
offset,
|
|
53
|
+
arrow: arrow.value
|
|
54
|
+
});
|
|
55
|
+
document.addEventListener("keydown", onKeydown, true);
|
|
56
|
+
onCleanup(() => document.removeEventListener("keydown", onKeydown, true));
|
|
57
|
+
}, { flush: "post" });
|
|
58
|
+
onScopeDispose(() => layer.hide({ restoreFocus: false }));
|
|
59
|
+
return {
|
|
60
|
+
id,
|
|
61
|
+
hover,
|
|
62
|
+
anchorRef: (element) => anchor.value = toElement(element),
|
|
63
|
+
panelRef: (element) => panel.value = toElement(element),
|
|
64
|
+
arrowProps: (propsArrow) => mergeAttrs({ sx: floatingStyles.arrow }, propsArrow, {
|
|
65
|
+
ref: (element) => arrow.value = toElement(element),
|
|
66
|
+
"aria-hidden": true
|
|
67
|
+
}),
|
|
68
|
+
contains: (target) => target instanceof Node && !!(anchor.value?.contains(target) || panel.value?.contains(target))
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//#endregion
|
|
72
|
+
export { useHoverLayer };
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=hover-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hover-layer.js","names":[],"sources":["../../../src/utils/dom/hover-layer.ts"],"sourcesContent":["/**\n * 悬停浮层的壳:Tooltip 与 HoverCard 共用。触发器、面板、箭头三个元素,停留后打开(useHoverIntent),\n * 打开时锚定到触发器(createAnchoredLayer),Esc 关闭,卸载时收起。在 setup 里调用。\n *\n * const layer = useHoverLayer(tooltips, () => ({ open, disabled, placement, offset, delay, closeDelay }), setOpen);\n * trigger({ ref: layer.anchorRef, ...layer.hover.trigger })\n * <div {...mergeAttrs({ sx }, rest, { ref: layer.panelRef, id: layer.id, popover: 'manual', ...layer.hover.panel })}>\n * {children}\n * {arrow && <span {...layer.arrowProps(propsArrow)} />}\n * </div>\n *\n * 面板用 popover=\"manual\":不是 auto,不会关掉正打开的菜单或弹出框;manual 没有原生的 Esc,所以这里处理。\n */\nimport { onScopeDispose, shallowRef, useId, watchEffect } from 'vue';\nimport { mergeAttrs, type PartProps } from '../props';\nimport { createAnchoredLayer, floatingStyles, type FloatingPlacement } from './floating';\nimport { useHoverIntent, type HoverGroup, type HoverIntent } from './hover-intent';\nimport type { SetOpen } from './open-change';\nimport { toElement } from './element';\n\n/** useHoverLayer 每次读取的选项 */\nexport interface HoverLayerOptions {\n /** 是否打开 */\n open: boolean;\n /** 不打开(触发器照常渲染) */\n disabled: boolean;\n /** 弹出位置 */\n placement: FloatingPlacement;\n /** 与触发器的距离 */\n offset?: number;\n /** 指针停留多久后打开(毫秒) */\n delay: number;\n /** 指针离开多久后关闭(毫秒):留出移到浮层上的时间 */\n closeDelay: number;\n}\n\n/** useHoverLayer 的返回值 */\nexport interface HoverLayer {\n /** 面板的 id:Tooltip 给触发器的 aria-describedby */\n readonly id: string;\n /** 开关时机:trigger 展开到触发器上,panel 展开到面板上 */\n readonly hover: HoverIntent;\n /** 触发器元素的 ref(定位的参照) */\n anchorRef: (element: unknown) => void;\n /** 面板元素的 ref */\n panelRef: (element: unknown) => void;\n /** 箭头节点的属性:样式、ref、对读屏隐藏,使用方的 propsArrow 合进去 */\n arrowProps: (propsArrow?: PartProps<'span'>) => Record<string, unknown>;\n /** 元素在触发器或面板里:焦点在两者之间移动时不关 */\n contains: (target: EventTarget | null) => boolean;\n}\n\n/** 悬停浮层:停留后打开、锚定到触发器、Esc 关闭 */\nexport function useHoverLayer(\n group: HoverGroup,\n read: () => HoverLayerOptions,\n setOpen: SetOpen,\n): HoverLayer {\n const id = useId();\n const anchor = shallowRef<HTMLElement | null>(null);\n const panel = shallowRef<HTMLElement | null>(null);\n const arrow = shallowRef<HTMLElement | null>(null);\n const layer = createAnchoredLayer();\n const hover = useHoverIntent(\n group,\n () => {\n const { delay, closeDelay, disabled } = read();\n return { delay, closeDelay, disabled };\n },\n setOpen,\n );\n\n // 浮层在对话框里时只关浮层,不让同一次 Esc 关掉对话框\n function onKeydown(event: KeyboardEvent) {\n if (event.key !== 'Escape' || !read().open) return;\n event.preventDefault();\n event.stopPropagation();\n hover.closeNow('escape', event);\n }\n\n watchEffect(\n (onCleanup) => {\n const { open, disabled, placement, offset } = read();\n if (!open || disabled) {\n layer.hide({ restoreFocus: false });\n hover.closed();\n return;\n }\n if (!anchor.value || !panel.value) return;\n hover.opened();\n void layer.show(anchor.value, panel.value, { placement, offset, arrow: arrow.value });\n document.addEventListener('keydown', onKeydown, true);\n onCleanup(() => document.removeEventListener('keydown', onKeydown, true));\n },\n { flush: 'post' },\n );\n onScopeDispose(() => layer.hide({ restoreFocus: false }));\n\n return {\n id,\n hover,\n anchorRef: (element) => (anchor.value = toElement(element)),\n panelRef: (element) => (panel.value = toElement(element)),\n arrowProps: (propsArrow) =>\n mergeAttrs<'span'>({ sx: floatingStyles.arrow }, propsArrow, {\n ref: (element: unknown) => (arrow.value = toElement(element)),\n 'aria-hidden': true,\n }),\n contains: (target) =>\n target instanceof Node && !!(anchor.value?.contains(target) || panel.value?.contains(target)),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAqDA,SAAgB,cACd,OACA,MACA,SACY;CACZ,MAAM,KAAK,MAAM;CACjB,MAAM,SAAS,WAA+B,IAAI;CAClD,MAAM,QAAQ,WAA+B,IAAI;CACjD,MAAM,QAAQ,WAA+B,IAAI;CACjD,MAAM,QAAQ,oBAAoB;CAClC,MAAM,QAAQ,eACZ,aACM;EACJ,MAAM,EAAE,OAAO,YAAY,aAAa,KAAK;EAC7C,OAAO;GAAE;GAAO;GAAY;EAAS;CACvC,GACA,OACF;CAGA,SAAS,UAAU,OAAsB;EACvC,IAAI,MAAM,QAAQ,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM;EAC5C,MAAM,eAAe;EACrB,MAAM,gBAAgB;EACtB,MAAM,SAAS,UAAU,KAAK;CAChC;CAEA,aACG,cAAc;EACb,MAAM,EAAE,MAAM,UAAU,WAAW,WAAW,KAAK;EACnD,IAAI,CAAC,QAAQ,UAAU;GACrB,MAAM,KAAK,EAAE,cAAc,MAAM,CAAC;GAClC,MAAM,OAAO;GACb;EACF;EACA,IAAI,CAAC,OAAO,SAAS,CAAC,MAAM,OAAO;EACnC,MAAM,OAAO;EACb,MAAW,KAAK,OAAO,OAAO,MAAM,OAAO;GAAE;GAAW;GAAQ,OAAO,MAAM;EAAM,CAAC;EACpF,SAAS,iBAAiB,WAAW,WAAW,IAAI;EACpD,gBAAgB,SAAS,oBAAoB,WAAW,WAAW,IAAI,CAAC;CAC1E,GACA,EAAE,OAAO,OAAO,CAClB;CACA,qBAAqB,MAAM,KAAK,EAAE,cAAc,MAAM,CAAC,CAAC;CAExD,OAAO;EACL;EACA;EACA,YAAY,YAAa,OAAO,QAAQ,UAAU,OAAO;EACzD,WAAW,YAAa,MAAM,QAAQ,UAAU,OAAO;EACvD,aAAa,eACX,WAAmB,EAAE,IAAI,eAAe,MAAM,GAAG,YAAY;GAC3D,MAAM,YAAsB,MAAM,QAAQ,UAAU,OAAO;GAC3D,eAAe;EACjB,CAAC;EACH,WAAW,WACT,kBAAkB,QAAQ,CAAC,EAAE,OAAO,OAAO,SAAS,MAAM,KAAK,MAAM,OAAO,SAAS,MAAM;CAC/F;AACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type Target = Element | null | undefined;
|
|
2
|
+
/** 观察选项,同 IntersectionObserver */
|
|
3
|
+
export interface IntersectionOptions {
|
|
4
|
+
/** 相交的参照:滚动容器;不写时是视口 */
|
|
5
|
+
root?: Element | Document | null;
|
|
6
|
+
/** 参照边界向外扩展,写法同 CSS 的 margin:`'0px 0px 200px'` 提前 200px 算作进入 */
|
|
7
|
+
rootMargin?: string;
|
|
8
|
+
/** 在哪些可见比例上回调:0 是进出,1 是完整可见 */
|
|
9
|
+
threshold?: number | number[];
|
|
10
|
+
}
|
|
11
|
+
/** 观察一个或几个元素与参照的相交;targets 与 options 在渲染后读取,读到 null 的目标跳过 */
|
|
12
|
+
export declare function useIntersectionObserver(targets: () => Target | readonly Target[], onChange: (entries: IntersectionObserverEntry[]) => void, options?: () => IntersectionOptions): void;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { watch } from "vue";
|
|
2
|
+
//#region src/utils/dom/intersection.ts
|
|
3
|
+
/**
|
|
4
|
+
* 元素与视口(或滚动容器)的相交变化时回调(IntersectionObserver):目标或选项变了重建观察器,卸载时断开。
|
|
5
|
+
* 在 setup 里调用。
|
|
6
|
+
*
|
|
7
|
+
* // 吸底的栏没有完整可见,说明盖着下面的内容
|
|
8
|
+
* useIntersectionObserver(() => root, ([entry]) => (stuck = entry!.intersectionRatio < 1), () => ({
|
|
9
|
+
* threshold: [0, 1],
|
|
10
|
+
* }));
|
|
11
|
+
*
|
|
12
|
+
* 没有 IntersectionObserver 的环境(服务端、部分测试环境)什么也不做,调用方自己决定这时当作可见还是不可见。
|
|
13
|
+
*/
|
|
14
|
+
/** 观察一个或几个元素与参照的相交;targets 与 options 在渲染后读取,读到 null 的目标跳过 */
|
|
15
|
+
function useIntersectionObserver(targets, onChange, options = () => ({})) {
|
|
16
|
+
watch(() => ({
|
|
17
|
+
elements: [targets()].flat().filter((element) => element != null),
|
|
18
|
+
...options()
|
|
19
|
+
}), ({ elements, root, rootMargin, threshold }, _, onCleanup) => {
|
|
20
|
+
if (!elements.length || typeof IntersectionObserver === "undefined") return;
|
|
21
|
+
const observer = new IntersectionObserver((entries) => onChange(entries), {
|
|
22
|
+
root,
|
|
23
|
+
rootMargin,
|
|
24
|
+
threshold
|
|
25
|
+
});
|
|
26
|
+
for (const element of elements) observer.observe(element);
|
|
27
|
+
onCleanup(() => observer.disconnect());
|
|
28
|
+
}, {
|
|
29
|
+
immediate: true,
|
|
30
|
+
flush: "post"
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { useIntersectionObserver };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=intersection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intersection.js","names":[],"sources":["../../../src/utils/dom/intersection.ts"],"sourcesContent":["/**\n * 元素与视口(或滚动容器)的相交变化时回调(IntersectionObserver):目标或选项变了重建观察器,卸载时断开。\n * 在 setup 里调用。\n *\n * // 吸底的栏没有完整可见,说明盖着下面的内容\n * useIntersectionObserver(() => root, ([entry]) => (stuck = entry!.intersectionRatio < 1), () => ({\n * threshold: [0, 1],\n * }));\n *\n * 没有 IntersectionObserver 的环境(服务端、部分测试环境)什么也不做,调用方自己决定这时当作可见还是不可见。\n */\nimport { watch } from 'vue';\n\ntype Target = Element | null | undefined;\n\n/** 观察选项,同 IntersectionObserver */\nexport interface IntersectionOptions {\n /** 相交的参照:滚动容器;不写时是视口 */\n root?: Element | Document | null;\n /** 参照边界向外扩展,写法同 CSS 的 margin:`'0px 0px 200px'` 提前 200px 算作进入 */\n rootMargin?: string;\n /** 在哪些可见比例上回调:0 是进出,1 是完整可见 */\n threshold?: number | number[];\n}\n\n/** 观察一个或几个元素与参照的相交;targets 与 options 在渲染后读取,读到 null 的目标跳过 */\nexport function useIntersectionObserver(\n targets: () => Target | readonly Target[],\n onChange: (entries: IntersectionObserverEntry[]) => void,\n options: () => IntersectionOptions = () => ({}),\n): void {\n watch(\n () => ({\n elements: [targets()].flat().filter((element): element is Element => element != null),\n ...options(),\n }),\n ({ elements, root, rootMargin, threshold }, _, onCleanup) => {\n if (!elements.length || typeof IntersectionObserver === 'undefined') return;\n const observer = new IntersectionObserver((entries) => onChange(entries), {\n root,\n rootMargin,\n threshold,\n });\n for (const element of elements) observer.observe(element);\n onCleanup(() => observer.disconnect());\n },\n { immediate: true, flush: 'post' },\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AA0BA,SAAgB,wBACd,SACA,UACA,iBAA4C,CAAC,IACvC;CACN,aACS;EACL,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,YAAgC,WAAW,IAAI;EACpF,GAAG,QAAQ;CACb,KACC,EAAE,UAAU,MAAM,YAAY,aAAa,GAAG,cAAc;EAC3D,IAAI,CAAC,SAAS,UAAU,OAAO,yBAAyB,aAAa;EACrE,MAAM,WAAW,IAAI,sBAAsB,YAAY,SAAS,OAAO,GAAG;GACxE;GACA;GACA;EACF,CAAC;EACD,KAAK,MAAM,WAAW,UAAU,SAAS,QAAQ,OAAO;EACxD,gBAAgB,SAAS,WAAW,CAAC;CACvC,GACA;EAAE,WAAW;EAAM,OAAO;CAAO,CACnC;AACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 先读后写:当前任务里登记的读取在一个微任务里依次执行,全部读完再依次执行它们返回的写入。
|
|
3
|
+
* 各组件挂载后、尺寸变化时各自“读布局 → 写样式”,一个写完下一个读就要重新布局;
|
|
4
|
+
* 合并后一整轮只布局一次(同 fastdom 的 measure / mutate)。
|
|
5
|
+
*
|
|
6
|
+
* batchLayout(() => {
|
|
7
|
+
* const width = item.offsetWidth; // 读
|
|
8
|
+
* return () => (bar.style.width = `${width}px`); // 写
|
|
9
|
+
* });
|
|
10
|
+
*/
|
|
11
|
+
type Read = () => (() => void) | void;
|
|
12
|
+
/** 登记一次读取(返回写入):这一轮的读取都执行完,再执行写入 */
|
|
13
|
+
export declare function batchLayout(read: Read): void;
|
|
14
|
+
export {};
|