@zerodep-dev/vue-tsx-pro-ui 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +32 -2
- package/dist/base/Badge.d.ts +28 -0
- package/dist/base/Badge.js +72 -0
- package/dist/base/Badge.js.map +1 -0
- package/dist/base/Blockquote.d.ts +13 -0
- package/dist/base/Blockquote.js +26 -0
- package/dist/base/Blockquote.js.map +1 -0
- package/dist/base/Button.d.ts +18 -0
- package/dist/base/Button.js +86 -0
- package/dist/base/Button.js.map +1 -0
- package/dist/base/ButtonBase.d.ts +21 -0
- package/dist/base/ButtonBase.js +51 -0
- package/dist/base/ButtonBase.js.map +1 -0
- package/dist/base/ButtonGroup.d.ts +24 -0
- package/dist/base/ButtonGroup.js +52 -0
- package/dist/base/ButtonGroup.js.map +1 -0
- package/dist/base/CloseButton.d.ts +15 -0
- package/dist/base/CloseButton.js +38 -0
- package/dist/base/CloseButton.js.map +1 -0
- package/dist/base/Code.d.ts +13 -0
- package/dist/base/Code.js +27 -0
- package/dist/base/Code.js.map +1 -0
- package/dist/base/CodeBlock.d.ts +89 -0
- package/dist/base/CodeBlock.js +265 -0
- package/dist/base/CodeBlock.js.map +1 -0
- package/dist/base/CopyButton.d.ts +40 -0
- package/dist/base/CopyButton.js +113 -0
- package/dist/base/CopyButton.js.map +1 -0
- package/dist/base/Heading.d.ts +49 -0
- package/dist/base/Heading.js +122 -0
- package/dist/base/Heading.js.map +1 -0
- package/dist/base/Icon.d.ts +48 -0
- package/dist/base/Icon.js +110 -0
- package/dist/base/Icon.js.map +1 -0
- package/dist/base/IconButton.d.ts +34 -0
- package/dist/base/IconButton.js +81 -0
- package/dist/base/IconButton.js.map +1 -0
- package/dist/base/IconLinkButton.d.ts +34 -0
- package/dist/base/IconLinkButton.js +81 -0
- package/dist/base/IconLinkButton.js.map +1 -0
- package/dist/base/Indicator.d.ts +126 -0
- package/dist/base/Indicator.js +158 -0
- package/dist/base/Indicator.js.map +1 -0
- package/dist/base/Kbd.d.ts +13 -0
- package/dist/base/Kbd.js +34 -0
- package/dist/base/Kbd.js.map +1 -0
- package/dist/base/Link.d.ts +61 -0
- package/dist/base/Link.js +114 -0
- package/dist/base/Link.js.map +1 -0
- package/dist/base/LinkButton.d.ts +18 -0
- package/dist/base/LinkButton.js +109 -0
- package/dist/base/LinkButton.js.map +1 -0
- package/dist/base/List.d.ts +61 -0
- package/dist/base/List.js +116 -0
- package/dist/base/List.js.map +1 -0
- package/dist/base/Mark.d.ts +13 -0
- package/dist/base/Mark.js +23 -0
- package/dist/base/Mark.js.map +1 -0
- package/dist/base/Spinner.d.ts +20 -0
- package/dist/base/Spinner.js +59 -0
- package/dist/base/Spinner.js.map +1 -0
- package/dist/base/StatusDot.d.ts +48 -0
- package/dist/base/StatusDot.js +62 -0
- package/dist/base/StatusDot.js.map +1 -0
- package/dist/base/Tag.d.ts +29 -0
- package/dist/base/Tag.js +92 -0
- package/dist/base/Tag.js.map +1 -0
- package/dist/base/Text.d.ts +57 -0
- package/dist/base/Text.js +74 -0
- package/dist/base/Text.js.map +1 -0
- package/dist/base/VisuallyHidden.d.ts +13 -0
- package/dist/base/VisuallyHidden.js +28 -0
- package/dist/base/VisuallyHidden.js.map +1 -0
- package/dist/base/badge-styles.d.ts +57 -0
- package/dist/base/badge-styles.js +329 -0
- package/dist/base/badge-styles.js.map +1 -0
- package/dist/base/button-core.d.ts +191 -0
- package/dist/base/button-core.js +660 -0
- package/dist/base/button-core.js.map +1 -0
- package/dist/charts/AreaChart.d.ts +18 -0
- package/dist/charts/AreaChart.js +90 -0
- package/dist/charts/AreaChart.js.map +1 -0
- package/dist/charts/BarChart.d.ts +19 -0
- package/dist/charts/BarChart.js +88 -0
- package/dist/charts/BarChart.js.map +1 -0
- package/dist/charts/ChordChart.d.ts +48 -0
- package/dist/charts/ChordChart.js +149 -0
- package/dist/charts/ChordChart.js.map +1 -0
- package/dist/charts/ComboChart.d.ts +30 -0
- package/dist/charts/ComboChart.js +157 -0
- package/dist/charts/ComboChart.js.map +1 -0
- package/dist/charts/DonutChart.d.ts +65 -0
- package/dist/charts/DonutChart.js +162 -0
- package/dist/charts/DonutChart.js.map +1 -0
- package/dist/charts/FunnelChart.d.ts +69 -0
- package/dist/charts/FunnelChart.js +181 -0
- package/dist/charts/FunnelChart.js.map +1 -0
- package/dist/charts/GraphChart.d.ts +135 -0
- package/dist/charts/GraphChart.js +274 -0
- package/dist/charts/GraphChart.js.map +1 -0
- package/dist/charts/LineChart.d.ts +50 -0
- package/dist/charts/LineChart.js +94 -0
- package/dist/charts/LineChart.js.map +1 -0
- package/dist/charts/MapChart.d.ts +167 -0
- package/dist/charts/MapChart.js +627 -0
- package/dist/charts/MapChart.js.map +1 -0
- package/dist/charts/RadarChart.d.ts +60 -0
- package/dist/charts/RadarChart.js +224 -0
- package/dist/charts/RadarChart.js.map +1 -0
- package/dist/charts/SankeyChart.d.ts +57 -0
- package/dist/charts/SankeyChart.js +150 -0
- package/dist/charts/SankeyChart.js.map +1 -0
- package/dist/charts/ScatterChart.d.ts +18 -0
- package/dist/charts/ScatterChart.js +82 -0
- package/dist/charts/ScatterChart.js.map +1 -0
- package/dist/charts/TimelineChart.d.ts +71 -0
- package/dist/charts/TimelineChart.js +267 -0
- package/dist/charts/TimelineChart.js.map +1 -0
- package/dist/charts/TreemapChart.d.ts +40 -0
- package/dist/charts/TreemapChart.js +155 -0
- package/dist/charts/TreemapChart.js.map +1 -0
- package/dist/charts/WaterfallChart.d.ts +61 -0
- package/dist/charts/WaterfallChart.js +167 -0
- package/dist/charts/WaterfallChart.js.map +1 -0
- package/dist/charts/XYChart.d.ts +206 -0
- package/dist/charts/XYChart.js +520 -0
- package/dist/charts/XYChart.js.map +1 -0
- package/dist/charts/axis-ticks.d.ts +23 -0
- package/dist/charts/axis-ticks.js +59 -0
- package/dist/charts/axis-ticks.js.map +1 -0
- package/dist/charts/export.d.ts +17 -0
- package/dist/charts/export.js +65 -0
- package/dist/charts/export.js.map +1 -0
- package/dist/charts/flow.d.ts +53 -0
- package/dist/charts/flow.js +29 -0
- package/dist/charts/flow.js.map +1 -0
- package/dist/charts/frame.d.ts +147 -0
- package/dist/charts/frame.js +358 -0
- package/dist/charts/frame.js.map +1 -0
- package/dist/charts/index.d.ts +30 -0
- package/dist/charts/index.js +24 -0
- package/dist/charts/label-layout.d.ts +59 -0
- package/dist/charts/label-layout.js +64 -0
- package/dist/charts/label-layout.js.map +1 -0
- package/dist/charts/series.d.ts +36 -0
- package/dist/charts/series.js +60 -0
- package/dist/charts/series.js.map +1 -0
- package/dist/charts/single.d.ts +41 -0
- package/dist/charts/single.js +65 -0
- package/dist/charts/single.js.map +1 -0
- package/dist/config/Provider.d.ts +52 -0
- package/dist/config/Provider.js +111 -0
- package/dist/config/Provider.js.map +1 -0
- package/dist/config/context.d.ts +90 -0
- package/dist/config/context.js +58 -0
- package/dist/config/context.js.map +1 -0
- package/dist/config/createUi.d.ts +52 -0
- package/dist/config/createUi.js +96 -0
- package/dist/config/createUi.js.map +1 -0
- package/dist/config/defaults.d.ts +71 -0
- package/dist/config/defaults.js +45 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/lang/en-US.d.ts +3 -0
- package/dist/config/lang/en-US.js +386 -0
- package/dist/config/lang/en-US.js.map +1 -0
- package/dist/config/lang/format.d.ts +50 -0
- package/dist/config/lang/format.js +113 -0
- package/dist/config/lang/format.js.map +1 -0
- package/dist/config/lang/lang.d.ts +653 -0
- package/dist/config/lang/lang.js +22 -0
- package/dist/config/lang/lang.js.map +1 -0
- package/dist/config/lang/messages.d.ts +12 -0
- package/dist/config/lang/messages.js +36 -0
- package/dist/config/lang/messages.js.map +1 -0
- package/dist/config/lang/zh-CN.d.ts +3 -0
- package/dist/config/lang/zh-CN.js +386 -0
- package/dist/config/lang/zh-CN.js.map +1 -0
- package/dist/config/pinyin.d.ts +3 -0
- package/dist/config/pinyin.js +26 -0
- package/dist/config/pinyin.js.map +1 -0
- package/dist/config/query-state.d.ts +61 -0
- package/dist/config/query-state.js +113 -0
- package/dist/config/query-state.js.map +1 -0
- package/dist/config/shiki.d.ts +13 -0
- package/dist/config/shiki.js +97 -0
- package/dist/config/shiki.js.map +1 -0
- package/dist/config/styles.d.ts +108 -0
- package/dist/config/styles.js +59 -0
- package/dist/config/styles.js.map +1 -0
- package/dist/config/theme/boot.d.ts +97 -0
- package/dist/config/theme/boot.js +90 -0
- package/dist/config/theme/boot.js.map +1 -0
- package/dist/config/theme/builtin.d.ts +21 -0
- package/dist/config/theme/builtin.js +58 -0
- package/dist/config/theme/builtin.js.map +1 -0
- package/dist/config/theme/coffee.d.ts +84 -0
- package/dist/config/theme/coffee.js +102 -0
- package/dist/config/theme/coffee.js.map +1 -0
- package/dist/config/theme/cyberpunk.d.ts +110 -0
- package/dist/config/theme/cyberpunk.js +125 -0
- package/dist/config/theme/cyberpunk.js.map +1 -0
- package/dist/config/theme/dark.d.ts +90 -0
- package/dist/config/theme/dark.js +106 -0
- package/dist/config/theme/dark.js.map +1 -0
- package/dist/config/theme/festive.d.ts +93 -0
- package/dist/config/theme/festive.js +110 -0
- package/dist/config/theme/festive.js.map +1 -0
- package/dist/config/theme/forest.d.ts +93 -0
- package/dist/config/theme/forest.js +109 -0
- package/dist/config/theme/forest.js.map +1 -0
- package/dist/config/theme/high-contrast.d.ts +103 -0
- package/dist/config/theme/high-contrast.js +119 -0
- package/dist/config/theme/high-contrast.js.map +1 -0
- package/dist/config/theme/lemon.d.ts +103 -0
- package/dist/config/theme/lemon.js +119 -0
- package/dist/config/theme/lemon.js.map +1 -0
- package/dist/config/theme/light.d.ts +107 -0
- package/dist/config/theme/light.js +122 -0
- package/dist/config/theme/light.js.map +1 -0
- package/dist/config/theme/midnight.d.ts +86 -0
- package/dist/config/theme/midnight.js +103 -0
- package/dist/config/theme/midnight.js.map +1 -0
- package/dist/config/theme/ocean.d.ts +103 -0
- package/dist/config/theme/ocean.js +119 -0
- package/dist/config/theme/ocean.js.map +1 -0
- package/dist/config/theme/paper.d.ts +101 -0
- package/dist/config/theme/paper.js +117 -0
- package/dist/config/theme/paper.js.map +1 -0
- package/dist/config/theme/preference.d.ts +34 -0
- package/dist/config/theme/preference.js +67 -0
- package/dist/config/theme/preference.js.map +1 -0
- package/dist/config/theme/sakura.d.ts +103 -0
- package/dist/config/theme/sakura.js +119 -0
- package/dist/config/theme/sakura.js.map +1 -0
- package/dist/config/theme/theme.d.ts +59 -0
- package/dist/config/theme/theme.js +68 -0
- package/dist/config/theme/theme.js.map +1 -0
- package/dist/config/theme/token-names.d.ts +1897 -0
- package/dist/config/theme/tokens.d.ts +833 -0
- package/dist/config/theme/tokens.js +480 -0
- package/dist/config/theme/tokens.js.map +1 -0
- package/dist/config/vue-router.d.ts +67 -0
- package/dist/config/vue-router.js +143 -0
- package/dist/config/vue-router.js.map +1 -0
- package/dist/date/Calendar.d.ts +36 -0
- package/dist/date/Calendar.js +83 -0
- package/dist/date/Calendar.js.map +1 -0
- package/dist/date/CalendarBoard.d.ts +79 -0
- package/dist/date/CalendarBoard.js +403 -0
- package/dist/date/CalendarBoard.js.map +1 -0
- package/dist/date/CalendarView.d.ts +86 -0
- package/dist/date/CalendarView.js +427 -0
- package/dist/date/CalendarView.js.map +1 -0
- package/dist/date/Countdown.d.ts +45 -0
- package/dist/date/Countdown.js +75 -0
- package/dist/date/Countdown.js.map +1 -0
- package/dist/date/DateField.d.ts +34 -0
- package/dist/date/DateField.js +124 -0
- package/dist/date/DateField.js.map +1 -0
- package/dist/date/DatePicker.d.ts +41 -0
- package/dist/date/DatePicker.js +272 -0
- package/dist/date/DatePicker.js.map +1 -0
- package/dist/date/DateRangePicker.d.ts +71 -0
- package/dist/date/DateRangePicker.js +411 -0
- package/dist/date/DateRangePicker.js.map +1 -0
- package/dist/date/DateSegmentGroup.d.ts +38 -0
- package/dist/date/DateSegmentGroup.js +176 -0
- package/dist/date/DateSegmentGroup.js.map +1 -0
- package/dist/date/DateTime.d.ts +21 -0
- package/dist/date/DateTime.js +39 -0
- package/dist/date/DateTime.js.map +1 -0
- package/dist/date/QuarterCalendar.d.ts +22 -0
- package/dist/date/QuarterCalendar.js +231 -0
- package/dist/date/QuarterCalendar.js.map +1 -0
- package/dist/date/RangeCalendar.d.ts +24 -0
- package/dist/date/RangeCalendar.js +89 -0
- package/dist/date/RangeCalendar.js.map +1 -0
- package/dist/date/RelativeTime.d.ts +16 -0
- package/dist/date/RelativeTime.js +61 -0
- package/dist/date/RelativeTime.js.map +1 -0
- package/dist/date/SegmentedField.d.ts +60 -0
- package/dist/date/SegmentedField.js +175 -0
- package/dist/date/SegmentedField.js.map +1 -0
- package/dist/date/TimeField.d.ts +36 -0
- package/dist/date/TimeField.js +56 -0
- package/dist/date/TimeField.js.map +1 -0
- package/dist/date/TimePicker.d.ts +25 -0
- package/dist/date/TimePicker.js +206 -0
- package/dist/date/TimePicker.js.map +1 -0
- package/dist/date/calendar-state.d.ts +119 -0
- package/dist/date/calendar-state.js +267 -0
- package/dist/date/calendar-state.js.map +1 -0
- package/dist/date/clock.d.ts +11 -0
- package/dist/date/clock.js +37 -0
- package/dist/date/clock.js.map +1 -0
- package/dist/date/date-locale.d.ts +67 -0
- package/dist/date/date-locale.js +89 -0
- package/dist/date/date-locale.js.map +1 -0
- package/dist/date/date-segments.d.ts +132 -0
- package/dist/date/date-segments.js +410 -0
- package/dist/date/date-segments.js.map +1 -0
- package/dist/date/picker-popover.d.ts +88 -0
- package/dist/date/picker-popover.js +126 -0
- package/dist/date/picker-popover.js.map +1 -0
- package/dist/diagram/Diagram.d.ts +223 -0
- package/dist/diagram/Diagram.js +1121 -0
- package/dist/diagram/Diagram.js.map +1 -0
- package/dist/diagram/DiagramControls.d.ts +35 -0
- package/dist/diagram/DiagramControls.js +114 -0
- package/dist/diagram/DiagramControls.js.map +1 -0
- package/dist/diagram/DiagramLanes.d.ts +49 -0
- package/dist/diagram/DiagramLanes.js +92 -0
- package/dist/diagram/DiagramLanes.js.map +1 -0
- package/dist/diagram/DiagramMinimap.d.ts +39 -0
- package/dist/diagram/DiagramMinimap.js +133 -0
- package/dist/diagram/DiagramMinimap.js.map +1 -0
- package/dist/diagram/DiagramNode.d.ts +65 -0
- package/dist/diagram/DiagramNode.js +142 -0
- package/dist/diagram/DiagramNode.js.map +1 -0
- package/dist/diagram/controller.d.ts +68 -0
- package/dist/diagram/controller.js +117 -0
- package/dist/diagram/controller.js.map +1 -0
- package/dist/diagram/export.d.ts +14 -0
- package/dist/diagram/export.js +115 -0
- package/dist/diagram/export.js.map +1 -0
- package/dist/diagram/geometry.d.ts +65 -0
- package/dist/diagram/geometry.js +219 -0
- package/dist/diagram/geometry.js.map +1 -0
- package/dist/diagram/index.d.ts +19 -0
- package/dist/diagram/index.js +11 -0
- package/dist/diagram/messages.d.ts +28 -0
- package/dist/diagram/messages.js +30 -0
- package/dist/diagram/messages.js.map +1 -0
- package/dist/diagram/route.d.ts +81 -0
- package/dist/diagram/route.js +327 -0
- package/dist/diagram/route.js.map +1 -0
- package/dist/display/Accordion.d.ts +71 -0
- package/dist/display/Accordion.js +219 -0
- package/dist/display/Accordion.js.map +1 -0
- package/dist/display/AnimatedNumber.d.ts +44 -0
- package/dist/display/AnimatedNumber.js +97 -0
- package/dist/display/AnimatedNumber.js.map +1 -0
- package/dist/display/Avatar.d.ts +74 -0
- package/dist/display/Avatar.js +158 -0
- package/dist/display/Avatar.js.map +1 -0
- package/dist/display/AvatarGroup.d.ts +29 -0
- package/dist/display/AvatarGroup.js +67 -0
- package/dist/display/AvatarGroup.js.map +1 -0
- package/dist/display/Card.d.ts +219 -0
- package/dist/display/Card.js +319 -0
- package/dist/display/Card.js.map +1 -0
- package/dist/display/Checklist.d.ts +93 -0
- package/dist/display/Checklist.js +260 -0
- package/dist/display/Checklist.js.map +1 -0
- package/dist/display/Collapse.d.ts +24 -0
- package/dist/display/Collapse.js +65 -0
- package/dist/display/Collapse.js.map +1 -0
- package/dist/display/Collapsible.d.ts +12 -0
- package/dist/display/Collapsible.js +41 -0
- package/dist/display/Collapsible.js.map +1 -0
- package/dist/display/Descriptions.d.ts +88 -0
- package/dist/display/Descriptions.js +185 -0
- package/dist/display/Descriptions.js.map +1 -0
- package/dist/display/Ellipsis.d.ts +29 -0
- package/dist/display/Ellipsis.js +111 -0
- package/dist/display/Ellipsis.js.map +1 -0
- package/dist/display/FieldCompare.d.ts +58 -0
- package/dist/display/FieldCompare.js +205 -0
- package/dist/display/FieldCompare.js.map +1 -0
- package/dist/display/Gauge.d.ts +60 -0
- package/dist/display/Gauge.js +215 -0
- package/dist/display/Gauge.js.map +1 -0
- package/dist/display/Image.d.ts +87 -0
- package/dist/display/Image.js +212 -0
- package/dist/display/Image.js.map +1 -0
- package/dist/display/ItemList.d.ts +69 -0
- package/dist/display/ItemList.js +147 -0
- package/dist/display/ItemList.js.map +1 -0
- package/dist/display/Marquee.d.ts +59 -0
- package/dist/display/Marquee.js +155 -0
- package/dist/display/Marquee.js.map +1 -0
- package/dist/display/ProportionBar.d.ts +55 -0
- package/dist/display/ProportionBar.js +99 -0
- package/dist/display/ProportionBar.js.map +1 -0
- package/dist/display/Sortable.d.ts +43 -0
- package/dist/display/Sortable.js +163 -0
- package/dist/display/Sortable.js.map +1 -0
- package/dist/display/Sparkline.d.ts +48 -0
- package/dist/display/Sparkline.js +130 -0
- package/dist/display/Sparkline.js.map +1 -0
- package/dist/display/Stat.d.ts +105 -0
- package/dist/display/Stat.js +268 -0
- package/dist/display/Stat.js.map +1 -0
- package/dist/display/Timeline.d.ts +106 -0
- package/dist/display/Timeline.js +257 -0
- package/dist/display/Timeline.js.map +1 -0
- package/dist/display/Tree.d.ts +132 -0
- package/dist/display/Tree.js +645 -0
- package/dist/display/Tree.js.map +1 -0
- package/dist/display/VirtualList.d.ts +80 -0
- package/dist/display/VirtualList.js +166 -0
- package/dist/display/VirtualList.js.map +1 -0
- package/dist/display/Watermark.d.ts +39 -0
- package/dist/display/Watermark.js +130 -0
- package/dist/display/Watermark.js.map +1 -0
- package/dist/docs-kit/CodeGroup.d.ts +29 -0
- package/dist/docs-kit/CodeGroup.js +81 -0
- package/dist/docs-kit/CodeGroup.js.map +1 -0
- package/dist/docs-kit/CodePreview.d.ts +60 -0
- package/dist/docs-kit/CodePreview.js +183 -0
- package/dist/docs-kit/CodePreview.js.map +1 -0
- package/dist/docs-kit/ColorSwatch.d.ts +28 -0
- package/dist/docs-kit/ColorSwatch.js +85 -0
- package/dist/docs-kit/ColorSwatch.js.map +1 -0
- package/dist/docs-kit/PropsTable.d.ts +73 -0
- package/dist/docs-kit/PropsTable.js +122 -0
- package/dist/docs-kit/PropsTable.js.map +1 -0
- package/dist/docs-kit/index.d.ts +13 -0
- package/dist/docs-kit/index.js +6 -0
- package/dist/docs-kit/messages.d.ts +25 -0
- package/dist/docs-kit/messages.js +30 -0
- package/dist/docs-kit/messages.js.map +1 -0
- package/dist/feedback/Alert.d.ts +83 -0
- package/dist/feedback/Alert.js +179 -0
- package/dist/feedback/Alert.js.map +1 -0
- package/dist/feedback/Banner.d.ts +60 -0
- package/dist/feedback/Banner.js +122 -0
- package/dist/feedback/Banner.js.map +1 -0
- package/dist/feedback/Empty.d.ts +38 -0
- package/dist/feedback/Empty.js +114 -0
- package/dist/feedback/Empty.js.map +1 -0
- package/dist/feedback/LoadingBar.d.ts +45 -0
- package/dist/feedback/LoadingBar.js +124 -0
- package/dist/feedback/LoadingBar.js.map +1 -0
- package/dist/feedback/LoadingOverlay.d.ts +29 -0
- package/dist/feedback/LoadingOverlay.js +70 -0
- package/dist/feedback/LoadingOverlay.js.map +1 -0
- package/dist/feedback/Progress.d.ts +215 -0
- package/dist/feedback/Progress.js +437 -0
- package/dist/feedback/Progress.js.map +1 -0
- package/dist/feedback/Result.d.ts +69 -0
- package/dist/feedback/Result.js +165 -0
- package/dist/feedback/Result.js.map +1 -0
- package/dist/feedback/Skeleton.d.ts +50 -0
- package/dist/feedback/Skeleton.js +100 -0
- package/dist/feedback/Skeleton.js.map +1 -0
- package/dist/feedback/SkeletonText.d.ts +25 -0
- package/dist/feedback/SkeletonText.js +40 -0
- package/dist/feedback/SkeletonText.js.map +1 -0
- package/dist/feedback/Toast.d.ts +204 -0
- package/dist/feedback/Toast.js +572 -0
- package/dist/feedback/Toast.js.map +1 -0
- package/dist/form/Field.d.ts +158 -0
- package/dist/form/Field.js +327 -0
- package/dist/form/Field.js.map +1 -0
- package/dist/form/Form.d.ts +14 -0
- package/dist/form/Form.js +66 -0
- package/dist/form/Form.js.map +1 -0
- package/dist/form/FormErrorSummary.d.ts +23 -0
- package/dist/form/FormErrorSummary.js +102 -0
- package/dist/form/FormErrorSummary.js.map +1 -0
- package/dist/form/FormSection.d.ts +66 -0
- package/dist/form/FormSection.js +227 -0
- package/dist/form/FormSection.js.map +1 -0
- package/dist/form/FormValue.d.ts +17 -0
- package/dist/form/FormValue.js +40 -0
- package/dist/form/FormValue.js.map +1 -0
- package/dist/form/field-layout.d.ts +34 -0
- package/dist/form/field-layout.js +39 -0
- package/dist/form/field-layout.js.map +1 -0
- package/dist/form/form-constraints.d.ts +38 -0
- package/dist/form/form-constraints.js +131 -0
- package/dist/form/form-constraints.js.map +1 -0
- package/dist/form/leave-confirmation.d.ts +9 -0
- package/dist/form/leave-confirmation.js +31 -0
- package/dist/form/leave-confirmation.js.map +1 -0
- package/dist/form/schemas.d.ts +52 -0
- package/dist/form/schemas.js +97 -0
- package/dist/form/schemas.js.map +1 -0
- package/dist/form/useForm.d.ts +192 -0
- package/dist/form/useForm.js +394 -0
- package/dist/form/useForm.js.map +1 -0
- package/dist/index.d.ts +282 -0
- package/dist/index.js +282 -0
- package/dist/input/Autocomplete.d.ts +14 -0
- package/dist/input/Autocomplete.js +35 -0
- package/dist/input/Autocomplete.js.map +1 -0
- package/dist/input/Cascader.d.ts +86 -0
- package/dist/input/Cascader.js +593 -0
- package/dist/input/Cascader.js.map +1 -0
- package/dist/input/CharacterCount.d.ts +21 -0
- package/dist/input/CharacterCount.js +47 -0
- package/dist/input/CharacterCount.js.map +1 -0
- package/dist/input/Checkbox.d.ts +93 -0
- package/dist/input/Checkbox.js +250 -0
- package/dist/input/Checkbox.js.map +1 -0
- package/dist/input/ColorField.d.ts +37 -0
- package/dist/input/ColorField.js +143 -0
- package/dist/input/ColorField.js.map +1 -0
- package/dist/input/Combobox.d.ts +75 -0
- package/dist/input/Combobox.js +321 -0
- package/dist/input/Combobox.js.map +1 -0
- package/dist/input/ConditionBuilder.d.ts +55 -0
- package/dist/input/ConditionBuilder.js +471 -0
- package/dist/input/ConditionBuilder.js.map +1 -0
- package/dist/input/ControlGroup.d.ts +26 -0
- package/dist/input/ControlGroup.js +50 -0
- package/dist/input/ControlGroup.js.map +1 -0
- package/dist/input/FileDrop.d.ts +49 -0
- package/dist/input/FileDrop.js +201 -0
- package/dist/input/FileDrop.js.map +1 -0
- package/dist/input/ListPopover.d.ts +39 -0
- package/dist/input/ListPopover.js +81 -0
- package/dist/input/ListPopover.js.map +1 -0
- package/dist/input/Listbox.d.ts +91 -0
- package/dist/input/Listbox.js +408 -0
- package/dist/input/Listbox.js.map +1 -0
- package/dist/input/Mentions.d.ts +74 -0
- package/dist/input/Mentions.js +287 -0
- package/dist/input/Mentions.js.map +1 -0
- package/dist/input/NumberField.d.ts +64 -0
- package/dist/input/NumberField.js +288 -0
- package/dist/input/NumberField.js.map +1 -0
- package/dist/input/NumberRangeField.d.ts +58 -0
- package/dist/input/NumberRangeField.js +157 -0
- package/dist/input/NumberRangeField.js.map +1 -0
- package/dist/input/OtpField.d.ts +58 -0
- package/dist/input/OtpField.js +200 -0
- package/dist/input/OtpField.js.map +1 -0
- package/dist/input/PeoplePicker.d.ts +42 -0
- package/dist/input/PeoplePicker.js +185 -0
- package/dist/input/PeoplePicker.js.map +1 -0
- package/dist/input/PeoplePickerPanel.d.ts +42 -0
- package/dist/input/PeoplePickerPanel.js +357 -0
- package/dist/input/PeoplePickerPanel.js.map +1 -0
- package/dist/input/Radio.d.ts +90 -0
- package/dist/input/Radio.js +211 -0
- package/dist/input/Radio.js.map +1 -0
- package/dist/input/Rating.d.ts +62 -0
- package/dist/input/Rating.js +225 -0
- package/dist/input/Rating.js.map +1 -0
- package/dist/input/Select.d.ts +97 -0
- package/dist/input/Select.js +455 -0
- package/dist/input/Select.js.map +1 -0
- package/dist/input/SelectedTags.d.ts +28 -0
- package/dist/input/SelectedTags.js +81 -0
- package/dist/input/SelectedTags.js.map +1 -0
- package/dist/input/Slider.d.ts +99 -0
- package/dist/input/Slider.js +343 -0
- package/dist/input/Slider.js.map +1 -0
- package/dist/input/Switch.d.ts +63 -0
- package/dist/input/Switch.js +198 -0
- package/dist/input/Switch.js.map +1 -0
- package/dist/input/TagsInput.d.ts +70 -0
- package/dist/input/TagsInput.js +314 -0
- package/dist/input/TagsInput.js.map +1 -0
- package/dist/input/TextField.d.ts +51 -0
- package/dist/input/TextField.js +185 -0
- package/dist/input/TextField.js.map +1 -0
- package/dist/input/Textarea.d.ts +50 -0
- package/dist/input/Textarea.js +146 -0
- package/dist/input/Textarea.js.map +1 -0
- package/dist/input/ToggleGroup.d.ts +82 -0
- package/dist/input/ToggleGroup.js +211 -0
- package/dist/input/ToggleGroup.js.map +1 -0
- package/dist/input/Transfer.d.ts +67 -0
- package/dist/input/Transfer.js +407 -0
- package/dist/input/Transfer.js.map +1 -0
- package/dist/input/TreeSelect.d.ts +94 -0
- package/dist/input/TreeSelect.js +412 -0
- package/dist/input/TreeSelect.js.map +1 -0
- package/dist/input/Upload.d.ts +143 -0
- package/dist/input/Upload.js +597 -0
- package/dist/input/Upload.js.map +1 -0
- package/dist/input/choice-styles.d.ts +117 -0
- package/dist/input/choice-styles.js +176 -0
- package/dist/input/choice-styles.js.map +1 -0
- package/dist/input/condition.d.ts +153 -0
- package/dist/input/condition.js +169 -0
- package/dist/input/condition.js.map +1 -0
- package/dist/input/control.d.ts +160 -0
- package/dist/input/control.js +236 -0
- package/dist/input/control.js.map +1 -0
- package/dist/input/list-state.d.ts +118 -0
- package/dist/input/list-state.js +186 -0
- package/dist/input/list-state.js.map +1 -0
- package/dist/input/people.d.ts +65 -0
- package/dist/input/people.js +47 -0
- package/dist/input/people.js.map +1 -0
- package/dist/input/remote-items.d.ts +20 -0
- package/dist/input/remote-items.js +36 -0
- package/dist/input/remote-items.js.map +1 -0
- package/dist/input/text-format.d.ts +46 -0
- package/dist/input/text-format.js +64 -0
- package/dist/input/text-format.js.map +1 -0
- package/dist/layout/Affix.d.ts +32 -0
- package/dist/layout/Affix.js +81 -0
- package/dist/layout/Affix.js.map +1 -0
- package/dist/layout/AsideLayout.d.ts +45 -0
- package/dist/layout/AsideLayout.js +69 -0
- package/dist/layout/AsideLayout.js.map +1 -0
- package/dist/layout/BackTop.d.ts +16 -0
- package/dist/layout/BackTop.js +83 -0
- package/dist/layout/BackTop.js.map +1 -0
- package/dist/layout/Container.d.ts +60 -0
- package/dist/layout/Container.js +62 -0
- package/dist/layout/Container.js.map +1 -0
- package/dist/layout/Flex.d.ts +116 -0
- package/dist/layout/Flex.js +109 -0
- package/dist/layout/Flex.js.map +1 -0
- package/dist/layout/Grid.d.ts +139 -0
- package/dist/layout/Grid.js +168 -0
- package/dist/layout/Grid.js.map +1 -0
- package/dist/layout/PageScrollbar.d.ts +20 -0
- package/dist/layout/PageScrollbar.js +49 -0
- package/dist/layout/PageScrollbar.js.map +1 -0
- package/dist/layout/Prose.d.ts +19 -0
- package/dist/layout/Prose.js +37 -0
- package/dist/layout/Prose.js.map +1 -0
- package/dist/layout/ResizeHandle.d.ts +28 -0
- package/dist/layout/ResizeHandle.js +94 -0
- package/dist/layout/ResizeHandle.js.map +1 -0
- package/dist/layout/ScrollArea.d.ts +99 -0
- package/dist/layout/ScrollArea.js +344 -0
- package/dist/layout/ScrollArea.js.map +1 -0
- package/dist/layout/Separator.d.ts +47 -0
- package/dist/layout/Separator.js +96 -0
- package/dist/layout/Separator.js.map +1 -0
- package/dist/layout/Splitter.d.ts +75 -0
- package/dist/layout/Splitter.js +236 -0
- package/dist/layout/Splitter.js.map +1 -0
- package/dist/layout/ViewportFill.d.ts +26 -0
- package/dist/layout/ViewportFill.js +59 -0
- package/dist/layout/ViewportFill.js.map +1 -0
- package/dist/navigation/Breadcrumbs.d.ts +59 -0
- package/dist/navigation/Breadcrumbs.js +150 -0
- package/dist/navigation/Breadcrumbs.js.map +1 -0
- package/dist/navigation/NavBar.d.ts +35 -0
- package/dist/navigation/NavBar.js +182 -0
- package/dist/navigation/NavBar.js.map +1 -0
- package/dist/navigation/NavList.d.ts +112 -0
- package/dist/navigation/NavList.js +375 -0
- package/dist/navigation/NavList.js.map +1 -0
- package/dist/navigation/PageJump.d.ts +27 -0
- package/dist/navigation/PageJump.js +77 -0
- package/dist/navigation/PageJump.js.map +1 -0
- package/dist/navigation/PageSizeSelect.d.ts +19 -0
- package/dist/navigation/PageSizeSelect.js +65 -0
- package/dist/navigation/PageSizeSelect.js.map +1 -0
- package/dist/navigation/Pager.d.ts +30 -0
- package/dist/navigation/Pager.js +111 -0
- package/dist/navigation/Pager.js.map +1 -0
- package/dist/navigation/Pagination.d.ts +51 -0
- package/dist/navigation/Pagination.js +157 -0
- package/dist/navigation/Pagination.js.map +1 -0
- package/dist/navigation/PaginationBar.d.ts +54 -0
- package/dist/navigation/PaginationBar.js +125 -0
- package/dist/navigation/PaginationBar.js.map +1 -0
- package/dist/navigation/SkipLink.d.ts +16 -0
- package/dist/navigation/SkipLink.js +58 -0
- package/dist/navigation/SkipLink.js.map +1 -0
- package/dist/navigation/Steps.d.ts +93 -0
- package/dist/navigation/Steps.js +198 -0
- package/dist/navigation/Steps.js.map +1 -0
- package/dist/navigation/TableOfContents.d.ts +32 -0
- package/dist/navigation/TableOfContents.js +119 -0
- package/dist/navigation/TableOfContents.js.map +1 -0
- package/dist/navigation/Tabs.d.ts +208 -0
- package/dist/navigation/Tabs.js +626 -0
- package/dist/navigation/Tabs.js.map +1 -0
- package/dist/navigation/Toolbar.d.ts +39 -0
- package/dist/navigation/Toolbar.js +67 -0
- package/dist/navigation/Toolbar.js.map +1 -0
- package/dist/overlay/AlertDialog.d.ts +43 -0
- package/dist/overlay/AlertDialog.js +106 -0
- package/dist/overlay/AlertDialog.js.map +1 -0
- package/dist/overlay/CommandPalette.d.ts +64 -0
- package/dist/overlay/CommandPalette.js +250 -0
- package/dist/overlay/CommandPalette.js.map +1 -0
- package/dist/overlay/ContextMenu.d.ts +21 -0
- package/dist/overlay/ContextMenu.js +76 -0
- package/dist/overlay/ContextMenu.js.map +1 -0
- package/dist/overlay/Dialog.d.ts +70 -0
- package/dist/overlay/Dialog.js +91 -0
- package/dist/overlay/Dialog.js.map +1 -0
- package/dist/overlay/Drawer.d.ts +186 -0
- package/dist/overlay/Drawer.js +214 -0
- package/dist/overlay/Drawer.js.map +1 -0
- package/dist/overlay/HoverCard.d.ts +48 -0
- package/dist/overlay/HoverCard.js +86 -0
- package/dist/overlay/HoverCard.js.map +1 -0
- package/dist/overlay/Lightbox.d.ts +57 -0
- package/dist/overlay/Lightbox.js +374 -0
- package/dist/overlay/Lightbox.js.map +1 -0
- package/dist/overlay/Menu.d.ts +218 -0
- package/dist/overlay/Menu.js +816 -0
- package/dist/overlay/Menu.js.map +1 -0
- package/dist/overlay/ModalCore.d.ts +132 -0
- package/dist/overlay/ModalCore.js +274 -0
- package/dist/overlay/ModalCore.js.map +1 -0
- package/dist/overlay/Popconfirm.d.ts +49 -0
- package/dist/overlay/Popconfirm.js +167 -0
- package/dist/overlay/Popconfirm.js.map +1 -0
- package/dist/overlay/Popover.d.ts +40 -0
- package/dist/overlay/Popover.js +96 -0
- package/dist/overlay/Popover.js.map +1 -0
- package/dist/overlay/Tooltip.d.ts +47 -0
- package/dist/overlay/Tooltip.js +86 -0
- package/dist/overlay/Tooltip.js.map +1 -0
- package/dist/overlay/Tour.d.ts +74 -0
- package/dist/overlay/Tour.js +309 -0
- package/dist/overlay/Tour.js.map +1 -0
- package/dist/overlay/detached.d.ts +40 -0
- package/dist/overlay/detached.js +109 -0
- package/dist/overlay/detached.js.map +1 -0
- package/dist/patterns/ActionBar.d.ts +29 -0
- package/dist/patterns/ActionBar.js +75 -0
- package/dist/patterns/ActionBar.js.map +1 -0
- package/dist/patterns/AppShell.d.ts +168 -0
- package/dist/patterns/AppShell.js +620 -0
- package/dist/patterns/AppShell.js.map +1 -0
- package/dist/patterns/CommentThread.d.ts +128 -0
- package/dist/patterns/CommentThread.js +386 -0
- package/dist/patterns/CommentThread.js.map +1 -0
- package/dist/patterns/DataImport.d.ts +72 -0
- package/dist/patterns/DataImport.js +486 -0
- package/dist/patterns/DataImport.js.map +1 -0
- package/dist/patterns/DeadlineBadge.d.ts +21 -0
- package/dist/patterns/DeadlineBadge.js +76 -0
- package/dist/patterns/DeadlineBadge.js.map +1 -0
- package/dist/patterns/FilterBar.d.ts +66 -0
- package/dist/patterns/FilterBar.js +254 -0
- package/dist/patterns/FilterBar.js.map +1 -0
- package/dist/patterns/KanbanBoard.d.ts +79 -0
- package/dist/patterns/KanbanBoard.js +294 -0
- package/dist/patterns/KanbanBoard.js.map +1 -0
- package/dist/patterns/NotificationCenter.d.ts +110 -0
- package/dist/patterns/NotificationCenter.js +342 -0
- package/dist/patterns/NotificationCenter.js.map +1 -0
- package/dist/patterns/PageTabs.d.ts +30 -0
- package/dist/patterns/PageTabs.js +97 -0
- package/dist/patterns/PageTabs.js.map +1 -0
- package/dist/patterns/QueryTable.d.ts +64 -0
- package/dist/patterns/QueryTable.js +276 -0
- package/dist/patterns/QueryTable.js.map +1 -0
- package/dist/patterns/StepsForm.d.ts +49 -0
- package/dist/patterns/StepsForm.js +130 -0
- package/dist/patterns/StepsForm.js.map +1 -0
- package/dist/patterns/ThemeSwitcher.d.ts +20 -0
- package/dist/patterns/ThemeSwitcher.js +102 -0
- package/dist/patterns/ThemeSwitcher.js.map +1 -0
- package/dist/patterns/form-dialog.d.ts +62 -0
- package/dist/patterns/form-dialog.js +143 -0
- package/dist/patterns/form-dialog.js.map +1 -0
- package/dist/patterns/index.d.ts +24 -0
- package/dist/patterns/index.js +15 -0
- package/dist/patterns/messages.d.ts +172 -0
- package/dist/patterns/messages.js +184 -0
- package/dist/patterns/messages.js.map +1 -0
- package/dist/table/ColumnHeaderActions.d.ts +71 -0
- package/dist/table/ColumnHeaderActions.js +247 -0
- package/dist/table/ColumnHeaderActions.js.map +1 -0
- package/dist/table/ColumnResizer.d.ts +12 -0
- package/dist/table/ColumnResizer.js +32 -0
- package/dist/table/ColumnResizer.js.map +1 -0
- package/dist/table/ColumnSettings.d.ts +34 -0
- package/dist/table/ColumnSettings.js +136 -0
- package/dist/table/ColumnSettings.js.map +1 -0
- package/dist/table/ColumnTable.d.ts +51 -0
- package/dist/table/ColumnTable.js +140 -0
- package/dist/table/ColumnTable.js.map +1 -0
- package/dist/table/DataTable.d.ts +44 -0
- package/dist/table/DataTable.js +453 -0
- package/dist/table/DataTable.js.map +1 -0
- package/dist/table/DataTableView.d.ts +328 -0
- package/dist/table/DataTableView.js +963 -0
- package/dist/table/DataTableView.js.map +1 -0
- package/dist/table/PivotTable.d.ts +66 -0
- package/dist/table/PivotTable.js +122 -0
- package/dist/table/PivotTable.js.map +1 -0
- package/dist/table/SelectionBar.d.ts +29 -0
- package/dist/table/SelectionBar.js +86 -0
- package/dist/table/SelectionBar.js.map +1 -0
- package/dist/table/Table.d.ts +169 -0
- package/dist/table/Table.js +304 -0
- package/dist/table/Table.js.map +1 -0
- package/dist/table/TreeDataTable.d.ts +36 -0
- package/dist/table/TreeDataTable.js +168 -0
- package/dist/table/TreeDataTable.js.map +1 -0
- package/dist/table/column-display.d.ts +20 -0
- package/dist/table/column-display.js +43 -0
- package/dist/table/column-display.js.map +1 -0
- package/dist/table/columns.d.ts +244 -0
- package/dist/table/columns.js +271 -0
- package/dist/table/columns.js.map +1 -0
- package/dist/table/csv.d.ts +24 -0
- package/dist/table/csv.js +35 -0
- package/dist/table/csv.js.map +1 -0
- package/dist/table/pivot.d.ts +66 -0
- package/dist/table/pivot.js +85 -0
- package/dist/table/pivot.js.map +1 -0
- package/dist/table/sheet.d.ts +44 -0
- package/dist/table/sheet.js +78 -0
- package/dist/table/sheet.js.map +1 -0
- package/dist/table/table-styles.d.ts +136 -0
- package/dist/table/table-styles.js +403 -0
- package/dist/table/table-styles.js.map +1 -0
- package/dist/table/use-table-query.d.ts +89 -0
- package/dist/table/use-table-query.js +194 -0
- package/dist/table/use-table-query.js.map +1 -0
- package/dist/theme-customize/ThemeCustomizer.d.ts +63 -0
- package/dist/theme-customize/ThemeCustomizer.js +361 -0
- package/dist/theme-customize/ThemeCustomizer.js.map +1 -0
- package/dist/theme-customize/ThemeThumbnail.d.ts +20 -0
- package/dist/theme-customize/ThemeThumbnail.js +82 -0
- package/dist/theme-customize/ThemeThumbnail.js.map +1 -0
- package/dist/theme-customize/contrast.d.ts +27 -0
- package/dist/theme-customize/contrast.js +251 -0
- package/dist/theme-customize/contrast.js.map +1 -0
- package/dist/theme-customize/customize.d.ts +65 -0
- package/dist/theme-customize/customize.js +105 -0
- package/dist/theme-customize/customize.js.map +1 -0
- package/dist/theme-customize/design-tokens.d.ts +31 -0
- package/dist/theme-customize/design-tokens.js +183 -0
- package/dist/theme-customize/design-tokens.js.map +1 -0
- package/dist/theme-customize/index.d.ts +20 -0
- package/dist/theme-customize/index.js +9 -0
- package/dist/theme-customize/messages.d.ts +74 -0
- package/dist/theme-customize/messages.js +142 -0
- package/dist/theme-customize/messages.js.map +1 -0
- package/dist/theme-customize/palette.d.ts +898 -0
- package/dist/theme-customize/palette.js +111 -0
- package/dist/theme-customize/palette.js.map +1 -0
- package/dist/theme-customize/token-catalog.d.ts +20 -0
- package/dist/theme-customize/token-catalog.js +836 -0
- package/dist/theme-customize/token-catalog.js.map +1 -0
- package/dist/three/background/AuroraBackground.d.ts +30 -0
- package/dist/three/background/AuroraBackground.js +80 -0
- package/dist/three/background/AuroraBackground.js.map +1 -0
- package/dist/three/background/MeshGradient.d.ts +28 -0
- package/dist/three/background/MeshGradient.js +76 -0
- package/dist/three/background/MeshGradient.js.map +1 -0
- package/dist/three/background/ShaderBackground.d.ts +25 -0
- package/dist/three/background/ShaderBackground.js +107 -0
- package/dist/three/background/ShaderBackground.js.map +1 -0
- package/dist/three/core/EffectSurface.d.ts +41 -0
- package/dist/three/core/EffectSurface.js +62 -0
- package/dist/three/core/EffectSurface.js.map +1 -0
- package/dist/three/core/ThreeCanvas.d.ts +39 -0
- package/dist/three/core/ThreeCanvas.js +77 -0
- package/dist/three/core/ThreeCanvas.js.map +1 -0
- package/dist/three/core/dispose.d.ts +9 -0
- package/dist/three/core/dispose.js +26 -0
- package/dist/three/core/dispose.js.map +1 -0
- package/dist/three/core/orbit.d.ts +31 -0
- package/dist/three/core/orbit.js +83 -0
- package/dist/three/core/orbit.js.map +1 -0
- package/dist/three/core/quality.d.ts +59 -0
- package/dist/three/core/quality.js +80 -0
- package/dist/three/core/quality.js.map +1 -0
- package/dist/three/core/renderer.d.ts +110 -0
- package/dist/three/core/renderer.js +303 -0
- package/dist/three/core/renderer.js.map +1 -0
- package/dist/three/core/shaders.d.ts +19 -0
- package/dist/three/core/shaders.js +100 -0
- package/dist/three/core/shaders.js.map +1 -0
- package/dist/three/core/theme-colors.d.ts +30 -0
- package/dist/three/core/theme-colors.js +113 -0
- package/dist/three/core/theme-colors.js.map +1 -0
- package/dist/three/effects/Confetti.d.ts +62 -0
- package/dist/three/effects/Confetti.js +242 -0
- package/dist/three/effects/Confetti.js.map +1 -0
- package/dist/three/effects/ParticleField.d.ts +39 -0
- package/dist/three/effects/ParticleField.js +266 -0
- package/dist/three/effects/ParticleField.js.map +1 -0
- package/dist/three/effects/WaveGrid.d.ts +37 -0
- package/dist/three/effects/WaveGrid.js +130 -0
- package/dist/three/effects/WaveGrid.js.map +1 -0
- package/dist/three/globe/Globe.d.ts +70 -0
- package/dist/three/globe/Globe.js +337 -0
- package/dist/three/globe/Globe.js.map +1 -0
- package/dist/three/globe/land.d.ts +9 -0
- package/dist/three/globe/land.js +14 -0
- package/dist/three/globe/land.js.map +1 -0
- package/dist/three/index.d.ts +24 -0
- package/dist/three/index.js +18 -0
- package/dist/three/model/ModelViewer.d.ts +63 -0
- package/dist/three/model/ModelViewer.js +193 -0
- package/dist/three/model/ModelViewer.js.map +1 -0
- package/dist/utils/data/collation.d.ts +36 -0
- package/dist/utils/data/collation.js +69 -0
- package/dist/utils/data/collation.js.map +1 -0
- package/dist/utils/data/color.d.ts +32 -0
- package/dist/utils/data/color.js +90 -0
- package/dist/utils/data/color.js.map +1 -0
- package/dist/utils/data/date.d.ts +186 -0
- package/dist/utils/data/date.js +409 -0
- package/dist/utils/data/date.js.map +1 -0
- package/dist/utils/data/diff.d.ts +21 -0
- package/dist/utils/data/diff.js +43 -0
- package/dist/utils/data/diff.js.map +1 -0
- package/dist/utils/data/equality.d.ts +5 -0
- package/dist/utils/data/equality.js +24 -0
- package/dist/utils/data/equality.js.map +1 -0
- package/dist/utils/data/history.d.ts +59 -0
- package/dist/utils/data/history.js +132 -0
- package/dist/utils/data/history.js.map +1 -0
- package/dist/utils/data/intl-cache.d.ts +8 -0
- package/dist/utils/data/intl-cache.js +19 -0
- package/dist/utils/data/intl-cache.js.map +1 -0
- package/dist/utils/data/number-parse.d.ts +7 -0
- package/dist/utils/data/number-parse.js +45 -0
- package/dist/utils/data/number-parse.js.map +1 -0
- package/dist/utils/data/number.d.ts +10 -0
- package/dist/utils/data/number.js +28 -0
- package/dist/utils/data/number.js.map +1 -0
- package/dist/utils/data/numeric.d.ts +55 -0
- package/dist/utils/data/numeric.js +133 -0
- package/dist/utils/data/numeric.js.map +1 -0
- package/dist/utils/data/pagination.d.ts +21 -0
- package/dist/utils/data/pagination.js +22 -0
- package/dist/utils/data/pagination.js.map +1 -0
- package/dist/utils/data/selection.d.ts +41 -0
- package/dist/utils/data/selection.js +21 -0
- package/dist/utils/data/selection.js.map +1 -0
- package/dist/utils/data/status.d.ts +43 -0
- package/dist/utils/data/status.js +27 -0
- package/dist/utils/data/status.js.map +1 -0
- package/dist/utils/data/text.d.ts +12 -0
- package/dist/utils/data/text.js +30 -0
- package/dist/utils/data/text.js.map +1 -0
- package/dist/utils/data/tree.d.ts +140 -0
- package/dist/utils/data/tree.js +273 -0
- package/dist/utils/data/tree.js.map +1 -0
- package/dist/utils/data/workdays.d.ts +67 -0
- package/dist/utils/data/workdays.js +67 -0
- package/dist/utils/data/workdays.js.map +1 -0
- package/dist/utils/dom/announcer.d.ts +11 -0
- package/dist/utils/dom/announcer.js +53 -0
- package/dist/utils/dom/announcer.js.map +1 -0
- package/dist/utils/dom/caret.d.ts +14 -0
- package/dist/utils/dom/caret.js +72 -0
- package/dist/utils/dom/caret.js.map +1 -0
- package/dist/utils/dom/clipboard.d.ts +16 -0
- package/dist/utils/dom/clipboard.js +66 -0
- package/dist/utils/dom/clipboard.js.map +1 -0
- package/dist/utils/dom/direction.d.ts +12 -0
- package/dist/utils/dom/direction.js +20 -0
- package/dist/utils/dom/direction.js.map +1 -0
- package/dist/utils/dom/download.d.ts +7 -0
- package/dist/utils/dom/download.js +19 -0
- package/dist/utils/dom/download.js.map +1 -0
- package/dist/utils/dom/element.d.ts +3 -0
- package/dist/utils/dom/element.js +12 -0
- package/dist/utils/dom/element.js.map +1 -0
- package/dist/utils/dom/event-listener.d.ts +8 -0
- package/dist/utils/dom/event-listener.js +35 -0
- package/dist/utils/dom/event-listener.js.map +1 -0
- package/dist/utils/dom/floating.d.ts +149 -0
- package/dist/utils/dom/floating.js +262 -0
- package/dist/utils/dom/floating.js.map +1 -0
- package/dist/utils/dom/focus.d.ts +28 -0
- package/dist/utils/dom/focus.js +105 -0
- package/dist/utils/dom/focus.js.map +1 -0
- package/dist/utils/dom/fullscreen.d.ts +11 -0
- package/dist/utils/dom/fullscreen.js +43 -0
- package/dist/utils/dom/fullscreen.js.map +1 -0
- package/dist/utils/dom/hotkeys.d.ts +43 -0
- package/dist/utils/dom/hotkeys.js +174 -0
- package/dist/utils/dom/hotkeys.js.map +1 -0
- package/dist/utils/dom/hover-intent.d.ts +47 -0
- package/dist/utils/dom/hover-intent.js +72 -0
- package/dist/utils/dom/hover-intent.js.map +1 -0
- package/dist/utils/dom/hover-layer.d.ts +36 -0
- package/dist/utils/dom/hover-layer.js +74 -0
- package/dist/utils/dom/hover-layer.js.map +1 -0
- package/dist/utils/dom/intersection.d.ts +13 -0
- package/dist/utils/dom/intersection.js +36 -0
- package/dist/utils/dom/intersection.js.map +1 -0
- package/dist/utils/dom/layout-batch.d.ts +14 -0
- package/dist/utils/dom/layout-batch.js +26 -0
- package/dist/utils/dom/layout-batch.js.map +1 -0
- package/dist/utils/dom/link.d.ts +18 -0
- package/dist/utils/dom/link.js +44 -0
- package/dist/utils/dom/link.js.map +1 -0
- package/dist/utils/dom/media-query.d.ts +18 -0
- package/dist/utils/dom/media-query.js +36 -0
- package/dist/utils/dom/media-query.js.map +1 -0
- package/dist/utils/dom/move.d.ts +47 -0
- package/dist/utils/dom/move.js +69 -0
- package/dist/utils/dom/move.js.map +1 -0
- package/dist/utils/dom/open-change.d.ts +51 -0
- package/dist/utils/dom/open-change.js +21 -0
- package/dist/utils/dom/open-change.js.map +1 -0
- package/dist/utils/dom/overflow.d.ts +29 -0
- package/dist/utils/dom/overflow.js +108 -0
- package/dist/utils/dom/overflow.js.map +1 -0
- package/dist/utils/dom/overlay.d.ts +35 -0
- package/dist/utils/dom/overlay.js +104 -0
- package/dist/utils/dom/overlay.js.map +1 -0
- package/dist/utils/dom/page-visibility.d.ts +10 -0
- package/dist/utils/dom/page-visibility.js +22 -0
- package/dist/utils/dom/page-visibility.js.map +1 -0
- package/dist/utils/dom/pan-zoom.d.ts +109 -0
- package/dist/utils/dom/pan-zoom.js +257 -0
- package/dist/utils/dom/pan-zoom.js.map +1 -0
- package/dist/utils/dom/rasterize.d.ts +18 -0
- package/dist/utils/dom/rasterize.js +41 -0
- package/dist/utils/dom/rasterize.js.map +1 -0
- package/dist/utils/dom/resize.d.ts +4 -0
- package/dist/utils/dom/resize.js +65 -0
- package/dist/utils/dom/resize.js.map +1 -0
- package/dist/utils/dom/ripple.d.ts +40 -0
- package/dist/utils/dom/ripple.js +96 -0
- package/dist/utils/dom/ripple.js.map +1 -0
- package/dist/utils/dom/roving-focus.d.ts +44 -0
- package/dist/utils/dom/roving-focus.js +184 -0
- package/dist/utils/dom/roving-focus.js.map +1 -0
- package/dist/utils/dom/scroll-spy.d.ts +30 -0
- package/dist/utils/dom/scroll-spy.js +55 -0
- package/dist/utils/dom/scroll-spy.js.map +1 -0
- package/dist/utils/dom/sortable.d.ts +82 -0
- package/dist/utils/dom/sortable.js +437 -0
- package/dist/utils/dom/sortable.js.map +1 -0
- package/dist/utils/dom/storage.d.ts +21 -0
- package/dist/utils/dom/storage.js +66 -0
- package/dist/utils/dom/storage.js.map +1 -0
- package/dist/utils/dom/typeahead.d.ts +15 -0
- package/dist/utils/dom/typeahead.js +26 -0
- package/dist/utils/dom/typeahead.js.map +1 -0
- package/dist/utils/motion/active-indicator.d.ts +24 -0
- package/dist/utils/motion/active-indicator.js +58 -0
- package/dist/utils/motion/active-indicator.js.map +1 -0
- package/dist/utils/motion/animation.d.ts +58 -0
- package/dist/utils/motion/animation.js +83 -0
- package/dist/utils/motion/animation.js.map +1 -0
- package/dist/utils/motion/delayed-loading.d.ts +18 -0
- package/dist/utils/motion/delayed-loading.js +38 -0
- package/dist/utils/motion/delayed-loading.js.map +1 -0
- package/dist/utils/motion/layout.d.ts +17 -0
- package/dist/utils/motion/layout.js +43 -0
- package/dist/utils/motion/layout.js.map +1 -0
- package/dist/utils/motion/pointer.d.ts +14 -0
- package/dist/utils/motion/pointer.js +72 -0
- package/dist/utils/motion/pointer.js.map +1 -0
- package/dist/utils/motion/presence.d.ts +57 -0
- package/dist/utils/motion/presence.js +100 -0
- package/dist/utils/motion/presence.js.map +1 -0
- package/dist/utils/motion/reveal.d.ts +9 -0
- package/dist/utils/motion/reveal.js +68 -0
- package/dist/utils/motion/reveal.js.map +1 -0
- package/dist/utils/motion/tween.d.ts +34 -0
- package/dist/utils/motion/tween.js +50 -0
- package/dist/utils/motion/tween.js.map +1 -0
- package/dist/utils/props.d.ts +84 -0
- package/dist/utils/props.js +189 -0
- package/dist/utils/props.js.map +1 -0
- package/dist/utils/request/http.d.ts +101 -0
- package/dist/utils/request/http.js +154 -0
- package/dist/utils/request/http.js.map +1 -0
- package/dist/utils/request/use-request.d.ts +37 -0
- package/dist/utils/request/use-request.js +90 -0
- package/dist/utils/request/use-request.js.map +1 -0
- package/dist/utils/request/wire.d.ts +48 -0
- package/dist/utils/request/wire.js +208 -0
- package/dist/utils/request/wire.js.map +1 -0
- package/dist/utils/style/attached.d.ts +25 -0
- package/dist/utils/style/attached.js +82 -0
- package/dist/utils/style/attached.js.map +1 -0
- package/dist/utils/style/item-styles.d.ts +18 -0
- package/dist/utils/style/item-styles.js +79 -0
- package/dist/utils/style/item-styles.js.map +1 -0
- package/dist/utils/style/markers.d.ts +6 -0
- package/dist/utils/style/markers.js +11 -0
- package/dist/utils/style/markers.js.map +1 -0
- package/dist/utils/style/shimmer.d.ts +20 -0
- package/dist/utils/style/shimmer.js +58 -0
- package/dist/utils/style/shimmer.js.map +1 -0
- package/dist/utils/style/styles.d.ts +118 -0
- package/dist/utils/style/styles.js +114 -0
- package/dist/utils/style/styles.js.map +1 -0
- package/dist/utils/style/swatch-styles.d.ts +10 -0
- package/dist/utils/style/swatch-styles.js +19 -0
- package/dist/utils/style/swatch-styles.js.map +1 -0
- package/dist/utils/style/tone-styles.d.ts +58 -0
- package/dist/utils/style/tone-styles.js +180 -0
- package/dist/utils/style/tone-styles.js.map +1 -0
- package/dist/utils/style/transitions.d.ts +43 -0
- package/dist/utils/style/transitions.js +118 -0
- package/dist/utils/style/transitions.js.map +1 -0
- package/dist/utils/style/typography.d.ts +155 -0
- package/dist/utils/style/typography.js +80 -0
- package/dist/utils/style/typography.js.map +1 -0
- package/dist/utils/style/vars.d.ts +18 -0
- package/dist/utils/style/vars.js +21 -0
- package/dist/utils/style/vars.js.map +1 -0
- package/dist/utils/virtual/use-virtualizer.d.ts +43 -0
- package/dist/utils/virtual/use-virtualizer.js +94 -0
- package/dist/utils/virtual/use-virtualizer.js.map +1 -0
- package/dist/utils/virtual/virtualizer.d.ts +145 -0
- package/dist/utils/virtual/virtualizer.js +316 -0
- package/dist/utils/virtual/virtualizer.js.map +1 -0
- package/dist/xlsx/index.d.ts +7 -0
- package/dist/xlsx/index.js +1 -0
- package/dist/xlsx/workbook.d.ts +33 -0
- package/dist/xlsx/workbook.js +195 -0
- package/dist/xlsx/workbook.js.map +1 -0
- package/package.json +205 -3
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type { IconData } from '../base/Icon';
|
|
2
|
+
import { type SelectionModes } from '../utils/data/selection';
|
|
3
|
+
/** 一个选项 */
|
|
4
|
+
export interface ListboxOption {
|
|
5
|
+
/** 值:选中后写回的就是它,同一列表里不能重复 */
|
|
6
|
+
value: string;
|
|
7
|
+
/** 显示的文字;类型搜索、Combobox 过滤、Select 触发框里显示的都是它 */
|
|
8
|
+
label: string;
|
|
9
|
+
/** 不可用:可以被方向键经过(读屏能听到),不能选中 */
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
/** 文字下方的说明 */
|
|
12
|
+
description?: string;
|
|
13
|
+
/** 文字前的图标 */
|
|
14
|
+
icon?: IconData;
|
|
15
|
+
/** 分组名:同名的选项排在一组,组名显示在组的第一行 */
|
|
16
|
+
group?: string;
|
|
17
|
+
}
|
|
18
|
+
/** 列表里的一项:选项的显示信息,加上它来自的原始数据 */
|
|
19
|
+
export interface ListStateEntry<T> extends ListboxOption {
|
|
20
|
+
/** items 里对应的那一项:自定义渲染、renderValue 拿到的就是它 */
|
|
21
|
+
readonly item: T;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 数据 → 选项的显示信息:items 已经是 ListboxOption 时可以不写,否则必填。
|
|
25
|
+
* 后端数据直接传给 items,不用先 map 成 { value, label }:
|
|
26
|
+
* <Select items={users} toOption={(user) => ({ value: user.id, label: user.name })} />
|
|
27
|
+
*/
|
|
28
|
+
export type OptionMapping<T> = [T] extends [ListboxOption | string] ? {
|
|
29
|
+
/** 数据 → 选项(值、文字、不可用、分组…);items 是 ListboxOption 或字符串时可以不写 */
|
|
30
|
+
toOption?: (item: T) => ListboxOption;
|
|
31
|
+
} : {
|
|
32
|
+
/** 数据 → 选项(值、文字、不可用、分组…) */
|
|
33
|
+
toOption: (item: T) => ListboxOption;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* 一项数据的选项:给了 toOption 用它;没给时数据本身是 ListboxOption,或是字符串(值与文字都是它,
|
|
37
|
+
* `items={['设计', '研发']}` 这样的简单列表不用先 map 成 { value, label })
|
|
38
|
+
*/
|
|
39
|
+
export declare function toListboxOption<T>(item: T, toOption?: (item: T) => ListboxOption): ListboxOption;
|
|
40
|
+
/** 已选值对应的选项:item 是它来自的数据;从没在 items 里见过的值(自定义的、还没加载的)item 为 undefined */
|
|
41
|
+
export interface SelectedOption<T> extends ListboxOption {
|
|
42
|
+
/** 来自的数据 */
|
|
43
|
+
item: T | undefined;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 按值查已选项的显示信息(在 setup 里调用):Select、Combobox、TagsInput 显示已选项的文字都用它。
|
|
47
|
+
* 记住见过的已选项:远程搜索、过滤、分页把 items 换掉之后,不在当前 items 里的已选项仍按之前见过的文字显示,
|
|
48
|
+
* 不会退化成值本身(工号、id)。只记已选的值,不随 items 增长
|
|
49
|
+
*/
|
|
50
|
+
export declare function useSelectedOptions<T>(read: {
|
|
51
|
+
/** 数据 */
|
|
52
|
+
items: () => readonly T[];
|
|
53
|
+
/** 数据 → 选项 */
|
|
54
|
+
toOption: (item: T) => ListboxOption;
|
|
55
|
+
}): (values: readonly string[]) => SelectedOption<T>[];
|
|
56
|
+
/**
|
|
57
|
+
* useListState 的选项。按字段给读取函数(不是一个返回整个对象的 read):
|
|
58
|
+
* 选项上万时,选择变了不该重新整理选项,各字段要分开追踪依赖
|
|
59
|
+
*/
|
|
60
|
+
export interface ListStateOptions<T> {
|
|
61
|
+
/** 数据 */
|
|
62
|
+
items: () => readonly T[];
|
|
63
|
+
/** 数据 → 选项;不写时 items 本身就是 ListboxOption。在 computed 里调用,读到的 props 会被追踪 */
|
|
64
|
+
toOption?: (item: T) => ListboxOption;
|
|
65
|
+
/** 已选的值 */
|
|
66
|
+
selected: () => readonly string[];
|
|
67
|
+
/** 单选或多选 */
|
|
68
|
+
mode: () => keyof SelectionModes;
|
|
69
|
+
/** 至少保留一项(单选时再点已选项不取消) */
|
|
70
|
+
required?: () => boolean;
|
|
71
|
+
/** 选择变化 */
|
|
72
|
+
onChange: (values: readonly string[]) => void;
|
|
73
|
+
}
|
|
74
|
+
/** 列表的状态与操作 */
|
|
75
|
+
export interface ListState<T> {
|
|
76
|
+
/** 按分组排好的选项:渲染与键盘移动都按这个顺序 */
|
|
77
|
+
readonly options: readonly ListStateEntry<T>[];
|
|
78
|
+
/** 高亮(键盘或指针所在)的选项的值 */
|
|
79
|
+
readonly active: string | undefined;
|
|
80
|
+
/** 值在 options 里的位置;不在时 -1 */
|
|
81
|
+
indexOf(value: string): number;
|
|
82
|
+
/** 是否已选 */
|
|
83
|
+
isSelected(value: string): boolean;
|
|
84
|
+
/** 设置高亮项;undefined 取消高亮 */
|
|
85
|
+
setActive(value: string | undefined): void;
|
|
86
|
+
/** 高亮已选的第一项,没有已选时高亮第一个可用项(打开下拉、列表获得焦点时) */
|
|
87
|
+
activateDefault(): void;
|
|
88
|
+
/** 移动高亮:±n 项(到头时停住),或到第一项 / 最后一项;跳过不可用的项 */
|
|
89
|
+
move(step: number | 'first' | 'last'): void;
|
|
90
|
+
/** 切换一项的选中(不可用的项忽略);返回是否发生了变化 */
|
|
91
|
+
select(value: string): boolean;
|
|
92
|
+
/** 类型搜索:按下一个字符,高亮以它开头的项;返回是否命中 */
|
|
93
|
+
typeahead(key: string): boolean;
|
|
94
|
+
}
|
|
95
|
+
/** 列表状态(组件 setup 里调用) */
|
|
96
|
+
export declare function useListState<T>(config: ListStateOptions<T>): ListState<T>;
|
|
97
|
+
/**
|
|
98
|
+
* 输入搜索词后给读屏播报结果条数(“12 个选项”“没有匹配的选项”),停顿一会儿再念(在 setup 里调用)。
|
|
99
|
+
* WAI-ARIA 的组合框模式里看不见列表的读屏用户靠它知道过滤的结果;Select 的搜索框、Combobox 用它
|
|
100
|
+
*/
|
|
101
|
+
export declare function useResultAnnouncement(read: () => {
|
|
102
|
+
query: string;
|
|
103
|
+
count: number;
|
|
104
|
+
}): void;
|
|
105
|
+
/** handleListKeydown 的选项:不同的宿主(列表、触发按钮、输入框)对空格与字母的处理不同 */
|
|
106
|
+
export interface ListKeydownOptions {
|
|
107
|
+
/** 空格选中高亮项(列表、Select);输入框里空格是文字,不选 */
|
|
108
|
+
space?: boolean;
|
|
109
|
+
/** 字母做类型搜索(列表、Select);输入框里字母是文字 */
|
|
110
|
+
typeahead?: boolean;
|
|
111
|
+
/** Home / End 到第一项 / 最后一项,默认 true;输入框里它们移动光标 */
|
|
112
|
+
homeEnd?: boolean;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 列表的键盘操作:↑↓ 移动、Home / End、Page Up / Page Down、Enter(与可选的空格)选中、类型搜索。
|
|
116
|
+
* 返回是否处理了这个按键(处理了就该 preventDefault);Enter / 空格选中时 onSelect 收到被选的值
|
|
117
|
+
*/
|
|
118
|
+
export declare function handleListKeydown<T>(list: ListState<T>, event: KeyboardEvent, { space, typeahead, homeEnd }?: ListKeydownOptions, onSelect?: (value: string) => void): boolean;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { clamp } from "../utils/data/number.js";
|
|
2
|
+
import { useLang } from "../config/context.js";
|
|
3
|
+
import { announce } from "../utils/dom/announcer.js";
|
|
4
|
+
import { toggleSelection } from "../utils/data/selection.js";
|
|
5
|
+
import { isComposingKey } from "../utils/dom/hotkeys.js";
|
|
6
|
+
import { createTypeahead } from "../utils/dom/typeahead.js";
|
|
7
|
+
import { computed, onScopeDispose, ref, watch } from "vue";
|
|
8
|
+
//#region src/input/list-state.ts
|
|
9
|
+
/**
|
|
10
|
+
* 选项列表的状态(WAI-ARIA Listbox 的数据层):选项、高亮项、已选项、键盘移动、类型搜索。
|
|
11
|
+
* 不碰 DOM:Listbox、Select、Combobox 各自决定焦点在哪(列表自己、触发按钮、输入框),
|
|
12
|
+
* 高亮项用 aria-activedescendant 告诉读屏(焦点不动,Combobox 才能边输入边选)。参考 React Aria 的 useListState。
|
|
13
|
+
*
|
|
14
|
+
* const list = useListState({ items: () => users, toOption: (user) => ({ value: user.id, label: user.name }),
|
|
15
|
+
* selected: () => [value], mode: () => 'single', onChange });
|
|
16
|
+
* if (handleListKeydown(list, event, { space: true, typeahead: true })) event.preventDefault();
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* 一项数据的选项:给了 toOption 用它;没给时数据本身是 ListboxOption,或是字符串(值与文字都是它,
|
|
20
|
+
* `items={['设计', '研发']}` 这样的简单列表不用先 map 成 { value, label })
|
|
21
|
+
*/
|
|
22
|
+
function toListboxOption(item, toOption) {
|
|
23
|
+
if (toOption) return toOption(item);
|
|
24
|
+
return typeof item === "string" ? {
|
|
25
|
+
value: item,
|
|
26
|
+
label: item
|
|
27
|
+
} : item;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 按值查已选项的显示信息(在 setup 里调用):Select、Combobox、TagsInput 显示已选项的文字都用它。
|
|
31
|
+
* 记住见过的已选项:远程搜索、过滤、分页把 items 换掉之后,不在当前 items 里的已选项仍按之前见过的文字显示,
|
|
32
|
+
* 不会退化成值本身(工号、id)。只记已选的值,不随 items 增长
|
|
33
|
+
*/
|
|
34
|
+
function useSelectedOptions(read) {
|
|
35
|
+
const index = computed(() => {
|
|
36
|
+
const map = /* @__PURE__ */ new Map();
|
|
37
|
+
for (const item of read.items()) {
|
|
38
|
+
const option = read.toOption(item);
|
|
39
|
+
map.set(option.value, {
|
|
40
|
+
...option,
|
|
41
|
+
item
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return map;
|
|
45
|
+
});
|
|
46
|
+
const seen = /* @__PURE__ */ new Map();
|
|
47
|
+
return (values) => values.map((value) => {
|
|
48
|
+
const found = index.value.get(value);
|
|
49
|
+
if (found) {
|
|
50
|
+
seen.set(value, found);
|
|
51
|
+
return found;
|
|
52
|
+
}
|
|
53
|
+
return seen.get(value) ?? {
|
|
54
|
+
value,
|
|
55
|
+
label: value,
|
|
56
|
+
item: void 0
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/** 按分组排序:没有分组的在前,各组按第一次出现的顺序,组内保持原顺序 */
|
|
61
|
+
function grouped(options) {
|
|
62
|
+
if (!options.some((option) => option.group != null)) return options;
|
|
63
|
+
const order = /* @__PURE__ */ new Map([[void 0, []]]);
|
|
64
|
+
for (const option of options) {
|
|
65
|
+
const list = order.get(option.group) ?? [];
|
|
66
|
+
if (!order.has(option.group)) order.set(option.group, list);
|
|
67
|
+
list.push(option);
|
|
68
|
+
}
|
|
69
|
+
return [...order.values()].flat();
|
|
70
|
+
}
|
|
71
|
+
/** 列表状态(组件 setup 里调用) */
|
|
72
|
+
function useListState(config) {
|
|
73
|
+
const active = ref();
|
|
74
|
+
const search = createTypeahead();
|
|
75
|
+
const options = computed(() => grouped(config.items().map((item) => {
|
|
76
|
+
return {
|
|
77
|
+
...toListboxOption(item, config.toOption),
|
|
78
|
+
item
|
|
79
|
+
};
|
|
80
|
+
})));
|
|
81
|
+
const indices = computed(() => new Map(options.value.map((option, index) => [option.value, index])));
|
|
82
|
+
const selected = computed(() => new Set(config.selected()));
|
|
83
|
+
const enabled = (options) => options.filter((option) => !option.disabled);
|
|
84
|
+
const state = {
|
|
85
|
+
get options() {
|
|
86
|
+
return options.value;
|
|
87
|
+
},
|
|
88
|
+
get active() {
|
|
89
|
+
return active.value !== void 0 && indices.value.has(active.value) ? active.value : void 0;
|
|
90
|
+
},
|
|
91
|
+
indexOf: (value) => indices.value.get(value) ?? -1,
|
|
92
|
+
isSelected: (value) => selected.value.has(value),
|
|
93
|
+
setActive(value) {
|
|
94
|
+
active.value = value;
|
|
95
|
+
},
|
|
96
|
+
activateDefault() {
|
|
97
|
+
const usable = enabled(state.options);
|
|
98
|
+
active.value = (usable.find((option) => state.isSelected(option.value)) ?? usable[0])?.value;
|
|
99
|
+
},
|
|
100
|
+
move(step) {
|
|
101
|
+
const usable = enabled(state.options);
|
|
102
|
+
if (!usable.length) return;
|
|
103
|
+
const index = usable.findIndex((option) => option.value === state.active);
|
|
104
|
+
let next;
|
|
105
|
+
if (step === "first") next = 0;
|
|
106
|
+
else if (step === "last") next = usable.length - 1;
|
|
107
|
+
else if (index < 0) next = step > 0 ? 0 : usable.length - 1;
|
|
108
|
+
else next = clamp(index + step, 0, usable.length - 1);
|
|
109
|
+
active.value = usable[next].value;
|
|
110
|
+
},
|
|
111
|
+
select(value) {
|
|
112
|
+
const option = state.options[state.indexOf(value)];
|
|
113
|
+
if (!option || option.disabled) return false;
|
|
114
|
+
const current = config.selected();
|
|
115
|
+
const next = toggleSelection(current, value, {
|
|
116
|
+
mode: config.mode(),
|
|
117
|
+
required: config.required?.() ?? false
|
|
118
|
+
});
|
|
119
|
+
if (next === current) return false;
|
|
120
|
+
config.onChange(next);
|
|
121
|
+
return true;
|
|
122
|
+
},
|
|
123
|
+
typeahead(key) {
|
|
124
|
+
const usable = enabled(state.options);
|
|
125
|
+
const index = usable.findIndex((option) => option.value === state.active);
|
|
126
|
+
const match = search.next(key, usable.map((option) => option.label), index);
|
|
127
|
+
if (match < 0) return false;
|
|
128
|
+
active.value = usable[match].value;
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
return state;
|
|
133
|
+
}
|
|
134
|
+
/** 搜索词停下多久之后播报结果条数(毫秒):不在每打一个字时都念 */
|
|
135
|
+
var RESULT_ANNOUNCE_DELAY = 500;
|
|
136
|
+
/**
|
|
137
|
+
* 输入搜索词后给读屏播报结果条数(“12 个选项”“没有匹配的选项”),停顿一会儿再念(在 setup 里调用)。
|
|
138
|
+
* WAI-ARIA 的组合框模式里看不见列表的读屏用户靠它知道过滤的结果;Select 的搜索框、Combobox 用它
|
|
139
|
+
*/
|
|
140
|
+
function useResultAnnouncement(read) {
|
|
141
|
+
const lang = useLang();
|
|
142
|
+
let timer;
|
|
143
|
+
watch(() => read().query, (query) => {
|
|
144
|
+
clearTimeout(timer);
|
|
145
|
+
if (!query) return;
|
|
146
|
+
timer = setTimeout(() => {
|
|
147
|
+
const { count } = read();
|
|
148
|
+
announce(count > 0 ? lang.listResultCount(count) : lang.selectNoMatch);
|
|
149
|
+
}, RESULT_ANNOUNCE_DELAY);
|
|
150
|
+
});
|
|
151
|
+
onScopeDispose(() => clearTimeout(timer));
|
|
152
|
+
}
|
|
153
|
+
/** 一页移动几项(Page Up / Page Down) */
|
|
154
|
+
var PAGE = 10;
|
|
155
|
+
/**
|
|
156
|
+
* 列表的键盘操作:↑↓ 移动、Home / End、Page Up / Page Down、Enter(与可选的空格)选中、类型搜索。
|
|
157
|
+
* 返回是否处理了这个按键(处理了就该 preventDefault);Enter / 空格选中时 onSelect 收到被选的值
|
|
158
|
+
*/
|
|
159
|
+
function handleListKeydown(list, event, { space = false, typeahead = false, homeEnd = true } = {}, onSelect) {
|
|
160
|
+
if (event.altKey || event.ctrlKey || event.metaKey || isComposingKey(event)) return false;
|
|
161
|
+
const moves = {
|
|
162
|
+
ArrowDown: 1,
|
|
163
|
+
ArrowUp: -1,
|
|
164
|
+
Home: "first",
|
|
165
|
+
End: "last",
|
|
166
|
+
PageDown: PAGE,
|
|
167
|
+
PageUp: -10
|
|
168
|
+
};
|
|
169
|
+
const move = homeEnd || event.key !== "Home" && event.key !== "End" ? moves[event.key] : void 0;
|
|
170
|
+
if (move !== void 0) {
|
|
171
|
+
list.move(move);
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
if (event.key === "Enter" || space && event.key === " ") {
|
|
175
|
+
const value = list.active;
|
|
176
|
+
if (value === void 0) return event.key === " ";
|
|
177
|
+
list.select(value);
|
|
178
|
+
onSelect?.(value);
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
return typeahead ? list.typeahead(event.key) : false;
|
|
182
|
+
}
|
|
183
|
+
//#endregion
|
|
184
|
+
export { handleListKeydown, toListboxOption, useListState, useResultAnnouncement, useSelectedOptions };
|
|
185
|
+
|
|
186
|
+
//# sourceMappingURL=list-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-state.js","names":[],"sources":["../../src/input/list-state.ts"],"sourcesContent":["/**\n * 选项列表的状态(WAI-ARIA Listbox 的数据层):选项、高亮项、已选项、键盘移动、类型搜索。\n * 不碰 DOM:Listbox、Select、Combobox 各自决定焦点在哪(列表自己、触发按钮、输入框),\n * 高亮项用 aria-activedescendant 告诉读屏(焦点不动,Combobox 才能边输入边选)。参考 React Aria 的 useListState。\n *\n * const list = useListState({ items: () => users, toOption: (user) => ({ value: user.id, label: user.name }),\n * selected: () => [value], mode: () => 'single', onChange });\n * if (handleListKeydown(list, event, { space: true, typeahead: true })) event.preventDefault();\n */\nimport { computed, onScopeDispose, ref, watch } from 'vue';\nimport { useLang } from '../config/context';\nimport { announce } from '../utils/dom/announcer';\nimport type { IconData } from '../base/Icon';\nimport { isComposingKey } from '../utils/dom/hotkeys';\nimport { clamp } from '../utils/data/number';\nimport { toggleSelection, type SelectionModes } from '../utils/data/selection';\nimport { createTypeahead } from '../utils/dom/typeahead';\n\n/** 一个选项 */\nexport interface ListboxOption {\n /** 值:选中后写回的就是它,同一列表里不能重复 */\n value: string;\n /** 显示的文字;类型搜索、Combobox 过滤、Select 触发框里显示的都是它 */\n label: string;\n /** 不可用:可以被方向键经过(读屏能听到),不能选中 */\n disabled?: boolean;\n /** 文字下方的说明 */\n description?: string;\n /** 文字前的图标 */\n icon?: IconData;\n /** 分组名:同名的选项排在一组,组名显示在组的第一行 */\n group?: string;\n}\n\n/** 列表里的一项:选项的显示信息,加上它来自的原始数据 */\nexport interface ListStateEntry<T> extends ListboxOption {\n /** items 里对应的那一项:自定义渲染、renderValue 拿到的就是它 */\n readonly item: T;\n}\n\n/**\n * 数据 → 选项的显示信息:items 已经是 ListboxOption 时可以不写,否则必填。\n * 后端数据直接传给 items,不用先 map 成 { value, label }:\n * <Select items={users} toOption={(user) => ({ value: user.id, label: user.name })} />\n */\nexport type OptionMapping<T> = [T] extends [ListboxOption | string]\n ? {\n /** 数据 → 选项(值、文字、不可用、分组…);items 是 ListboxOption 或字符串时可以不写 */\n toOption?: (item: T) => ListboxOption;\n }\n : {\n /** 数据 → 选项(值、文字、不可用、分组…) */\n toOption: (item: T) => ListboxOption;\n };\n\n/**\n * 一项数据的选项:给了 toOption 用它;没给时数据本身是 ListboxOption,或是字符串(值与文字都是它,\n * `items={['设计', '研发']}` 这样的简单列表不用先 map 成 { value, label })\n */\nexport function toListboxOption<T>(item: T, toOption?: (item: T) => ListboxOption): ListboxOption {\n if (toOption) return toOption(item);\n return typeof item === 'string' ? { value: item, label: item } : (item as ListboxOption);\n}\n\n/** 已选值对应的选项:item 是它来自的数据;从没在 items 里见过的值(自定义的、还没加载的)item 为 undefined */\nexport interface SelectedOption<T> extends ListboxOption {\n /** 来自的数据 */\n item: T | undefined;\n}\n\n/**\n * 按值查已选项的显示信息(在 setup 里调用):Select、Combobox、TagsInput 显示已选项的文字都用它。\n * 记住见过的已选项:远程搜索、过滤、分页把 items 换掉之后,不在当前 items 里的已选项仍按之前见过的文字显示,\n * 不会退化成值本身(工号、id)。只记已选的值,不随 items 增长\n */\nexport function useSelectedOptions<T>(read: {\n /** 数据 */\n items: () => readonly T[];\n /** 数据 → 选项 */\n toOption: (item: T) => ListboxOption;\n}): (values: readonly string[]) => SelectedOption<T>[] {\n // 按值建索引:items 变了才重建,选择变化时只查表\n const index = computed(() => {\n const map = new Map<string, SelectedOption<T>>();\n for (const item of read.items()) {\n const option = read.toOption(item);\n map.set(option.value, { ...option, item });\n }\n return map;\n });\n const seen = new Map<string, SelectedOption<T>>();\n return (values) =>\n values.map((value) => {\n const found = index.value.get(value);\n if (found) {\n seen.set(value, found);\n return found;\n }\n return seen.get(value) ?? { value, label: value, item: undefined };\n });\n}\n\n/**\n * useListState 的选项。按字段给读取函数(不是一个返回整个对象的 read):\n * 选项上万时,选择变了不该重新整理选项,各字段要分开追踪依赖\n */\nexport interface ListStateOptions<T> {\n /** 数据 */\n items: () => readonly T[];\n /** 数据 → 选项;不写时 items 本身就是 ListboxOption。在 computed 里调用,读到的 props 会被追踪 */\n toOption?: (item: T) => ListboxOption;\n /** 已选的值 */\n selected: () => readonly string[];\n /** 单选或多选 */\n mode: () => keyof SelectionModes;\n /** 至少保留一项(单选时再点已选项不取消) */\n required?: () => boolean;\n /** 选择变化 */\n onChange: (values: readonly string[]) => void;\n}\n\n/** 列表的状态与操作 */\nexport interface ListState<T> {\n /** 按分组排好的选项:渲染与键盘移动都按这个顺序 */\n readonly options: readonly ListStateEntry<T>[];\n /** 高亮(键盘或指针所在)的选项的值 */\n readonly active: string | undefined;\n /** 值在 options 里的位置;不在时 -1 */\n indexOf(value: string): number;\n /** 是否已选 */\n isSelected(value: string): boolean;\n /** 设置高亮项;undefined 取消高亮 */\n setActive(value: string | undefined): void;\n /** 高亮已选的第一项,没有已选时高亮第一个可用项(打开下拉、列表获得焦点时) */\n activateDefault(): void;\n /** 移动高亮:±n 项(到头时停住),或到第一项 / 最后一项;跳过不可用的项 */\n move(step: number | 'first' | 'last'): void;\n /** 切换一项的选中(不可用的项忽略);返回是否发生了变化 */\n select(value: string): boolean;\n /** 类型搜索:按下一个字符,高亮以它开头的项;返回是否命中 */\n typeahead(key: string): boolean;\n}\n\n/** 按分组排序:没有分组的在前,各组按第一次出现的顺序,组内保持原顺序 */\nfunction grouped<O extends ListboxOption>(options: readonly O[]): readonly O[] {\n if (!options.some((option) => option.group != null)) return options;\n const order = new Map<string | undefined, O[]>([[undefined, []]]);\n for (const option of options) {\n const list = order.get(option.group) ?? [];\n if (!order.has(option.group)) order.set(option.group, list);\n list.push(option);\n }\n return [...order.values()].flat();\n}\n\n/** 列表状态(组件 setup 里调用) */\nexport function useListState<T>(config: ListStateOptions<T>): ListState<T> {\n const active = ref<string | undefined>();\n const search = createTypeahead();\n // 选项多(上万)时这些每次渲染要读很多遍:缓存起来,数据或选择变了才重算\n const options = computed(() =>\n grouped(\n config.items().map((item): ListStateEntry<T> => {\n const option = toListboxOption(item, config.toOption);\n return { ...option, item };\n }),\n ),\n );\n const indices = computed(\n () => new Map(options.value.map((option, index) => [option.value, index])),\n );\n const selected = computed(() => new Set(config.selected()));\n\n const enabled = (options: readonly ListStateEntry<T>[]) =>\n options.filter((option) => !option.disabled);\n\n const state: ListState<T> = {\n get options() {\n return options.value;\n },\n get active() {\n // 选项变了(过滤、异步加载)后高亮项可能已经不在了\n return active.value !== undefined && indices.value.has(active.value)\n ? active.value\n : undefined;\n },\n indexOf: (value) => indices.value.get(value) ?? -1,\n isSelected: (value) => selected.value.has(value),\n setActive(value) {\n active.value = value;\n },\n activateDefault() {\n const usable = enabled(state.options);\n active.value = (usable.find((option) => state.isSelected(option.value)) ?? usable[0])?.value;\n },\n move(step) {\n const usable = enabled(state.options);\n if (!usable.length) return;\n const index = usable.findIndex((option) => option.value === state.active);\n let next: number;\n if (step === 'first') next = 0;\n else if (step === 'last') next = usable.length - 1;\n else if (index < 0) next = step > 0 ? 0 : usable.length - 1;\n else next = clamp(index + step, 0, usable.length - 1);\n active.value = usable[next]!.value;\n },\n select(value) {\n const option = state.options[state.indexOf(value)];\n if (!option || option.disabled) return false;\n const current = config.selected();\n const next = toggleSelection(current, value, {\n mode: config.mode(),\n required: config.required?.() ?? false,\n });\n if (next === current) return false;\n config.onChange(next);\n return true;\n },\n typeahead(key) {\n const usable = enabled(state.options);\n const index = usable.findIndex((option) => option.value === state.active);\n const match = search.next(\n key,\n usable.map((option) => option.label),\n index,\n );\n if (match < 0) return false;\n active.value = usable[match]!.value;\n return true;\n },\n };\n return state;\n}\n\n/** 搜索词停下多久之后播报结果条数(毫秒):不在每打一个字时都念 */\nconst RESULT_ANNOUNCE_DELAY = 500;\n\n/**\n * 输入搜索词后给读屏播报结果条数(“12 个选项”“没有匹配的选项”),停顿一会儿再念(在 setup 里调用)。\n * WAI-ARIA 的组合框模式里看不见列表的读屏用户靠它知道过滤的结果;Select 的搜索框、Combobox 用它\n */\nexport function useResultAnnouncement(read: () => { query: string; count: number }): void {\n const lang = useLang();\n let timer: ReturnType<typeof setTimeout> | undefined;\n watch(\n () => read().query,\n (query) => {\n clearTimeout(timer);\n if (!query) return;\n timer = setTimeout(() => {\n const { count } = read();\n announce(count > 0 ? lang.listResultCount(count) : lang.selectNoMatch);\n }, RESULT_ANNOUNCE_DELAY);\n },\n );\n onScopeDispose(() => clearTimeout(timer));\n}\n\n/** handleListKeydown 的选项:不同的宿主(列表、触发按钮、输入框)对空格与字母的处理不同 */\nexport interface ListKeydownOptions {\n /** 空格选中高亮项(列表、Select);输入框里空格是文字,不选 */\n space?: boolean;\n /** 字母做类型搜索(列表、Select);输入框里字母是文字 */\n typeahead?: boolean;\n /** Home / End 到第一项 / 最后一项,默认 true;输入框里它们移动光标 */\n homeEnd?: boolean;\n}\n\n/** 一页移动几项(Page Up / Page Down) */\nconst PAGE = 10;\n\n/**\n * 列表的键盘操作:↑↓ 移动、Home / End、Page Up / Page Down、Enter(与可选的空格)选中、类型搜索。\n * 返回是否处理了这个按键(处理了就该 preventDefault);Enter / 空格选中时 onSelect 收到被选的值\n */\nexport function handleListKeydown<T>(\n list: ListState<T>,\n event: KeyboardEvent,\n { space = false, typeahead = false, homeEnd = true }: ListKeydownOptions = {},\n onSelect?: (value: string) => void,\n): boolean {\n if (event.altKey || event.ctrlKey || event.metaKey || isComposingKey(event)) return false;\n const moves: Record<string, number | 'first' | 'last'> = {\n ArrowDown: 1,\n ArrowUp: -1,\n Home: 'first',\n End: 'last',\n PageDown: PAGE,\n PageUp: -PAGE,\n };\n const move =\n homeEnd || (event.key !== 'Home' && event.key !== 'End') ? moves[event.key] : undefined;\n if (move !== undefined) {\n list.move(move);\n return true;\n }\n if (event.key === 'Enter' || (space && event.key === ' ')) {\n const value = list.active;\n if (value === undefined) return event.key === ' ';\n list.select(value);\n onSelect?.(value);\n return true;\n }\n return typeahead ? list.typeahead(event.key) : false;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2DA,SAAgB,gBAAmB,MAAS,UAAsD;CAChG,IAAI,UAAU,OAAO,SAAS,IAAI;CAClC,OAAO,OAAO,SAAS,WAAW;EAAE,OAAO;EAAM,OAAO;CAAK,IAAK;AACpE;;;;;;AAaA,SAAgB,mBAAsB,MAKiB;CAErD,MAAM,QAAQ,eAAe;EAC3B,MAAM,sBAAM,IAAI,IAA+B;EAC/C,KAAK,MAAM,QAAQ,KAAK,MAAM,GAAG;GAC/B,MAAM,SAAS,KAAK,SAAS,IAAI;GACjC,IAAI,IAAI,OAAO,OAAO;IAAE,GAAG;IAAQ;GAAK,CAAC;EAC3C;EACA,OAAO;CACT,CAAC;CACD,MAAM,uBAAO,IAAI,IAA+B;CAChD,QAAQ,WACN,OAAO,KAAK,UAAU;EACpB,MAAM,QAAQ,MAAM,MAAM,IAAI,KAAK;EACnC,IAAI,OAAO;GACT,KAAK,IAAI,OAAO,KAAK;GACrB,OAAO;EACT;EACA,OAAO,KAAK,IAAI,KAAK,KAAK;GAAE;GAAO,OAAO;GAAO,MAAM,KAAA;EAAU;CACnE,CAAC;AACL;;AA4CA,SAAS,QAAiC,SAAqC;CAC7E,IAAI,CAAC,QAAQ,MAAM,WAAW,OAAO,SAAS,IAAI,GAAG,OAAO;CAC5D,MAAM,wBAAQ,IAAI,IAA6B,CAAC,CAAC,KAAA,GAAW,CAAC,CAAC,CAAC,CAAC;CAChE,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,OAAO,MAAM,IAAI,OAAO,KAAK,KAAK,CAAC;EACzC,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,GAAG,MAAM,IAAI,OAAO,OAAO,IAAI;EAC1D,KAAK,KAAK,MAAM;CAClB;CACA,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK;AAClC;;AAGA,SAAgB,aAAgB,QAA2C;CACzE,MAAM,SAAS,IAAwB;CACvC,MAAM,SAAS,gBAAgB;CAE/B,MAAM,UAAU,eACd,QACE,OAAO,MAAM,CAAC,CAAC,KAAK,SAA4B;EAE9C,OAAO;GAAE,GADM,gBAAgB,MAAM,OAAO,QAChC;GAAQ;EAAK;CAC3B,CAAC,CACH,CACF;CACA,MAAM,UAAU,eACR,IAAI,IAAI,QAAQ,MAAM,KAAK,QAAQ,UAAU,CAAC,OAAO,OAAO,KAAK,CAAC,CAAC,CAC3E;CACA,MAAM,WAAW,eAAe,IAAI,IAAI,OAAO,SAAS,CAAC,CAAC;CAE1D,MAAM,WAAW,YACf,QAAQ,QAAQ,WAAW,CAAC,OAAO,QAAQ;CAE7C,MAAM,QAAsB;EAC1B,IAAI,UAAU;GACZ,OAAO,QAAQ;EACjB;EACA,IAAI,SAAS;GAEX,OAAO,OAAO,UAAU,KAAA,KAAa,QAAQ,MAAM,IAAI,OAAO,KAAK,IAC/D,OAAO,QACP,KAAA;EACN;EACA,UAAU,UAAU,QAAQ,MAAM,IAAI,KAAK,KAAK;EAChD,aAAa,UAAU,SAAS,MAAM,IAAI,KAAK;EAC/C,UAAU,OAAO;GACf,OAAO,QAAQ;EACjB;EACA,kBAAkB;GAChB,MAAM,SAAS,QAAQ,MAAM,OAAO;GACpC,OAAO,SAAS,OAAO,MAAM,WAAW,MAAM,WAAW,OAAO,KAAK,CAAC,KAAK,OAAO,GAAA,EAAK;EACzF;EACA,KAAK,MAAM;GACT,MAAM,SAAS,QAAQ,MAAM,OAAO;GACpC,IAAI,CAAC,OAAO,QAAQ;GACpB,MAAM,QAAQ,OAAO,WAAW,WAAW,OAAO,UAAU,MAAM,MAAM;GACxE,IAAI;GACJ,IAAI,SAAS,SAAS,OAAO;QACxB,IAAI,SAAS,QAAQ,OAAO,OAAO,SAAS;QAC5C,IAAI,QAAQ,GAAG,OAAO,OAAO,IAAI,IAAI,OAAO,SAAS;QACrD,OAAO,MAAM,QAAQ,MAAM,GAAG,OAAO,SAAS,CAAC;GACpD,OAAO,QAAQ,OAAO,KAAK,CAAE;EAC/B;EACA,OAAO,OAAO;GACZ,MAAM,SAAS,MAAM,QAAQ,MAAM,QAAQ,KAAK;GAChD,IAAI,CAAC,UAAU,OAAO,UAAU,OAAO;GACvC,MAAM,UAAU,OAAO,SAAS;GAChC,MAAM,OAAO,gBAAgB,SAAS,OAAO;IAC3C,MAAM,OAAO,KAAK;IAClB,UAAU,OAAO,WAAW,KAAK;GACnC,CAAC;GACD,IAAI,SAAS,SAAS,OAAO;GAC7B,OAAO,SAAS,IAAI;GACpB,OAAO;EACT;EACA,UAAU,KAAK;GACb,MAAM,SAAS,QAAQ,MAAM,OAAO;GACpC,MAAM,QAAQ,OAAO,WAAW,WAAW,OAAO,UAAU,MAAM,MAAM;GACxE,MAAM,QAAQ,OAAO,KACnB,KACA,OAAO,KAAK,WAAW,OAAO,KAAK,GACnC,KACF;GACA,IAAI,QAAQ,GAAG,OAAO;GACtB,OAAO,QAAQ,OAAO,MAAM,CAAE;GAC9B,OAAO;EACT;CACF;CACA,OAAO;AACT;;AAGA,IAAM,wBAAwB;;;;;AAM9B,SAAgB,sBAAsB,MAAoD;CACxF,MAAM,OAAO,QAAQ;CACrB,IAAI;CACJ,YACQ,KAAK,CAAC,CAAC,QACZ,UAAU;EACT,aAAa,KAAK;EAClB,IAAI,CAAC,OAAO;EACZ,QAAQ,iBAAiB;GACvB,MAAM,EAAE,UAAU,KAAK;GACvB,SAAS,QAAQ,IAAI,KAAK,gBAAgB,KAAK,IAAI,KAAK,aAAa;EACvE,GAAG,qBAAqB;CAC1B,CACF;CACA,qBAAqB,aAAa,KAAK,CAAC;AAC1C;;AAaA,IAAM,OAAO;;;;;AAMb,SAAgB,kBACd,MACA,OACA,EAAE,QAAQ,OAAO,YAAY,OAAO,UAAU,SAA6B,CAAC,GAC5E,UACS;CACT,IAAI,MAAM,UAAU,MAAM,WAAW,MAAM,WAAW,eAAe,KAAK,GAAG,OAAO;CACpF,MAAM,QAAmD;EACvD,WAAW;EACX,SAAS;EACT,MAAM;EACN,KAAK;EACL,UAAU;EACV,QAAQ;CACV;CACA,MAAM,OACJ,WAAY,MAAM,QAAQ,UAAU,MAAM,QAAQ,QAAS,MAAM,MAAM,OAAO,KAAA;CAChF,IAAI,SAAS,KAAA,GAAW;EACtB,KAAK,KAAK,IAAI;EACd,OAAO;CACT;CACA,IAAI,MAAM,QAAQ,WAAY,SAAS,MAAM,QAAQ,KAAM;EACzD,MAAM,QAAQ,KAAK;EACnB,IAAI,UAAU,KAAA,GAAW,OAAO,MAAM,QAAQ;EAC9C,KAAK,OAAO,KAAK;EACjB,WAAW,KAAK;EAChB,OAAO;CACT;CACA,OAAO,YAAY,KAAK,UAAU,MAAM,GAAG,IAAI;AACjD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 人员与组织选择器(PeoplePicker、PeoplePickerPanel)的数据:选的是人员、部门、岗位三种,数据由接入方的 source 提供。
|
|
3
|
+
*
|
|
4
|
+
* const source: PeopleSource = {
|
|
5
|
+
* children: (parent, signal) => http.get('/org/children', { query: { parent: parent?.id }, signal }),
|
|
6
|
+
* search: (query, signal) => http.get('/org/search', { query: { q: query }, signal }),
|
|
7
|
+
* positions: (signal) => http.get('/org/positions', { signal }),
|
|
8
|
+
* };
|
|
9
|
+
* <PeoplePicker source={source} _value={owners} />
|
|
10
|
+
*
|
|
11
|
+
* 选中的值是 PeopleEntry 的数组(带名字,回显不用再查);同一个人、部门按 type + id 判断(peopleKey)。
|
|
12
|
+
* 组织架构不大、已经整棵在前端时用 localPeopleSource。
|
|
13
|
+
*/
|
|
14
|
+
/** 能选的类型 */
|
|
15
|
+
export interface PeopleTypes {
|
|
16
|
+
/** 人员 */
|
|
17
|
+
user: unknown;
|
|
18
|
+
/** 部门:选中就是部门里的人(怎么展开由后端定) */
|
|
19
|
+
department: unknown;
|
|
20
|
+
/** 岗位(角色):流程的岗位收件箱 */
|
|
21
|
+
position: unknown;
|
|
22
|
+
}
|
|
23
|
+
/** 能选的类型 */
|
|
24
|
+
export type PeopleType = keyof PeopleTypes;
|
|
25
|
+
/** 一个人员、部门或岗位 */
|
|
26
|
+
export interface PeopleEntry {
|
|
27
|
+
/** 标识:同一种类型里唯一(工号、部门编码、岗位编码) */
|
|
28
|
+
id: string;
|
|
29
|
+
/** 类型 */
|
|
30
|
+
type: PeopleType;
|
|
31
|
+
/** 名字 */
|
|
32
|
+
name: string;
|
|
33
|
+
/** 说明:人员的部门与岗位、部门的上级路径;搜索结果里分辨同名的 */
|
|
34
|
+
description?: string;
|
|
35
|
+
/** 头像地址(人员);没有时显示名字的头一个字 */
|
|
36
|
+
avatar?: string;
|
|
37
|
+
/** 部门下还有子部门或人员;false 时没有“下级”,不写时按有 */
|
|
38
|
+
hasChildren?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/** 数据来源:接入方按自己的接口实现;signal 在换了部门、改了搜索词、关掉选择器时中止 */
|
|
41
|
+
export interface PeopleSource {
|
|
42
|
+
/** 一个部门下的子部门与人员(部门在前);parent 为 null 时是最上层 */
|
|
43
|
+
children(parent: PeopleEntry | null, signal: AbortSignal): Promise<readonly PeopleEntry[]>;
|
|
44
|
+
/** 按关键字搜,人员、部门、岗位都可以返回;不写时没有搜索框 */
|
|
45
|
+
search?(query: string, signal: AbortSignal): Promise<readonly PeopleEntry[]>;
|
|
46
|
+
/** 全部岗位;不写时没有“岗位”页 */
|
|
47
|
+
positions?(signal: AbortSignal): Promise<readonly PeopleEntry[]>;
|
|
48
|
+
}
|
|
49
|
+
/** 组织架构的一个节点:部门带着下级 */
|
|
50
|
+
export interface PeopleNode extends PeopleEntry {
|
|
51
|
+
/** 子部门与人员 */
|
|
52
|
+
children?: readonly PeopleNode[];
|
|
53
|
+
}
|
|
54
|
+
/** 同一个人员、部门、岗位的键:类型加标识 */
|
|
55
|
+
export declare const peopleKey: (entry: Pick<PeopleEntry, 'type' | 'id'>) => string;
|
|
56
|
+
/** 去掉下级、只留这一项本身(写进选中的值、最近选过的) */
|
|
57
|
+
declare const plain: ({ id, type, name, description, avatar, hasChildren }: PeopleEntry) => PeopleEntry;
|
|
58
|
+
/**
|
|
59
|
+
* 整棵在前端的组织架构做成数据来源:示例、测试与规模不大的系统直接用。
|
|
60
|
+
* 搜索按名字与说明(不分大小写),岗位单独给;部门的 hasChildren 按有没有 children 填上
|
|
61
|
+
*/
|
|
62
|
+
export declare function localPeopleSource(tree: readonly PeopleNode[], positions?: readonly PeopleEntry[]): PeopleSource;
|
|
63
|
+
/** 写进值里的一项:去掉下级与其他字段 */
|
|
64
|
+
export declare const toPeopleValue: typeof plain;
|
|
65
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
//#region src/input/people.ts
|
|
2
|
+
/** 同一个人员、部门、岗位的键:类型加标识 */
|
|
3
|
+
var peopleKey = (entry) => `${entry.type}:${entry.id}`;
|
|
4
|
+
/** 去掉下级、只留这一项本身(写进选中的值、最近选过的) */
|
|
5
|
+
var plain = ({ id, type, name, description, avatar, hasChildren }) => ({
|
|
6
|
+
id,
|
|
7
|
+
type,
|
|
8
|
+
name,
|
|
9
|
+
...description != null ? { description } : {},
|
|
10
|
+
...avatar != null ? { avatar } : {},
|
|
11
|
+
...hasChildren != null ? { hasChildren } : {}
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* 整棵在前端的组织架构做成数据来源:示例、测试与规模不大的系统直接用。
|
|
15
|
+
* 搜索按名字与说明(不分大小写),岗位单独给;部门的 hasChildren 按有没有 children 填上
|
|
16
|
+
*/
|
|
17
|
+
function localPeopleSource(tree, positions = []) {
|
|
18
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
19
|
+
const all = [];
|
|
20
|
+
const visit = (level) => {
|
|
21
|
+
for (const node of level) {
|
|
22
|
+
byKey.set(peopleKey(node), node);
|
|
23
|
+
all.push(node);
|
|
24
|
+
visit(node.children ?? []);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
visit(tree);
|
|
28
|
+
const view = (node) => plain(node.type === "department" ? {
|
|
29
|
+
...node,
|
|
30
|
+
hasChildren: !!node.children?.length
|
|
31
|
+
} : node);
|
|
32
|
+
const matches = (entry, text) => entry.name.toLocaleLowerCase().includes(text) || !!entry.description?.toLocaleLowerCase().includes(text);
|
|
33
|
+
return {
|
|
34
|
+
children: (parent) => Promise.resolve((parent ? byKey.get(peopleKey(parent))?.children ?? [] : tree).map(view)),
|
|
35
|
+
search: (query) => {
|
|
36
|
+
const text = query.trim().toLocaleLowerCase();
|
|
37
|
+
return Promise.resolve([...all.map(view), ...positions.map(plain)].filter((entry) => matches(entry, text)));
|
|
38
|
+
},
|
|
39
|
+
...positions.length > 0 ? { positions: () => Promise.resolve(positions.map(plain)) } : {}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** 写进值里的一项:去掉下级与其他字段 */
|
|
43
|
+
var toPeopleValue = plain;
|
|
44
|
+
//#endregion
|
|
45
|
+
export { localPeopleSource, peopleKey, toPeopleValue };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=people.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"people.js","names":[],"sources":["../../src/input/people.ts"],"sourcesContent":["/**\n * 人员与组织选择器(PeoplePicker、PeoplePickerPanel)的数据:选的是人员、部门、岗位三种,数据由接入方的 source 提供。\n *\n * const source: PeopleSource = {\n * children: (parent, signal) => http.get('/org/children', { query: { parent: parent?.id }, signal }),\n * search: (query, signal) => http.get('/org/search', { query: { q: query }, signal }),\n * positions: (signal) => http.get('/org/positions', { signal }),\n * };\n * <PeoplePicker source={source} _value={owners} />\n *\n * 选中的值是 PeopleEntry 的数组(带名字,回显不用再查);同一个人、部门按 type + id 判断(peopleKey)。\n * 组织架构不大、已经整棵在前端时用 localPeopleSource。\n */\n\n/** 能选的类型 */\nexport interface PeopleTypes {\n /** 人员 */\n user: unknown;\n /** 部门:选中就是部门里的人(怎么展开由后端定) */\n department: unknown;\n /** 岗位(角色):流程的岗位收件箱 */\n position: unknown;\n}\n\n/** 能选的类型 */\nexport type PeopleType = keyof PeopleTypes;\n\n/** 一个人员、部门或岗位 */\nexport interface PeopleEntry {\n /** 标识:同一种类型里唯一(工号、部门编码、岗位编码) */\n id: string;\n /** 类型 */\n type: PeopleType;\n /** 名字 */\n name: string;\n /** 说明:人员的部门与岗位、部门的上级路径;搜索结果里分辨同名的 */\n description?: string;\n /** 头像地址(人员);没有时显示名字的头一个字 */\n avatar?: string;\n /** 部门下还有子部门或人员;false 时没有“下级”,不写时按有 */\n hasChildren?: boolean;\n}\n\n/** 数据来源:接入方按自己的接口实现;signal 在换了部门、改了搜索词、关掉选择器时中止 */\nexport interface PeopleSource {\n /** 一个部门下的子部门与人员(部门在前);parent 为 null 时是最上层 */\n children(parent: PeopleEntry | null, signal: AbortSignal): Promise<readonly PeopleEntry[]>;\n /** 按关键字搜,人员、部门、岗位都可以返回;不写时没有搜索框 */\n search?(query: string, signal: AbortSignal): Promise<readonly PeopleEntry[]>;\n /** 全部岗位;不写时没有“岗位”页 */\n positions?(signal: AbortSignal): Promise<readonly PeopleEntry[]>;\n}\n\n/** 组织架构的一个节点:部门带着下级 */\nexport interface PeopleNode extends PeopleEntry {\n /** 子部门与人员 */\n children?: readonly PeopleNode[];\n}\n\n/** 同一个人员、部门、岗位的键:类型加标识 */\nexport const peopleKey = (entry: Pick<PeopleEntry, 'type' | 'id'>) => `${entry.type}:${entry.id}`;\n\n/** 去掉下级、只留这一项本身(写进选中的值、最近选过的) */\nconst plain = ({ id, type, name, description, avatar, hasChildren }: PeopleEntry): PeopleEntry => ({\n id,\n type,\n name,\n ...(description != null ? { description } : {}),\n ...(avatar != null ? { avatar } : {}),\n ...(hasChildren != null ? { hasChildren } : {}),\n});\n\n/**\n * 整棵在前端的组织架构做成数据来源:示例、测试与规模不大的系统直接用。\n * 搜索按名字与说明(不分大小写),岗位单独给;部门的 hasChildren 按有没有 children 填上\n */\nexport function localPeopleSource(\n tree: readonly PeopleNode[],\n positions: readonly PeopleEntry[] = [],\n): PeopleSource {\n const byKey = new Map<string, PeopleNode>();\n const all: PeopleNode[] = [];\n const visit = (level: readonly PeopleNode[]) => {\n for (const node of level) {\n byKey.set(peopleKey(node), node);\n all.push(node);\n visit(node.children ?? []);\n }\n };\n visit(tree);\n const view = (node: PeopleNode): PeopleEntry =>\n plain(node.type === 'department' ? { ...node, hasChildren: !!node.children?.length } : node);\n const matches = (entry: PeopleEntry, text: string) =>\n entry.name.toLocaleLowerCase().includes(text) ||\n !!entry.description?.toLocaleLowerCase().includes(text);\n return {\n children: (parent) =>\n Promise.resolve((parent ? (byKey.get(peopleKey(parent))?.children ?? []) : tree).map(view)),\n search: (query) => {\n const text = query.trim().toLocaleLowerCase();\n return Promise.resolve(\n [...all.map(view), ...positions.map(plain)].filter((entry) => matches(entry, text)),\n );\n },\n ...(positions.length > 0 ? { positions: () => Promise.resolve(positions.map(plain)) } : {}),\n };\n}\n\n/** 写进值里的一项:去掉下级与其他字段 */\nexport const toPeopleValue = plain;\n"],"mappings":";;AA4DA,IAAa,aAAa,UAA4C,GAAG,MAAM,KAAI,GAAI,MAAM;;AAG7F,IAAM,SAAS,EAAE,IAAI,MAAM,MAAM,aAAa,QAAQ,mBAA6C;CACjG;CACA;CACA;CACA,GAAI,eAAe,OAAO,EAAE,YAAY,IAAI,CAAC;CAC7C,GAAI,UAAU,OAAO,EAAE,OAAO,IAAI,CAAC;CACnC,GAAI,eAAe,OAAO,EAAE,YAAY,IAAI,CAAC;AAC/C;;;;;AAMA,SAAgB,kBACd,MACA,YAAoC,CAAA,GACtB;CACd,MAAM,wBAAQ,IAAI,IAAwB;CAC1C,MAAM,MAAoB,CAAA;CAC1B,MAAM,SAAS,UAAiC;EAC9C,KAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,IAAI,UAAU,IAAI,GAAG,IAAI;GAC/B,IAAI,KAAK,IAAI;GACb,MAAM,KAAK,YAAY,CAAA,CAAE;EAC3B;CACF;CACA,MAAM,IAAI;CACV,MAAM,QAAQ,SACZ,MAAM,KAAK,SAAS,eAAe;EAAE,GAAG;EAAM,aAAa,CAAC,CAAC,KAAK,UAAU;CAAO,IAAI,IAAI;CAC7F,MAAM,WAAW,OAAoB,SACnC,MAAM,KAAK,kBAAkB,CAAC,CAAC,SAAS,IAAI,KAC5C,CAAC,CAAC,MAAM,aAAa,kBAAkB,CAAC,CAAC,SAAS,IAAI;CACxD,OAAO;EACL,WAAW,WACT,QAAQ,SAAS,SAAU,MAAM,IAAI,UAAU,MAAM,CAAC,CAAC,EAAE,YAAY,CAAA,IAAM,KAAA,CAAM,IAAI,IAAI,CAAC;EAC5F,SAAS,UAAU;GACjB,MAAM,OAAO,MAAM,KAAK,CAAC,CAAC,kBAAkB;GAC5C,OAAO,QAAQ,QACb,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,UAAU,QAAQ,OAAO,IAAI,CAAC,CACpF;EACF;EACA,GAAI,UAAU,SAAS,IAAI,EAAE,iBAAiB,QAAQ,QAAQ,UAAU,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC;CAC3F;AACF;;AAGA,IAAa,gBAAgB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** 远程选项的加载函数:搜索词 → 选项;signal 在被后来的请求顶掉、组件卸载时中止 */
|
|
2
|
+
export type OptionsLoader<T> = (query: string, signal: AbortSignal) => Promise<readonly T[]>;
|
|
3
|
+
/** 远程选项的状态;没给 load 时原样用 items */
|
|
4
|
+
export declare function useRemoteItems<T>(read: {
|
|
5
|
+
/** 加载函数;没有时不请求 */
|
|
6
|
+
load: () => OptionsLoader<T> | undefined;
|
|
7
|
+
/** 当前的搜索词 */
|
|
8
|
+
query: () => string;
|
|
9
|
+
/** 弹层是否打开 */
|
|
10
|
+
open: () => boolean;
|
|
11
|
+
/** 本地的选项(有 load 时是第一次结果之前的选项) */
|
|
12
|
+
items: () => readonly T[];
|
|
13
|
+
}): {
|
|
14
|
+
/** 当前的选项 */
|
|
15
|
+
items: () => readonly T[];
|
|
16
|
+
/** 正在请求 */
|
|
17
|
+
loading: () => boolean;
|
|
18
|
+
/** 最后一次请求失败的原因 */
|
|
19
|
+
error: () => unknown;
|
|
20
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useRequest } from "../utils/request/use-request.js";
|
|
2
|
+
import { watch } from "vue";
|
|
3
|
+
//#region src/input/remote-items.ts
|
|
4
|
+
/**
|
|
5
|
+
* 远程选项(Select、Combobox、TreeSelect 的 load):弹层打开时按当前搜索词请求,之后搜索词变了停下 300 ms 再请求;
|
|
6
|
+
* 只采用最后一次的结果(useRequest),结果代替 items。弹层关着不请求。
|
|
7
|
+
* 第一次结果回来之前用 items:编辑页把已选的那一项放进 items,触发框一开始就有文字。
|
|
8
|
+
*/
|
|
9
|
+
/** 搜索词停下多久再请求(毫秒) */
|
|
10
|
+
var DEBOUNCE = 300;
|
|
11
|
+
/** 远程选项的状态;没给 load 时原样用 items */
|
|
12
|
+
function useRemoteItems(read) {
|
|
13
|
+
const request = useRequest((query, signal) => read.load()(query, signal), {
|
|
14
|
+
params: () => read.query(),
|
|
15
|
+
debounce: DEBOUNCE,
|
|
16
|
+
immediate: false,
|
|
17
|
+
enabled: () => read.load() != null && read.open()
|
|
18
|
+
});
|
|
19
|
+
watch(read.open, (open) => {
|
|
20
|
+
if (!read.load()) return;
|
|
21
|
+
if (open) request.refresh();
|
|
22
|
+
else request.cancel();
|
|
23
|
+
}, { immediate: true });
|
|
24
|
+
return {
|
|
25
|
+
/** 当前的选项 */
|
|
26
|
+
items: () => read.load() ? request.data ?? read.items() : read.items(),
|
|
27
|
+
/** 正在请求 */
|
|
28
|
+
loading: () => request.loading,
|
|
29
|
+
/** 最后一次请求失败的原因 */
|
|
30
|
+
error: () => request.error
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { useRemoteItems };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=remote-items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-items.js","names":[],"sources":["../../src/input/remote-items.ts"],"sourcesContent":["/**\n * 远程选项(Select、Combobox、TreeSelect 的 load):弹层打开时按当前搜索词请求,之后搜索词变了停下 300 ms 再请求;\n * 只采用最后一次的结果(useRequest),结果代替 items。弹层关着不请求。\n * 第一次结果回来之前用 items:编辑页把已选的那一项放进 items,触发框一开始就有文字。\n */\nimport { watch } from 'vue';\nimport { useRequest } from '../utils/request/use-request';\n\n/** 远程选项的加载函数:搜索词 → 选项;signal 在被后来的请求顶掉、组件卸载时中止 */\nexport type OptionsLoader<T> = (query: string, signal: AbortSignal) => Promise<readonly T[]>;\n\n/** 搜索词停下多久再请求(毫秒) */\nconst DEBOUNCE = 300;\n\n/** 远程选项的状态;没给 load 时原样用 items */\nexport function useRemoteItems<T>(read: {\n /** 加载函数;没有时不请求 */\n load: () => OptionsLoader<T> | undefined;\n /** 当前的搜索词 */\n query: () => string;\n /** 弹层是否打开 */\n open: () => boolean;\n /** 本地的选项(有 load 时是第一次结果之前的选项) */\n items: () => readonly T[];\n}) {\n const request = useRequest((query: string, signal) => read.load()!(query, signal), {\n params: () => read.query(),\n debounce: DEBOUNCE,\n immediate: false,\n enabled: () => read.load() != null && read.open(),\n });\n // 打开时立即按当前搜索词请求(不等防抖),一开始就是打开的也算;关闭时取消还在进行的\n watch(\n read.open,\n (open) => {\n if (!read.load()) return;\n if (open) void request.refresh();\n else request.cancel();\n },\n { immediate: true },\n );\n return {\n /** 当前的选项 */\n items: (): readonly T[] => (read.load() ? (request.data ?? read.items()) : read.items()),\n /** 正在请求 */\n loading: () => request.loading,\n /** 最后一次请求失败的原因 */\n error: () => request.error,\n };\n}\n"],"mappings":";;;;;;;;;AAYA,IAAM,WAAW;;AAGjB,SAAgB,eAAkB,MAS/B;CACD,MAAM,UAAU,YAAY,OAAe,WAAW,KAAK,KAAK,CAAC,CAAE,OAAO,MAAM,GAAG;EACjF,cAAc,KAAK,MAAM;EACzB,UAAU;EACV,WAAW;EACX,eAAe,KAAK,KAAK,KAAK,QAAQ,KAAK,KAAK;CAClD,CAAC;CAED,MACE,KAAK,OACJ,SAAS;EACR,IAAI,CAAC,KAAK,KAAK,GAAG;EAClB,IAAI,MAAM,QAAa,QAAQ;OAC1B,QAAQ,OAAO;CACtB,GACA,EAAE,WAAW,KAAK,CACpB;CACA,OAAO;;EAEL,aAA4B,KAAK,KAAK,IAAK,QAAQ,QAAQ,KAAK,MAAM,IAAK,KAAK,MAAM;;EAEtF,eAAe,QAAQ;;EAEvB,aAAa,QAAQ;CACvB;AACF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 输入时自动分组显示的格式:值是去掉分隔的原文(13800001111),输入框里显示分好组的文字(138 0000 1111),
|
|
3
|
+
* 交给 TextField 的 format。手机号、身份证号、银行卡号有现成的,别的用 createGroupedFormat 写。
|
|
4
|
+
*
|
|
5
|
+
* <TextField _value={phone} format={phoneFormat} /> // phone === '13800001111'
|
|
6
|
+
* <TextField _value={card} format={createGroupedFormat({ groups: [4, 4, 4, 4, 3] })} />
|
|
7
|
+
*
|
|
8
|
+
* 只按位置分组、过滤字符,不校验内容(号段、校验位):校验写在表单的 schema 里(phoneSchema、idCardSchema)。
|
|
9
|
+
*/
|
|
10
|
+
/** TextField 的显示格式 */
|
|
11
|
+
export interface TextFormat {
|
|
12
|
+
/** 原文 → 显示的文字 */
|
|
13
|
+
format: (raw: string) => string;
|
|
14
|
+
/** 输入框里的文字 → 原文(去掉分隔、过滤掉不接受的字符、截到最长) */
|
|
15
|
+
parse: (text: string) => string;
|
|
16
|
+
/** 手机上弹出的键盘 */
|
|
17
|
+
inputmode?: 'numeric' | 'text' | 'tel';
|
|
18
|
+
}
|
|
19
|
+
/** createGroupedFormat 的选项 */
|
|
20
|
+
export interface GroupedFormatOptions {
|
|
21
|
+
/** 各组的长度:[3, 4, 4] 是 3-4-4;最后一组之后的字符再按最后一组的长度接着分 */
|
|
22
|
+
groups: readonly number[];
|
|
23
|
+
/** 接受的字符,默认数字 */
|
|
24
|
+
accept?: RegExp;
|
|
25
|
+
/** 原文最长几位;默认是各组加起来 */
|
|
26
|
+
maxLength?: number;
|
|
27
|
+
/** 组之间的分隔,默认一个空格 */
|
|
28
|
+
separator?: string;
|
|
29
|
+
/** 字母转成大写(身份证的 X) */
|
|
30
|
+
uppercase?: boolean;
|
|
31
|
+
/** 手机上弹出的键盘,默认 numeric */
|
|
32
|
+
inputmode?: TextFormat['inputmode'];
|
|
33
|
+
}
|
|
34
|
+
/** 按位置分组的格式 */
|
|
35
|
+
export declare function createGroupedFormat({ groups, accept, maxLength, separator, uppercase, inputmode, }: GroupedFormatOptions): TextFormat;
|
|
36
|
+
/** 中国大陆手机号:3-4-4,11 位数字 */
|
|
37
|
+
export declare const phoneFormat: TextFormat;
|
|
38
|
+
/** 居民身份证号:6-8-4(地区、出生日期、顺序码与校验位),最后一位可以是 X */
|
|
39
|
+
export declare const idCardFormat: TextFormat;
|
|
40
|
+
/** 银行卡号:每 4 位一组,最长 19 位 */
|
|
41
|
+
export declare const bankCardFormat: TextFormat;
|
|
42
|
+
/**
|
|
43
|
+
* 原文里第 count 个字符之后,对应显示文字里的位置:重新格式化之后把光标放回原来那个字符的后面
|
|
44
|
+
* (在 1380|0001111 打一个字,光标停在新字符后面,而不是跳到最后)
|
|
45
|
+
*/
|
|
46
|
+
export declare function displayPosition(format: TextFormat, raw: string, count: number): number;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
//#region src/input/text-format.ts
|
|
2
|
+
/** 按位置分组的格式 */
|
|
3
|
+
function createGroupedFormat({ groups, accept = /\d/, maxLength = groups.reduce((sum, size) => sum + size, 0), separator = " ", uppercase = false, inputmode = "numeric" }) {
|
|
4
|
+
const one = new RegExp(accept.source, accept.flags.replace("g", ""));
|
|
5
|
+
return {
|
|
6
|
+
inputmode,
|
|
7
|
+
parse: (text) => {
|
|
8
|
+
return Array.from(uppercase ? text.toUpperCase() : text).filter((char) => one.test(char)).slice(0, maxLength).join("");
|
|
9
|
+
},
|
|
10
|
+
format: (raw) => {
|
|
11
|
+
const parts = [];
|
|
12
|
+
let rest = raw;
|
|
13
|
+
for (let index = 0; rest; index++) {
|
|
14
|
+
const size = groups[Math.min(index, groups.length - 1)];
|
|
15
|
+
parts.push(rest.slice(0, size));
|
|
16
|
+
rest = rest.slice(size);
|
|
17
|
+
}
|
|
18
|
+
return parts.join(separator);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/** 中国大陆手机号:3-4-4,11 位数字 */
|
|
23
|
+
var phoneFormat = {
|
|
24
|
+
...createGroupedFormat({ groups: [
|
|
25
|
+
3,
|
|
26
|
+
4,
|
|
27
|
+
4
|
|
28
|
+
] }),
|
|
29
|
+
inputmode: "tel"
|
|
30
|
+
};
|
|
31
|
+
/** 居民身份证号:6-8-4(地区、出生日期、顺序码与校验位),最后一位可以是 X */
|
|
32
|
+
var idCardFormat = createGroupedFormat({
|
|
33
|
+
groups: [
|
|
34
|
+
6,
|
|
35
|
+
8,
|
|
36
|
+
4
|
|
37
|
+
],
|
|
38
|
+
accept: /[\dXx]/,
|
|
39
|
+
uppercase: true,
|
|
40
|
+
inputmode: "text"
|
|
41
|
+
});
|
|
42
|
+
/** 银行卡号:每 4 位一组,最长 19 位 */
|
|
43
|
+
var bankCardFormat = createGroupedFormat({
|
|
44
|
+
groups: [4],
|
|
45
|
+
maxLength: 19
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* 原文里第 count 个字符之后,对应显示文字里的位置:重新格式化之后把光标放回原来那个字符的后面
|
|
49
|
+
* (在 1380|0001111 打一个字,光标停在新字符后面,而不是跳到最后)
|
|
50
|
+
*/
|
|
51
|
+
function displayPosition(format, raw, count) {
|
|
52
|
+
if (count <= 0) return 0;
|
|
53
|
+
const shown = format.format(raw);
|
|
54
|
+
let seen = 0;
|
|
55
|
+
for (let index = 0; index < shown.length; index++) {
|
|
56
|
+
if (format.parse(shown[index]) !== "") seen++;
|
|
57
|
+
if (seen === count) return index + 1;
|
|
58
|
+
}
|
|
59
|
+
return shown.length;
|
|
60
|
+
}
|
|
61
|
+
//#endregion
|
|
62
|
+
export { bankCardFormat, createGroupedFormat, displayPosition, idCardFormat, phoneFormat };
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=text-format.js.map
|