@zerodep-dev/vue-tsx-pro-ui 0.0.0-stage → 0.2.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/code-editor/CodeEditor.d.ts +18 -0
- package/dist/code-editor/CodeEditor.js +57 -0
- package/dist/code-editor/CodeEditor.js.map +1 -0
- package/dist/code-editor/editor.d.ts +52 -0
- package/dist/code-editor/editor.js +225 -0
- package/dist/code-editor/editor.js.map +1 -0
- package/dist/code-editor/index.d.ts +9 -0
- package/dist/code-editor/index.js +3 -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 +404 -0
- package/dist/config/lang/en-US.js.map +1 -0
- package/dist/config/lang/format.d.ts +51 -0
- package/dist/config/lang/format.js +120 -0
- package/dist/config/lang/format.js.map +1 -0
- package/dist/config/lang/lang.d.ts +666 -0
- package/dist/config/lang/lang.js +31 -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 +404 -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 +20 -0
- package/dist/diagram/index.js +12 -0
- package/dist/diagram/layout.d.ts +57 -0
- package/dist/diagram/layout.js +50 -0
- package/dist/diagram/layout.js.map +1 -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 +165 -0
- package/dist/form/Field.js +338 -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 +195 -0
- package/dist/form/useForm.js +416 -0
- package/dist/form/useForm.js.map +1 -0
- package/dist/index.d.ts +285 -0
- package/dist/index.js +285 -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 +598 -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 +187 -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 +66 -0
- package/dist/input/people.js +47 -0
- package/dist/input/people.js.map +1 -0
- package/dist/input/remote-items.d.ts +22 -0
- package/dist/input/remote-items.js +41 -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 +67 -0
- package/dist/patterns/QueryTable.js +301 -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 +174 -0
- package/dist/patterns/messages.js +186 -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/clone.d.ts +8 -0
- package/dist/utils/data/clone.js +21 -0
- package/dist/utils/data/clone.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 +196 -0
- package/dist/utils/data/date.js +421 -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 +62 -0
- package/dist/utils/data/numeric.js +178 -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 +14 -0
- package/dist/utils/dom/download.js +36 -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/error-message.d.ts +17 -0
- package/dist/utils/request/error-message.js +50 -0
- package/dist/utils/request/error-message.js.map +1 -0
- package/dist/utils/request/http.d.ts +165 -0
- package/dist/utils/request/http.js +247 -0
- package/dist/utils/request/http.js.map +1 -0
- package/dist/utils/request/use-autosave.d.ts +35 -0
- package/dist/utils/request/use-autosave.js +69 -0
- package/dist/utils/request/use-autosave.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 +258 -3
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { shallowRef } from "vue";
|
|
2
|
+
//#region src/utils/data/tree.ts
|
|
3
|
+
/**
|
|
4
|
+
* 树状数据的共用逻辑:按展开状态展开成一列行、勾选的父子联动(含半选)、展开时懒加载子项,
|
|
5
|
+
* 以及搜索过滤、勾选结果的取法(只要父 / 只要子 / 全部)、到某个节点的路径、移动节点。
|
|
6
|
+
* TreeDataTable(层级行)、Tree、TreeSelect、Cascader、Transfer 共用;数据形状不限,由 getKey / getChildren 读取。
|
|
7
|
+
*
|
|
8
|
+
* const rows = flattenTree(roots, { getKey, getChildren }, new Set(expanded));
|
|
9
|
+
* const index = indexTree(roots, { getKey, getChildren });
|
|
10
|
+
* checked = toggleChecked(index, checked, key); // 勾上 / 取消一项,子孙与祖先跟着变
|
|
11
|
+
* const states = checkStates(index, checked); // key → checked / indeterminate / unchecked
|
|
12
|
+
* const value = checkedByStrategy(index, checked, 'parent'); // 父节点全勾上时只要父节点
|
|
13
|
+
* const { include, expand } = filterTree(roots, accessors, (node) => node.name.includes(query));
|
|
14
|
+
* flattenTree(roots, accessors, new Set([...expanded, ...expand]), { include });
|
|
15
|
+
* roots = moveNode(roots, { ...accessors, withChildren }, key, { parent: 'b', index: 0 });
|
|
16
|
+
* roots = buildTree(flatRows, { getKey: (r) => r.id, getParent: (r) => r.parentId }); // 平铺的行(服务端搜索的结果)组装成树
|
|
17
|
+
*/
|
|
18
|
+
/** 节点能不能展开 */
|
|
19
|
+
var isExpandable = (node, { getChildren, hasChildren }) => hasChildren?.(node) ?? (getChildren(node)?.length ?? 0) > 0;
|
|
20
|
+
/** 按展开状态深度优先展开成一列:只有展开了的节点的子节点出现在结果里 */
|
|
21
|
+
function flattenTree(roots, accessors, expanded, { order = (level) => level, include } = {}) {
|
|
22
|
+
const result = [];
|
|
23
|
+
const visit = (level, depth, parent) => {
|
|
24
|
+
const keyOf = new Map(level.map((node, index) => [node, accessors.getKey(node, index)]));
|
|
25
|
+
const sorted = order(level).filter((node) => !include || include.has(keyOf.get(node)));
|
|
26
|
+
sorted.forEach((node, index) => {
|
|
27
|
+
const key = keyOf.get(node);
|
|
28
|
+
const expandable = isExpandable(node, accessors);
|
|
29
|
+
result.push({
|
|
30
|
+
node,
|
|
31
|
+
key,
|
|
32
|
+
depth,
|
|
33
|
+
parent,
|
|
34
|
+
expandable,
|
|
35
|
+
setSize: sorted.length,
|
|
36
|
+
position: index + 1
|
|
37
|
+
});
|
|
38
|
+
if (expandable && expanded.has(key)) visit(accessors.getChildren(node) ?? [], depth + 1, key);
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
visit(roots, 0, void 0);
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
/** 建立整棵已加载的树的索引 */
|
|
45
|
+
function indexTree(roots, accessors) {
|
|
46
|
+
const order = [];
|
|
47
|
+
const parents = /* @__PURE__ */ new Map();
|
|
48
|
+
const children = /* @__PURE__ */ new Map();
|
|
49
|
+
const visit = (level, parent) => {
|
|
50
|
+
const keys = level.map((node, index) => accessors.getKey(node, index));
|
|
51
|
+
if (parent !== void 0) children.set(parent, keys);
|
|
52
|
+
level.forEach((node, index) => {
|
|
53
|
+
const key = keys[index];
|
|
54
|
+
order.push(key);
|
|
55
|
+
parents.set(key, parent);
|
|
56
|
+
visit(accessors.getChildren(node) ?? [], key);
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
visit(roots, void 0);
|
|
60
|
+
return {
|
|
61
|
+
order,
|
|
62
|
+
parents,
|
|
63
|
+
children
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 实际勾上的节点:自己或任何祖先在 checked 里(父节点勾上之后才懒加载出来的子节点因此也算勾上),
|
|
68
|
+
* 或者已加载的子节点全勾上了(checked 由外部给出、没有写全父节点时)
|
|
69
|
+
*/
|
|
70
|
+
function effectiveChecked(index, checked) {
|
|
71
|
+
const listed = new Set(checked);
|
|
72
|
+
const result = /* @__PURE__ */ new Set();
|
|
73
|
+
for (const key of index.order) {
|
|
74
|
+
const parent = index.parents.get(key);
|
|
75
|
+
if (listed.has(key) || parent !== void 0 && result.has(parent)) result.add(key);
|
|
76
|
+
}
|
|
77
|
+
for (let i = index.order.length - 1; i >= 0; i--) {
|
|
78
|
+
const children = index.children.get(index.order[i]);
|
|
79
|
+
if (children?.length && children.every((child) => result.has(child))) result.add(index.order[i]);
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 勾上或取消 key:子孙跟着变;祖先的子节点全勾上时祖先也勾上,否则取消。
|
|
85
|
+
* 返回勾上的全部节点(按树的顺序),可以直接写回 checked
|
|
86
|
+
*/
|
|
87
|
+
function toggleChecked(index, checked, key) {
|
|
88
|
+
const result = effectiveChecked(index, checked);
|
|
89
|
+
const next = !result.has(key);
|
|
90
|
+
const visit = (current) => {
|
|
91
|
+
if (next) result.add(current);
|
|
92
|
+
else result.delete(current);
|
|
93
|
+
index.children.get(current)?.forEach(visit);
|
|
94
|
+
};
|
|
95
|
+
visit(key);
|
|
96
|
+
for (let parent = index.parents.get(key); parent !== void 0;) {
|
|
97
|
+
if (index.children.get(parent).every((child) => result.has(child))) result.add(parent);
|
|
98
|
+
else result.delete(parent);
|
|
99
|
+
parent = index.parents.get(parent);
|
|
100
|
+
}
|
|
101
|
+
return index.order.filter((item) => result.has(item));
|
|
102
|
+
}
|
|
103
|
+
/** 按取法给出勾上的节点(按树的顺序);checked 可以是 toggleChecked 的结果,也可以是外部给的部分节点 */
|
|
104
|
+
function checkedByStrategy(index, checked, strategy) {
|
|
105
|
+
const effective = effectiveChecked(index, checked);
|
|
106
|
+
return index.order.filter((key) => {
|
|
107
|
+
if (!effective.has(key)) return false;
|
|
108
|
+
if (strategy === "child") return !index.children.get(key)?.length;
|
|
109
|
+
if (strategy === "parent") {
|
|
110
|
+
const parent = index.parents.get(key);
|
|
111
|
+
return parent === void 0 || !effective.has(parent);
|
|
112
|
+
}
|
|
113
|
+
return true;
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/** 从第一层到 key 的各节点的 key(含 key 自己);key 不在树里时为空数组。Cascader 的路径、面包屑用它 */
|
|
117
|
+
function treePath(index, key) {
|
|
118
|
+
if (!index.parents.has(key)) return [];
|
|
119
|
+
const path = [];
|
|
120
|
+
for (let current = key; current !== void 0;) {
|
|
121
|
+
path.unshift(current);
|
|
122
|
+
current = index.parents.get(current);
|
|
123
|
+
}
|
|
124
|
+
return path;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 搜索过滤:留下匹配的节点与它们的祖先,并展开祖先(只看已加载的节点)。
|
|
128
|
+
* 匹配的节点的子孙不跟着留下(它们自己匹配才留下),同 Ant Design TreeSelect 的搜索
|
|
129
|
+
*/
|
|
130
|
+
function filterTree(roots, accessors, match) {
|
|
131
|
+
const result = {
|
|
132
|
+
include: /* @__PURE__ */ new Set(),
|
|
133
|
+
expand: /* @__PURE__ */ new Set(),
|
|
134
|
+
matched: /* @__PURE__ */ new Set()
|
|
135
|
+
};
|
|
136
|
+
const visit = (level) => {
|
|
137
|
+
let any = false;
|
|
138
|
+
level.forEach((node, index) => {
|
|
139
|
+
const key = accessors.getKey(node, index);
|
|
140
|
+
const self = match(node);
|
|
141
|
+
const below = visit(accessors.getChildren(node) ?? []);
|
|
142
|
+
if (self) result.matched.add(key);
|
|
143
|
+
if (below) result.expand.add(key);
|
|
144
|
+
if (self || below) {
|
|
145
|
+
result.include.add(key);
|
|
146
|
+
any = true;
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
return any;
|
|
150
|
+
};
|
|
151
|
+
visit(roots);
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* 平铺的行(每行带父 key)组装成树,返回第一层;同级保持 rows 里的顺序,叶子的 children 是空数组。
|
|
156
|
+
* 服务端搜索懒加载的树时回“匹配的节点和它们的祖先”(query 库的 withAncestors),组装后再用 filterTree 得到要展开、高亮的节点。
|
|
157
|
+
* key 重复或父子成环时报错(环上的行到不了第一层)
|
|
158
|
+
*/
|
|
159
|
+
function buildTree(rows, { getKey, getParent, withChildren }) {
|
|
160
|
+
const make = withChildren ?? ((row, children) => ({
|
|
161
|
+
...row,
|
|
162
|
+
children
|
|
163
|
+
}));
|
|
164
|
+
const keys = /* @__PURE__ */ new Set();
|
|
165
|
+
for (const row of rows) {
|
|
166
|
+
const key = getKey(row);
|
|
167
|
+
if (keys.has(key)) throw new Error(`buildTree:key ${key} 出现了两次`);
|
|
168
|
+
keys.add(key);
|
|
169
|
+
}
|
|
170
|
+
const roots = [];
|
|
171
|
+
const childrenOf = /* @__PURE__ */ new Map();
|
|
172
|
+
for (const row of rows) {
|
|
173
|
+
const parent = getParent(row);
|
|
174
|
+
if (parent == null || parent === getKey(row) || !keys.has(parent)) roots.push(row);
|
|
175
|
+
else childrenOf.set(parent, [...childrenOf.get(parent) ?? [], row]);
|
|
176
|
+
}
|
|
177
|
+
let built = 0;
|
|
178
|
+
const node = (row) => {
|
|
179
|
+
built++;
|
|
180
|
+
return make(row, (childrenOf.get(getKey(row)) ?? []).map(node));
|
|
181
|
+
};
|
|
182
|
+
const tree = roots.map(node);
|
|
183
|
+
if (built < rows.length) throw new Error("buildTree:有的行的父子关系成了环,到不了第一层");
|
|
184
|
+
return tree;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* 把 key 移到 target(不改原数据,返回新的第一层;沿途的节点用 withChildren 重建,其余节点原样复用)。
|
|
188
|
+
* key 不存在、目标是它自己或它的子孙时返回 null(拖到自己里面不成立)
|
|
189
|
+
*/
|
|
190
|
+
function moveNode(roots, editor, key, target) {
|
|
191
|
+
const index = indexTree(roots, editor);
|
|
192
|
+
if (!index.parents.has(key)) return null;
|
|
193
|
+
if (target.parent !== void 0) {
|
|
194
|
+
if (!index.parents.has(target.parent)) return null;
|
|
195
|
+
if (treePath(index, target.parent).includes(key)) return null;
|
|
196
|
+
}
|
|
197
|
+
let moving;
|
|
198
|
+
const removePath = new Set(treePath(index, key).slice(0, -1));
|
|
199
|
+
const remove = (level) => level.flatMap((node, position) => {
|
|
200
|
+
const nodeKey = editor.getKey(node, position);
|
|
201
|
+
if (nodeKey === key) {
|
|
202
|
+
moving = node;
|
|
203
|
+
return [];
|
|
204
|
+
}
|
|
205
|
+
if (!removePath.has(nodeKey)) return [node];
|
|
206
|
+
return [editor.withChildren(node, remove(editor.getChildren(node) ?? []))];
|
|
207
|
+
});
|
|
208
|
+
const without = remove(roots);
|
|
209
|
+
const insert = (level) => {
|
|
210
|
+
const next = [...level];
|
|
211
|
+
next.splice(Math.min(Math.max(target.index, 0), next.length), 0, moving);
|
|
212
|
+
return next;
|
|
213
|
+
};
|
|
214
|
+
if (target.parent === void 0) return insert(without);
|
|
215
|
+
const insertPath = new Set(treePath(indexTree(without, editor), target.parent));
|
|
216
|
+
const add = (level) => level.map((node, position) => {
|
|
217
|
+
const nodeKey = editor.getKey(node, position);
|
|
218
|
+
if (!insertPath.has(nodeKey)) return node;
|
|
219
|
+
const children = editor.getChildren(node) ?? [];
|
|
220
|
+
return editor.withChildren(node, nodeKey === target.parent ? insert(children) : add(children));
|
|
221
|
+
});
|
|
222
|
+
return add(without);
|
|
223
|
+
}
|
|
224
|
+
/** 每个节点的勾选状态:子孙里有勾上的、但自己没有全勾上时是 indeterminate */
|
|
225
|
+
function checkStates(index, checked) {
|
|
226
|
+
const effective = effectiveChecked(index, checked);
|
|
227
|
+
const states = /* @__PURE__ */ new Map();
|
|
228
|
+
for (let i = index.order.length - 1; i >= 0; i--) {
|
|
229
|
+
const key = index.order[i];
|
|
230
|
+
if (effective.has(key)) {
|
|
231
|
+
states.set(key, "checked");
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
const some = index.children.get(key)?.some((child) => states.get(child) !== "unchecked");
|
|
235
|
+
states.set(key, some ? "indeterminate" : "unchecked");
|
|
236
|
+
}
|
|
237
|
+
return states;
|
|
238
|
+
}
|
|
239
|
+
/** 展开状态与懒加载(在 setup 里调用) */
|
|
240
|
+
function useTreeExpansion({ expanded, setExpanded, getChildren, loadChildren, onLoadError }) {
|
|
241
|
+
const loading = shallowRef(/* @__PURE__ */ new Set());
|
|
242
|
+
const isExpanded = (key) => expanded().includes(key);
|
|
243
|
+
const collapse = (key) => setExpanded(expanded().filter((item) => item !== key));
|
|
244
|
+
async function setOpen(node, key, open) {
|
|
245
|
+
if (isExpanded(key) === open) return;
|
|
246
|
+
if (!open) return collapse(key);
|
|
247
|
+
setExpanded([...expanded(), key]);
|
|
248
|
+
if (!loadChildren || loading.value.has(key) || (getChildren(node)?.length ?? 0) > 0) return;
|
|
249
|
+
const pending = loadChildren(node);
|
|
250
|
+
if (!(pending instanceof Promise)) return;
|
|
251
|
+
loading.value = /* @__PURE__ */ new Set([...loading.value, key]);
|
|
252
|
+
try {
|
|
253
|
+
await pending;
|
|
254
|
+
} catch (error) {
|
|
255
|
+
collapse(key);
|
|
256
|
+
if (onLoadError) onLoadError(error, node);
|
|
257
|
+
else console.error("树的子节点加载失败", error);
|
|
258
|
+
} finally {
|
|
259
|
+
const next = new Set(loading.value);
|
|
260
|
+
next.delete(key);
|
|
261
|
+
loading.value = next;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
isExpanded,
|
|
266
|
+
isLoading: (key) => loading.value.has(key),
|
|
267
|
+
setOpen
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
//#endregion
|
|
271
|
+
export { buildTree, checkStates, checkedByStrategy, filterTree, flattenTree, indexTree, isExpandable, moveNode, toggleChecked, treePath, useTreeExpansion };
|
|
272
|
+
|
|
273
|
+
//# sourceMappingURL=tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","names":[],"sources":["../../../src/utils/data/tree.ts"],"sourcesContent":["/**\n * 树状数据的共用逻辑:按展开状态展开成一列行、勾选的父子联动(含半选)、展开时懒加载子项,\n * 以及搜索过滤、勾选结果的取法(只要父 / 只要子 / 全部)、到某个节点的路径、移动节点。\n * TreeDataTable(层级行)、Tree、TreeSelect、Cascader、Transfer 共用;数据形状不限,由 getKey / getChildren 读取。\n *\n * const rows = flattenTree(roots, { getKey, getChildren }, new Set(expanded));\n * const index = indexTree(roots, { getKey, getChildren });\n * checked = toggleChecked(index, checked, key); // 勾上 / 取消一项,子孙与祖先跟着变\n * const states = checkStates(index, checked); // key → checked / indeterminate / unchecked\n * const value = checkedByStrategy(index, checked, 'parent'); // 父节点全勾上时只要父节点\n * const { include, expand } = filterTree(roots, accessors, (node) => node.name.includes(query));\n * flattenTree(roots, accessors, new Set([...expanded, ...expand]), { include });\n * roots = moveNode(roots, { ...accessors, withChildren }, key, { parent: 'b', index: 0 });\n * roots = buildTree(flatRows, { getKey: (r) => r.id, getParent: (r) => r.parentId }); // 平铺的行(服务端搜索的结果)组装成树\n */\nimport { shallowRef } from 'vue';\n\n/** 怎样从数据里读出树的结构 */\nexport interface TreeAccessors<T> {\n /** 节点的 key,整棵树里唯一;index 是它在同级里的位置 */\n getKey: (node: T, index: number) => string;\n /** 子节点;叶子或还没加载时返回 undefined / 空数组 */\n getChildren: (node: T) => readonly T[] | undefined;\n /** 有没有子节点(懒加载时子节点还没取回来也算有);不写时看 getChildren 是否非空 */\n hasChildren?: (node: T) => boolean;\n}\n\n/** 展开成一列的一行 */\nexport interface FlatTreeNode<T> {\n /** 原始数据 */\n readonly node: T;\n /** getKey 给出的 key */\n readonly key: string;\n /** 层级,第一层为 0 */\n readonly depth: number;\n /** 父节点的 key;第一层为 undefined */\n readonly parent: string | undefined;\n /** 能不能展开(有子节点,或懒加载时声明了有) */\n readonly expandable: boolean;\n /** 同级一共几个(aria-setsize) */\n readonly setSize: number;\n /** 在同级里排第几,从 1 开始(aria-posinset) */\n readonly position: number;\n}\n\n/** 节点能不能展开 */\nexport const isExpandable = <T>(node: T, { getChildren, hasChildren }: TreeAccessors<T>): boolean =>\n hasChildren?.(node) ?? (getChildren(node)?.length ?? 0) > 0;\n\n/** flattenTree 的选项 */\nexport interface FlattenTreeOptions<T> {\n /** 改写每一层的顺序(TreeDataTable 按当前排序),不写时按数据顺序 */\n order?: (level: readonly T[]) => readonly T[];\n /** 只要这些节点(搜索过滤:filterTree 的 include),不写时全要 */\n include?: ReadonlySet<string>;\n}\n\n/** 按展开状态深度优先展开成一列:只有展开了的节点的子节点出现在结果里 */\nexport function flattenTree<T>(\n roots: readonly T[],\n accessors: TreeAccessors<T>,\n expanded: ReadonlySet<string>,\n { order = (level) => level, include }: FlattenTreeOptions<T> = {},\n): FlatTreeNode<T>[] {\n const result: FlatTreeNode<T>[] = [];\n const visit = (level: readonly T[], depth: number, parent: string | undefined) => {\n // 先按原位置取 key(getKey 的 index 是数据里的位置),再排序、过滤\n const keyOf = new Map(level.map((node, index) => [node, accessors.getKey(node, index)]));\n const sorted = order(level).filter((node) => !include || include.has(keyOf.get(node)!));\n sorted.forEach((node, index) => {\n const key = keyOf.get(node)!;\n const expandable = isExpandable(node, accessors);\n result.push({\n node,\n key,\n depth,\n parent,\n expandable,\n setSize: sorted.length,\n position: index + 1,\n });\n if (expandable && expanded.has(key)) visit(accessors.getChildren(node) ?? [], depth + 1, key);\n });\n };\n visit(roots, 0, undefined);\n return result;\n}\n\n/** 整棵(已加载的)树的索引:勾选联动要看到折叠着的节点 */\nexport interface TreeIndex {\n /** 深度优先的顺序 */\n readonly order: readonly string[];\n /** key → 父节点的 key */\n readonly parents: ReadonlyMap<string, string | undefined>;\n /** key → 已加载的子节点的 key */\n readonly children: ReadonlyMap<string, readonly string[]>;\n}\n\n/** 建立整棵已加载的树的索引 */\nexport function indexTree<T>(roots: readonly T[], accessors: TreeAccessors<T>): TreeIndex {\n const order: string[] = [];\n const parents = new Map<string, string | undefined>();\n const children = new Map<string, string[]>();\n const visit = (level: readonly T[], parent: string | undefined) => {\n const keys = level.map((node, index) => accessors.getKey(node, index));\n if (parent !== undefined) children.set(parent, keys);\n level.forEach((node, index) => {\n const key = keys[index]!;\n order.push(key);\n parents.set(key, parent);\n visit(accessors.getChildren(node) ?? [], key);\n });\n };\n visit(roots, undefined);\n return { order, parents, children };\n}\n\n/** 勾选状态 */\nexport type CheckState = 'checked' | 'indeterminate' | 'unchecked';\n\n/**\n * 实际勾上的节点:自己或任何祖先在 checked 里(父节点勾上之后才懒加载出来的子节点因此也算勾上),\n * 或者已加载的子节点全勾上了(checked 由外部给出、没有写全父节点时)\n */\nfunction effectiveChecked(index: TreeIndex, checked: readonly string[]): Set<string> {\n const listed = new Set(checked);\n const result = new Set<string>();\n // order 是深度优先:正序时父节点先于子节点,倒序时子节点先于父节点\n for (const key of index.order) {\n const parent = index.parents.get(key);\n if (listed.has(key) || (parent !== undefined && result.has(parent))) result.add(key);\n }\n for (let i = index.order.length - 1; i >= 0; i--) {\n const children = index.children.get(index.order[i]!);\n if (children?.length && children.every((child) => result.has(child)))\n result.add(index.order[i]!);\n }\n return result;\n}\n\n/**\n * 勾上或取消 key:子孙跟着变;祖先的子节点全勾上时祖先也勾上,否则取消。\n * 返回勾上的全部节点(按树的顺序),可以直接写回 checked\n */\nexport function toggleChecked(index: TreeIndex, checked: readonly string[], key: string): string[] {\n const result = effectiveChecked(index, checked);\n const next = !result.has(key);\n const visit = (current: string) => {\n if (next) result.add(current);\n else result.delete(current);\n index.children.get(current)?.forEach(visit);\n };\n visit(key);\n for (let parent = index.parents.get(key); parent !== undefined;) {\n const all = index.children.get(parent)!.every((child) => result.has(child));\n if (all) result.add(parent);\n else result.delete(parent);\n parent = index.parents.get(parent);\n }\n return index.order.filter((item) => result.has(item));\n}\n\n/** 勾选结果的取法(同 Ant Design 的 showCheckedStrategy) */\nexport interface CheckStrategies {\n /** 勾上的全部节点(默认) */\n all: unknown;\n /** 父节点全勾上时只要父节点,不再列出它的子孙(提交“整个部门”而不是逐个成员) */\n parent: unknown;\n /** 只要叶子(没有已加载的子节点的节点) */\n child: unknown;\n}\n\n/** 按取法给出勾上的节点(按树的顺序);checked 可以是 toggleChecked 的结果,也可以是外部给的部分节点 */\nexport function checkedByStrategy(\n index: TreeIndex,\n checked: readonly string[],\n strategy: keyof CheckStrategies,\n): string[] {\n const effective = effectiveChecked(index, checked);\n return index.order.filter((key) => {\n if (!effective.has(key)) return false;\n if (strategy === 'child') return !index.children.get(key)?.length;\n if (strategy === 'parent') {\n const parent = index.parents.get(key);\n return parent === undefined || !effective.has(parent);\n }\n return true;\n });\n}\n\n/** 从第一层到 key 的各节点的 key(含 key 自己);key 不在树里时为空数组。Cascader 的路径、面包屑用它 */\nexport function treePath(index: TreeIndex, key: string): string[] {\n if (!index.parents.has(key)) return [];\n const path: string[] = [];\n for (let current: string | undefined = key; current !== undefined;) {\n path.unshift(current);\n current = index.parents.get(current);\n }\n return path;\n}\n\n/** filterTree 的结果 */\nexport interface TreeFilter {\n /** 要显示的节点:匹配的节点与它们的祖先(交给 flattenTree 的 include) */\n include: Set<string>;\n /** 要展开的节点:匹配的节点的祖先,展开后才看得到匹配项 */\n expand: Set<string>;\n /** 匹配的节点(高亮用) */\n matched: Set<string>;\n}\n\n/**\n * 搜索过滤:留下匹配的节点与它们的祖先,并展开祖先(只看已加载的节点)。\n * 匹配的节点的子孙不跟着留下(它们自己匹配才留下),同 Ant Design TreeSelect 的搜索\n */\nexport function filterTree<T>(\n roots: readonly T[],\n accessors: TreeAccessors<T>,\n match: (node: T) => boolean,\n): TreeFilter {\n const result: TreeFilter = { include: new Set(), expand: new Set(), matched: new Set() };\n // 返回子树里有没有匹配的节点\n const visit = (level: readonly T[]): boolean => {\n let any = false;\n level.forEach((node, index) => {\n const key = accessors.getKey(node, index);\n const self = match(node);\n const below = visit(accessors.getChildren(node) ?? []);\n if (self) result.matched.add(key);\n if (below) result.expand.add(key);\n if (self || below) {\n result.include.add(key);\n any = true;\n }\n });\n return any;\n };\n visit(roots);\n return result;\n}\n\n/** buildTree 怎样读平铺的行 */\nexport interface TreeRows<T> {\n /** 行的 key,这批行里唯一 */\n getKey: (row: T) => string;\n /** 父行的 key;根行是 null / undefined,父行不在这批行里的也当作根 */\n getParent: (row: T) => string | null | undefined;\n /** 用子节点生成一个节点(不改原行),同 TreeEditor;不写时是 `{ ...row, children }` */\n withChildren?: (row: T, children: T[]) => T;\n}\n\n/**\n * 平铺的行(每行带父 key)组装成树,返回第一层;同级保持 rows 里的顺序,叶子的 children 是空数组。\n * 服务端搜索懒加载的树时回“匹配的节点和它们的祖先”(query 库的 withAncestors),组装后再用 filterTree 得到要展开、高亮的节点。\n * key 重复或父子成环时报错(环上的行到不了第一层)\n */\nexport function buildTree<T>(\n rows: readonly T[],\n { getKey, getParent, withChildren }: TreeRows<T>,\n): T[] {\n const make = withChildren ?? ((row: T, children: T[]) => ({ ...row, children }) as T);\n const keys = new Set<string>();\n for (const row of rows) {\n const key = getKey(row);\n if (keys.has(key)) throw new Error(`buildTree:key ${key} 出现了两次`);\n keys.add(key);\n }\n const roots: T[] = [];\n const childrenOf = new Map<string, T[]>();\n for (const row of rows) {\n const parent = getParent(row);\n if (parent == null || parent === getKey(row) || !keys.has(parent)) roots.push(row);\n else childrenOf.set(parent, [...(childrenOf.get(parent) ?? []), row]);\n }\n let built = 0;\n const node = (row: T): T => {\n built++;\n return make(row, (childrenOf.get(getKey(row)) ?? []).map(node));\n };\n const tree = roots.map(node);\n if (built < rows.length) throw new Error('buildTree:有的行的父子关系成了环,到不了第一层');\n return tree;\n}\n\n/** moveNode 要的读写方法:在读取之外,能用新的子节点生成一个节点 */\nexport interface TreeEditor<T> extends TreeAccessors<T> {\n /** 换掉子节点后的新节点(不改原节点),如 `(node, children) => ({ ...node, children })` */\n withChildren: (node: T, children: T[]) => T;\n}\n\n/** 移动的目标:放到哪个节点下(undefined 是第一层)的第几位 */\nexport interface TreeMoveTarget {\n /** 新的父节点的 key;第一层时为 undefined */\n parent: string | undefined;\n /** 在新的同级里的位置(按移走之后的同级算),超出时放到最后 */\n index: number;\n}\n\n/**\n * 把 key 移到 target(不改原数据,返回新的第一层;沿途的节点用 withChildren 重建,其余节点原样复用)。\n * key 不存在、目标是它自己或它的子孙时返回 null(拖到自己里面不成立)\n */\nexport function moveNode<T>(\n roots: readonly T[],\n editor: TreeEditor<T>,\n key: string,\n target: TreeMoveTarget,\n): T[] | null {\n const index = indexTree(roots, editor);\n if (!index.parents.has(key)) return null;\n if (target.parent !== undefined) {\n if (!index.parents.has(target.parent)) return null;\n if (treePath(index, target.parent).includes(key)) return null;\n }\n let moving: T | undefined;\n // 先摘下来:只重建 key 的祖先\n const removePath = new Set(treePath(index, key).slice(0, -1));\n const remove = (level: readonly T[]): T[] =>\n level.flatMap((node, position) => {\n const nodeKey = editor.getKey(node, position);\n if (nodeKey === key) {\n moving = node;\n return [];\n }\n if (!removePath.has(nodeKey)) return [node];\n return [editor.withChildren(node, remove(editor.getChildren(node) ?? []))];\n });\n const without = remove(roots);\n const insert = (level: readonly T[]) => {\n const next = [...level];\n next.splice(Math.min(Math.max(target.index, 0), next.length), 0, moving!);\n return next;\n };\n if (target.parent === undefined) return insert(without);\n // 再插进去:只重建目标父节点的祖先(含它自己)\n const insertPath = new Set(treePath(indexTree(without, editor), target.parent));\n const add = (level: readonly T[]): T[] =>\n level.map((node, position) => {\n const nodeKey = editor.getKey(node, position);\n if (!insertPath.has(nodeKey)) return node;\n const children = editor.getChildren(node) ?? [];\n return editor.withChildren(\n node,\n nodeKey === target.parent ? insert(children) : add(children),\n );\n });\n return add(without);\n}\n\n/** 每个节点的勾选状态:子孙里有勾上的、但自己没有全勾上时是 indeterminate */\nexport function checkStates(index: TreeIndex, checked: readonly string[]): Map<string, CheckState> {\n const effective = effectiveChecked(index, checked);\n const states = new Map<string, CheckState>();\n // 倒序:子节点先于父节点算好\n for (let i = index.order.length - 1; i >= 0; i--) {\n const key = index.order[i]!;\n if (effective.has(key)) {\n states.set(key, 'checked');\n continue;\n }\n const some = index.children.get(key)?.some((child) => states.get(child) !== 'unchecked');\n states.set(key, some ? 'indeterminate' : 'unchecked');\n }\n return states;\n}\n\n/** useTreeExpansion 的选项 */\nexport interface TreeExpansionOptions<T> {\n /** 读当前展开的 key */\n expanded: () => readonly string[];\n /** 写回展开的 key */\n setExpanded: (keys: string[]) => void;\n /** 节点已加载的子节点 */\n getChildren: (node: T) => readonly T[] | undefined;\n /** 展开一个还没有子节点的节点时调用:取回子节点并放进数据里;返回 Promise 时显示加载中 */\n loadChildren?: (node: T) => Promise<unknown> | void;\n /** 子节点加载失败:节点收回去,可以再展开重试;不写时在控制台报错 */\n onLoadError?: (error: unknown, node: T) => void;\n}\n\n/** useTreeExpansion 的返回值 */\nexport interface TreeExpansion<T> {\n /** 是否展开 */\n isExpanded: (key: string) => boolean;\n /** 是否正在加载子节点 */\n isLoading: (key: string) => boolean;\n /** 展开或收起;展开一个还没有子节点的节点时懒加载 */\n setOpen: (node: T, key: string, open: boolean) => Promise<void>;\n}\n\n/** 展开状态与懒加载(在 setup 里调用) */\nexport function useTreeExpansion<T>({\n expanded,\n setExpanded,\n getChildren,\n loadChildren,\n onLoadError,\n}: TreeExpansionOptions<T>): TreeExpansion<T> {\n const loading = shallowRef<ReadonlySet<string>>(new Set());\n const isExpanded = (key: string) => expanded().includes(key);\n\n const collapse = (key: string) => setExpanded(expanded().filter((item) => item !== key));\n\n async function setOpen(node: T, key: string, open: boolean) {\n if (isExpanded(key) === open) return;\n if (!open) return collapse(key);\n setExpanded([...expanded(), key]);\n // 正在加载(收起后又展开):等那一次,不重复请求\n if (!loadChildren || loading.value.has(key) || (getChildren(node)?.length ?? 0) > 0) return;\n const pending = loadChildren(node);\n if (!(pending instanceof Promise)) return;\n loading.value = new Set([...loading.value, key]);\n try {\n await pending;\n } catch (error) {\n // 失败时收回去:留着展开却没有子节点,看起来像是本来就没有;再展开会重试\n collapse(key);\n if (onLoadError) onLoadError(error, node);\n else console.error('树的子节点加载失败', error);\n } finally {\n const next = new Set(loading.value);\n next.delete(key);\n loading.value = next;\n }\n }\n\n return { isExpanded, isLoading: (key) => loading.value.has(key), setOpen };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/** 工作日历:哪天上班 */
|
|
2
|
+
export interface WorkCalendar {
|
|
3
|
+
/** 这一天(ISO 日期)上不上班 */
|
|
4
|
+
isWorkday(iso: string): boolean;
|
|
5
|
+
}
|
|
6
|
+
/** createWorkCalendar 的选项 */
|
|
7
|
+
export interface WorkCalendarOptions {
|
|
8
|
+
/** 休息的星期几(0 周日 … 6 周六),默认周六、周日 */
|
|
9
|
+
weekend?: readonly number[];
|
|
10
|
+
/** 放假的日子:ISO 日期,或 [开始, 结束](含两端) */
|
|
11
|
+
holidays?: readonly (string | readonly [string, string])[];
|
|
12
|
+
/** 调休上班的日子(落在周末的补班) */
|
|
13
|
+
workdays?: readonly string[];
|
|
14
|
+
}
|
|
15
|
+
/** 按周末、节假日与调休生成工作日历 */
|
|
16
|
+
export declare function createWorkCalendar({ weekend, holidays, workdays, }?: WorkCalendarOptions): WorkCalendar;
|
|
17
|
+
/** 只按周末(周六、周日)算的工作日历:没配置 workCalendar 时用它 */
|
|
18
|
+
export declare const weekdayCalendar: WorkCalendar;
|
|
19
|
+
/**
|
|
20
|
+
* from 之后到 to(含)有几个工作日:周五到下周一是 1;to 在 from 之前时为负数(两端对调再取负,同 date-fns 的方向)
|
|
21
|
+
*/
|
|
22
|
+
export declare function workdaysBetween(from: string, to: string, calendar?: WorkCalendar): number;
|
|
23
|
+
/** 从 from 起数 count 个工作日后的那一天(count 为负往前数,为 0 时原样) */
|
|
24
|
+
export declare function addWorkdays(from: string, count: number, calendar?: WorkCalendar): string;
|
|
25
|
+
/** 时限的状态 */
|
|
26
|
+
export interface DeadlineStates {
|
|
27
|
+
/** 还早 */
|
|
28
|
+
pending: unknown;
|
|
29
|
+
/** 快到期:剩下的工作日不多于 soon */
|
|
30
|
+
soon: unknown;
|
|
31
|
+
/** 今天到期 */
|
|
32
|
+
due: unknown;
|
|
33
|
+
/** 超期 */
|
|
34
|
+
overdue: unknown;
|
|
35
|
+
/** 已完成(按完成那天算剩余或超期) */
|
|
36
|
+
done: unknown;
|
|
37
|
+
}
|
|
38
|
+
/** 时限:截止日直接给出,或开始日加几个工作日 */
|
|
39
|
+
export type DeadlineInput = ({
|
|
40
|
+
due: string;
|
|
41
|
+
start?: never;
|
|
42
|
+
workdays?: never;
|
|
43
|
+
} | {
|
|
44
|
+
start: string;
|
|
45
|
+
workdays: number;
|
|
46
|
+
due?: never;
|
|
47
|
+
}) & {
|
|
48
|
+
/** 完成的日期;完成了状态是 done */
|
|
49
|
+
done?: string | null;
|
|
50
|
+
/** 今天,默认按浏览器时区的今天 */
|
|
51
|
+
today?: string;
|
|
52
|
+
/** 剩下几个工作日以内算快到期,默认 2 */
|
|
53
|
+
soon?: number;
|
|
54
|
+
};
|
|
55
|
+
/** 时限的结果 */
|
|
56
|
+
export interface Deadline {
|
|
57
|
+
/** 截止日 */
|
|
58
|
+
due: string;
|
|
59
|
+
/** 离截止还有几个工作日:截止当天为 0,超期为负;完成了按完成那天算 */
|
|
60
|
+
remaining: number;
|
|
61
|
+
/** 状态 */
|
|
62
|
+
state: keyof DeadlineStates;
|
|
63
|
+
}
|
|
64
|
+
/** 算时限:截止日、还剩几个工作日、状态 */
|
|
65
|
+
export declare function deadlineOf(input: DeadlineInput, calendar?: WorkCalendar): Deadline;
|
|
66
|
+
/** 当前配置的工作日历(createUi / Provider 的 workCalendar;都没给时只按周末) */
|
|
67
|
+
export declare function useWorkCalendar(): WorkCalendar;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { useConfig } from "../../config/context.js";
|
|
2
|
+
import { isoDayOfWeek, shiftIsoDate, todayIso } from "./date.js";
|
|
3
|
+
//#region src/utils/data/workdays.ts
|
|
4
|
+
/**
|
|
5
|
+
* 工作日与时限(参考 date-fns 的 addBusinessDays、differenceInBusinessDays):周末、法定节假日与调休补班。
|
|
6
|
+
* 节假日每年发布一次,组件库不内置:应用把数据交给 createUi / Provider 的 workCalendar,组件经 useWorkCalendar 取用。
|
|
7
|
+
*
|
|
8
|
+
* const workCalendar = createWorkCalendar({
|
|
9
|
+
* holidays: [['2026-10-01', '2026-10-08']], // 放假(单日或区间)
|
|
10
|
+
* workdays: ['2026-09-27', '2026-10-10'], // 调休上班的周末
|
|
11
|
+
* });
|
|
12
|
+
* createUi({ workCalendar });
|
|
13
|
+
*
|
|
14
|
+
* const calendar = useWorkCalendar();
|
|
15
|
+
* deadlineOf({ start: verifiedOn, workdays: 10 }, calendar) // → { due, remaining, state }
|
|
16
|
+
*/
|
|
17
|
+
/** 按周末、节假日与调休生成工作日历 */
|
|
18
|
+
function createWorkCalendar({ weekend = [0, 6], holidays = [], workdays = [] } = {}) {
|
|
19
|
+
const off = /* @__PURE__ */ new Set();
|
|
20
|
+
for (const entry of holidays) if (typeof entry === "string") off.add(entry);
|
|
21
|
+
else for (let day = entry[0]; day <= entry[1]; day = shiftIsoDate(day, { days: 1 })) off.add(day);
|
|
22
|
+
const on = new Set(workdays);
|
|
23
|
+
return { isWorkday: (iso) => on.has(iso) || !off.has(iso) && !weekend.includes(isoDayOfWeek(iso)) };
|
|
24
|
+
}
|
|
25
|
+
/** 只按周末(周六、周日)算的工作日历:没配置 workCalendar 时用它 */
|
|
26
|
+
var weekdayCalendar = createWorkCalendar();
|
|
27
|
+
/**
|
|
28
|
+
* from 之后到 to(含)有几个工作日:周五到下周一是 1;to 在 from 之前时为负数(两端对调再取负,同 date-fns 的方向)
|
|
29
|
+
*/
|
|
30
|
+
function workdaysBetween(from, to, calendar = weekdayCalendar) {
|
|
31
|
+
if (to < from) return 0 - workdaysBetween(to, from, calendar);
|
|
32
|
+
let count = 0;
|
|
33
|
+
for (let day = from; day < to;) {
|
|
34
|
+
day = shiftIsoDate(day, { days: 1 });
|
|
35
|
+
if (calendar.isWorkday(day)) count++;
|
|
36
|
+
}
|
|
37
|
+
return count;
|
|
38
|
+
}
|
|
39
|
+
/** 从 from 起数 count 个工作日后的那一天(count 为负往前数,为 0 时原样) */
|
|
40
|
+
function addWorkdays(from, count, calendar = weekdayCalendar) {
|
|
41
|
+
const step = count >= 0 ? 1 : -1;
|
|
42
|
+
let day = from;
|
|
43
|
+
for (let left = Math.abs(count); left > 0;) {
|
|
44
|
+
day = shiftIsoDate(day, { days: step });
|
|
45
|
+
if (calendar.isWorkday(day)) left--;
|
|
46
|
+
}
|
|
47
|
+
return day;
|
|
48
|
+
}
|
|
49
|
+
/** 算时限:截止日、还剩几个工作日、状态 */
|
|
50
|
+
function deadlineOf(input, calendar = weekdayCalendar) {
|
|
51
|
+
const due = input.due ?? addWorkdays(input.start, input.workdays, calendar);
|
|
52
|
+
const at = input.done ?? input.today ?? todayIso();
|
|
53
|
+
const remaining = workdaysBetween(at, due, calendar);
|
|
54
|
+
return {
|
|
55
|
+
due,
|
|
56
|
+
remaining,
|
|
57
|
+
state: input.done ? "done" : at > due ? "overdue" : at === due ? "due" : remaining <= (input.soon ?? 2) ? "soon" : "pending"
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** 当前配置的工作日历(createUi / Provider 的 workCalendar;都没给时只按周末) */
|
|
61
|
+
function useWorkCalendar() {
|
|
62
|
+
return useConfig().workCalendar ?? weekdayCalendar;
|
|
63
|
+
}
|
|
64
|
+
//#endregion
|
|
65
|
+
export { addWorkdays, createWorkCalendar, deadlineOf, useWorkCalendar, weekdayCalendar, workdaysBetween };
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=workdays.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workdays.js","names":[],"sources":["../../../src/utils/data/workdays.ts"],"sourcesContent":["/**\n * 工作日与时限(参考 date-fns 的 addBusinessDays、differenceInBusinessDays):周末、法定节假日与调休补班。\n * 节假日每年发布一次,组件库不内置:应用把数据交给 createUi / Provider 的 workCalendar,组件经 useWorkCalendar 取用。\n *\n * const workCalendar = createWorkCalendar({\n * holidays: [['2026-10-01', '2026-10-08']], // 放假(单日或区间)\n * workdays: ['2026-09-27', '2026-10-10'], // 调休上班的周末\n * });\n * createUi({ workCalendar });\n *\n * const calendar = useWorkCalendar();\n * deadlineOf({ start: verifiedOn, workdays: 10 }, calendar) // → { due, remaining, state }\n */\nimport { useConfig } from '../../config/context';\nimport { isoDayOfWeek, shiftIsoDate, todayIso } from './date';\n\n/** 工作日历:哪天上班 */\nexport interface WorkCalendar {\n /** 这一天(ISO 日期)上不上班 */\n isWorkday(iso: string): boolean;\n}\n\n/** createWorkCalendar 的选项 */\nexport interface WorkCalendarOptions {\n /** 休息的星期几(0 周日 … 6 周六),默认周六、周日 */\n weekend?: readonly number[];\n /** 放假的日子:ISO 日期,或 [开始, 结束](含两端) */\n holidays?: readonly (string | readonly [string, string])[];\n /** 调休上班的日子(落在周末的补班) */\n workdays?: readonly string[];\n}\n\n/** 按周末、节假日与调休生成工作日历 */\nexport function createWorkCalendar({\n weekend = [0, 6],\n holidays = [],\n workdays = [],\n}: WorkCalendarOptions = {}): WorkCalendar {\n const off = new Set<string>();\n for (const entry of holidays) {\n if (typeof entry === 'string') off.add(entry);\n else\n for (let day = entry[0]; day <= entry[1]; day = shiftIsoDate(day, { days: 1 })) off.add(day);\n }\n const on = new Set(workdays);\n return {\n isWorkday: (iso) => on.has(iso) || (!off.has(iso) && !weekend.includes(isoDayOfWeek(iso))),\n };\n}\n\n/** 只按周末(周六、周日)算的工作日历:没配置 workCalendar 时用它 */\nexport const weekdayCalendar: WorkCalendar = createWorkCalendar();\n\n/**\n * from 之后到 to(含)有几个工作日:周五到下周一是 1;to 在 from 之前时为负数(两端对调再取负,同 date-fns 的方向)\n */\nexport function workdaysBetween(from: string, to: string, calendar = weekdayCalendar): number {\n // 0 - x 而不是 -x:相差 0 个工作日时得 0,不是 -0\n if (to < from) return 0 - workdaysBetween(to, from, calendar);\n let count = 0;\n for (let day = from; day < to;) {\n day = shiftIsoDate(day, { days: 1 });\n if (calendar.isWorkday(day)) count++;\n }\n return count;\n}\n\n/** 从 from 起数 count 个工作日后的那一天(count 为负往前数,为 0 时原样) */\nexport function addWorkdays(from: string, count: number, calendar = weekdayCalendar): string {\n const step = count >= 0 ? 1 : -1;\n let day = from;\n for (let left = Math.abs(count); left > 0;) {\n day = shiftIsoDate(day, { days: step });\n if (calendar.isWorkday(day)) left--;\n }\n return day;\n}\n\n/** 时限的状态 */\nexport interface DeadlineStates {\n /** 还早 */\n pending: unknown;\n /** 快到期:剩下的工作日不多于 soon */\n soon: unknown;\n /** 今天到期 */\n due: unknown;\n /** 超期 */\n overdue: unknown;\n /** 已完成(按完成那天算剩余或超期) */\n done: unknown;\n}\n\n/** 时限:截止日直接给出,或开始日加几个工作日 */\nexport type DeadlineInput = (\n | { due: string; start?: never; workdays?: never }\n | { start: string; workdays: number; due?: never }\n) & {\n /** 完成的日期;完成了状态是 done */\n done?: string | null;\n /** 今天,默认按浏览器时区的今天 */\n today?: string;\n /** 剩下几个工作日以内算快到期,默认 2 */\n soon?: number;\n};\n\n/** 时限的结果 */\nexport interface Deadline {\n /** 截止日 */\n due: string;\n /** 离截止还有几个工作日:截止当天为 0,超期为负;完成了按完成那天算 */\n remaining: number;\n /** 状态 */\n state: keyof DeadlineStates;\n}\n\n/** 算时限:截止日、还剩几个工作日、状态 */\nexport function deadlineOf(input: DeadlineInput, calendar = weekdayCalendar): Deadline {\n const due = input.due ?? addWorkdays(input.start, input.workdays, calendar);\n const at = input.done ?? input.today ?? todayIso();\n const remaining = workdaysBetween(at, due, calendar);\n // 是否过期按日期比:周五截止、周六还没完成也算超期(虽然中间没有工作日)\n const state: keyof DeadlineStates = input.done\n ? 'done'\n : at > due\n ? 'overdue'\n : at === due\n ? 'due'\n : remaining <= (input.soon ?? 2)\n ? 'soon'\n : 'pending';\n return { due, remaining, state };\n}\n\n/** 当前配置的工作日历(createUi / Provider 的 workCalendar;都没给时只按周末) */\nexport function useWorkCalendar(): WorkCalendar {\n return useConfig().workCalendar ?? weekdayCalendar;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAiCA,SAAgB,mBAAmB,EACjC,UAAU,CAAC,GAAG,CAAC,GACf,WAAW,CAAC,GACZ,WAAW,CAAC,MACW,CAAC,GAAiB;CACzC,MAAM,sBAAM,IAAI,IAAY;CAC5B,KAAK,MAAM,SAAS,UAClB,IAAI,OAAO,UAAU,UAAU,IAAI,IAAI,KAAK;MAE1C,KAAK,IAAI,MAAM,MAAM,IAAI,OAAO,MAAM,IAAI,MAAM,aAAa,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,IAAI,GAAG;CAE/F,MAAM,KAAK,IAAI,IAAI,QAAQ;CAC3B,OAAO,EACL,YAAY,QAAQ,GAAG,IAAI,GAAG,KAAM,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,SAAS,aAAa,GAAG,CAAC,EAC1F;AACF;;AAGA,IAAa,kBAAgC,mBAAmB;;;;AAKhE,SAAgB,gBAAgB,MAAc,IAAY,WAAW,iBAAyB;CAE5F,IAAI,KAAK,MAAM,OAAO,IAAI,gBAAgB,IAAI,MAAM,QAAQ;CAC5D,IAAI,QAAQ;CACZ,KAAK,IAAI,MAAM,MAAM,MAAM,KAAK;EAC9B,MAAM,aAAa,KAAK,EAAE,MAAM,EAAE,CAAC;EACnC,IAAI,SAAS,UAAU,GAAG,GAAG;CAC/B;CACA,OAAO;AACT;;AAGA,SAAgB,YAAY,MAAc,OAAe,WAAW,iBAAyB;CAC3F,MAAM,OAAO,SAAS,IAAI,IAAI;CAC9B,IAAI,MAAM;CACV,KAAK,IAAI,OAAO,KAAK,IAAI,KAAK,GAAG,OAAO,IAAI;EAC1C,MAAM,aAAa,KAAK,EAAE,MAAM,KAAK,CAAC;EACtC,IAAI,SAAS,UAAU,GAAG,GAAG;CAC/B;CACA,OAAO;AACT;;AAwCA,SAAgB,WAAW,OAAsB,WAAW,iBAA2B;CACrF,MAAM,MAAM,MAAM,OAAO,YAAY,MAAM,OAAO,MAAM,UAAU,QAAQ;CAC1E,MAAM,KAAK,MAAM,QAAQ,MAAM,SAAS,SAAS;CACjD,MAAM,YAAY,gBAAgB,IAAI,KAAK,QAAQ;CAWnD,OAAO;EAAE;EAAK;EAAW,OATW,MAAM,OACtC,SACA,KAAK,MACH,YACA,OAAO,MACL,QACA,cAAc,MAAM,QAAQ,KAC1B,SACA;CACqB;AACjC;;AAGA,SAAgB,kBAAgC;CAC9C,OAAO,UAAU,CAAC,CAAC,gBAAgB;AACrC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** 播报的紧迫程度 */
|
|
2
|
+
export interface Politenesses {
|
|
3
|
+
/** 等读屏念完当前的内容再念(默认):选中条数、搜索结果、已复制 */
|
|
4
|
+
polite: unknown;
|
|
5
|
+
/** 打断当前的朗读:出错、操作失败 */
|
|
6
|
+
assertive: unknown;
|
|
7
|
+
}
|
|
8
|
+
/** 播报的紧迫程度 */
|
|
9
|
+
export type Politeness = keyof Politenesses;
|
|
10
|
+
/** 让读屏念出一句话;同一句话连说两次也会念(先清空,稍后再写入)。没有 document(服务端)时什么也不做 */
|
|
11
|
+
export declare function announce(message: string, politeness?: Politeness): void;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { topModal } from "./overlay.js";
|
|
2
|
+
//#region src/utils/dom/announcer.ts
|
|
3
|
+
/**
|
|
4
|
+
* 读屏播报(参考 React Aria 的 LiveAnnouncer):整页共用两个常驻的 aria-live 区域(polite 与 assertive),
|
|
5
|
+
* 组件不再各自挂播报区。读屏只念已经存在的区域里的变化,随内容一起插入的 aria-live 区域常常不念,第一句就丢了。
|
|
6
|
+
*
|
|
7
|
+
* announce(lang.tableSelectedCount(3));
|
|
8
|
+
* announce('保存失败', 'assertive');
|
|
9
|
+
*
|
|
10
|
+
* 有模态对话框打开时区域挂进最上层的对话框:showModal 让对话框外面的内容对读屏失效。
|
|
11
|
+
*/
|
|
12
|
+
/** 只给读屏的区域:视觉上隐藏(同 VisuallyHidden;这里是命令式创建的元素,直接写行内样式) */
|
|
13
|
+
var SR_ONLY = {
|
|
14
|
+
position: "absolute",
|
|
15
|
+
width: "1px",
|
|
16
|
+
height: "1px",
|
|
17
|
+
margin: "-1px",
|
|
18
|
+
padding: "0",
|
|
19
|
+
overflow: "hidden",
|
|
20
|
+
clipPath: "inset(50%)",
|
|
21
|
+
whiteSpace: "nowrap",
|
|
22
|
+
border: "0"
|
|
23
|
+
};
|
|
24
|
+
/** 清空与写入之间隔多久(毫秒):同一帧里改两次,读屏只看到最后的结果,重复的话就不念了 */
|
|
25
|
+
var REPEAT_DELAY = 100;
|
|
26
|
+
var regions = /* @__PURE__ */ new Map();
|
|
27
|
+
var timers = /* @__PURE__ */ new Map();
|
|
28
|
+
function region(politeness) {
|
|
29
|
+
let element = regions.get(politeness);
|
|
30
|
+
if (!element) {
|
|
31
|
+
element = document.createElement("div");
|
|
32
|
+
element.setAttribute("aria-live", politeness);
|
|
33
|
+
element.setAttribute("aria-atomic", "true");
|
|
34
|
+
element.dataset.liveAnnouncer = politeness;
|
|
35
|
+
Object.assign(element.style, SR_ONLY);
|
|
36
|
+
regions.set(politeness, element);
|
|
37
|
+
}
|
|
38
|
+
const host = topModal() ?? document.body;
|
|
39
|
+
if (element.parentElement !== host) host.append(element);
|
|
40
|
+
return element;
|
|
41
|
+
}
|
|
42
|
+
/** 让读屏念出一句话;同一句话连说两次也会念(先清空,稍后再写入)。没有 document(服务端)时什么也不做 */
|
|
43
|
+
function announce(message, politeness = "polite") {
|
|
44
|
+
if (typeof document === "undefined" || !message) return;
|
|
45
|
+
const element = region(politeness);
|
|
46
|
+
element.textContent = "";
|
|
47
|
+
clearTimeout(timers.get(politeness));
|
|
48
|
+
timers.set(politeness, setTimeout(() => element.textContent = message, REPEAT_DELAY));
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
export { announce };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=announcer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"announcer.js","names":[],"sources":["../../../src/utils/dom/announcer.ts"],"sourcesContent":["/**\n * 读屏播报(参考 React Aria 的 LiveAnnouncer):整页共用两个常驻的 aria-live 区域(polite 与 assertive),\n * 组件不再各自挂播报区。读屏只念已经存在的区域里的变化,随内容一起插入的 aria-live 区域常常不念,第一句就丢了。\n *\n * announce(lang.tableSelectedCount(3));\n * announce('保存失败', 'assertive');\n *\n * 有模态对话框打开时区域挂进最上层的对话框:showModal 让对话框外面的内容对读屏失效。\n */\nimport { topModal } from './overlay';\n\n/** 播报的紧迫程度 */\nexport interface Politenesses {\n /** 等读屏念完当前的内容再念(默认):选中条数、搜索结果、已复制 */\n polite: unknown;\n /** 打断当前的朗读:出错、操作失败 */\n assertive: unknown;\n}\n\n/** 播报的紧迫程度 */\nexport type Politeness = keyof Politenesses;\n\n/** 只给读屏的区域:视觉上隐藏(同 VisuallyHidden;这里是命令式创建的元素,直接写行内样式) */\nconst SR_ONLY: Partial<CSSStyleDeclaration> = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n margin: '-1px',\n padding: '0',\n overflow: 'hidden',\n clipPath: 'inset(50%)',\n whiteSpace: 'nowrap',\n border: '0',\n};\n\n/** 清空与写入之间隔多久(毫秒):同一帧里改两次,读屏只看到最后的结果,重复的话就不念了 */\nconst REPEAT_DELAY = 100;\n\nconst regions = new Map<Politeness, HTMLElement>();\nconst timers = new Map<Politeness, ReturnType<typeof setTimeout>>();\n\nfunction region(politeness: Politeness): HTMLElement {\n let element = regions.get(politeness);\n if (!element) {\n element = document.createElement('div');\n element.setAttribute('aria-live', politeness);\n element.setAttribute('aria-atomic', 'true');\n element.dataset.liveAnnouncer = politeness;\n Object.assign(element.style, SR_ONLY);\n regions.set(politeness, element);\n }\n const host = topModal() ?? document.body;\n if (element.parentElement !== host) host.append(element);\n return element;\n}\n\n/** 让读屏念出一句话;同一句话连说两次也会念(先清空,稍后再写入)。没有 document(服务端)时什么也不做 */\nexport function announce(message: string, politeness: Politeness = 'polite'): void {\n if (typeof document === 'undefined' || !message) return;\n const element = region(politeness);\n element.textContent = '';\n clearTimeout(timers.get(politeness));\n timers.set(\n politeness,\n setTimeout(() => (element.textContent = message), REPEAT_DELAY),\n );\n}\n"],"mappings":";;;;;;;;;;;;AAuBA,IAAM,UAAwC;CAC5C,UAAU;CACV,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,UAAU;CACV,UAAU;CACV,YAAY;CACZ,QAAQ;AACV;;AAGA,IAAM,eAAe;AAErB,IAAM,0BAAU,IAAI,IAA6B;AACjD,IAAM,yBAAS,IAAI,IAA+C;AAElE,SAAS,OAAO,YAAqC;CACnD,IAAI,UAAU,QAAQ,IAAI,UAAU;CACpC,IAAI,CAAC,SAAS;EACZ,UAAU,SAAS,cAAc,KAAK;EACtC,QAAQ,aAAa,aAAa,UAAU;EAC5C,QAAQ,aAAa,eAAe,MAAM;EAC1C,QAAQ,QAAQ,gBAAgB;EAChC,OAAO,OAAO,QAAQ,OAAO,OAAO;EACpC,QAAQ,IAAI,YAAY,OAAO;CACjC;CACA,MAAM,OAAO,SAAS,KAAK,SAAS;CACpC,IAAI,QAAQ,kBAAkB,MAAM,KAAK,OAAO,OAAO;CACvD,OAAO;AACT;;AAGA,SAAgB,SAAS,SAAiB,aAAyB,UAAgB;CACjF,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS;CACjD,MAAM,UAAU,OAAO,UAAU;CACjC,QAAQ,cAAc;CACtB,aAAa,OAAO,IAAI,UAAU,CAAC;CACnC,OAAO,IACL,YACA,iBAAkB,QAAQ,cAAc,SAAU,YAAY,CAChE;AACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 文本框里某个字符位置在视口中的坐标:@ 提及、斜杠命令这类跟着光标弹出的列表用它定位。
|
|
3
|
+
*
|
|
4
|
+
* const anchor = caretAnchor(textarea, () => textarea.selectionStart);
|
|
5
|
+
* anchorFloating(anchor, panel, { placement: 'bottom-start' });
|
|
6
|
+
*
|
|
7
|
+
* 做法同 textarea-caret-position(component/textarea-caret):在页面外放一个镜像 div,复制影响排版的样式,
|
|
8
|
+
* 写入位置之前的文字和一个标记 span,量标记的位置,再减去文本框的滚动。input 不换行,textarea 按 pre-wrap 换行。
|
|
9
|
+
*/
|
|
10
|
+
import type { VirtualElement } from '@floating-ui/dom';
|
|
11
|
+
/** 文本框里第 index 个字符之前(光标在那里时)的位置:视口坐标,宽 0、高一行 */
|
|
12
|
+
export declare function caretRect(element: HTMLTextAreaElement | HTMLInputElement, index: number): DOMRect;
|
|
13
|
+
/** 跟着光标的锚点(给 anchorFloating / useAnchoredPopover):每次定位时按 index() 重新测量,文本框滚动时跟着更新 */
|
|
14
|
+
export declare function caretAnchor(element: HTMLTextAreaElement | HTMLInputElement, index: () => number): VirtualElement;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
//#region src/utils/dom/caret.ts
|
|
2
|
+
/** 影响文字排版的样式:镜像 div 照抄 */
|
|
3
|
+
var MIRRORED = [
|
|
4
|
+
"direction",
|
|
5
|
+
"boxSizing",
|
|
6
|
+
"width",
|
|
7
|
+
"height",
|
|
8
|
+
"overflowX",
|
|
9
|
+
"overflowY",
|
|
10
|
+
"borderTopWidth",
|
|
11
|
+
"borderRightWidth",
|
|
12
|
+
"borderBottomWidth",
|
|
13
|
+
"borderLeftWidth",
|
|
14
|
+
"borderStyle",
|
|
15
|
+
"paddingTop",
|
|
16
|
+
"paddingRight",
|
|
17
|
+
"paddingBottom",
|
|
18
|
+
"paddingLeft",
|
|
19
|
+
"fontStyle",
|
|
20
|
+
"fontVariant",
|
|
21
|
+
"fontWeight",
|
|
22
|
+
"fontStretch",
|
|
23
|
+
"fontSize",
|
|
24
|
+
"fontSizeAdjust",
|
|
25
|
+
"lineHeight",
|
|
26
|
+
"fontFamily",
|
|
27
|
+
"fontFeatureSettings",
|
|
28
|
+
"textAlign",
|
|
29
|
+
"textTransform",
|
|
30
|
+
"textIndent",
|
|
31
|
+
"textDecoration",
|
|
32
|
+
"letterSpacing",
|
|
33
|
+
"wordSpacing",
|
|
34
|
+
"tabSize"
|
|
35
|
+
];
|
|
36
|
+
/** 文本框里第 index 个字符之前(光标在那里时)的位置:视口坐标,宽 0、高一行 */
|
|
37
|
+
function caretRect(element, index) {
|
|
38
|
+
const style = getComputedStyle(element);
|
|
39
|
+
const mirror = document.createElement("div");
|
|
40
|
+
for (const property of MIRRORED) mirror.style[property] = style[property];
|
|
41
|
+
Object.assign(mirror.style, {
|
|
42
|
+
position: "absolute",
|
|
43
|
+
visibility: "hidden",
|
|
44
|
+
top: "0",
|
|
45
|
+
left: "-9999px",
|
|
46
|
+
overflow: "hidden",
|
|
47
|
+
whiteSpace: element instanceof HTMLTextAreaElement ? "pre-wrap" : "pre",
|
|
48
|
+
overflowWrap: "break-word"
|
|
49
|
+
});
|
|
50
|
+
mirror.textContent = element.value.slice(0, index);
|
|
51
|
+
const marker = document.createElement("span");
|
|
52
|
+
marker.textContent = element.value.slice(index) || ".";
|
|
53
|
+
mirror.append(marker);
|
|
54
|
+
document.body.append(mirror);
|
|
55
|
+
const lineHeight = parseFloat(style.lineHeight) || parseFloat(style.fontSize) * 1.2;
|
|
56
|
+
const top = marker.offsetTop + parseFloat(style.borderTopWidth) - element.scrollTop;
|
|
57
|
+
const left = marker.offsetLeft + parseFloat(style.borderLeftWidth) - element.scrollLeft;
|
|
58
|
+
mirror.remove();
|
|
59
|
+
const box = element.getBoundingClientRect();
|
|
60
|
+
return new DOMRect(box.left + left, box.top + top, 0, lineHeight);
|
|
61
|
+
}
|
|
62
|
+
/** 跟着光标的锚点(给 anchorFloating / useAnchoredPopover):每次定位时按 index() 重新测量,文本框滚动时跟着更新 */
|
|
63
|
+
function caretAnchor(element, index) {
|
|
64
|
+
return {
|
|
65
|
+
getBoundingClientRect: () => caretRect(element, index()),
|
|
66
|
+
contextElement: element
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//#endregion
|
|
70
|
+
export { caretAnchor, caretRect };
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=caret.js.map
|