@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,520 @@
|
|
|
1
|
+
import { toNumber } from "../utils/data/numeric.js";
|
|
2
|
+
import { colors } from "../config/theme/tokens.js";
|
|
3
|
+
import { useLang } from "../config/context.js";
|
|
4
|
+
import { Button } from "../base/Button.js";
|
|
5
|
+
import { useFormat } from "../config/lang/format.js";
|
|
6
|
+
import { Skeleton } from "../feedback/Skeleton.js";
|
|
7
|
+
import { Slider } from "../input/Slider.js";
|
|
8
|
+
import { alignedTicks } from "./axis-ticks.js";
|
|
9
|
+
import { ChartFrame, chartDuration, chartTooltip, createChartInstances, uniqueHighlightFilter, useChartValueText, usePlotSeen } from "./frame.js";
|
|
10
|
+
import { resolveColor, resolveSeries, seriesNumber, seriesValue } from "./series.js";
|
|
11
|
+
import { computed, createVNode, mergeProps, render, shallowRef, useId } from "vue";
|
|
12
|
+
import { _component, bindable, effect, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
|
|
13
|
+
import * as css from "@zerodep-dev/vue-tsx-pro-tsx/styles";
|
|
14
|
+
import { Axis, AxisType, Crosshair, Plotband, PlotbandLabelPosition, Plotline, PlotlineLabelPosition, PlotlineLineStylePresets, Position, Scatter, Tooltip, XYContainer } from "@unovis/ts";
|
|
15
|
+
//#region src/charts/XYChart.tsx
|
|
16
|
+
/**
|
|
17
|
+
* 直角坐标图表(柱状图、折线图、面积图)的公共部分:坐标轴、十字线与提示框、数值范围;外层结构(图例、单位、
|
|
18
|
+
* 空与加载状态、给读屏的数据表)交给 ChartFrame。
|
|
19
|
+
* 绘图交给 Unovis 的 XYContainer:组件实例只建一次,数据与配置变化时 update,卸载时 destroy;
|
|
20
|
+
* 绘图区换了元素(加载、空状态之后重新出现)时容器连同全部实例一起重建。
|
|
21
|
+
* 各种图只决定画什么(kind.components),坐标轴、十字线、提示框、配色都在这里统一。
|
|
22
|
+
* 目标线(targets)用 Unovis 的 Plotline。点了下钻(onItemClick):有图形可点的图(柱子)按图形的点击事件
|
|
23
|
+
* (kind.itemSelector),折线、面积图按十字线所在的那一行,散点图按悬停的点。
|
|
24
|
+
*
|
|
25
|
+
* 标注(annotations):类目上的事件画成竖线(Plotline),圈出某个系列的值画成空心圈带文字(Scatter);
|
|
26
|
+
* 区间(bands)画成浅色的带(Plotband)。百分比堆叠(kind.percent)按每个类目里各系列的占比画。
|
|
27
|
+
* 第二数值轴(kind.secondary,组合图):刻度与主轴对齐(alignedTicks),第二轴的系列换算到主轴的坐标里画,
|
|
28
|
+
* 右侧的刻度文字是不裁剪的 Plotline 标签。
|
|
29
|
+
*/
|
|
30
|
+
/** 目标线(参考线):数值轴上的一条虚线 */
|
|
31
|
+
/** 标注:类目上发生的事(竖线),或圈出某个系列在这个类目上的值 */
|
|
32
|
+
/** 区间:类目轴上的一段(试运行期、促销期),或数值轴上的一段(目标区间) */
|
|
33
|
+
/** 第二数值轴(右侧):哪些系列画在它上面,它的格式与单位 */
|
|
34
|
+
/** 加载中的骨架 */
|
|
35
|
+
/** 直角坐标图表共有的属性;未声明的属性落到外层 div(role="figure")上,aria-label 是图表的名称 */
|
|
36
|
+
/** 交给各种图的绘制上下文 */
|
|
37
|
+
/** 一种图:画哪些组件,以及与坐标轴、十字线有关的差别 */
|
|
38
|
+
/** 第二数值轴的刻度文字占的宽度(px) */
|
|
39
|
+
var SECONDARY_AXIS_WIDTH = 48;
|
|
40
|
+
/** 骨架柱的高度(百分比):高低错落,看起来像一组数据 */
|
|
41
|
+
var SKELETON_BARS = [
|
|
42
|
+
55,
|
|
43
|
+
80,
|
|
44
|
+
40,
|
|
45
|
+
70,
|
|
46
|
+
90,
|
|
47
|
+
50,
|
|
48
|
+
65
|
|
49
|
+
];
|
|
50
|
+
/** XYChart 的样式:hideCrosshairLine 与加载中的骨架(外层结构的样式见 chartStyles) */
|
|
51
|
+
var xyChartStyles = css.create({
|
|
52
|
+
hideCrosshairLine: { "--vis-crosshair-line-stroke-opacity": "0" },
|
|
53
|
+
skeleton: {
|
|
54
|
+
display: "block",
|
|
55
|
+
width: "100%",
|
|
56
|
+
height: "100%"
|
|
57
|
+
},
|
|
58
|
+
zoom: {
|
|
59
|
+
display: "flex",
|
|
60
|
+
alignItems: "center",
|
|
61
|
+
gap: "_md",
|
|
62
|
+
paddingInline: "_sm"
|
|
63
|
+
},
|
|
64
|
+
zoomSlider: {
|
|
65
|
+
flexGrow: 1,
|
|
66
|
+
minWidth: 0
|
|
67
|
+
},
|
|
68
|
+
skeletonBars: {
|
|
69
|
+
display: "flex",
|
|
70
|
+
alignItems: "flex-end",
|
|
71
|
+
justifyContent: "space-around",
|
|
72
|
+
gap: "_md",
|
|
73
|
+
height: "100%"
|
|
74
|
+
},
|
|
75
|
+
skeletonBarsHorizontal: {
|
|
76
|
+
flexDirection: "column",
|
|
77
|
+
alignItems: "flex-start"
|
|
78
|
+
},
|
|
79
|
+
skeletonBar: {
|
|
80
|
+
display: "block",
|
|
81
|
+
flexGrow: 1,
|
|
82
|
+
flexBasis: 0,
|
|
83
|
+
borderRadius: "_sm"
|
|
84
|
+
},
|
|
85
|
+
skeletonBarSize: (percent) => ({ height: percent }),
|
|
86
|
+
skeletonBarSizeHorizontal: (percent) => ({ width: percent })
|
|
87
|
+
});
|
|
88
|
+
/** 加载中绘图区的骨架:柱状图是一排高低不一的柱(横向时是条),其余是一整块 */
|
|
89
|
+
function chartSkeleton({ skeleton = "block", horizontal = false }) {
|
|
90
|
+
if (skeleton === "block") return createVNode(Skeleton, { "sx": xyChartStyles.skeleton }, null);
|
|
91
|
+
return createVNode("div", mergeProps({ "aria-hidden": "true" }, css.attrs(xyChartStyles.skeletonBars, horizontal && xyChartStyles.skeletonBarsHorizontal)), [SKELETON_BARS.map((percent, position) => createVNode(Skeleton, {
|
|
92
|
+
"key": position,
|
|
93
|
+
"sx": [xyChartStyles.skeletonBar, horizontal ? xyChartStyles.skeletonBarSizeHorizontal(`${percent}%`) : xyChartStyles.skeletonBarSize(`${percent}%`)]
|
|
94
|
+
}, null))]);
|
|
95
|
+
}
|
|
96
|
+
/** 直角坐标图表的公共实现(组件库内部用,见 BarChart、LineChart、AreaChart) */
|
|
97
|
+
var XYChart = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
98
|
+
const _cache = [];
|
|
99
|
+
const data = readonlyProp(_props, "data");
|
|
100
|
+
const index = readonlyProp(_props, "index");
|
|
101
|
+
const series = readonlyProp(_props, "series");
|
|
102
|
+
const indexFormat = readonlyProp(_props, "indexFormat");
|
|
103
|
+
const valueFormat = readonlyProp(_props, "valueFormat");
|
|
104
|
+
const unit = readonlyProp(_props, "unit");
|
|
105
|
+
const height = readonlyProp(_props, "height", 240);
|
|
106
|
+
const legend = readonlyProp(_props, "legend");
|
|
107
|
+
const grid = readonlyProp(_props, "grid", true);
|
|
108
|
+
const valueDomain = readonlyProp(_props, "valueDomain");
|
|
109
|
+
const tooltip = readonlyProp(_props, "tooltip", true);
|
|
110
|
+
const loading = readonlyProp(_props, "loading", false);
|
|
111
|
+
const hiddenSeries = bindable(_props, "_hiddenSeries", () => [], _ctx.emit);
|
|
112
|
+
const empty = readonlyProp(_props, "empty");
|
|
113
|
+
const targets = readonlyProp(_props, "targets");
|
|
114
|
+
const annotations = readonlyProp(_props, "annotations");
|
|
115
|
+
const bands = readonlyProp(_props, "bands");
|
|
116
|
+
const onItemClick = readonlyProp(_props, "onItemClick");
|
|
117
|
+
const zoom = readonlyProp(_props, "zoom", false);
|
|
118
|
+
const zoomRange = bindable(_props, "_zoomRange", () => null, _ctx.emit);
|
|
119
|
+
const kind = readonlyProp(_props, "kind");
|
|
120
|
+
const sx = readonlyProp(_props, "sx");
|
|
121
|
+
const rest = restProps(_props, _ctx, true);
|
|
122
|
+
const lang = useLang();
|
|
123
|
+
const format = useFormat();
|
|
124
|
+
const id = useId();
|
|
125
|
+
const resolved = computed(() => resolveSeries(series.value));
|
|
126
|
+
const visible = computed(() => resolved.value.filter((item) => !hiddenSeries.value.includes(item.key)));
|
|
127
|
+
const categoryText = (row) => row === void 0 ? "" : indexFormat.value ? indexFormat.value(row[index.value], row) : String(row[index.value] ?? "");
|
|
128
|
+
const valueText = useChartValueText(() => ({
|
|
129
|
+
valueFormat: valueFormat.value,
|
|
130
|
+
unit: unit.value
|
|
131
|
+
}));
|
|
132
|
+
const secondaryText = useChartValueText(() => ({
|
|
133
|
+
valueFormat: kind.value.secondary?.format,
|
|
134
|
+
unit: kind.value.secondary?.unit
|
|
135
|
+
}));
|
|
136
|
+
const onSecondary = (key) => kind.value.secondary?.keys.includes(key) ?? false;
|
|
137
|
+
/** 一个系列的值的文字:第二数值轴上的按它的格式与单位 */
|
|
138
|
+
const seriesText = (key, value) => onSecondary(key) ? secondaryText(value) : valueText(value);
|
|
139
|
+
/** 一行里显示中的系列的总和(百分比堆叠的分母;负数不计) */
|
|
140
|
+
const rowTotal = (row) => visible.value.reduce((sum, item) => sum + Math.max(seriesNumber(row, item.key) ?? 0, 0), 0);
|
|
141
|
+
const percentText = (value) => format.number(value, {
|
|
142
|
+
style: "percent",
|
|
143
|
+
maximumFractionDigits: 1
|
|
144
|
+
});
|
|
145
|
+
const xText = (row) => {
|
|
146
|
+
const x = kind.value.continuousX?.value(row);
|
|
147
|
+
return x === void 0 ? lang.emptyValue : kind.value.continuousX.format(x);
|
|
148
|
+
};
|
|
149
|
+
function toggle(key) {
|
|
150
|
+
hiddenSeries.value = hiddenSeries.value.includes(key) ? hiddenSeries.value.filter((item) => item !== key) : [...hiddenSeries.value, key];
|
|
151
|
+
}
|
|
152
|
+
/** 缩放的滑块:两端是类目;缩小过时旁边有“显示全部” */
|
|
153
|
+
const zoomBar = () => {
|
|
154
|
+
const last = data.value.length - 1;
|
|
155
|
+
return createVNode("div", css.attrs(xyChartStyles.zoom), [createVNode(Slider, {
|
|
156
|
+
"_value": zoomRange.value ?? [0, last],
|
|
157
|
+
"onUpdate:_value": (next) => zoomRange.value = next[0] === 0 && next[1] === last ? null : next,
|
|
158
|
+
"min": 0,
|
|
159
|
+
"max": last,
|
|
160
|
+
"step": 1,
|
|
161
|
+
"size": "sm",
|
|
162
|
+
"valueText": _cache[0] || (_cache[0] = (position) => categoryText(data.value[position])),
|
|
163
|
+
"aria-label": lang.chartZoom,
|
|
164
|
+
"propsRoot": _cache[1] || (_cache[1] = { sx: xyChartStyles.zoomSlider })
|
|
165
|
+
}, null), zoomRange.value && createVNode(Button, {
|
|
166
|
+
"variant": "link",
|
|
167
|
+
"size": "sm",
|
|
168
|
+
"onClick": _cache[2] || (_cache[2] = () => zoomRange.value = null)
|
|
169
|
+
}, {
|
|
170
|
+
default: () => [lang.chartZoomReset],
|
|
171
|
+
$stable: true
|
|
172
|
+
})]);
|
|
173
|
+
};
|
|
174
|
+
const instances = createChartInstances();
|
|
175
|
+
let tooltipElement;
|
|
176
|
+
let hovered = null;
|
|
177
|
+
const hover = (row) => {
|
|
178
|
+
hovered = row === void 0 ? null : {
|
|
179
|
+
row,
|
|
180
|
+
index: data.value.indexOf(row)
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
/** 十字线的提示框:内容用 Vue 渲染进同一个元素,交给 Unovis 定位 */
|
|
184
|
+
function renderTooltip(row) {
|
|
185
|
+
tooltipElement ??= document.createElement("div");
|
|
186
|
+
if (kind.value.pointTooltip) hover(row);
|
|
187
|
+
render(chartTooltip(categoryText(row), kind.value.tooltipItems?.(row) ?? [...kind.value.continuousX ? [{
|
|
188
|
+
label: kind.value.continuousX.label,
|
|
189
|
+
color: "transparent",
|
|
190
|
+
value: xText(row)
|
|
191
|
+
}] : [], ...visible.value.filter((item) => !kind.value.pointTooltip || seriesValue(row, item.key) !== void 0).map((item) => {
|
|
192
|
+
const value = seriesValue(row, item.key);
|
|
193
|
+
const total = kind.value.percent ? rowTotal(row) : 0;
|
|
194
|
+
return {
|
|
195
|
+
label: item.label,
|
|
196
|
+
color: item.color,
|
|
197
|
+
value: kind.value.percent && value !== void 0 && total > 0 ? `${seriesText(item.key, value)}(${percentText(toNumber(value) / total)})` : seriesText(item.key, value)
|
|
198
|
+
};
|
|
199
|
+
})]), tooltipElement);
|
|
200
|
+
return tooltipElement;
|
|
201
|
+
}
|
|
202
|
+
let plot = shallowRef(null);
|
|
203
|
+
const seen = usePlotSeen(() => plot.value);
|
|
204
|
+
let container;
|
|
205
|
+
let containerElement;
|
|
206
|
+
effect(() => () => {
|
|
207
|
+
container?.destroy();
|
|
208
|
+
if (tooltipElement) render(null, tooltipElement);
|
|
209
|
+
});
|
|
210
|
+
effect(() => {
|
|
211
|
+
const range = zoom.value && !kind.value.continuousX ? zoomRange.value : null;
|
|
212
|
+
const rows = range ? data.value.slice(range[0], range[1] + 1) : [...data.value];
|
|
213
|
+
const shown = visible.value;
|
|
214
|
+
const element = plot.value;
|
|
215
|
+
if (!element || loading.value || rows.length === 0 || !seen()) return;
|
|
216
|
+
if (container && containerElement !== element) {
|
|
217
|
+
container.destroy();
|
|
218
|
+
container = void 0;
|
|
219
|
+
instances.reset();
|
|
220
|
+
}
|
|
221
|
+
const primarySeries = shown.filter((item) => !onSecondary(item.key));
|
|
222
|
+
const secondarySeries = shown.filter((item) => onSecondary(item.key));
|
|
223
|
+
const totals = rows.map((row) => primarySeries.map((item) => seriesNumber(row, item.key) ?? 0));
|
|
224
|
+
const values = [
|
|
225
|
+
...kind.value.domainValues ? kind.value.domainValues(rows, primarySeries) : kind.value.stacked ? totals.flatMap((row) => [row.reduce((sum, value) => sum + Math.max(value, 0), 0), row.reduce((sum, value) => sum + Math.min(value, 0), 0)]) : totals.flat(),
|
|
226
|
+
...(targets.value ?? []).map((target) => toNumber(target.value)),
|
|
227
|
+
...(bands.value ?? []).filter((band) => band.axis === "value").flatMap((band) => [Number(band.from), Number(band.to)])
|
|
228
|
+
];
|
|
229
|
+
const aligned = secondarySeries.length > 0 ? alignedTicks([...values, ...[valueDomain.value?.[0], valueDomain.value?.[1]].filter((end) => end !== void 0)], rows.flatMap((row) => secondarySeries.map((item) => seriesNumber(row, item.key) ?? 0))) : void 0;
|
|
230
|
+
const domain = kind.value.percent ? [0, 1] : aligned ? aligned.primary.domain : [valueDomain.value?.[0] ?? (kind.value.zeroBaseline === false ? void 0 : Math.min(0, ...values)), valueDomain.value?.[1]];
|
|
231
|
+
const x = kind.value.continuousX ? (row) => kind.value.continuousX.value(row) ?? NaN : (_row, position) => position;
|
|
232
|
+
const y = (item) => {
|
|
233
|
+
if (kind.value.percent) return (row) => {
|
|
234
|
+
const value = seriesNumber(row, item.key);
|
|
235
|
+
const total = rowTotal(row);
|
|
236
|
+
return value === void 0 || total === 0 ? void 0 : value / total;
|
|
237
|
+
};
|
|
238
|
+
if (aligned && onSecondary(item.key)) return (row) => {
|
|
239
|
+
const value = seriesNumber(row, item.key);
|
|
240
|
+
return value === void 0 ? void 0 : aligned.toPrimary(value);
|
|
241
|
+
};
|
|
242
|
+
return (row) => seriesNumber(row, item.key);
|
|
243
|
+
};
|
|
244
|
+
/** 类目在类目轴上的位置:散点图是横轴的数值,其余是第几行;找不到时 undefined */
|
|
245
|
+
const positionOf = (at) => {
|
|
246
|
+
if (kind.value.continuousX) return Number(at);
|
|
247
|
+
const found = rows.findIndex((row) => row[index.value] === at);
|
|
248
|
+
return found < 0 ? void 0 : found;
|
|
249
|
+
};
|
|
250
|
+
const categoryAxisName = kind.value.horizontal ? AxisType.Y : AxisType.X;
|
|
251
|
+
const valueAxisName = kind.value.horizontal ? AxisType.X : AxisType.Y;
|
|
252
|
+
const lines = (targets.value ?? []).map((target, position) => {
|
|
253
|
+
const line = instances.get(`target-${position}`, () => new Plotline({}));
|
|
254
|
+
const value = toNumber(target.value);
|
|
255
|
+
const label = valueText(target.value);
|
|
256
|
+
line.setConfig({
|
|
257
|
+
axis: kind.value.horizontal ? "x" : "y",
|
|
258
|
+
value,
|
|
259
|
+
color: resolveColor(target.color ?? "danger", 0),
|
|
260
|
+
lineWidth: 1.5,
|
|
261
|
+
lineStyle: PlotlineLineStylePresets.Dash,
|
|
262
|
+
labelText: target.label ? `${target.label} ${label}` : label,
|
|
263
|
+
labelPosition: kind.value.horizontal ? PlotlineLabelPosition.TopRight : PlotlineLabelPosition.TopLeft,
|
|
264
|
+
labelOffsetX: 4,
|
|
265
|
+
labelOffsetY: 10
|
|
266
|
+
});
|
|
267
|
+
return line;
|
|
268
|
+
});
|
|
269
|
+
const bandComponents = (bands.value ?? []).flatMap((band, position) => {
|
|
270
|
+
const onIndex = band.axis !== "value";
|
|
271
|
+
const from = onIndex ? positionOf(band.from) : Number(band.from);
|
|
272
|
+
const to = onIndex ? positionOf(band.to) : Number(band.to);
|
|
273
|
+
if (from === void 0 || to === void 0) return [];
|
|
274
|
+
const half = onIndex && !kind.value.continuousX ? .5 : 0;
|
|
275
|
+
const plotband = instances.get(`band-${position}`, () => new Plotband({}));
|
|
276
|
+
plotband.setConfig({
|
|
277
|
+
axis: onIndex ? categoryAxisName : valueAxisName,
|
|
278
|
+
from: Math.min(from, to) - half,
|
|
279
|
+
to: Math.max(from, to) + half,
|
|
280
|
+
color: `color-mix(in srgb, ${resolveColor(band.color ?? "neutral", 0)} 12%, transparent)`,
|
|
281
|
+
labelText: band.label,
|
|
282
|
+
labelPosition: onIndex ? PlotbandLabelPosition.BottomLeftInside : PlotbandLabelPosition.TopLeftInside,
|
|
283
|
+
labelColor: colors.textMuted,
|
|
284
|
+
labelOffsetX: 6,
|
|
285
|
+
labelOffsetY: 6
|
|
286
|
+
});
|
|
287
|
+
return [plotband];
|
|
288
|
+
});
|
|
289
|
+
const eventLines = (annotations.value ?? []).filter((item) => item.series === void 0).flatMap((item, position) => {
|
|
290
|
+
const at = positionOf(item.at);
|
|
291
|
+
if (at === void 0) return [];
|
|
292
|
+
const line = instances.get(`event-${position}`, () => new Plotline({}));
|
|
293
|
+
line.setConfig({
|
|
294
|
+
axis: categoryAxisName,
|
|
295
|
+
value: at,
|
|
296
|
+
color: resolveColor(item.color ?? "neutral", 0),
|
|
297
|
+
lineWidth: 1,
|
|
298
|
+
lineStyle: PlotlineLineStylePresets.ShortDash,
|
|
299
|
+
labelText: item.label,
|
|
300
|
+
labelPosition: kind.value.horizontal ? PlotlineLabelPosition.BottomRight : PlotlineLabelPosition.TopRight,
|
|
301
|
+
labelOffsetX: 4,
|
|
302
|
+
labelOffsetY: 4
|
|
303
|
+
});
|
|
304
|
+
return [line];
|
|
305
|
+
});
|
|
306
|
+
const marked = (annotations.value ?? []).filter((item) => item.series !== void 0 && !kind.value.horizontal);
|
|
307
|
+
const markOf = (row) => {
|
|
308
|
+
const at = kind.value.continuousX ? kind.value.continuousX.value(row) : rows.indexOf(row);
|
|
309
|
+
return marked.find((item) => positionOf(item.at) === at && shown.some((series) => series.key === item.series));
|
|
310
|
+
};
|
|
311
|
+
/** 圈的位置:系列的值;堆叠时是它在这一摞里的顶端 */
|
|
312
|
+
const markY = (row) => {
|
|
313
|
+
const mark = markOf(row);
|
|
314
|
+
if (!mark) return void 0;
|
|
315
|
+
const series = shown.find((item) => item.key === mark.series);
|
|
316
|
+
if (!kind.value.stacked || kind.value.percent) return y(series)(row);
|
|
317
|
+
return shown.slice(0, shown.indexOf(series) + 1).reduce((sum, item) => sum + Math.max(y(item)(row) ?? 0, 0), 0);
|
|
318
|
+
};
|
|
319
|
+
const markColor = (row) => {
|
|
320
|
+
const mark = markOf(row);
|
|
321
|
+
const series = shown.find((item) => item.key === mark?.series);
|
|
322
|
+
return mark?.color ? resolveColor(mark.color, 0) : series?.color ?? colors.textMuted;
|
|
323
|
+
};
|
|
324
|
+
const marks = instances.get("marks", () => new Scatter({
|
|
325
|
+
x,
|
|
326
|
+
y: () => void 0
|
|
327
|
+
}));
|
|
328
|
+
marks.setConfig({
|
|
329
|
+
x,
|
|
330
|
+
y: markY,
|
|
331
|
+
size: 16,
|
|
332
|
+
color: "transparent",
|
|
333
|
+
strokeColor: markColor,
|
|
334
|
+
strokeWidth: 2,
|
|
335
|
+
label: (row) => markOf(row)?.label ?? "",
|
|
336
|
+
labelPosition: Position.Top,
|
|
337
|
+
labelColor: colors.text
|
|
338
|
+
});
|
|
339
|
+
const secondaryLabels = aligned ? aligned.secondary.ticks.map((tick, position) => {
|
|
340
|
+
const label = instances.get(`secondary-${position}`, () => {
|
|
341
|
+
const line = new Plotline({});
|
|
342
|
+
line.clippable = false;
|
|
343
|
+
return line;
|
|
344
|
+
});
|
|
345
|
+
label.setConfig({
|
|
346
|
+
axis: "y",
|
|
347
|
+
value: aligned.primary.ticks[position],
|
|
348
|
+
color: "transparent",
|
|
349
|
+
lineWidth: 0,
|
|
350
|
+
labelText: format.number(tick, kind.value.secondary?.format),
|
|
351
|
+
labelPosition: PlotlineLabelPosition.Right,
|
|
352
|
+
labelOffsetX: -44,
|
|
353
|
+
labelColor: colors.textMuted
|
|
354
|
+
});
|
|
355
|
+
return label;
|
|
356
|
+
}) : [];
|
|
357
|
+
const components = [
|
|
358
|
+
...bandComponents,
|
|
359
|
+
...kind.value.components({
|
|
360
|
+
series: shown,
|
|
361
|
+
x,
|
|
362
|
+
y,
|
|
363
|
+
instance: instances.get,
|
|
364
|
+
events: kind.value.itemSelector && onItemClick.value ? { [kind.value.itemSelector]: { click: (row, _event, index) => {
|
|
365
|
+
const position = data.value.indexOf(row);
|
|
366
|
+
const at = position >= 0 ? position : index;
|
|
367
|
+
onItemClick.value(data.value[at] ?? row, at);
|
|
368
|
+
} } } : {}
|
|
369
|
+
}),
|
|
370
|
+
...lines,
|
|
371
|
+
...eventLines,
|
|
372
|
+
...marked.length > 0 ? [marks] : [],
|
|
373
|
+
...secondaryLabels
|
|
374
|
+
];
|
|
375
|
+
const xAxis = instances.get("xAxis", () => new Axis({ type: "x" }));
|
|
376
|
+
const yAxis = instances.get("yAxis", () => new Axis({ type: "y" }));
|
|
377
|
+
const crosshair = instances.get("crosshair", () => new Crosshair());
|
|
378
|
+
const tooltipBox = instances.get("tooltip", () => new Tooltip());
|
|
379
|
+
const [categoryAxis, valueAxis] = kind.value.horizontal ? [yAxis, xAxis] : [xAxis, yAxis];
|
|
380
|
+
const continuous = kind.value.continuousX;
|
|
381
|
+
categoryAxis.setConfig({
|
|
382
|
+
type: kind.value.horizontal ? "y" : "x",
|
|
383
|
+
tickValues: continuous ? void 0 : rows.map((_row, position) => position),
|
|
384
|
+
numTicks: continuous ? 6 : void 0,
|
|
385
|
+
tickFormat: continuous ? (tick) => continuous.format(Number(tick)) : (tick) => categoryText(rows[Number(tick)]),
|
|
386
|
+
gridLine: continuous ? grid.value : false,
|
|
387
|
+
tickLine: false,
|
|
388
|
+
domainLine: false,
|
|
389
|
+
tickTextHideOverlapping: true,
|
|
390
|
+
tickPadding: 8,
|
|
391
|
+
label: continuous?.title,
|
|
392
|
+
labelMargin: 8
|
|
393
|
+
});
|
|
394
|
+
valueAxis.setConfig({
|
|
395
|
+
type: kind.value.horizontal ? "x" : "y",
|
|
396
|
+
numTicks: 5,
|
|
397
|
+
tickValues: aligned?.primary.ticks,
|
|
398
|
+
tickFormat: (tick) => kind.value.percent ? format.number(Number(tick), {
|
|
399
|
+
style: "percent",
|
|
400
|
+
maximumFractionDigits: 0
|
|
401
|
+
}) : format.number(Number(tick), valueFormat.value),
|
|
402
|
+
gridLine: grid.value,
|
|
403
|
+
tickLine: false,
|
|
404
|
+
domainLine: false,
|
|
405
|
+
tickPadding: 8
|
|
406
|
+
});
|
|
407
|
+
const dotted = kind.value.crosshairSeries ? shown.filter(kind.value.crosshairSeries) : shown;
|
|
408
|
+
crosshair.setConfig({
|
|
409
|
+
x,
|
|
410
|
+
...kind.value.stacked ? { yStacked: dotted.map(y) } : { y: dotted.map(y) },
|
|
411
|
+
template: (row) => renderTooltip(row),
|
|
412
|
+
color: (_row, position) => dotted[position]?.color ?? "transparent",
|
|
413
|
+
getCircles: kind.value.crosshairDots ? void 0 : () => [],
|
|
414
|
+
hideWhenFarFromPointer: false,
|
|
415
|
+
onCrosshairMove: (_x, row) => hover(row)
|
|
416
|
+
});
|
|
417
|
+
tooltipBox.setConfig({ triggers: kind.value.pointTooltip ? { [kind.value.pointTooltip]: (row) => renderTooltip(row) } : {} });
|
|
418
|
+
const config = {
|
|
419
|
+
components,
|
|
420
|
+
xAxis,
|
|
421
|
+
yAxis,
|
|
422
|
+
crosshair: (tooltip.value || onItemClick.value && !kind.value.itemSelector) && !kind.value.pointTooltip ? crosshair : void 0,
|
|
423
|
+
tooltip: tooltip.value ? tooltipBox : void 0,
|
|
424
|
+
[kind.value.horizontal ? "xDomain" : "yDomain"]: domain,
|
|
425
|
+
padding: aligned ? {
|
|
426
|
+
...kind.value.padding,
|
|
427
|
+
right: Math.max(kind.value.padding?.right ?? 0, SECONDARY_AXIS_WIDTH)
|
|
428
|
+
} : kind.value.padding ?? {},
|
|
429
|
+
ariaLabel: null,
|
|
430
|
+
duration: chartDuration(element),
|
|
431
|
+
onRenderComplete: haloPlotlineLabels
|
|
432
|
+
};
|
|
433
|
+
if (container) container.update(config, void 0, rows);
|
|
434
|
+
else {
|
|
435
|
+
container = new XYContainer(element, config, rows);
|
|
436
|
+
containerElement = element;
|
|
437
|
+
uniqueHighlightFilter(element, `${id}-highlight`);
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
return () => createVNode(ChartFrame, mergeProps(rest, {
|
|
441
|
+
"sx": [css.select(() => !kind.value.crosshairDots && xyChartStyles.hideCrosshairLine, true), sx.value],
|
|
442
|
+
"unit": kind.value.percent ? void 0 : unit.value,
|
|
443
|
+
"unitEnd": kind.value.secondary?.unit,
|
|
444
|
+
"height": height.value,
|
|
445
|
+
"legend": legend.value ?? resolved.value.length > 1 ? resolved.value : [],
|
|
446
|
+
"hiddenKeys": hiddenSeries.value,
|
|
447
|
+
"onLegendToggle": toggle,
|
|
448
|
+
"loading": loading.value,
|
|
449
|
+
"skeleton": chartSkeleton(kind.value),
|
|
450
|
+
"isEmpty": data.value.length === 0,
|
|
451
|
+
"empty": empty.value,
|
|
452
|
+
"clickable": onItemClick.value != null,
|
|
453
|
+
"onPlotClick": onItemClick.value && !kind.value.itemSelector ? () => {
|
|
454
|
+
if (hovered) onItemClick.value(hovered.row, hovered.index);
|
|
455
|
+
} : void 0,
|
|
456
|
+
"table": kind.value.table?.(data.value) ?? {
|
|
457
|
+
columns: [
|
|
458
|
+
lang.chartCategory,
|
|
459
|
+
...kind.value.continuousX ? [kind.value.continuousX.label] : [],
|
|
460
|
+
...resolved.value.map((item) => {
|
|
461
|
+
const itemUnit = onSecondary(item.key) ? kind.value.secondary?.unit : unit.value;
|
|
462
|
+
return itemUnit ? `${item.label}(${itemUnit})` : item.label;
|
|
463
|
+
})
|
|
464
|
+
],
|
|
465
|
+
rows: data.value.map((row) => ({
|
|
466
|
+
header: categoryText(row),
|
|
467
|
+
cells: [...kind.value.continuousX ? [xText(row)] : [], ...resolved.value.map((item) => {
|
|
468
|
+
const value = seriesValue(row, item.key);
|
|
469
|
+
return value === void 0 ? lang.emptyValue : format.number(value, onSecondary(item.key) ? kind.value.secondary?.format : valueFormat.value);
|
|
470
|
+
})]
|
|
471
|
+
}))
|
|
472
|
+
},
|
|
473
|
+
"plotRef": _cache[3] || (_cache[3] = (element) => plot.value = element),
|
|
474
|
+
"footer": zoom.value && !kind.value.continuousX && data.value.length > 2 ? zoomBar() : void 0
|
|
475
|
+
}), null);
|
|
476
|
+
}, {
|
|
477
|
+
name: "XYChart",
|
|
478
|
+
props: [
|
|
479
|
+
"data",
|
|
480
|
+
"index",
|
|
481
|
+
"series",
|
|
482
|
+
"indexFormat",
|
|
483
|
+
"valueFormat",
|
|
484
|
+
"unit",
|
|
485
|
+
"height",
|
|
486
|
+
"legend",
|
|
487
|
+
"grid",
|
|
488
|
+
"valueDomain",
|
|
489
|
+
"tooltip",
|
|
490
|
+
"loading",
|
|
491
|
+
"_hiddenSeries",
|
|
492
|
+
"onUpdate:_hiddenSeries",
|
|
493
|
+
"empty",
|
|
494
|
+
"targets",
|
|
495
|
+
"annotations",
|
|
496
|
+
"bands",
|
|
497
|
+
"onItemClick",
|
|
498
|
+
"zoom",
|
|
499
|
+
"_zoomRange",
|
|
500
|
+
"onUpdate:_zoomRange",
|
|
501
|
+
"kind",
|
|
502
|
+
"sx"
|
|
503
|
+
]
|
|
504
|
+
});
|
|
505
|
+
/**
|
|
506
|
+
* 目标线、事件竖线的文字描一圈表面色的边(同地图上地点的名字):压在柱子、折线上也看得清。
|
|
507
|
+
* Unovis 的 Plotline 文字没有描边的配置项,渲染完成后补在元素上;导出图片时按计算样式一并带走
|
|
508
|
+
*/
|
|
509
|
+
function haloPlotlineLabels(svg) {
|
|
510
|
+
for (const label of svg.querySelectorAll("text[class*=\"plotline-label\"]")) {
|
|
511
|
+
label.style.setProperty("paint-order", "stroke");
|
|
512
|
+
label.style.setProperty("stroke", colors.surface);
|
|
513
|
+
label.style.setProperty("stroke-width", "3px");
|
|
514
|
+
label.style.setProperty("stroke-linejoin", "round");
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
//#endregion
|
|
518
|
+
export { XYChart, xyChartStyles };
|
|
519
|
+
|
|
520
|
+
//# sourceMappingURL=XYChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XYChart.js","names":["_createVNode","_mergeProps","_vtp_readonlyProp","_vtp_bindable","_vtp_restProps","_vue_computed","_vue_shallowRef"],"sources":["../../src/charts/XYChart.tsx"],"sourcesContent":["/**\n * 直角坐标图表(柱状图、折线图、面积图)的公共部分:坐标轴、十字线与提示框、数值范围;外层结构(图例、单位、\n * 空与加载状态、给读屏的数据表)交给 ChartFrame。\n * 绘图交给 Unovis 的 XYContainer:组件实例只建一次,数据与配置变化时 update,卸载时 destroy;\n * 绘图区换了元素(加载、空状态之后重新出现)时容器连同全部实例一起重建。\n * 各种图只决定画什么(kind.components),坐标轴、十字线、提示框、配色都在这里统一。\n * 目标线(targets)用 Unovis 的 Plotline。点了下钻(onItemClick):有图形可点的图(柱子)按图形的点击事件\n * (kind.itemSelector),折线、面积图按十字线所在的那一行,散点图按悬停的点。\n *\n * 标注(annotations):类目上的事件画成竖线(Plotline),圈出某个系列的值画成空心圈带文字(Scatter);\n * 区间(bands)画成浅色的带(Plotband)。百分比堆叠(kind.percent)按每个类目里各系列的占比画。\n * 第二数值轴(kind.secondary,组合图):刻度与主轴对齐(alignedTicks),第二轴的系列换算到主轴的坐标里画,\n * 右侧的刻度文字是不裁剪的 Plotline 标签。\n */\nimport {\n Axis,\n AxisType,\n Crosshair,\n Plotband,\n PlotbandLabelPosition,\n Plotline,\n PlotlineLabelPosition,\n PlotlineLineStylePresets,\n Position,\n Scatter,\n Tooltip,\n XYContainer,\n type XYComponentCore,\n} from '@unovis/ts';\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport * as css from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport { render, useId, type VNodeChild } from 'vue';\nimport { useLang } from '../config/context';\nimport { useFormat, type NumericFormat } from '../config/lang/format';\nimport { colors } from '../config/theme/tokens';\nimport { Skeleton } from '../feedback/Skeleton';\nimport { Button } from '../base/Button';\nimport { Slider } from '../input/Slider';\nimport { alignedTicks, type AlignedAxes } from './axis-ticks';\nimport { toNumber, type NumericValue } from '../utils/data/numeric';\nimport type { PartProps } from '../utils/props';\nimport {\n ChartFrame,\n chartDuration,\n chartTooltip,\n createChartInstances,\n uniqueHighlightFilter,\n useChartValueText,\n usePlotSeen,\n type ChartFrameParts,\n type ChartTable,\n type ChartTooltipItem,\n} from './frame';\nimport {\n resolveColor,\n resolveSeries,\n seriesNumber,\n seriesValue,\n type ChartColor,\n type ChartSeries,\n type ResolvedSeries,\n} from './series';\n\n/** 目标线(参考线):数值轴上的一条虚线 */\nexport interface ChartTarget {\n /** 位置:数值轴上的值 */\n value: NumericValue;\n /** 标签:写在线的一端,后面带上格式化的数值(“年度指标 1,200”) */\n label?: string;\n /** 颜色;默认是 danger(要够到的线) */\n color?: ChartColor;\n}\n\n/** 标注:类目上发生的事(竖线),或圈出某个系列在这个类目上的值 */\nexport interface ChartAnnotation {\n /** 标在哪个类目上:index 字段的值(散点图是横轴上的数值) */\n at: unknown;\n /** 文字 */\n label: string;\n /** 圈出这个系列在这里的值(系列的 key);不写时是一条竖线(换供应商、调价生效这类事件) */\n series?: string;\n /** 颜色;竖线默认是次要色,圈默认是系列色 */\n color?: ChartColor;\n}\n\n/** 区间:类目轴上的一段(试运行期、促销期),或数值轴上的一段(目标区间) */\nexport interface ChartBand {\n /** 在哪条轴上,默认 index(类目轴) */\n axis?: 'index' | 'value';\n /** 起点:类目轴是 index 字段的值(含这一项),数值轴是数值 */\n from: unknown;\n /** 终点:同 from(含这一项) */\n to: unknown;\n /** 文字:类目轴上的写在带的左下角,数值轴上的写在左上角 */\n label?: string;\n /** 颜色,默认 neutral;画成很浅的底色 */\n color?: ChartColor;\n}\n\n/** 第二数值轴(右侧):哪些系列画在它上面,它的格式与单位 */\nexport interface ChartSecondaryAxis {\n /** 画在第二数值轴上的系列 */\n keys: readonly string[];\n /** 数值的格式 */\n format?: NumericFormat;\n /** 单位:显示在右上方,提示框与数据表的数值后面带上 */\n unit?: string;\n}\n\n/** 加载中的骨架 */\nexport interface ChartSkeletons {\n /** 一排高低不一的柱(柱状图) */\n bars: unknown;\n /** 一整块(默认) */\n block: unknown;\n}\n\n/** 直角坐标图表共有的属性;未声明的属性落到外层 div(role=\"figure\")上,aria-label 是图表的名称 */\nexport interface XYChartProps<T extends object>\n extends PartProps<'div', 'role' | 'aria-busy'>, ChartFrameParts {\n /** 数据:每一行是类目轴上的一项(一个月、一个项目) */\n data: readonly T[];\n /** 类目字段:类目轴的刻度、提示框的标题、数据表的第一列 */\n index: keyof T & string;\n /** 系列:每个系列画成一组柱子、一条线或一片面积 */\n series: readonly ChartSeries<T>[];\n /** 类目的显示文字;不写时把字段的值转成字符串 */\n indexFormat?: (value: T[keyof T & string], row: T) => string;\n /**\n * 数值的格式:数值轴、提示框、数据表共用,按当前语言格式化。以万元为单位画金额时写\n * `{ scale: 10_000, maximumFractionDigits: 1 }` 并配 `unit=\"万元\"`\n */\n valueFormat?: NumericFormat;\n /** 单位:显示在数值轴上方,提示框与数据表的数值后面带上 */\n unit?: string;\n /**\n * 绘图区的高度;数字按 px\n * @default 240\n */\n height?: number | string;\n /** 图例:默认多于一个系列时显示;点图例可以隐藏、恢复系列 */\n legend?: boolean;\n /**\n * 数值轴的网格线\n * @default true\n */\n grid?: boolean;\n /** 数值轴的范围 [最小, 最大];不写的一端按数据自动取,最小值默认从 0 起(数据有负数时取负数) */\n valueDomain?: readonly [number | undefined, number | undefined];\n /**\n * 悬停时的提示框\n * @default true\n */\n tooltip?: boolean;\n /**\n * 加载中:绘图区显示扫光的骨架(柱状图是一排高低不一的柱),带 aria-busy\n * @default false\n */\n loading?: boolean;\n /** 隐藏的系列(存系列的 key):点图例时写回,父级可以写 _hiddenSeries={keys} */\n _hiddenSeries?: string[];\n /** 没有数据时显示的内容,默认是“暂无数据” */\n empty?: VNodeChild;\n /** 目标线、参考线:数值轴上的虚线(横向图是竖线),如年度销售指标;数值轴的范围会包含它 */\n targets?: readonly ChartTarget[];\n /** 标注:类目上的事件(竖线),或圈出某个系列的值(横向图只画竖线) */\n annotations?: readonly ChartAnnotation[];\n /** 区间:类目轴或数值轴上的一段,画成浅色的带(数值轴的范围会包含它) */\n bands?: readonly ChartBand[];\n /**\n * 点了一个类目(下钻,如跳到筛好条件的台账):参数是这一行与它的位置;写了它时绘图区的指针是手形。\n * 点图是鼠标的捷径:同样的去处在页面上还要有链接或按钮,键盘与读屏才到得了(WCAG 2.1.1)\n */\n onItemClick?: (row: T, index: number) => void;\n /** 缩放:绘图区下面一条区间滑块,选一段类目放大看(几年的月度数据);读屏的数据表仍是全部 */\n zoom?: boolean;\n /** 缩放的区间 [起, 止]:类目的位置,含两端;父级可以写 _zoomRange={range},null 是全部 */\n _zoomRange?: [number, number] | null;\n}\n\n/** 交给各种图的绘制上下文 */\nexport interface XYChartContext<T extends object> {\n /** 显示中的系列(去掉了图例里隐藏的),颜色已定 */\n series: ResolvedSeries<T>[];\n /** 类目的位置:第几行 */\n x: (row: T, index: number) => number;\n /** 系列的取值函数,空值返回 undefined(Unovis 跳过) */\n y: (series: ResolvedSeries<T>) => (row: T) => number | undefined;\n /** 取一个跨渲染保留的组件实例:第一次调用时创建;Unovis 组件保留实例,更新时才有过渡动画 */\n instance: <C>(key: string, create: () => C) => C;\n /** 点图形下钻的事件(写了 itemSelector 时):并进组件的 events;没有 onItemClick 时是空的。参数同 Unovis:图形的数据、事件、位置 */\n events: Record<string, Record<string, (row: T, event: Event, index: number) => void>>;\n}\n\n/** 一种图:画哪些组件,以及与坐标轴、十字线有关的差别 */\nexport interface XYChartKind<T extends object> {\n /** 配置并返回要画的 Unovis 组件(每次数据或属性变化都会调用) */\n components: (context: XYChartContext<T>) => XYComponentCore<T>[];\n /** 横向:类目在纵轴、数值在横轴 */\n horizontal?: boolean;\n /** 十字线上给每个系列画圆点(折线图、面积图);柱状图不画 */\n crosshairDots?: boolean;\n /** 加载中的骨架,默认 block */\n skeleton?: keyof ChartSkeletons;\n /** 绘图区四周的留白(px):折线两端不贴着边缘 */\n padding?: { left?: number; right?: number; top?: number; bottom?: number };\n /** 数值范围按堆叠后的总和算(堆叠的柱子、面积) */\n stacked?: boolean;\n /** 百分比堆叠:各系列按它在这个类目里的占比画(加起来 100%),数值轴是百分比,提示框带上占比 */\n percent?: boolean;\n /** 第二数值轴(组合图):这些系列画在右侧的轴上,刻度与主轴对齐 */\n secondary?: ChartSecondaryAxis;\n /** 十字线只在这些系列上画圆点(组合图里只给线画);不写时按 crosshairDots */\n crosshairSeries?: (series: ResolvedSeries<T>) => boolean;\n /** 横轴是连续的数值(散点图):取值、刻度与提示框里的写法、数据表的列名、轴下方的标题;不写时横轴是类目(第几行) */\n continuousX?: {\n value: (row: T) => number | undefined;\n format: (value: number) => string;\n label: string;\n title?: string;\n };\n /** 数值轴默认从 0 起(数据有负数时取负数);false 时按数据自动取(散点图) */\n zeroBaseline?: boolean;\n /** 提示框跟着数据点(散点图),没有十字线:按选择器触发,悬停的数据是这一行 */\n pointTooltip?: string;\n /** 提示框里列的项;不写时每个显示中的系列一行(瀑布图列变动与累计) */\n tooltipItems?: (row: T) => ChartTooltipItem[];\n /** 数值轴(主轴)的范围要包含的值;shown 是显示中的系列(第二数值轴的已去掉)。不写时按系列的值(stacked 时按正负各自的总和) */\n domainValues?: (rows: readonly T[], shown: readonly ResolvedSeries<T>[]) => number[];\n /** 给读屏的数据表;不写时类目一列加每个系列一列 */\n table?: (rows: readonly T[]) => ChartTable;\n /** 点哪种图形算点了这一行(柱子的选择器,图形绑定的数据是这一行);不写时按十字线所在的那一行 */\n itemSelector?: string;\n}\n\n/** 第二数值轴的刻度文字占的宽度(px) */\nconst SECONDARY_AXIS_WIDTH = 48;\n\n/** 骨架柱的高度(百分比):高低错落,看起来像一组数据 */\nconst SKELETON_BARS = [55, 80, 40, 70, 90, 50, 65];\n\n/** XYChart 的样式:hideCrosshairLine 与加载中的骨架(外层结构的样式见 chartStyles) */\nexport const xyChartStyles = css.create({\n // 柱状图的十字线只用来定位提示框,不画竖线\n hideCrosshairLine: { '--vis-crosshair-line-stroke-opacity': '0' },\n skeleton: { display: 'block', width: '100%', height: '100%' },\n // 缩放:滑块占满,“显示全部”在结束边\n zoom: { display: 'flex', alignItems: 'center', gap: '_md', paddingInline: '_sm' },\n zoomSlider: { flexGrow: 1, minWidth: 0 },\n skeletonBars: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-around',\n gap: '_md',\n height: '100%',\n },\n skeletonBarsHorizontal: { flexDirection: 'column', alignItems: 'flex-start' },\n skeletonBar: { display: 'block', flexGrow: 1, flexBasis: 0, borderRadius: '_sm' },\n skeletonBarSize: (percent: string) => ({ height: percent }),\n skeletonBarSizeHorizontal: (percent: string) => ({ width: percent }),\n});\n\n/** 加载中绘图区的骨架:柱状图是一排高低不一的柱(横向时是条),其余是一整块 */\nfunction chartSkeleton({\n skeleton = 'block',\n horizontal = false,\n}: Pick<XYChartKind<object>, 'skeleton' | 'horizontal'>) {\n if (skeleton === 'block') return <Skeleton sx={xyChartStyles.skeleton} />;\n return (\n <div\n aria-hidden=\"true\"\n {...css.attrs(xyChartStyles.skeletonBars, horizontal && xyChartStyles.skeletonBarsHorizontal)}\n >\n {SKELETON_BARS.map((percent, position) => (\n <Skeleton\n key={position}\n sx={[\n xyChartStyles.skeletonBar,\n horizontal\n ? xyChartStyles.skeletonBarSizeHorizontal(`${percent}%`)\n : xyChartStyles.skeletonBarSize(`${percent}%`),\n ]}\n />\n ))}\n </div>\n );\n}\n\n/** 直角坐标图表的公共实现(组件库内部用,见 BarChart、LineChart、AreaChart) */\nexport const XYChart = _component(\n <T extends object>({\n data,\n index,\n series,\n indexFormat,\n valueFormat,\n unit,\n height = 240,\n legend,\n grid = true,\n valueDomain,\n tooltip = true,\n loading = false,\n _hiddenSeries: hiddenSeries = _bindable<string[]>([]),\n empty,\n targets,\n annotations,\n bands,\n onItemClick,\n zoom = false,\n _zoomRange: zoomRange = _bindable<[number, number] | null>(null),\n kind,\n sx,\n ...rest\n }: XYChartProps<T> & { kind: XYChartKind<T> }) => {\n const lang = useLang();\n const format = useFormat();\n const id = useId();\n const resolved = _derived(resolveSeries(series));\n const visible = _derived(resolved.filter((item) => !hiddenSeries.includes(item.key)));\n\n const categoryText = (row: T | undefined) =>\n row === undefined\n ? ''\n : indexFormat\n ? indexFormat(row[index], row)\n : String(row[index] ?? '');\n const valueText = useChartValueText(() => ({ valueFormat, unit }));\n const secondaryText = useChartValueText(() => ({\n valueFormat: kind.secondary?.format,\n unit: kind.secondary?.unit,\n }));\n const onSecondary = (key: string) => kind.secondary?.keys.includes(key) ?? false;\n /** 一个系列的值的文字:第二数值轴上的按它的格式与单位 */\n const seriesText = (key: string, value: NumericValue | undefined) =>\n onSecondary(key) ? secondaryText(value) : valueText(value);\n /** 一行里显示中的系列的总和(百分比堆叠的分母;负数不计) */\n const rowTotal = (row: T) =>\n visible.reduce((sum, item) => sum + Math.max(seriesNumber(row, item.key) ?? 0, 0), 0);\n const percentText = (value: number) =>\n format.number(value, { style: 'percent', maximumFractionDigits: 1 });\n\n const xText = (row: T) => {\n const x = kind.continuousX?.value(row);\n return x === undefined ? lang.emptyValue : kind.continuousX!.format(x);\n };\n\n function toggle(key: string) {\n hiddenSeries = hiddenSeries.includes(key)\n ? hiddenSeries.filter((item) => item !== key)\n : [...hiddenSeries, key];\n }\n\n /** 缩放的滑块:两端是类目;缩小过时旁边有“显示全部” */\n const zoomBar = () => {\n const last = data.length - 1;\n return (\n <div {...css.attrs(xyChartStyles.zoom)}>\n <Slider\n _value={zoomRange ?? [0, last]}\n onUpdate:_value={(next: [number, number]) =>\n (zoomRange = next[0] === 0 && next[1] === last ? null : next)\n }\n min={0}\n max={last}\n step={1}\n size=\"sm\"\n valueText={(position) => categoryText(data[position])}\n aria-label={lang.chartZoom}\n propsRoot={{ sx: xyChartStyles.zoomSlider }}\n />\n {zoomRange && (\n <Button variant=\"link\" size=\"sm\" onClick={() => (zoomRange = null)}>\n {lang.chartZoomReset}\n </Button>\n )}\n </div>\n );\n };\n\n const instances = createChartInstances();\n let tooltipElement: HTMLElement | undefined;\n\n // 指针所在的那一行:十字线移动时记下,点绘图区时下钻到它;离开绘图区时清掉\n let hovered: { row: T; index: number } | null = null;\n const hover = (row: T | undefined) => {\n hovered = row === undefined ? null : { row, index: data.indexOf(row) };\n };\n\n /** 十字线的提示框:内容用 Vue 渲染进同一个元素,交给 Unovis 定位 */\n function renderTooltip(row: T) {\n tooltipElement ??= document.createElement('div');\n // 跟着数据点的提示框(散点图)没有十字线:悬停哪个点就是哪一行\n if (kind.pointTooltip) hover(row);\n render(\n chartTooltip(\n categoryText(row),\n kind.tooltipItems?.(row) ?? [\n ...(kind.continuousX\n ? [{ label: kind.continuousX.label, color: 'transparent', value: xText(row) }]\n : []),\n // 跟着数据点的提示框只列这一行有值的系列(散点图里一行通常只落在一个系列上)\n ...visible\n .filter((item) => !kind.pointTooltip || seriesValue(row, item.key) !== undefined)\n .map((item) => {\n const value = seriesValue(row, item.key);\n const total = kind.percent ? rowTotal(row) : 0;\n return {\n label: item.label,\n color: item.color,\n value:\n kind.percent && value !== undefined && total > 0\n ? `${seriesText(item.key, value)}(${percentText(toNumber(value) / total)})`\n : seriesText(item.key, value),\n };\n }),\n ],\n ),\n tooltipElement,\n );\n return tooltipElement;\n }\n\n let plot = _state.raw<HTMLElement | null>(null);\n const seen = usePlotSeen(() => plot);\n let container: XYContainer<T> | undefined;\n let containerElement: HTMLElement | undefined;\n _effect(() => () => {\n container?.destroy();\n if (tooltipElement) render(null, tooltipElement);\n });\n _effect(() => {\n // 缩放:只画选中的一段(散点图的横轴是连续的数值,不按类目缩放)\n const range = zoom && !kind.continuousX ? zoomRange : null;\n const rows = range ? data.slice(range[0], range[1] + 1) : [...data];\n const shown = visible;\n const element = plot;\n if (!element || loading || rows.length === 0 || !seen()) return;\n // 绘图区换了元素:旧容器连同它的组件、坐标轴一起销毁,实例表清空后重新创建\n if (container && containerElement !== element) {\n container.destroy();\n container = undefined;\n instances.reset();\n }\n\n const primarySeries = shown.filter((item) => !onSecondary(item.key));\n const secondarySeries = shown.filter((item) => onSecondary(item.key));\n const totals = rows.map((row) =>\n primarySeries.map((item) => seriesNumber(row, item.key) ?? 0),\n );\n const seriesValues = kind.domainValues\n ? kind.domainValues(rows, primarySeries)\n : kind.stacked\n ? totals.flatMap((row) => [\n row.reduce((sum, value) => sum + Math.max(value, 0), 0),\n row.reduce((sum, value) => sum + Math.min(value, 0), 0),\n ])\n : totals.flat();\n // 目标线、数值轴上的区间要落在数值轴的范围里\n const values = [\n ...seriesValues,\n ...(targets ?? []).map((target) => toNumber(target.value)),\n ...(bands ?? [])\n .filter((band) => band.axis === 'value')\n .flatMap((band) => [Number(band.from), Number(band.to)]),\n ];\n // 第二数值轴:两条轴的刻度对齐,第二轴的值换算到主轴的坐标\n const aligned: AlignedAxes | undefined =\n secondarySeries.length > 0\n ? alignedTicks(\n [\n ...values,\n ...[valueDomain?.[0], valueDomain?.[1]].filter(\n (end): end is number => end !== undefined,\n ),\n ],\n rows.flatMap((row) =>\n secondarySeries.map((item) => seriesNumber(row, item.key) ?? 0),\n ),\n )\n : undefined;\n const domain: [number | undefined, number | undefined] = kind.percent\n ? [0, 1]\n : aligned\n ? aligned.primary.domain\n : [\n valueDomain?.[0] ??\n (kind.zeroBaseline === false ? undefined : Math.min(0, ...values)),\n valueDomain?.[1],\n ];\n const x = kind.continuousX\n ? (row: T) => kind.continuousX!.value(row) ?? Number.NaN\n : (_row: T, position: number) => position;\n const y = (item: (typeof shown)[number]) => {\n if (kind.percent)\n return (row: T) => {\n const value = seriesNumber(row, item.key);\n const total = rowTotal(row);\n return value === undefined || total === 0 ? undefined : value / total;\n };\n if (aligned && onSecondary(item.key))\n return (row: T) => {\n const value = seriesNumber(row, item.key);\n return value === undefined ? undefined : aligned.toPrimary(value);\n };\n return (row: T) => seriesNumber(row, item.key);\n };\n /** 类目在类目轴上的位置:散点图是横轴的数值,其余是第几行;找不到时 undefined */\n const positionOf = (at: unknown) => {\n if (kind.continuousX) return Number(at);\n const found = rows.findIndex((row) => row[index] === at);\n return found < 0 ? undefined : found;\n };\n const categoryAxisName = kind.horizontal ? AxisType.Y : AxisType.X;\n const valueAxisName = kind.horizontal ? AxisType.X : AxisType.Y;\n const lines = (targets ?? []).map((target, position) => {\n const line = instances.get(`target-${position}`, () => new Plotline<T>({}));\n const value = toNumber(target.value);\n const label = valueText(target.value);\n line.setConfig({\n axis: kind.horizontal ? 'x' : 'y',\n value,\n color: resolveColor(target.color ?? 'danger', 0),\n lineWidth: 1.5,\n lineStyle: PlotlineLineStylePresets.Dash,\n labelText: target.label ? `${target.label} ${label}` : label,\n labelPosition: kind.horizontal\n ? PlotlineLabelPosition.TopRight\n : PlotlineLabelPosition.TopLeft,\n labelOffsetX: 4,\n labelOffsetY: 10,\n });\n return line;\n });\n\n // 区间:浅色的带,文字在左上角\n const bandComponents = (bands ?? []).flatMap((band, position) => {\n const onIndex = band.axis !== 'value';\n const from = onIndex ? positionOf(band.from) : Number(band.from);\n const to = onIndex ? positionOf(band.to) : Number(band.to);\n if (from === undefined || to === undefined) return [];\n // 类目轴上的区间盖住两端的类目:往外各扩半格\n const half = onIndex && !kind.continuousX ? 0.5 : 0;\n const plotband = instances.get(`band-${position}`, () => new Plotband<T>({}));\n plotband.setConfig({\n axis: onIndex ? categoryAxisName : valueAxisName,\n from: Math.min(from, to) - half,\n to: Math.max(from, to) + half,\n color: `color-mix(in srgb, ${resolveColor(band.color ?? 'neutral', 0)} 12%, transparent)`,\n labelText: band.label,\n // 类目轴上的区间文字在左下角:顶上留给事件竖线的文字\n labelPosition: onIndex\n ? PlotbandLabelPosition.BottomLeftInside\n : PlotbandLabelPosition.TopLeftInside,\n labelColor: colors.textMuted,\n labelOffsetX: 6,\n labelOffsetY: 6,\n });\n return [plotband];\n });\n\n // 标注:事件是类目上的竖线;圈出的值是一个空心圈,文字在上方\n const events = (annotations ?? []).filter((item) => item.series === undefined);\n const eventLines = events.flatMap((item, position) => {\n const at = positionOf(item.at);\n if (at === undefined) return [];\n const line = instances.get(`event-${position}`, () => new Plotline<T>({}));\n line.setConfig({\n axis: categoryAxisName,\n value: at,\n color: resolveColor(item.color ?? 'neutral', 0),\n lineWidth: 1,\n lineStyle: PlotlineLineStylePresets.ShortDash,\n labelText: item.label,\n labelPosition: kind.horizontal\n ? PlotlineLabelPosition.BottomRight\n : PlotlineLabelPosition.TopRight,\n labelOffsetX: 4,\n labelOffsetY: 4,\n });\n return [line];\n });\n const marked = (annotations ?? []).filter(\n (item) => item.series !== undefined && !kind.horizontal,\n );\n const markOf = (row: T) => {\n const at = kind.continuousX ? kind.continuousX.value(row) : rows.indexOf(row);\n return marked.find(\n (item) =>\n positionOf(item.at) === at && shown.some((series) => series.key === item.series),\n );\n };\n /** 圈的位置:系列的值;堆叠时是它在这一摞里的顶端 */\n const markY = (row: T) => {\n const mark = markOf(row);\n if (!mark) return undefined;\n const series = shown.find((item) => item.key === mark.series)!;\n if (!kind.stacked || kind.percent) return y(series)(row);\n const upTo = shown.slice(0, shown.indexOf(series) + 1);\n return upTo.reduce((sum, item) => sum + Math.max(y(item)(row) ?? 0, 0), 0);\n };\n const markColor = (row: T) => {\n const mark = markOf(row);\n const series = shown.find((item) => item.key === mark?.series);\n return mark?.color ? resolveColor(mark.color, 0) : (series?.color ?? colors.textMuted);\n };\n const marks = instances.get('marks', () => new Scatter<T>({ x, y: () => undefined }));\n marks.setConfig({\n x,\n y: markY,\n size: 16,\n color: 'transparent',\n strokeColor: markColor,\n strokeWidth: 2,\n label: (row: T) => markOf(row)?.label ?? '',\n labelPosition: Position.Top,\n labelColor: colors.text,\n });\n\n // 第二数值轴的刻度:与主轴的刻度同高,文字在绘图区右侧(不裁剪的 Plotline 标签,线本身透明)\n const secondaryLabels = aligned\n ? aligned.secondary.ticks.map((tick, position) => {\n const label = instances.get(`secondary-${position}`, () => {\n const line = new Plotline<T>({});\n line.clippable = false;\n return line;\n });\n label.setConfig({\n axis: 'y',\n value: aligned.primary.ticks[position]!,\n color: 'transparent',\n lineWidth: 0,\n labelText: format.number(tick, kind.secondary?.format),\n labelPosition: PlotlineLabelPosition.Right,\n labelOffsetX: -(SECONDARY_AXIS_WIDTH - 4),\n labelColor: colors.textMuted,\n });\n return label;\n })\n : [];\n const components = [\n ...bandComponents,\n ...kind.components({\n series: shown,\n x,\n y,\n instance: instances.get,\n events:\n kind.itemSelector && onItemClick\n ? {\n [kind.itemSelector]: {\n // 分组柱给的是原来的行;堆叠柱给的是拼出来的副本,第三个参数才是行的位置\n click: (row: T, _event: Event, index: number) => {\n const position = data.indexOf(row);\n const at = position >= 0 ? position : index;\n onItemClick(data[at] ?? row, at);\n },\n },\n }\n : {},\n }),\n ...lines,\n ...eventLines,\n ...(marked.length > 0 ? [marks] : []),\n ...secondaryLabels,\n ];\n const xAxis = instances.get('xAxis', () => new Axis<T>({ type: 'x' }));\n const yAxis = instances.get('yAxis', () => new Axis<T>({ type: 'y' }));\n const crosshair = instances.get('crosshair', () => new Crosshair<T>());\n const tooltipBox = instances.get('tooltip', () => new Tooltip());\n const [categoryAxis, valueAxis] = kind.horizontal ? [yAxis, xAxis] : [xAxis, yAxis];\n const continuous = kind.continuousX;\n categoryAxis.setConfig({\n type: kind.horizontal ? 'y' : 'x',\n // 连续的横轴:Unovis 自己取刻度,网格线与数值轴一样;类目轴:每行一个刻度\n tickValues: continuous ? undefined : rows.map((_row, position) => position),\n numTicks: continuous ? 6 : undefined,\n tickFormat: continuous\n ? (tick) => continuous.format(Number(tick))\n : (tick) => categoryText(rows[Number(tick)]),\n gridLine: continuous ? grid : false,\n tickLine: false,\n domainLine: false,\n tickTextHideOverlapping: true,\n tickPadding: 8,\n label: continuous?.title,\n labelMargin: 8,\n });\n valueAxis.setConfig({\n type: kind.horizontal ? 'x' : 'y',\n numTicks: 5,\n // 有第二数值轴时用对齐的刻度,两边的刻度落在同一组网格线上\n tickValues: aligned?.primary.ticks,\n tickFormat: (tick) =>\n kind.percent\n ? format.number(Number(tick), { style: 'percent', maximumFractionDigits: 0 })\n : format.number(Number(tick), valueFormat),\n gridLine: grid,\n tickLine: false,\n domainLine: false,\n tickPadding: 8,\n });\n const dotted = kind.crosshairSeries ? shown.filter(kind.crosshairSeries) : shown;\n crosshair.setConfig({\n // 访问器直接给:容器还没按尺寸渲染过时不会把组件的访问器转交十字线,Unovis 会报 “Y accessors have not been configured”\n x,\n ...(kind.stacked ? { yStacked: dotted.map(y) } : { y: dotted.map(y) }),\n template: (row: T) => renderTooltip(row),\n color: (_row: T, position: number) => dotted[position]?.color ?? 'transparent',\n getCircles: kind.crosshairDots ? undefined : () => [],\n hideWhenFarFromPointer: false,\n onCrosshairMove: (_x, row) => hover(row),\n });\n\n tooltipBox.setConfig({\n triggers: kind.pointTooltip ? { [kind.pointTooltip]: (row: T) => renderTooltip(row) } : {},\n });\n const config = {\n components,\n xAxis,\n yAxis,\n // 能下钻时没有提示框也要十字线:靠它知道指针在哪一行\n crosshair:\n (tooltip || (onItemClick && !kind.itemSelector)) && !kind.pointTooltip\n ? crosshair\n : undefined,\n tooltip: tooltip ? tooltipBox : undefined,\n [kind.horizontal ? 'xDomain' : 'yDomain']: domain,\n // 第二数值轴的刻度文字画在右侧留出的空白里\n padding: aligned\n ? { ...kind.padding, right: Math.max(kind.padding?.right ?? 0, SECONDARY_AXIS_WIDTH) }\n : (kind.padding ?? {}),\n ariaLabel: null,\n duration: chartDuration(element),\n onRenderComplete: haloPlotlineLabels,\n };\n if (container) container.update(config, undefined, rows);\n else {\n container = new XYContainer<T>(element, config, rows);\n containerElement = element;\n uniqueHighlightFilter(element, `${id}-highlight`);\n }\n });\n\n return () => (\n <ChartFrame\n {...rest}\n sx={[!kind.crosshairDots && xyChartStyles.hideCrosshairLine, sx]}\n // 百分比堆叠时数值轴是占比:轴上方不写单位(提示框、数据表里仍带)\n unit={kind.percent ? undefined : unit}\n unitEnd={kind.secondary?.unit}\n height={height}\n legend={(legend ?? resolved.length > 1) ? resolved : []}\n hiddenKeys={hiddenSeries}\n onLegendToggle={toggle}\n loading={loading}\n skeleton={chartSkeleton(kind)}\n isEmpty={data.length === 0}\n empty={empty}\n clickable={onItemClick != null}\n onPlotClick={\n onItemClick && !kind.itemSelector\n ? () => {\n if (hovered) onItemClick(hovered.row, hovered.index);\n }\n : undefined\n }\n table={\n kind.table?.(data) ?? {\n columns: [\n lang.chartCategory,\n ...(kind.continuousX ? [kind.continuousX.label] : []),\n ...resolved.map((item) => {\n const itemUnit = onSecondary(item.key) ? kind.secondary?.unit : unit;\n return itemUnit ? `${item.label}(${itemUnit})` : item.label;\n }),\n ],\n rows: data.map((row) => ({\n header: categoryText(row),\n cells: [\n ...(kind.continuousX ? [xText(row)] : []),\n ...resolved.map((item) => {\n const value = seriesValue(row, item.key);\n return value === undefined\n ? lang.emptyValue\n : format.number(\n value,\n onSecondary(item.key) ? kind.secondary?.format : valueFormat,\n );\n }),\n ],\n })),\n }\n }\n plotRef={(element) => (plot = element)}\n footer={zoom && !kind.continuousX && data.length > 2 ? zoomBar() : undefined}\n />\n );\n },\n);\n\n/**\n * 目标线、事件竖线的文字描一圈表面色的边(同地图上地点的名字):压在柱子、折线上也看得清。\n * Unovis 的 Plotline 文字没有描边的配置项,渲染完成后补在元素上;导出图片时按计算样式一并带走\n */\nfunction haloPlotlineLabels(svg: SVGSVGElement) {\n for (const label of svg.querySelectorAll<SVGTextElement>('text[class*=\"plotline-label\"]')) {\n label.style.setProperty('paint-order', 'stroke');\n label.style.setProperty('stroke', colors.surface);\n label.style.setProperty('stroke-width', '3px');\n label.style.setProperty('stroke-linejoin', 'round');\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4OA,IAAM,uBAAuB;;AAG7B,IAAM,gBAAgB;CAAC;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;AAAE;;AAGjD,IAAa,gBAAgB,IAAI,OAAO;CAEtC,mBAAmB,EAAE,uCAAuC,IAAI;CAChE,UAAU;EAAE,SAAS;EAAS,OAAO;EAAQ,QAAQ;CAAO;CAE5D,MAAM;EAAE,SAAS;EAAQ,YAAY;EAAU,KAAK;EAAO,eAAe;CAAM;CAChF,YAAY;EAAE,UAAU;EAAG,UAAU;CAAE;CACvC,cAAc;EACZ,SAAS;EACT,YAAY;EACZ,gBAAgB;EAChB,KAAK;EACL,QAAQ;CACV;CACA,wBAAwB;EAAE,eAAe;EAAU,YAAY;CAAa;CAC5E,aAAa;EAAE,SAAS;EAAS,UAAU;EAAG,WAAW;EAAG,cAAc;CAAM;CAChF,kBAAkB,aAAqB,EAAE,QAAQ,QAAQ;CACzD,4BAA4B,aAAqB,EAAE,OAAO,QAAQ;AACpE,CAAC;;AAGD,SAAS,cAAc,EACrB,WAAW,SACX,aAAa,SAC0C;CACvD,IAAI,aAAa,SAAS,OAAAA,YAAA,UAAA,EAAA,MAAqB,cAAc,SAAQ,GAAA,IAAA;CACrE,OAAAA,YAAA,OAAAC,WAAA,EAAA,eAAA,OAAA,GAGQ,IAAI,MAAM,cAAc,cAAc,cAAc,cAAc,sBAAsB,CAAC,GAAA,CAE5F,cAAc,KAAK,SAAS,aAAQD,YAAA,UAAA;EAAA,OAE5B;EAAQ,MACT,CACF,cAAc,aACd,aACI,cAAc,0BAA0B,GAAG,QAAO,EAAG,IACrD,cAAc,gBAAgB,GAAG,QAAO,EAAG,CAAC;CACjD,GAAA,IAAA,CAEJ,CAAC,CAAA;AAGR;;AAGA,IAAa,UAAU,0BACrB,QAAA,SAwBkD;CAAA,MAAA,SAAA,CAAA;CAAA,MAAA,OAAAE,aAAA,QAAA,MAAA;CAAA,MAAA,QAAAA,aAAA,QAAA,OAAA;CAAA,MAAA,SAAAA,aAAA,QAAA,QAAA;CAAA,MAAA,cAAAA,aAAA,QAAA,aAAA;CAAA,MAAA,cAAAA,aAAA,QAAA,aAAA;CAAA,MAAA,OAAAA,aAAA,QAAA,MAAA;CAAA,MAAA,SAAAA,aAAA,QAAA,UAjBvC,GAAG;CAAA,MAAA,SAAAA,aAAA,QAAA,QAAA;CAAA,MAAA,OAAAA,aAAA,QAAA,QAEL,IAAI;CAAA,MAAA,cAAAA,aAAA,QAAA,aAAA;CAAA,MAAA,UAAAA,aAAA,QAAA,WAED,IAAI;CAAA,MAAA,UAAAA,aAAA,QAAA,WACJ,KAAK;CAAA,MAAA,eAAAC,SAAA,QAAA,uBACmC,CAAA,GAAE,KAAA,IAAA;CAAA,MAAA,QAAAD,aAAA,QAAA,OAAA;CAAA,MAAA,UAAAA,aAAA,QAAA,SAAA;CAAA,MAAA,cAAAA,aAAA,QAAA,aAAA;CAAA,MAAA,QAAAA,aAAA,QAAA,OAAA;CAAA,MAAA,cAAAA,aAAA,QAAA,aAAA;CAAA,MAAA,OAAAA,aAAA,QAAA,QAM7C,KAAK;CAAA,MAAA,YAAAC,SAAA,QAAA,oBAC+C,MAAI,KAAA,IAAA;CAAA,MAAA,OAAAD,aAAA,QAAA,MAAA;CAAA,MAAA,KAAAA,aAAA,QAAA,IAAA;CAAA,MAG5D,OAAIE,UAAA,QAAA,MAAA,IAAA;CAEP,MAAM,OAAO,QAAQ;CACrB,MAAM,SAAS,UAAU;CACzB,MAAM,KAAK,MAAM;CACjB,MAAM,WAAQC,eAAY,cAAa,OAAA,KAAO,CAAC;CAC/C,MAAM,UAAOA,eAAY,SAAA,MAAS,QAAQ,SAAS,CAAC,aAAA,MAAa,SAAS,KAAK,GAAG,CAAC,CAAC;CAEpF,MAAM,gBAAgB,QACpB,QAAQ,KAAA,IACJ,KACA,YAAA,QACE,YAAA,MAAY,IAAG,MAAA,QAAS,GAAG,IAC3B,OAAO,IAAG,MAAA,UAAW,EAAE;CAC/B,MAAM,YAAY,yBAAyB;EAAE,aAAW,YAAA;EAAE,MAAI,KAAA;CAAC,EAAE;CACjE,MAAM,gBAAgB,yBAAyB;EAC7C,aAAa,KAAA,MAAK,WAAW;EAC7B,MAAM,KAAA,MAAK,WAAW;CACxB,EAAE;CACF,MAAM,eAAe,QAAgB,KAAA,MAAK,WAAW,KAAK,SAAS,GAAG,KAAK;;CAE3E,MAAM,cAAc,KAAa,UAC/B,YAAY,GAAG,IAAI,cAAc,KAAK,IAAI,UAAU,KAAK;;CAE3D,MAAM,YAAY,QAChB,QAAA,MAAQ,QAAQ,KAAK,SAAS,MAAM,KAAK,IAAI,aAAa,KAAK,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;CACtF,MAAM,eAAe,UACnB,OAAO,OAAO,OAAO;EAAE,OAAO;EAAW,uBAAuB;CAAE,CAAC;CAErE,MAAM,SAAS,QAAW;EACxB,MAAM,IAAI,KAAA,MAAK,aAAa,MAAM,GAAG;EACrC,OAAO,MAAM,KAAA,IAAY,KAAK,aAAa,KAAA,MAAK,YAAa,OAAO,CAAC;CACvE;CAEA,SAAS,OAAO,KAAa;EAC3B,aAAA,QAAe,aAAA,MAAa,SAAS,GAAG,IACpC,aAAA,MAAa,QAAQ,SAAS,SAAS,GAAG,IAC1C,CAAC,GAAA,aAAA,OAAiB,GAAG;CAC3B;;CAGA,MAAM,gBAAgB;EACpB,MAAM,OAAO,KAAA,MAAK,SAAS;EAC3B,OAAAL,YAAA,OACW,IAAI,MAAM,cAAc,IAAI,GAAC,CAAAA,YAAA,QAAA;GAAA,UAE1B,UAAA,SAAa,CAAC,GAAG,IAAI;GAAC,oBACZ,SACf,UAAA,QAAY,KAAK,OAAO,KAAK,KAAK,OAAO,OAAO,OAAO;GAAK,OAE1D;GAAC,OACD;GAAI,QACH;GAAC,QAAA;GAAA,aAAA,OAAA,OAAA,OAAA,MAEK,aAAa,aAAa,KAAA,MAAK,SAAS;GAAC,cACzC,KAAK;GAAS,aAAA,OAAA,OAAA,OAAA,KACf,EAAE,IAAI,cAAc,WAAW;EAAC,GAAA,IAAA,GAE5C,UAAA,SAAAA,YAAA,QAAA;GAAA,WAAA;GAAA,QAAA;GAAA,WAAA,OAAA,OAAA,OAAA,WACkD,UAAA,QAAY;EAAK,GAAA;GAAA,eAAA,CAC/D,KAAK,cAAc;GAAA,SAAA;EAAA,CAAA,CAEvB,CAAA;CAGP;CAEA,MAAM,YAAY,qBAAqB;CACvC,IAAI;CAGJ,IAAI,UAA4C;CAChD,MAAM,SAAS,QAAuB;EACpC,UAAU,QAAQ,KAAA,IAAY,OAAO;GAAE;GAAK,OAAO,KAAA,MAAK,QAAQ,GAAG;EAAE;CACvE;;CAGA,SAAS,cAAc,KAAQ;EAC7B,mBAAmB,SAAS,cAAc,KAAK;EAE/C,IAAI,KAAA,MAAK,cAAc,MAAM,GAAG;EAChC,OACE,aACE,aAAa,GAAG,GAChB,KAAA,MAAK,eAAe,GAAG,KAAK,CAC1B,GAAI,KAAA,MAAK,cACL,CAAC;GAAE,OAAO,KAAA,MAAK,YAAY;GAAO,OAAO;GAAe,OAAO,MAAM,GAAG;EAAE,CAAC,IAC3E,CAAA,GAEJ,GAAG,QAAA,MACA,QAAQ,SAAS,CAAC,KAAA,MAAK,gBAAgB,YAAY,KAAK,KAAK,GAAG,MAAM,KAAA,CAAS,CAAC,CAChF,KAAK,SAAS;GACb,MAAM,QAAQ,YAAY,KAAK,KAAK,GAAG;GACvC,MAAM,QAAQ,KAAA,MAAK,UAAU,SAAS,GAAG,IAAI;GAC7C,OAAO;IACL,OAAO,KAAK;IACZ,OAAO,KAAK;IACZ,OACE,KAAA,MAAK,WAAW,UAAU,KAAA,KAAa,QAAQ,IAC3C,GAAG,WAAW,KAAK,KAAK,KAAK,EAAC,GAAI,YAAY,SAAS,KAAK,IAAI,KAAK,EAAC,KACtE,WAAW,KAAK,KAAK,KAAK;GAClC;EACF,CAAC,CAAC,CAER,GACA,cACF;EACA,OAAO;CACT;CAEA,IAAI,OAAIM,WAAkC,IAAI;CAC9C,MAAM,OAAO,kBAAY,KAAA,KAAU;CACnC,IAAI;CACJ,IAAI;CACJ,mBAAoB;EAClB,WAAW,QAAQ;EACnB,IAAI,gBAAgB,OAAO,MAAM,cAAc;CACjD,CAAC;CACD,aAAc;EAEZ,MAAM,QAAQ,KAAA,SAAQ,CAAC,KAAA,MAAK,cAAW,UAAA,QAAe;EACtD,MAAM,OAAO,QAAQ,KAAA,MAAK,MAAM,MAAM,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,GAAA,KAAA,KAAO;EAClE,MAAM,QAAK,QAAA;EACX,MAAM,UAAO,KAAA;EACb,IAAI,CAAC,WAAO,QAAA,SAAe,KAAK,WAAW,KAAK,CAAC,KAAK,GAAG;EAEzD,IAAI,aAAa,qBAAqB,SAAS;GAC7C,UAAU,QAAQ;GAClB,YAAY,KAAA;GACZ,UAAU,MAAM;EAClB;EAEA,MAAM,gBAAgB,MAAM,QAAQ,SAAS,CAAC,YAAY,KAAK,GAAG,CAAC;EACnE,MAAM,kBAAkB,MAAM,QAAQ,SAAS,YAAY,KAAK,GAAG,CAAC;EACpE,MAAM,SAAS,KAAK,KAAK,QACvB,cAAc,KAAK,SAAS,aAAa,KAAK,KAAK,GAAG,KAAK,CAAC,CAC9D;EAUA,MAAM,SAAS;GACb,GAVmB,KAAA,MAAK,eACtB,KAAA,MAAK,aAAa,MAAM,aAAa,IACrC,KAAA,MAAK,UACH,OAAO,SAAS,QAAQ,CACtB,IAAI,QAAQ,KAAK,UAAU,MAAM,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,GACtD,IAAI,QAAQ,KAAK,UAAU,MAAM,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CACxD,IACD,OAAO,KAAK;GAIhB,IAAI,QAAA,SAAW,CAAA,EAAA,CAAI,KAAK,WAAW,SAAS,OAAO,KAAK,CAAC;GACzD,IAAI,MAAA,SAAS,CAAA,EAAA,CACV,QAAQ,SAAS,KAAK,SAAS,OAAO,CAAC,CACvC,SAAS,SAAS,CAAC,OAAO,KAAK,IAAI,GAAG,OAAO,KAAK,EAAE,CAAC,CAAC;EAAC;EAG5D,MAAM,UACJ,gBAAgB,SAAS,IACrB,aACE,CACE,GAAG,QACH,GAAG,CAAC,YAAA,QAAc,IAAI,YAAA,QAAc,EAAE,CAAC,CAAC,QACrC,QAAuB,QAAQ,KAAA,CAClC,CAAC,GAEH,KAAK,SAAS,QACZ,gBAAgB,KAAK,SAAS,aAAa,KAAK,KAAK,GAAG,KAAK,CAAC,CAChE,CACF,IACA,KAAA;EACN,MAAM,SAAmD,KAAA,MAAK,UAC1D,CAAC,GAAG,CAAC,IACL,UACE,QAAQ,QAAQ,SAChB,CACE,YAAA,QAAc,OACX,KAAA,MAAK,iBAAiB,QAAQ,KAAA,IAAY,KAAK,IAAI,GAAG,GAAG,MAAM,IAClE,YAAA,QAAc,EAAE;EAExB,MAAM,IAAI,KAAA,MAAK,eACV,QAAW,KAAA,MAAK,YAAa,MAAM,GAAG,KAAK,OAC3C,MAAS,aAAqB;EACnC,MAAM,KAAK,SAAiC;GAC1C,IAAI,KAAA,MAAK,SACP,QAAQ,QAAW;IACjB,MAAM,QAAQ,aAAa,KAAK,KAAK,GAAG;IACxC,MAAM,QAAQ,SAAS,GAAG;IAC1B,OAAO,UAAU,KAAA,KAAa,UAAU,IAAI,KAAA,IAAY,QAAQ;GAClE;GACF,IAAI,WAAW,YAAY,KAAK,GAAG,GACjC,QAAQ,QAAW;IACjB,MAAM,QAAQ,aAAa,KAAK,KAAK,GAAG;IACxC,OAAO,UAAU,KAAA,IAAY,KAAA,IAAY,QAAQ,UAAU,KAAK;GAClE;GACF,QAAQ,QAAW,aAAa,KAAK,KAAK,GAAG;EAC/C;;EAEA,MAAM,cAAc,OAAgB;GAClC,IAAI,KAAA,MAAK,aAAa,OAAO,OAAO,EAAE;GACtC,MAAM,QAAQ,KAAK,WAAW,QAAQ,IAAG,MAAA,WAAY,EAAE;GACvD,OAAO,QAAQ,IAAI,KAAA,IAAY;EACjC;EACA,MAAM,mBAAmB,KAAA,MAAK,aAAa,SAAS,IAAI,SAAS;EACjE,MAAM,gBAAgB,KAAA,MAAK,aAAa,SAAS,IAAI,SAAS;EAC9D,MAAM,SAAS,QAAA,SAAW,CAAA,EAAA,CAAI,KAAK,QAAQ,aAAa;GACtD,MAAM,OAAO,UAAU,IAAI,UAAU,kBAAkB,IAAI,SAAY,CAAC,CAAC,CAAC;GAC1E,MAAM,QAAQ,SAAS,OAAO,KAAK;GACnC,MAAM,QAAQ,UAAU,OAAO,KAAK;GACpC,KAAK,UAAU;IACb,MAAM,KAAA,MAAK,aAAa,MAAM;IAC9B;IACA,OAAO,aAAa,OAAO,SAAS,UAAU,CAAC;IAC/C,WAAW;IACX,WAAW,yBAAyB;IACpC,WAAW,OAAO,QAAQ,GAAG,OAAO,MAAK,GAAI,UAAU;IACvD,eAAe,KAAA,MAAK,aAChB,sBAAsB,WACtB,sBAAsB;IAC1B,cAAc;IACd,cAAc;GAChB,CAAC;GACD,OAAO;EACT,CAAC;EAGD,MAAM,kBAAkB,MAAA,SAAS,CAAA,EAAA,CAAI,SAAS,MAAM,aAAa;GAC/D,MAAM,UAAU,KAAK,SAAS;GAC9B,MAAM,OAAO,UAAU,WAAW,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI;GAC/D,MAAM,KAAK,UAAU,WAAW,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE;GACzD,IAAI,SAAS,KAAA,KAAa,OAAO,KAAA,GAAW,OAAO,CAAA;GAEnD,MAAM,OAAO,WAAW,CAAC,KAAA,MAAK,cAAc,KAAM;GAClD,MAAM,WAAW,UAAU,IAAI,QAAQ,kBAAkB,IAAI,SAAY,CAAC,CAAC,CAAC;GAC5E,SAAS,UAAU;IACjB,MAAM,UAAU,mBAAmB;IACnC,MAAM,KAAK,IAAI,MAAM,EAAE,IAAI;IAC3B,IAAI,KAAK,IAAI,MAAM,EAAE,IAAI;IACzB,OAAO,sBAAsB,aAAa,KAAK,SAAS,WAAW,CAAC,EAAC;IACrE,WAAW,KAAK;IAEhB,eAAe,UACX,sBAAsB,mBACtB,sBAAsB;IAC1B,YAAY,OAAO;IACnB,cAAc;IACd,cAAc;GAChB,CAAC;GACD,OAAO,CAAC,QAAQ;EAClB,CAAC;EAID,MAAM,cADU,YAAA,SAAe,CAAA,EAAA,CAAI,QAAQ,SAAS,KAAK,WAAW,KAAA,CACjD,CAAM,CAAC,SAAS,MAAM,aAAa;GACpD,MAAM,KAAK,WAAW,KAAK,EAAE;GAC7B,IAAI,OAAO,KAAA,GAAW,OAAO,CAAA;GAC7B,MAAM,OAAO,UAAU,IAAI,SAAS,kBAAkB,IAAI,SAAY,CAAC,CAAC,CAAC;GACzE,KAAK,UAAU;IACb,MAAM;IACN,OAAO;IACP,OAAO,aAAa,KAAK,SAAS,WAAW,CAAC;IAC9C,WAAW;IACX,WAAW,yBAAyB;IACpC,WAAW,KAAK;IAChB,eAAe,KAAA,MAAK,aAChB,sBAAsB,cACtB,sBAAsB;IAC1B,cAAc;IACd,cAAc;GAChB,CAAC;GACD,OAAO,CAAC,IAAI;EACd,CAAC;EACD,MAAM,UAAU,YAAA,SAAe,CAAA,EAAA,CAAI,QAChC,SAAS,KAAK,WAAW,KAAA,KAAa,CAAC,KAAA,MAAK,UAC/C;EACA,MAAM,UAAU,QAAW;GACzB,MAAM,KAAK,KAAA,MAAK,cAAc,KAAA,MAAK,YAAY,MAAM,GAAG,IAAI,KAAK,QAAQ,GAAG;GAC5E,OAAO,OAAO,MACX,SACC,WAAW,KAAK,EAAE,MAAM,MAAM,MAAM,MAAM,WAAW,OAAO,QAAQ,KAAK,MAAM,CACnF;EACF;;EAEA,MAAM,SAAS,QAAW;GACxB,MAAM,OAAO,OAAO,GAAG;GACvB,IAAI,CAAC,MAAM,OAAO,KAAA;GAClB,MAAM,SAAS,MAAM,MAAM,SAAS,KAAK,QAAQ,KAAK,MAAM;GAC5D,IAAI,CAAC,KAAA,MAAK,WAAW,KAAA,MAAK,SAAS,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG;GAEvD,OADa,MAAM,MAAM,GAAG,MAAM,QAAQ,MAAM,IAAI,CAC7C,CAAI,CAAC,QAAQ,KAAK,SAAS,MAAM,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;EAC3E;EACA,MAAM,aAAa,QAAW;GAC5B,MAAM,OAAO,OAAO,GAAG;GACvB,MAAM,SAAS,MAAM,MAAM,SAAS,KAAK,QAAQ,MAAM,MAAM;GAC7D,OAAO,MAAM,QAAQ,aAAa,KAAK,OAAO,CAAC,IAAK,QAAQ,SAAS,OAAO;EAC9E;EACA,MAAM,QAAQ,UAAU,IAAI,eAAe,IAAI,QAAW;GAAE;GAAG,SAAS,KAAA;EAAU,CAAC,CAAC;EACpF,MAAM,UAAU;GACd;GACA,GAAG;GACH,MAAM;GACN,OAAO;GACP,aAAa;GACb,aAAa;GACb,QAAQ,QAAW,OAAO,GAAG,CAAC,EAAE,SAAS;GACzC,eAAe,SAAS;GACxB,YAAY,OAAO;EACrB,CAAC;EAGD,MAAM,kBAAkB,UACpB,QAAQ,UAAU,MAAM,KAAK,MAAM,aAAa;GAC9C,MAAM,QAAQ,UAAU,IAAI,aAAa,kBAAkB;IACzD,MAAM,OAAO,IAAI,SAAY,CAAC,CAAC;IAC/B,KAAK,YAAY;IACjB,OAAO;GACT,CAAC;GACD,MAAM,UAAU;IACd,MAAM;IACN,OAAO,QAAQ,QAAQ,MAAM;IAC7B,OAAO;IACP,WAAW;IACX,WAAW,OAAO,OAAO,MAAM,KAAA,MAAK,WAAW,MAAM;IACrD,eAAe,sBAAsB;IACrC,cAAc;IACd,YAAY,OAAO;GACrB,CAAC;GACD,OAAO;EACT,CAAC,IACD,CAAA;EACJ,MAAM,aAAa;GACjB,GAAG;GACH,GAAG,KAAA,MAAK,WAAW;IACjB,QAAQ;IACR;IACA;IACA,UAAU,UAAU;IACpB,QACE,KAAA,MAAK,gBAAY,YAAA,QACb,GACG,KAAA,MAAK,eAAe,EAEnB,QAAQ,KAAQ,QAAe,UAAkB;KAC/C,MAAM,WAAW,KAAA,MAAK,QAAQ,GAAG;KACjC,MAAM,KAAK,YAAY,IAAI,WAAW;KACtC,YAAA,MAAY,KAAA,MAAK,OAAO,KAAK,EAAE;IACjC,EACF,EACF,IACA,CAAC;GACT,CAAC;GACD,GAAG;GACH,GAAG;GACH,GAAI,OAAO,SAAS,IAAI,CAAC,KAAK,IAAI,CAAA;GAClC,GAAG;EAAe;EAEpB,MAAM,QAAQ,UAAU,IAAI,eAAe,IAAI,KAAQ,EAAE,MAAM,IAAI,CAAC,CAAC;EACrE,MAAM,QAAQ,UAAU,IAAI,eAAe,IAAI,KAAQ,EAAE,MAAM,IAAI,CAAC,CAAC;EACrE,MAAM,YAAY,UAAU,IAAI,mBAAmB,IAAI,UAAa,CAAC;EACrE,MAAM,aAAa,UAAU,IAAI,iBAAiB,IAAI,QAAQ,CAAC;EAC/D,MAAM,CAAC,cAAc,aAAa,KAAA,MAAK,aAAa,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,KAAK;EAClF,MAAM,aAAa,KAAA,MAAK;EACxB,aAAa,UAAU;GACrB,MAAM,KAAA,MAAK,aAAa,MAAM;GAE9B,YAAY,aAAa,KAAA,IAAY,KAAK,KAAK,MAAM,aAAa,QAAQ;GAC1E,UAAU,aAAa,IAAI,KAAA;GAC3B,YAAY,cACP,SAAS,WAAW,OAAO,OAAO,IAAI,CAAC,KACvC,SAAS,aAAa,KAAK,OAAO,IAAI,EAAE;GAC7C,UAAU,aAAU,KAAA,QAAU;GAC9B,UAAU;GACV,YAAY;GACZ,yBAAyB;GACzB,aAAa;GACb,OAAO,YAAY;GACnB,aAAa;EACf,CAAC;EACD,UAAU,UAAU;GAClB,MAAM,KAAA,MAAK,aAAa,MAAM;GAC9B,UAAU;GAEV,YAAY,SAAS,QAAQ;GAC7B,aAAa,SACX,KAAA,MAAK,UACD,OAAO,OAAO,OAAO,IAAI,GAAG;IAAE,OAAO;IAAW,uBAAuB;GAAE,CAAC,IAC1E,OAAO,OAAO,OAAO,IAAI,GAAC,YAAA,KAAa;GAC7C,UAAQ,KAAA;GACR,UAAU;GACV,YAAY;GACZ,aAAa;EACf,CAAC;EACD,MAAM,SAAS,KAAA,MAAK,kBAAkB,MAAM,OAAO,KAAA,MAAK,eAAe,IAAI;EAC3E,UAAU,UAAU;GAElB;GACA,GAAI,KAAA,MAAK,UAAU,EAAE,UAAU,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,IAAI,CAAC,EAAE;GACpE,WAAW,QAAW,cAAc,GAAG;GACvC,QAAQ,MAAS,aAAqB,OAAO,SAAS,EAAE,SAAS;GACjE,YAAY,KAAA,MAAK,gBAAgB,KAAA,UAAkB,CAAA;GACnD,wBAAwB;GACxB,kBAAkB,IAAI,QAAQ,MAAM,GAAG;EACzC,CAAC;EAED,WAAW,UAAU,EACnB,UAAU,KAAA,MAAK,eAAe,GAAG,KAAA,MAAK,gBAAgB,QAAW,cAAc,GAAG,EAAE,IAAI,CAAC,EAC3F,CAAC;EACD,MAAM,SAAS;GACb;GACA;GACA;GAEA,YACG,QAAA,SAAY,YAAA,SAAe,CAAC,KAAA,MAAK,iBAAkB,CAAC,KAAA,MAAK,eACtD,YACA,KAAA;GACN,SAAS,QAAA,QAAU,aAAa,KAAA;IAC/B,KAAA,MAAK,aAAa,YAAY,YAAY;GAE3C,SAAS,UACL;IAAE,GAAG,KAAA,MAAK;IAAS,OAAO,KAAK,IAAI,KAAA,MAAK,SAAS,SAAS,GAAG,oBAAoB;GAAE,IAClF,KAAA,MAAK,WAAW,CAAC;GACtB,WAAW;GACX,UAAU,cAAc,OAAO;GAC/B,kBAAkB;EACpB;EACA,IAAI,WAAW,UAAU,OAAO,QAAQ,KAAA,GAAW,IAAI;OAClD;GACH,YAAY,IAAI,YAAe,SAAS,QAAQ,IAAI;GACpD,mBAAmB;GACnB,sBAAsB,SAAS,GAAG,GAAE,WAAY;EAClD;CACF,CAAC;CAED,aAAON,YAAA,YAAAC,WAEC,MAAI;EAAA,MACJ,CAAA,IAAA,aAAC,CAAC,KAAA,MAAK,iBAAiB,cAAc,mBAAiB,IAAA,GAAA,GAAA,KAAA;EAAK,QAE1D,KAAA,MAAK,UAAU,KAAA,IAAS,KAAA;EAAO,WAC5B,KAAA,MAAK,WAAW;EAAI,UAAA,OAAA;EAAA,UAEpB,OAAA,SAAU,SAAA,MAAS,SAAS,IAAC,SAAA,QAAe,CAAA;EAAE,cAAA,aAAA;EAAA,kBAEvC;EAAM,WAAA,QAAA;EAAA,YAEZ,cAAa,KAAA,KAAK;EAAC,WACpB,KAAA,MAAK,WAAW;EAAC,SAAA,MAAA;EAAA,aAEf,YAAA,SAAe;EAAI,eAE5B,YAAA,SAAe,CAAC,KAAA,MAAK,qBACX;GACJ,IAAI,SAAS,YAAA,MAAY,QAAQ,KAAK,QAAQ,KAAK;EACrD,IACA,KAAA;EAAS,SAGb,KAAA,MAAK,QAAK,KAAA,KAAO,KAAK;GACpB,SAAS;IACP,KAAK;IACL,GAAI,KAAA,MAAK,cAAc,CAAC,KAAA,MAAK,YAAY,KAAK,IAAI,CAAA;IAClD,GAAG,SAAA,MAAS,KAAK,SAAS;KACxB,MAAM,WAAW,YAAY,KAAK,GAAG,IAAI,KAAA,MAAK,WAAW,OAAI,KAAA;KAC7D,OAAO,WAAW,GAAG,KAAK,MAAK,GAAI,SAAQ,KAAM,KAAK;IACxD,CAAC;GAAC;GAEJ,MAAM,KAAA,MAAK,KAAK,SAAS;IACvB,QAAQ,aAAa,GAAG;IACxB,OAAO,CACL,GAAI,KAAA,MAAK,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAAA,GACtC,GAAG,SAAA,MAAS,KAAK,SAAS;KACxB,MAAM,QAAQ,YAAY,KAAK,KAAK,GAAG;KACvC,OAAO,UAAU,KAAA,IACb,KAAK,aACL,OAAO,OACL,OACA,YAAY,KAAK,GAAG,IAAI,KAAA,MAAK,WAAW,SAAM,YAAA,KAChD;IACN,CAAC,CAAC;GAEN,EAAE;EACJ;EAAC,WAAA,OAAA,OAAA,OAAA,MAEO,YAAa,KAAA,QAAO;EAAQ,UAC9B,KAAA,SAAQ,CAAC,KAAA,MAAK,eAAe,KAAA,MAAK,SAAS,IAAI,QAAQ,IAAI,KAAA;CAAS,CAAA,GAAA,IAAA;AAGlF,GAAC;CAAA,MAAA;CAAA,OAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;CAAA;AAAA,CACH;;;;;AAMA,SAAS,mBAAmB,KAAoB;CAC9C,KAAK,MAAM,SAAS,IAAI,iBAAiC,iCAA+B,GAAG;EACzF,MAAM,MAAM,YAAY,eAAe,QAAQ;EAC/C,MAAM,MAAM,YAAY,UAAU,OAAO,OAAO;EAChD,MAAM,MAAM,YAAY,gBAAgB,KAAK;EAC7C,MAAM,MAAM,YAAY,mBAAmB,OAAO;CACpD;AACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** 一条数值轴:范围与刻度 */
|
|
2
|
+
export interface AxisTicks {
|
|
3
|
+
/** 范围 [最小, 最大],两端都是刻度 */
|
|
4
|
+
domain: [number, number];
|
|
5
|
+
/** 刻度,从小到大 */
|
|
6
|
+
ticks: number[];
|
|
7
|
+
}
|
|
8
|
+
/** 对齐的两条数值轴 */
|
|
9
|
+
export interface AlignedAxes {
|
|
10
|
+
/** 主轴(左侧) */
|
|
11
|
+
primary: AxisTicks;
|
|
12
|
+
/** 第二数值轴(右侧):刻度数与主轴相同 */
|
|
13
|
+
secondary: AxisTicks;
|
|
14
|
+
/** 第二轴的值换算到主轴的坐标 */
|
|
15
|
+
toPrimary: (value: number) => number;
|
|
16
|
+
}
|
|
17
|
+
/** 不小于 raw 的“好看”步长:1、2、2.5、5 乘 10 的整数次幂 */
|
|
18
|
+
export declare function niceStep(raw: number): number;
|
|
19
|
+
/**
|
|
20
|
+
* 两组值的对齐刻度:primary、secondary 是两条轴要包含的值(含 0 时从 0 起)。
|
|
21
|
+
* 主轴约 count 格(d3 的 nice),第二轴取同样多的格
|
|
22
|
+
*/
|
|
23
|
+
export declare function alignedTicks(primary: readonly number[], secondary: readonly number[], count?: number): AlignedAxes;
|