@zerodep-dev/vue-tsx-pro-ui 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +32 -2
- package/dist/base/Badge.d.ts +28 -0
- package/dist/base/Badge.js +72 -0
- package/dist/base/Badge.js.map +1 -0
- package/dist/base/Blockquote.d.ts +13 -0
- package/dist/base/Blockquote.js +26 -0
- package/dist/base/Blockquote.js.map +1 -0
- package/dist/base/Button.d.ts +18 -0
- package/dist/base/Button.js +86 -0
- package/dist/base/Button.js.map +1 -0
- package/dist/base/ButtonBase.d.ts +21 -0
- package/dist/base/ButtonBase.js +51 -0
- package/dist/base/ButtonBase.js.map +1 -0
- package/dist/base/ButtonGroup.d.ts +24 -0
- package/dist/base/ButtonGroup.js +52 -0
- package/dist/base/ButtonGroup.js.map +1 -0
- package/dist/base/CloseButton.d.ts +15 -0
- package/dist/base/CloseButton.js +38 -0
- package/dist/base/CloseButton.js.map +1 -0
- package/dist/base/Code.d.ts +13 -0
- package/dist/base/Code.js +27 -0
- package/dist/base/Code.js.map +1 -0
- package/dist/base/CodeBlock.d.ts +89 -0
- package/dist/base/CodeBlock.js +265 -0
- package/dist/base/CodeBlock.js.map +1 -0
- package/dist/base/CopyButton.d.ts +40 -0
- package/dist/base/CopyButton.js +113 -0
- package/dist/base/CopyButton.js.map +1 -0
- package/dist/base/Heading.d.ts +49 -0
- package/dist/base/Heading.js +122 -0
- package/dist/base/Heading.js.map +1 -0
- package/dist/base/Icon.d.ts +48 -0
- package/dist/base/Icon.js +110 -0
- package/dist/base/Icon.js.map +1 -0
- package/dist/base/IconButton.d.ts +34 -0
- package/dist/base/IconButton.js +81 -0
- package/dist/base/IconButton.js.map +1 -0
- package/dist/base/IconLinkButton.d.ts +34 -0
- package/dist/base/IconLinkButton.js +81 -0
- package/dist/base/IconLinkButton.js.map +1 -0
- package/dist/base/Indicator.d.ts +126 -0
- package/dist/base/Indicator.js +158 -0
- package/dist/base/Indicator.js.map +1 -0
- package/dist/base/Kbd.d.ts +13 -0
- package/dist/base/Kbd.js +34 -0
- package/dist/base/Kbd.js.map +1 -0
- package/dist/base/Link.d.ts +61 -0
- package/dist/base/Link.js +114 -0
- package/dist/base/Link.js.map +1 -0
- package/dist/base/LinkButton.d.ts +18 -0
- package/dist/base/LinkButton.js +109 -0
- package/dist/base/LinkButton.js.map +1 -0
- package/dist/base/List.d.ts +61 -0
- package/dist/base/List.js +116 -0
- package/dist/base/List.js.map +1 -0
- package/dist/base/Mark.d.ts +13 -0
- package/dist/base/Mark.js +23 -0
- package/dist/base/Mark.js.map +1 -0
- package/dist/base/Spinner.d.ts +20 -0
- package/dist/base/Spinner.js +59 -0
- package/dist/base/Spinner.js.map +1 -0
- package/dist/base/StatusDot.d.ts +48 -0
- package/dist/base/StatusDot.js +62 -0
- package/dist/base/StatusDot.js.map +1 -0
- package/dist/base/Tag.d.ts +29 -0
- package/dist/base/Tag.js +92 -0
- package/dist/base/Tag.js.map +1 -0
- package/dist/base/Text.d.ts +57 -0
- package/dist/base/Text.js +74 -0
- package/dist/base/Text.js.map +1 -0
- package/dist/base/VisuallyHidden.d.ts +13 -0
- package/dist/base/VisuallyHidden.js +28 -0
- package/dist/base/VisuallyHidden.js.map +1 -0
- package/dist/base/badge-styles.d.ts +57 -0
- package/dist/base/badge-styles.js +329 -0
- package/dist/base/badge-styles.js.map +1 -0
- package/dist/base/button-core.d.ts +191 -0
- package/dist/base/button-core.js +660 -0
- package/dist/base/button-core.js.map +1 -0
- package/dist/charts/AreaChart.d.ts +18 -0
- package/dist/charts/AreaChart.js +90 -0
- package/dist/charts/AreaChart.js.map +1 -0
- package/dist/charts/BarChart.d.ts +19 -0
- package/dist/charts/BarChart.js +88 -0
- package/dist/charts/BarChart.js.map +1 -0
- package/dist/charts/ChordChart.d.ts +48 -0
- package/dist/charts/ChordChart.js +149 -0
- package/dist/charts/ChordChart.js.map +1 -0
- package/dist/charts/ComboChart.d.ts +30 -0
- package/dist/charts/ComboChart.js +157 -0
- package/dist/charts/ComboChart.js.map +1 -0
- package/dist/charts/DonutChart.d.ts +65 -0
- package/dist/charts/DonutChart.js +162 -0
- package/dist/charts/DonutChart.js.map +1 -0
- package/dist/charts/FunnelChart.d.ts +69 -0
- package/dist/charts/FunnelChart.js +181 -0
- package/dist/charts/FunnelChart.js.map +1 -0
- package/dist/charts/GraphChart.d.ts +135 -0
- package/dist/charts/GraphChart.js +274 -0
- package/dist/charts/GraphChart.js.map +1 -0
- package/dist/charts/LineChart.d.ts +50 -0
- package/dist/charts/LineChart.js +94 -0
- package/dist/charts/LineChart.js.map +1 -0
- package/dist/charts/MapChart.d.ts +167 -0
- package/dist/charts/MapChart.js +627 -0
- package/dist/charts/MapChart.js.map +1 -0
- package/dist/charts/RadarChart.d.ts +60 -0
- package/dist/charts/RadarChart.js +224 -0
- package/dist/charts/RadarChart.js.map +1 -0
- package/dist/charts/SankeyChart.d.ts +57 -0
- package/dist/charts/SankeyChart.js +150 -0
- package/dist/charts/SankeyChart.js.map +1 -0
- package/dist/charts/ScatterChart.d.ts +18 -0
- package/dist/charts/ScatterChart.js +82 -0
- package/dist/charts/ScatterChart.js.map +1 -0
- package/dist/charts/TimelineChart.d.ts +71 -0
- package/dist/charts/TimelineChart.js +267 -0
- package/dist/charts/TimelineChart.js.map +1 -0
- package/dist/charts/TreemapChart.d.ts +40 -0
- package/dist/charts/TreemapChart.js +155 -0
- package/dist/charts/TreemapChart.js.map +1 -0
- package/dist/charts/WaterfallChart.d.ts +61 -0
- package/dist/charts/WaterfallChart.js +167 -0
- package/dist/charts/WaterfallChart.js.map +1 -0
- package/dist/charts/XYChart.d.ts +206 -0
- package/dist/charts/XYChart.js +520 -0
- package/dist/charts/XYChart.js.map +1 -0
- package/dist/charts/axis-ticks.d.ts +23 -0
- package/dist/charts/axis-ticks.js +59 -0
- package/dist/charts/axis-ticks.js.map +1 -0
- package/dist/charts/export.d.ts +17 -0
- package/dist/charts/export.js +65 -0
- package/dist/charts/export.js.map +1 -0
- package/dist/charts/flow.d.ts +53 -0
- package/dist/charts/flow.js +29 -0
- package/dist/charts/flow.js.map +1 -0
- package/dist/charts/frame.d.ts +147 -0
- package/dist/charts/frame.js +358 -0
- package/dist/charts/frame.js.map +1 -0
- package/dist/charts/index.d.ts +30 -0
- package/dist/charts/index.js +24 -0
- package/dist/charts/label-layout.d.ts +59 -0
- package/dist/charts/label-layout.js +64 -0
- package/dist/charts/label-layout.js.map +1 -0
- package/dist/charts/series.d.ts +36 -0
- package/dist/charts/series.js +60 -0
- package/dist/charts/series.js.map +1 -0
- package/dist/charts/single.d.ts +41 -0
- package/dist/charts/single.js +65 -0
- package/dist/charts/single.js.map +1 -0
- package/dist/code-editor/CodeEditor.d.ts +18 -0
- package/dist/code-editor/CodeEditor.js +57 -0
- package/dist/code-editor/CodeEditor.js.map +1 -0
- package/dist/code-editor/editor.d.ts +52 -0
- package/dist/code-editor/editor.js +225 -0
- package/dist/code-editor/editor.js.map +1 -0
- package/dist/code-editor/index.d.ts +9 -0
- package/dist/code-editor/index.js +3 -0
- package/dist/config/Provider.d.ts +52 -0
- package/dist/config/Provider.js +111 -0
- package/dist/config/Provider.js.map +1 -0
- package/dist/config/context.d.ts +90 -0
- package/dist/config/context.js +58 -0
- package/dist/config/context.js.map +1 -0
- package/dist/config/createUi.d.ts +52 -0
- package/dist/config/createUi.js +96 -0
- package/dist/config/createUi.js.map +1 -0
- package/dist/config/defaults.d.ts +71 -0
- package/dist/config/defaults.js +45 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/lang/en-US.d.ts +3 -0
- package/dist/config/lang/en-US.js +404 -0
- package/dist/config/lang/en-US.js.map +1 -0
- package/dist/config/lang/format.d.ts +51 -0
- package/dist/config/lang/format.js +120 -0
- package/dist/config/lang/format.js.map +1 -0
- package/dist/config/lang/lang.d.ts +666 -0
- package/dist/config/lang/lang.js +31 -0
- package/dist/config/lang/lang.js.map +1 -0
- package/dist/config/lang/messages.d.ts +12 -0
- package/dist/config/lang/messages.js +36 -0
- package/dist/config/lang/messages.js.map +1 -0
- package/dist/config/lang/zh-CN.d.ts +3 -0
- package/dist/config/lang/zh-CN.js +404 -0
- package/dist/config/lang/zh-CN.js.map +1 -0
- package/dist/config/pinyin.d.ts +3 -0
- package/dist/config/pinyin.js +26 -0
- package/dist/config/pinyin.js.map +1 -0
- package/dist/config/query-state.d.ts +61 -0
- package/dist/config/query-state.js +113 -0
- package/dist/config/query-state.js.map +1 -0
- package/dist/config/shiki.d.ts +13 -0
- package/dist/config/shiki.js +97 -0
- package/dist/config/shiki.js.map +1 -0
- package/dist/config/styles.d.ts +108 -0
- package/dist/config/styles.js +59 -0
- package/dist/config/styles.js.map +1 -0
- package/dist/config/theme/boot.d.ts +97 -0
- package/dist/config/theme/boot.js +90 -0
- package/dist/config/theme/boot.js.map +1 -0
- package/dist/config/theme/builtin.d.ts +21 -0
- package/dist/config/theme/builtin.js +58 -0
- package/dist/config/theme/builtin.js.map +1 -0
- package/dist/config/theme/coffee.d.ts +84 -0
- package/dist/config/theme/coffee.js +102 -0
- package/dist/config/theme/coffee.js.map +1 -0
- package/dist/config/theme/cyberpunk.d.ts +110 -0
- package/dist/config/theme/cyberpunk.js +125 -0
- package/dist/config/theme/cyberpunk.js.map +1 -0
- package/dist/config/theme/dark.d.ts +90 -0
- package/dist/config/theme/dark.js +106 -0
- package/dist/config/theme/dark.js.map +1 -0
- package/dist/config/theme/festive.d.ts +93 -0
- package/dist/config/theme/festive.js +110 -0
- package/dist/config/theme/festive.js.map +1 -0
- package/dist/config/theme/forest.d.ts +93 -0
- package/dist/config/theme/forest.js +109 -0
- package/dist/config/theme/forest.js.map +1 -0
- package/dist/config/theme/high-contrast.d.ts +103 -0
- package/dist/config/theme/high-contrast.js +119 -0
- package/dist/config/theme/high-contrast.js.map +1 -0
- package/dist/config/theme/lemon.d.ts +103 -0
- package/dist/config/theme/lemon.js +119 -0
- package/dist/config/theme/lemon.js.map +1 -0
- package/dist/config/theme/light.d.ts +107 -0
- package/dist/config/theme/light.js +122 -0
- package/dist/config/theme/light.js.map +1 -0
- package/dist/config/theme/midnight.d.ts +86 -0
- package/dist/config/theme/midnight.js +103 -0
- package/dist/config/theme/midnight.js.map +1 -0
- package/dist/config/theme/ocean.d.ts +103 -0
- package/dist/config/theme/ocean.js +119 -0
- package/dist/config/theme/ocean.js.map +1 -0
- package/dist/config/theme/paper.d.ts +101 -0
- package/dist/config/theme/paper.js +117 -0
- package/dist/config/theme/paper.js.map +1 -0
- package/dist/config/theme/preference.d.ts +34 -0
- package/dist/config/theme/preference.js +67 -0
- package/dist/config/theme/preference.js.map +1 -0
- package/dist/config/theme/sakura.d.ts +103 -0
- package/dist/config/theme/sakura.js +119 -0
- package/dist/config/theme/sakura.js.map +1 -0
- package/dist/config/theme/theme.d.ts +59 -0
- package/dist/config/theme/theme.js +68 -0
- package/dist/config/theme/theme.js.map +1 -0
- package/dist/config/theme/token-names.d.ts +1897 -0
- package/dist/config/theme/tokens.d.ts +833 -0
- package/dist/config/theme/tokens.js +480 -0
- package/dist/config/theme/tokens.js.map +1 -0
- package/dist/config/vue-router.d.ts +67 -0
- package/dist/config/vue-router.js +143 -0
- package/dist/config/vue-router.js.map +1 -0
- package/dist/date/Calendar.d.ts +36 -0
- package/dist/date/Calendar.js +83 -0
- package/dist/date/Calendar.js.map +1 -0
- package/dist/date/CalendarBoard.d.ts +79 -0
- package/dist/date/CalendarBoard.js +403 -0
- package/dist/date/CalendarBoard.js.map +1 -0
- package/dist/date/CalendarView.d.ts +86 -0
- package/dist/date/CalendarView.js +427 -0
- package/dist/date/CalendarView.js.map +1 -0
- package/dist/date/Countdown.d.ts +45 -0
- package/dist/date/Countdown.js +75 -0
- package/dist/date/Countdown.js.map +1 -0
- package/dist/date/DateField.d.ts +34 -0
- package/dist/date/DateField.js +124 -0
- package/dist/date/DateField.js.map +1 -0
- package/dist/date/DatePicker.d.ts +41 -0
- package/dist/date/DatePicker.js +272 -0
- package/dist/date/DatePicker.js.map +1 -0
- package/dist/date/DateRangePicker.d.ts +71 -0
- package/dist/date/DateRangePicker.js +411 -0
- package/dist/date/DateRangePicker.js.map +1 -0
- package/dist/date/DateSegmentGroup.d.ts +38 -0
- package/dist/date/DateSegmentGroup.js +176 -0
- package/dist/date/DateSegmentGroup.js.map +1 -0
- package/dist/date/DateTime.d.ts +21 -0
- package/dist/date/DateTime.js +39 -0
- package/dist/date/DateTime.js.map +1 -0
- package/dist/date/QuarterCalendar.d.ts +22 -0
- package/dist/date/QuarterCalendar.js +231 -0
- package/dist/date/QuarterCalendar.js.map +1 -0
- package/dist/date/RangeCalendar.d.ts +24 -0
- package/dist/date/RangeCalendar.js +89 -0
- package/dist/date/RangeCalendar.js.map +1 -0
- package/dist/date/RelativeTime.d.ts +16 -0
- package/dist/date/RelativeTime.js +61 -0
- package/dist/date/RelativeTime.js.map +1 -0
- package/dist/date/SegmentedField.d.ts +60 -0
- package/dist/date/SegmentedField.js +175 -0
- package/dist/date/SegmentedField.js.map +1 -0
- package/dist/date/TimeField.d.ts +36 -0
- package/dist/date/TimeField.js +56 -0
- package/dist/date/TimeField.js.map +1 -0
- package/dist/date/TimePicker.d.ts +25 -0
- package/dist/date/TimePicker.js +206 -0
- package/dist/date/TimePicker.js.map +1 -0
- package/dist/date/calendar-state.d.ts +119 -0
- package/dist/date/calendar-state.js +267 -0
- package/dist/date/calendar-state.js.map +1 -0
- package/dist/date/clock.d.ts +11 -0
- package/dist/date/clock.js +37 -0
- package/dist/date/clock.js.map +1 -0
- package/dist/date/date-locale.d.ts +67 -0
- package/dist/date/date-locale.js +89 -0
- package/dist/date/date-locale.js.map +1 -0
- package/dist/date/date-segments.d.ts +132 -0
- package/dist/date/date-segments.js +410 -0
- package/dist/date/date-segments.js.map +1 -0
- package/dist/date/picker-popover.d.ts +88 -0
- package/dist/date/picker-popover.js +126 -0
- package/dist/date/picker-popover.js.map +1 -0
- package/dist/diagram/Diagram.d.ts +223 -0
- package/dist/diagram/Diagram.js +1121 -0
- package/dist/diagram/Diagram.js.map +1 -0
- package/dist/diagram/DiagramControls.d.ts +35 -0
- package/dist/diagram/DiagramControls.js +114 -0
- package/dist/diagram/DiagramControls.js.map +1 -0
- package/dist/diagram/DiagramLanes.d.ts +49 -0
- package/dist/diagram/DiagramLanes.js +92 -0
- package/dist/diagram/DiagramLanes.js.map +1 -0
- package/dist/diagram/DiagramMinimap.d.ts +39 -0
- package/dist/diagram/DiagramMinimap.js +133 -0
- package/dist/diagram/DiagramMinimap.js.map +1 -0
- package/dist/diagram/DiagramNode.d.ts +65 -0
- package/dist/diagram/DiagramNode.js +142 -0
- package/dist/diagram/DiagramNode.js.map +1 -0
- package/dist/diagram/controller.d.ts +68 -0
- package/dist/diagram/controller.js +117 -0
- package/dist/diagram/controller.js.map +1 -0
- package/dist/diagram/export.d.ts +14 -0
- package/dist/diagram/export.js +115 -0
- package/dist/diagram/export.js.map +1 -0
- package/dist/diagram/geometry.d.ts +65 -0
- package/dist/diagram/geometry.js +219 -0
- package/dist/diagram/geometry.js.map +1 -0
- package/dist/diagram/index.d.ts +20 -0
- package/dist/diagram/index.js +12 -0
- package/dist/diagram/layout.d.ts +57 -0
- package/dist/diagram/layout.js +50 -0
- package/dist/diagram/layout.js.map +1 -0
- package/dist/diagram/messages.d.ts +28 -0
- package/dist/diagram/messages.js +30 -0
- package/dist/diagram/messages.js.map +1 -0
- package/dist/diagram/route.d.ts +81 -0
- package/dist/diagram/route.js +327 -0
- package/dist/diagram/route.js.map +1 -0
- package/dist/display/Accordion.d.ts +71 -0
- package/dist/display/Accordion.js +219 -0
- package/dist/display/Accordion.js.map +1 -0
- package/dist/display/AnimatedNumber.d.ts +44 -0
- package/dist/display/AnimatedNumber.js +97 -0
- package/dist/display/AnimatedNumber.js.map +1 -0
- package/dist/display/Avatar.d.ts +74 -0
- package/dist/display/Avatar.js +158 -0
- package/dist/display/Avatar.js.map +1 -0
- package/dist/display/AvatarGroup.d.ts +29 -0
- package/dist/display/AvatarGroup.js +67 -0
- package/dist/display/AvatarGroup.js.map +1 -0
- package/dist/display/Card.d.ts +219 -0
- package/dist/display/Card.js +319 -0
- package/dist/display/Card.js.map +1 -0
- package/dist/display/Checklist.d.ts +93 -0
- package/dist/display/Checklist.js +260 -0
- package/dist/display/Checklist.js.map +1 -0
- package/dist/display/Collapse.d.ts +24 -0
- package/dist/display/Collapse.js +65 -0
- package/dist/display/Collapse.js.map +1 -0
- package/dist/display/Collapsible.d.ts +12 -0
- package/dist/display/Collapsible.js +41 -0
- package/dist/display/Collapsible.js.map +1 -0
- package/dist/display/Descriptions.d.ts +88 -0
- package/dist/display/Descriptions.js +185 -0
- package/dist/display/Descriptions.js.map +1 -0
- package/dist/display/Ellipsis.d.ts +29 -0
- package/dist/display/Ellipsis.js +111 -0
- package/dist/display/Ellipsis.js.map +1 -0
- package/dist/display/FieldCompare.d.ts +58 -0
- package/dist/display/FieldCompare.js +205 -0
- package/dist/display/FieldCompare.js.map +1 -0
- package/dist/display/Gauge.d.ts +60 -0
- package/dist/display/Gauge.js +215 -0
- package/dist/display/Gauge.js.map +1 -0
- package/dist/display/Image.d.ts +87 -0
- package/dist/display/Image.js +212 -0
- package/dist/display/Image.js.map +1 -0
- package/dist/display/ItemList.d.ts +69 -0
- package/dist/display/ItemList.js +147 -0
- package/dist/display/ItemList.js.map +1 -0
- package/dist/display/Marquee.d.ts +59 -0
- package/dist/display/Marquee.js +155 -0
- package/dist/display/Marquee.js.map +1 -0
- package/dist/display/ProportionBar.d.ts +55 -0
- package/dist/display/ProportionBar.js +99 -0
- package/dist/display/ProportionBar.js.map +1 -0
- package/dist/display/Sortable.d.ts +43 -0
- package/dist/display/Sortable.js +163 -0
- package/dist/display/Sortable.js.map +1 -0
- package/dist/display/Sparkline.d.ts +48 -0
- package/dist/display/Sparkline.js +130 -0
- package/dist/display/Sparkline.js.map +1 -0
- package/dist/display/Stat.d.ts +105 -0
- package/dist/display/Stat.js +268 -0
- package/dist/display/Stat.js.map +1 -0
- package/dist/display/Timeline.d.ts +106 -0
- package/dist/display/Timeline.js +257 -0
- package/dist/display/Timeline.js.map +1 -0
- package/dist/display/Tree.d.ts +132 -0
- package/dist/display/Tree.js +645 -0
- package/dist/display/Tree.js.map +1 -0
- package/dist/display/VirtualList.d.ts +80 -0
- package/dist/display/VirtualList.js +166 -0
- package/dist/display/VirtualList.js.map +1 -0
- package/dist/display/Watermark.d.ts +39 -0
- package/dist/display/Watermark.js +130 -0
- package/dist/display/Watermark.js.map +1 -0
- package/dist/docs-kit/CodeGroup.d.ts +29 -0
- package/dist/docs-kit/CodeGroup.js +81 -0
- package/dist/docs-kit/CodeGroup.js.map +1 -0
- package/dist/docs-kit/CodePreview.d.ts +60 -0
- package/dist/docs-kit/CodePreview.js +183 -0
- package/dist/docs-kit/CodePreview.js.map +1 -0
- package/dist/docs-kit/ColorSwatch.d.ts +28 -0
- package/dist/docs-kit/ColorSwatch.js +85 -0
- package/dist/docs-kit/ColorSwatch.js.map +1 -0
- package/dist/docs-kit/PropsTable.d.ts +73 -0
- package/dist/docs-kit/PropsTable.js +122 -0
- package/dist/docs-kit/PropsTable.js.map +1 -0
- package/dist/docs-kit/index.d.ts +13 -0
- package/dist/docs-kit/index.js +6 -0
- package/dist/docs-kit/messages.d.ts +25 -0
- package/dist/docs-kit/messages.js +30 -0
- package/dist/docs-kit/messages.js.map +1 -0
- package/dist/feedback/Alert.d.ts +83 -0
- package/dist/feedback/Alert.js +179 -0
- package/dist/feedback/Alert.js.map +1 -0
- package/dist/feedback/Banner.d.ts +60 -0
- package/dist/feedback/Banner.js +122 -0
- package/dist/feedback/Banner.js.map +1 -0
- package/dist/feedback/Empty.d.ts +38 -0
- package/dist/feedback/Empty.js +114 -0
- package/dist/feedback/Empty.js.map +1 -0
- package/dist/feedback/LoadingBar.d.ts +45 -0
- package/dist/feedback/LoadingBar.js +124 -0
- package/dist/feedback/LoadingBar.js.map +1 -0
- package/dist/feedback/LoadingOverlay.d.ts +29 -0
- package/dist/feedback/LoadingOverlay.js +70 -0
- package/dist/feedback/LoadingOverlay.js.map +1 -0
- package/dist/feedback/Progress.d.ts +215 -0
- package/dist/feedback/Progress.js +437 -0
- package/dist/feedback/Progress.js.map +1 -0
- package/dist/feedback/Result.d.ts +69 -0
- package/dist/feedback/Result.js +165 -0
- package/dist/feedback/Result.js.map +1 -0
- package/dist/feedback/Skeleton.d.ts +50 -0
- package/dist/feedback/Skeleton.js +100 -0
- package/dist/feedback/Skeleton.js.map +1 -0
- package/dist/feedback/SkeletonText.d.ts +25 -0
- package/dist/feedback/SkeletonText.js +40 -0
- package/dist/feedback/SkeletonText.js.map +1 -0
- package/dist/feedback/Toast.d.ts +204 -0
- package/dist/feedback/Toast.js +572 -0
- package/dist/feedback/Toast.js.map +1 -0
- package/dist/form/Field.d.ts +165 -0
- package/dist/form/Field.js +338 -0
- package/dist/form/Field.js.map +1 -0
- package/dist/form/Form.d.ts +14 -0
- package/dist/form/Form.js +66 -0
- package/dist/form/Form.js.map +1 -0
- package/dist/form/FormErrorSummary.d.ts +23 -0
- package/dist/form/FormErrorSummary.js +102 -0
- package/dist/form/FormErrorSummary.js.map +1 -0
- package/dist/form/FormSection.d.ts +66 -0
- package/dist/form/FormSection.js +227 -0
- package/dist/form/FormSection.js.map +1 -0
- package/dist/form/FormValue.d.ts +17 -0
- package/dist/form/FormValue.js +40 -0
- package/dist/form/FormValue.js.map +1 -0
- package/dist/form/field-layout.d.ts +34 -0
- package/dist/form/field-layout.js +39 -0
- package/dist/form/field-layout.js.map +1 -0
- package/dist/form/form-constraints.d.ts +38 -0
- package/dist/form/form-constraints.js +131 -0
- package/dist/form/form-constraints.js.map +1 -0
- package/dist/form/leave-confirmation.d.ts +9 -0
- package/dist/form/leave-confirmation.js +31 -0
- package/dist/form/leave-confirmation.js.map +1 -0
- package/dist/form/schemas.d.ts +52 -0
- package/dist/form/schemas.js +97 -0
- package/dist/form/schemas.js.map +1 -0
- package/dist/form/useForm.d.ts +195 -0
- package/dist/form/useForm.js +416 -0
- package/dist/form/useForm.js.map +1 -0
- package/dist/index.d.ts +285 -0
- package/dist/index.js +285 -0
- package/dist/input/Autocomplete.d.ts +14 -0
- package/dist/input/Autocomplete.js +35 -0
- package/dist/input/Autocomplete.js.map +1 -0
- package/dist/input/Cascader.d.ts +86 -0
- package/dist/input/Cascader.js +593 -0
- package/dist/input/Cascader.js.map +1 -0
- package/dist/input/CharacterCount.d.ts +21 -0
- package/dist/input/CharacterCount.js +47 -0
- package/dist/input/CharacterCount.js.map +1 -0
- package/dist/input/Checkbox.d.ts +93 -0
- package/dist/input/Checkbox.js +250 -0
- package/dist/input/Checkbox.js.map +1 -0
- package/dist/input/ColorField.d.ts +37 -0
- package/dist/input/ColorField.js +143 -0
- package/dist/input/ColorField.js.map +1 -0
- package/dist/input/Combobox.d.ts +75 -0
- package/dist/input/Combobox.js +321 -0
- package/dist/input/Combobox.js.map +1 -0
- package/dist/input/ConditionBuilder.d.ts +55 -0
- package/dist/input/ConditionBuilder.js +471 -0
- package/dist/input/ConditionBuilder.js.map +1 -0
- package/dist/input/ControlGroup.d.ts +26 -0
- package/dist/input/ControlGroup.js +50 -0
- package/dist/input/ControlGroup.js.map +1 -0
- package/dist/input/FileDrop.d.ts +49 -0
- package/dist/input/FileDrop.js +201 -0
- package/dist/input/FileDrop.js.map +1 -0
- package/dist/input/ListPopover.d.ts +39 -0
- package/dist/input/ListPopover.js +81 -0
- package/dist/input/ListPopover.js.map +1 -0
- package/dist/input/Listbox.d.ts +91 -0
- package/dist/input/Listbox.js +408 -0
- package/dist/input/Listbox.js.map +1 -0
- package/dist/input/Mentions.d.ts +74 -0
- package/dist/input/Mentions.js +287 -0
- package/dist/input/Mentions.js.map +1 -0
- package/dist/input/NumberField.d.ts +64 -0
- package/dist/input/NumberField.js +288 -0
- package/dist/input/NumberField.js.map +1 -0
- package/dist/input/NumberRangeField.d.ts +58 -0
- package/dist/input/NumberRangeField.js +157 -0
- package/dist/input/NumberRangeField.js.map +1 -0
- package/dist/input/OtpField.d.ts +58 -0
- package/dist/input/OtpField.js +200 -0
- package/dist/input/OtpField.js.map +1 -0
- package/dist/input/PeoplePicker.d.ts +42 -0
- package/dist/input/PeoplePicker.js +185 -0
- package/dist/input/PeoplePicker.js.map +1 -0
- package/dist/input/PeoplePickerPanel.d.ts +42 -0
- package/dist/input/PeoplePickerPanel.js +357 -0
- package/dist/input/PeoplePickerPanel.js.map +1 -0
- package/dist/input/Radio.d.ts +90 -0
- package/dist/input/Radio.js +211 -0
- package/dist/input/Radio.js.map +1 -0
- package/dist/input/Rating.d.ts +62 -0
- package/dist/input/Rating.js +225 -0
- package/dist/input/Rating.js.map +1 -0
- package/dist/input/Select.d.ts +97 -0
- package/dist/input/Select.js +455 -0
- package/dist/input/Select.js.map +1 -0
- package/dist/input/SelectedTags.d.ts +28 -0
- package/dist/input/SelectedTags.js +81 -0
- package/dist/input/SelectedTags.js.map +1 -0
- package/dist/input/Slider.d.ts +99 -0
- package/dist/input/Slider.js +343 -0
- package/dist/input/Slider.js.map +1 -0
- package/dist/input/Switch.d.ts +63 -0
- package/dist/input/Switch.js +198 -0
- package/dist/input/Switch.js.map +1 -0
- package/dist/input/TagsInput.d.ts +70 -0
- package/dist/input/TagsInput.js +314 -0
- package/dist/input/TagsInput.js.map +1 -0
- package/dist/input/TextField.d.ts +51 -0
- package/dist/input/TextField.js +185 -0
- package/dist/input/TextField.js.map +1 -0
- package/dist/input/Textarea.d.ts +50 -0
- package/dist/input/Textarea.js +146 -0
- package/dist/input/Textarea.js.map +1 -0
- package/dist/input/ToggleGroup.d.ts +82 -0
- package/dist/input/ToggleGroup.js +211 -0
- package/dist/input/ToggleGroup.js.map +1 -0
- package/dist/input/Transfer.d.ts +67 -0
- package/dist/input/Transfer.js +407 -0
- package/dist/input/Transfer.js.map +1 -0
- package/dist/input/TreeSelect.d.ts +94 -0
- package/dist/input/TreeSelect.js +412 -0
- package/dist/input/TreeSelect.js.map +1 -0
- package/dist/input/Upload.d.ts +143 -0
- package/dist/input/Upload.js +598 -0
- package/dist/input/Upload.js.map +1 -0
- package/dist/input/choice-styles.d.ts +117 -0
- package/dist/input/choice-styles.js +176 -0
- package/dist/input/choice-styles.js.map +1 -0
- package/dist/input/condition.d.ts +153 -0
- package/dist/input/condition.js +187 -0
- package/dist/input/condition.js.map +1 -0
- package/dist/input/control.d.ts +160 -0
- package/dist/input/control.js +236 -0
- package/dist/input/control.js.map +1 -0
- package/dist/input/list-state.d.ts +118 -0
- package/dist/input/list-state.js +186 -0
- package/dist/input/list-state.js.map +1 -0
- package/dist/input/people.d.ts +66 -0
- package/dist/input/people.js +47 -0
- package/dist/input/people.js.map +1 -0
- package/dist/input/remote-items.d.ts +22 -0
- package/dist/input/remote-items.js +41 -0
- package/dist/input/remote-items.js.map +1 -0
- package/dist/input/text-format.d.ts +46 -0
- package/dist/input/text-format.js +64 -0
- package/dist/input/text-format.js.map +1 -0
- package/dist/layout/Affix.d.ts +32 -0
- package/dist/layout/Affix.js +81 -0
- package/dist/layout/Affix.js.map +1 -0
- package/dist/layout/AsideLayout.d.ts +45 -0
- package/dist/layout/AsideLayout.js +69 -0
- package/dist/layout/AsideLayout.js.map +1 -0
- package/dist/layout/BackTop.d.ts +16 -0
- package/dist/layout/BackTop.js +83 -0
- package/dist/layout/BackTop.js.map +1 -0
- package/dist/layout/Container.d.ts +60 -0
- package/dist/layout/Container.js +62 -0
- package/dist/layout/Container.js.map +1 -0
- package/dist/layout/Flex.d.ts +116 -0
- package/dist/layout/Flex.js +109 -0
- package/dist/layout/Flex.js.map +1 -0
- package/dist/layout/Grid.d.ts +139 -0
- package/dist/layout/Grid.js +168 -0
- package/dist/layout/Grid.js.map +1 -0
- package/dist/layout/PageScrollbar.d.ts +20 -0
- package/dist/layout/PageScrollbar.js +49 -0
- package/dist/layout/PageScrollbar.js.map +1 -0
- package/dist/layout/Prose.d.ts +19 -0
- package/dist/layout/Prose.js +37 -0
- package/dist/layout/Prose.js.map +1 -0
- package/dist/layout/ResizeHandle.d.ts +28 -0
- package/dist/layout/ResizeHandle.js +94 -0
- package/dist/layout/ResizeHandle.js.map +1 -0
- package/dist/layout/ScrollArea.d.ts +99 -0
- package/dist/layout/ScrollArea.js +344 -0
- package/dist/layout/ScrollArea.js.map +1 -0
- package/dist/layout/Separator.d.ts +47 -0
- package/dist/layout/Separator.js +96 -0
- package/dist/layout/Separator.js.map +1 -0
- package/dist/layout/Splitter.d.ts +75 -0
- package/dist/layout/Splitter.js +236 -0
- package/dist/layout/Splitter.js.map +1 -0
- package/dist/layout/ViewportFill.d.ts +26 -0
- package/dist/layout/ViewportFill.js +59 -0
- package/dist/layout/ViewportFill.js.map +1 -0
- package/dist/navigation/Breadcrumbs.d.ts +59 -0
- package/dist/navigation/Breadcrumbs.js +150 -0
- package/dist/navigation/Breadcrumbs.js.map +1 -0
- package/dist/navigation/NavBar.d.ts +35 -0
- package/dist/navigation/NavBar.js +182 -0
- package/dist/navigation/NavBar.js.map +1 -0
- package/dist/navigation/NavList.d.ts +112 -0
- package/dist/navigation/NavList.js +375 -0
- package/dist/navigation/NavList.js.map +1 -0
- package/dist/navigation/PageJump.d.ts +27 -0
- package/dist/navigation/PageJump.js +77 -0
- package/dist/navigation/PageJump.js.map +1 -0
- package/dist/navigation/PageSizeSelect.d.ts +19 -0
- package/dist/navigation/PageSizeSelect.js +65 -0
- package/dist/navigation/PageSizeSelect.js.map +1 -0
- package/dist/navigation/Pager.d.ts +30 -0
- package/dist/navigation/Pager.js +111 -0
- package/dist/navigation/Pager.js.map +1 -0
- package/dist/navigation/Pagination.d.ts +51 -0
- package/dist/navigation/Pagination.js +157 -0
- package/dist/navigation/Pagination.js.map +1 -0
- package/dist/navigation/PaginationBar.d.ts +54 -0
- package/dist/navigation/PaginationBar.js +125 -0
- package/dist/navigation/PaginationBar.js.map +1 -0
- package/dist/navigation/SkipLink.d.ts +16 -0
- package/dist/navigation/SkipLink.js +58 -0
- package/dist/navigation/SkipLink.js.map +1 -0
- package/dist/navigation/Steps.d.ts +93 -0
- package/dist/navigation/Steps.js +198 -0
- package/dist/navigation/Steps.js.map +1 -0
- package/dist/navigation/TableOfContents.d.ts +32 -0
- package/dist/navigation/TableOfContents.js +119 -0
- package/dist/navigation/TableOfContents.js.map +1 -0
- package/dist/navigation/Tabs.d.ts +208 -0
- package/dist/navigation/Tabs.js +626 -0
- package/dist/navigation/Tabs.js.map +1 -0
- package/dist/navigation/Toolbar.d.ts +39 -0
- package/dist/navigation/Toolbar.js +67 -0
- package/dist/navigation/Toolbar.js.map +1 -0
- package/dist/overlay/AlertDialog.d.ts +43 -0
- package/dist/overlay/AlertDialog.js +106 -0
- package/dist/overlay/AlertDialog.js.map +1 -0
- package/dist/overlay/CommandPalette.d.ts +64 -0
- package/dist/overlay/CommandPalette.js +250 -0
- package/dist/overlay/CommandPalette.js.map +1 -0
- package/dist/overlay/ContextMenu.d.ts +21 -0
- package/dist/overlay/ContextMenu.js +76 -0
- package/dist/overlay/ContextMenu.js.map +1 -0
- package/dist/overlay/Dialog.d.ts +70 -0
- package/dist/overlay/Dialog.js +91 -0
- package/dist/overlay/Dialog.js.map +1 -0
- package/dist/overlay/Drawer.d.ts +186 -0
- package/dist/overlay/Drawer.js +214 -0
- package/dist/overlay/Drawer.js.map +1 -0
- package/dist/overlay/HoverCard.d.ts +48 -0
- package/dist/overlay/HoverCard.js +86 -0
- package/dist/overlay/HoverCard.js.map +1 -0
- package/dist/overlay/Lightbox.d.ts +57 -0
- package/dist/overlay/Lightbox.js +374 -0
- package/dist/overlay/Lightbox.js.map +1 -0
- package/dist/overlay/Menu.d.ts +218 -0
- package/dist/overlay/Menu.js +816 -0
- package/dist/overlay/Menu.js.map +1 -0
- package/dist/overlay/ModalCore.d.ts +132 -0
- package/dist/overlay/ModalCore.js +274 -0
- package/dist/overlay/ModalCore.js.map +1 -0
- package/dist/overlay/Popconfirm.d.ts +49 -0
- package/dist/overlay/Popconfirm.js +167 -0
- package/dist/overlay/Popconfirm.js.map +1 -0
- package/dist/overlay/Popover.d.ts +40 -0
- package/dist/overlay/Popover.js +96 -0
- package/dist/overlay/Popover.js.map +1 -0
- package/dist/overlay/Tooltip.d.ts +47 -0
- package/dist/overlay/Tooltip.js +86 -0
- package/dist/overlay/Tooltip.js.map +1 -0
- package/dist/overlay/Tour.d.ts +74 -0
- package/dist/overlay/Tour.js +309 -0
- package/dist/overlay/Tour.js.map +1 -0
- package/dist/overlay/detached.d.ts +40 -0
- package/dist/overlay/detached.js +109 -0
- package/dist/overlay/detached.js.map +1 -0
- package/dist/patterns/ActionBar.d.ts +29 -0
- package/dist/patterns/ActionBar.js +75 -0
- package/dist/patterns/ActionBar.js.map +1 -0
- package/dist/patterns/AppShell.d.ts +168 -0
- package/dist/patterns/AppShell.js +620 -0
- package/dist/patterns/AppShell.js.map +1 -0
- package/dist/patterns/CommentThread.d.ts +128 -0
- package/dist/patterns/CommentThread.js +386 -0
- package/dist/patterns/CommentThread.js.map +1 -0
- package/dist/patterns/DataImport.d.ts +72 -0
- package/dist/patterns/DataImport.js +486 -0
- package/dist/patterns/DataImport.js.map +1 -0
- package/dist/patterns/DeadlineBadge.d.ts +21 -0
- package/dist/patterns/DeadlineBadge.js +76 -0
- package/dist/patterns/DeadlineBadge.js.map +1 -0
- package/dist/patterns/FilterBar.d.ts +66 -0
- package/dist/patterns/FilterBar.js +254 -0
- package/dist/patterns/FilterBar.js.map +1 -0
- package/dist/patterns/KanbanBoard.d.ts +79 -0
- package/dist/patterns/KanbanBoard.js +294 -0
- package/dist/patterns/KanbanBoard.js.map +1 -0
- package/dist/patterns/NotificationCenter.d.ts +110 -0
- package/dist/patterns/NotificationCenter.js +342 -0
- package/dist/patterns/NotificationCenter.js.map +1 -0
- package/dist/patterns/PageTabs.d.ts +30 -0
- package/dist/patterns/PageTabs.js +97 -0
- package/dist/patterns/PageTabs.js.map +1 -0
- package/dist/patterns/QueryTable.d.ts +67 -0
- package/dist/patterns/QueryTable.js +301 -0
- package/dist/patterns/QueryTable.js.map +1 -0
- package/dist/patterns/StepsForm.d.ts +49 -0
- package/dist/patterns/StepsForm.js +130 -0
- package/dist/patterns/StepsForm.js.map +1 -0
- package/dist/patterns/ThemeSwitcher.d.ts +20 -0
- package/dist/patterns/ThemeSwitcher.js +102 -0
- package/dist/patterns/ThemeSwitcher.js.map +1 -0
- package/dist/patterns/form-dialog.d.ts +62 -0
- package/dist/patterns/form-dialog.js +143 -0
- package/dist/patterns/form-dialog.js.map +1 -0
- package/dist/patterns/index.d.ts +24 -0
- package/dist/patterns/index.js +15 -0
- package/dist/patterns/messages.d.ts +174 -0
- package/dist/patterns/messages.js +186 -0
- package/dist/patterns/messages.js.map +1 -0
- package/dist/table/ColumnHeaderActions.d.ts +71 -0
- package/dist/table/ColumnHeaderActions.js +247 -0
- package/dist/table/ColumnHeaderActions.js.map +1 -0
- package/dist/table/ColumnResizer.d.ts +12 -0
- package/dist/table/ColumnResizer.js +32 -0
- package/dist/table/ColumnResizer.js.map +1 -0
- package/dist/table/ColumnSettings.d.ts +34 -0
- package/dist/table/ColumnSettings.js +136 -0
- package/dist/table/ColumnSettings.js.map +1 -0
- package/dist/table/ColumnTable.d.ts +51 -0
- package/dist/table/ColumnTable.js +140 -0
- package/dist/table/ColumnTable.js.map +1 -0
- package/dist/table/DataTable.d.ts +44 -0
- package/dist/table/DataTable.js +453 -0
- package/dist/table/DataTable.js.map +1 -0
- package/dist/table/DataTableView.d.ts +328 -0
- package/dist/table/DataTableView.js +963 -0
- package/dist/table/DataTableView.js.map +1 -0
- package/dist/table/PivotTable.d.ts +66 -0
- package/dist/table/PivotTable.js +122 -0
- package/dist/table/PivotTable.js.map +1 -0
- package/dist/table/SelectionBar.d.ts +29 -0
- package/dist/table/SelectionBar.js +86 -0
- package/dist/table/SelectionBar.js.map +1 -0
- package/dist/table/Table.d.ts +169 -0
- package/dist/table/Table.js +304 -0
- package/dist/table/Table.js.map +1 -0
- package/dist/table/TreeDataTable.d.ts +36 -0
- package/dist/table/TreeDataTable.js +168 -0
- package/dist/table/TreeDataTable.js.map +1 -0
- package/dist/table/column-display.d.ts +20 -0
- package/dist/table/column-display.js +43 -0
- package/dist/table/column-display.js.map +1 -0
- package/dist/table/columns.d.ts +244 -0
- package/dist/table/columns.js +271 -0
- package/dist/table/columns.js.map +1 -0
- package/dist/table/csv.d.ts +24 -0
- package/dist/table/csv.js +35 -0
- package/dist/table/csv.js.map +1 -0
- package/dist/table/pivot.d.ts +66 -0
- package/dist/table/pivot.js +85 -0
- package/dist/table/pivot.js.map +1 -0
- package/dist/table/sheet.d.ts +44 -0
- package/dist/table/sheet.js +78 -0
- package/dist/table/sheet.js.map +1 -0
- package/dist/table/table-styles.d.ts +136 -0
- package/dist/table/table-styles.js +403 -0
- package/dist/table/table-styles.js.map +1 -0
- package/dist/table/use-table-query.d.ts +89 -0
- package/dist/table/use-table-query.js +194 -0
- package/dist/table/use-table-query.js.map +1 -0
- package/dist/theme-customize/ThemeCustomizer.d.ts +63 -0
- package/dist/theme-customize/ThemeCustomizer.js +361 -0
- package/dist/theme-customize/ThemeCustomizer.js.map +1 -0
- package/dist/theme-customize/ThemeThumbnail.d.ts +20 -0
- package/dist/theme-customize/ThemeThumbnail.js +82 -0
- package/dist/theme-customize/ThemeThumbnail.js.map +1 -0
- package/dist/theme-customize/contrast.d.ts +27 -0
- package/dist/theme-customize/contrast.js +251 -0
- package/dist/theme-customize/contrast.js.map +1 -0
- package/dist/theme-customize/customize.d.ts +65 -0
- package/dist/theme-customize/customize.js +105 -0
- package/dist/theme-customize/customize.js.map +1 -0
- package/dist/theme-customize/design-tokens.d.ts +31 -0
- package/dist/theme-customize/design-tokens.js +183 -0
- package/dist/theme-customize/design-tokens.js.map +1 -0
- package/dist/theme-customize/index.d.ts +20 -0
- package/dist/theme-customize/index.js +9 -0
- package/dist/theme-customize/messages.d.ts +74 -0
- package/dist/theme-customize/messages.js +142 -0
- package/dist/theme-customize/messages.js.map +1 -0
- package/dist/theme-customize/palette.d.ts +898 -0
- package/dist/theme-customize/palette.js +111 -0
- package/dist/theme-customize/palette.js.map +1 -0
- package/dist/theme-customize/token-catalog.d.ts +20 -0
- package/dist/theme-customize/token-catalog.js +836 -0
- package/dist/theme-customize/token-catalog.js.map +1 -0
- package/dist/three/background/AuroraBackground.d.ts +30 -0
- package/dist/three/background/AuroraBackground.js +80 -0
- package/dist/three/background/AuroraBackground.js.map +1 -0
- package/dist/three/background/MeshGradient.d.ts +28 -0
- package/dist/three/background/MeshGradient.js +76 -0
- package/dist/three/background/MeshGradient.js.map +1 -0
- package/dist/three/background/ShaderBackground.d.ts +25 -0
- package/dist/three/background/ShaderBackground.js +107 -0
- package/dist/three/background/ShaderBackground.js.map +1 -0
- package/dist/three/core/EffectSurface.d.ts +41 -0
- package/dist/three/core/EffectSurface.js +62 -0
- package/dist/three/core/EffectSurface.js.map +1 -0
- package/dist/three/core/ThreeCanvas.d.ts +39 -0
- package/dist/three/core/ThreeCanvas.js +77 -0
- package/dist/three/core/ThreeCanvas.js.map +1 -0
- package/dist/three/core/dispose.d.ts +9 -0
- package/dist/three/core/dispose.js +26 -0
- package/dist/three/core/dispose.js.map +1 -0
- package/dist/three/core/orbit.d.ts +31 -0
- package/dist/three/core/orbit.js +83 -0
- package/dist/three/core/orbit.js.map +1 -0
- package/dist/three/core/quality.d.ts +59 -0
- package/dist/three/core/quality.js +80 -0
- package/dist/three/core/quality.js.map +1 -0
- package/dist/three/core/renderer.d.ts +110 -0
- package/dist/three/core/renderer.js +303 -0
- package/dist/three/core/renderer.js.map +1 -0
- package/dist/three/core/shaders.d.ts +19 -0
- package/dist/three/core/shaders.js +100 -0
- package/dist/three/core/shaders.js.map +1 -0
- package/dist/three/core/theme-colors.d.ts +30 -0
- package/dist/three/core/theme-colors.js +113 -0
- package/dist/three/core/theme-colors.js.map +1 -0
- package/dist/three/effects/Confetti.d.ts +62 -0
- package/dist/three/effects/Confetti.js +242 -0
- package/dist/three/effects/Confetti.js.map +1 -0
- package/dist/three/effects/ParticleField.d.ts +39 -0
- package/dist/three/effects/ParticleField.js +266 -0
- package/dist/three/effects/ParticleField.js.map +1 -0
- package/dist/three/effects/WaveGrid.d.ts +37 -0
- package/dist/three/effects/WaveGrid.js +130 -0
- package/dist/three/effects/WaveGrid.js.map +1 -0
- package/dist/three/globe/Globe.d.ts +70 -0
- package/dist/three/globe/Globe.js +337 -0
- package/dist/three/globe/Globe.js.map +1 -0
- package/dist/three/globe/land.d.ts +9 -0
- package/dist/three/globe/land.js +14 -0
- package/dist/three/globe/land.js.map +1 -0
- package/dist/three/index.d.ts +24 -0
- package/dist/three/index.js +18 -0
- package/dist/three/model/ModelViewer.d.ts +63 -0
- package/dist/three/model/ModelViewer.js +193 -0
- package/dist/three/model/ModelViewer.js.map +1 -0
- package/dist/utils/data/clone.d.ts +8 -0
- package/dist/utils/data/clone.js +21 -0
- package/dist/utils/data/clone.js.map +1 -0
- package/dist/utils/data/collation.d.ts +36 -0
- package/dist/utils/data/collation.js +69 -0
- package/dist/utils/data/collation.js.map +1 -0
- package/dist/utils/data/color.d.ts +32 -0
- package/dist/utils/data/color.js +90 -0
- package/dist/utils/data/color.js.map +1 -0
- package/dist/utils/data/date.d.ts +196 -0
- package/dist/utils/data/date.js +421 -0
- package/dist/utils/data/date.js.map +1 -0
- package/dist/utils/data/diff.d.ts +21 -0
- package/dist/utils/data/diff.js +43 -0
- package/dist/utils/data/diff.js.map +1 -0
- package/dist/utils/data/equality.d.ts +5 -0
- package/dist/utils/data/equality.js +24 -0
- package/dist/utils/data/equality.js.map +1 -0
- package/dist/utils/data/history.d.ts +59 -0
- package/dist/utils/data/history.js +132 -0
- package/dist/utils/data/history.js.map +1 -0
- package/dist/utils/data/intl-cache.d.ts +8 -0
- package/dist/utils/data/intl-cache.js +19 -0
- package/dist/utils/data/intl-cache.js.map +1 -0
- package/dist/utils/data/number-parse.d.ts +7 -0
- package/dist/utils/data/number-parse.js +45 -0
- package/dist/utils/data/number-parse.js.map +1 -0
- package/dist/utils/data/number.d.ts +10 -0
- package/dist/utils/data/number.js +28 -0
- package/dist/utils/data/number.js.map +1 -0
- package/dist/utils/data/numeric.d.ts +62 -0
- package/dist/utils/data/numeric.js +178 -0
- package/dist/utils/data/numeric.js.map +1 -0
- package/dist/utils/data/pagination.d.ts +21 -0
- package/dist/utils/data/pagination.js +22 -0
- package/dist/utils/data/pagination.js.map +1 -0
- package/dist/utils/data/selection.d.ts +41 -0
- package/dist/utils/data/selection.js +21 -0
- package/dist/utils/data/selection.js.map +1 -0
- package/dist/utils/data/status.d.ts +43 -0
- package/dist/utils/data/status.js +27 -0
- package/dist/utils/data/status.js.map +1 -0
- package/dist/utils/data/text.d.ts +12 -0
- package/dist/utils/data/text.js +30 -0
- package/dist/utils/data/text.js.map +1 -0
- package/dist/utils/data/tree.d.ts +140 -0
- package/dist/utils/data/tree.js +273 -0
- package/dist/utils/data/tree.js.map +1 -0
- package/dist/utils/data/workdays.d.ts +67 -0
- package/dist/utils/data/workdays.js +67 -0
- package/dist/utils/data/workdays.js.map +1 -0
- package/dist/utils/dom/announcer.d.ts +11 -0
- package/dist/utils/dom/announcer.js +53 -0
- package/dist/utils/dom/announcer.js.map +1 -0
- package/dist/utils/dom/caret.d.ts +14 -0
- package/dist/utils/dom/caret.js +72 -0
- package/dist/utils/dom/caret.js.map +1 -0
- package/dist/utils/dom/clipboard.d.ts +16 -0
- package/dist/utils/dom/clipboard.js +66 -0
- package/dist/utils/dom/clipboard.js.map +1 -0
- package/dist/utils/dom/direction.d.ts +12 -0
- package/dist/utils/dom/direction.js +20 -0
- package/dist/utils/dom/direction.js.map +1 -0
- package/dist/utils/dom/download.d.ts +14 -0
- package/dist/utils/dom/download.js +36 -0
- package/dist/utils/dom/download.js.map +1 -0
- package/dist/utils/dom/element.d.ts +3 -0
- package/dist/utils/dom/element.js +12 -0
- package/dist/utils/dom/element.js.map +1 -0
- package/dist/utils/dom/event-listener.d.ts +8 -0
- package/dist/utils/dom/event-listener.js +35 -0
- package/dist/utils/dom/event-listener.js.map +1 -0
- package/dist/utils/dom/floating.d.ts +149 -0
- package/dist/utils/dom/floating.js +262 -0
- package/dist/utils/dom/floating.js.map +1 -0
- package/dist/utils/dom/focus.d.ts +28 -0
- package/dist/utils/dom/focus.js +105 -0
- package/dist/utils/dom/focus.js.map +1 -0
- package/dist/utils/dom/fullscreen.d.ts +11 -0
- package/dist/utils/dom/fullscreen.js +43 -0
- package/dist/utils/dom/fullscreen.js.map +1 -0
- package/dist/utils/dom/hotkeys.d.ts +43 -0
- package/dist/utils/dom/hotkeys.js +174 -0
- package/dist/utils/dom/hotkeys.js.map +1 -0
- package/dist/utils/dom/hover-intent.d.ts +47 -0
- package/dist/utils/dom/hover-intent.js +72 -0
- package/dist/utils/dom/hover-intent.js.map +1 -0
- package/dist/utils/dom/hover-layer.d.ts +36 -0
- package/dist/utils/dom/hover-layer.js +74 -0
- package/dist/utils/dom/hover-layer.js.map +1 -0
- package/dist/utils/dom/intersection.d.ts +13 -0
- package/dist/utils/dom/intersection.js +36 -0
- package/dist/utils/dom/intersection.js.map +1 -0
- package/dist/utils/dom/layout-batch.d.ts +14 -0
- package/dist/utils/dom/layout-batch.js +26 -0
- package/dist/utils/dom/layout-batch.js.map +1 -0
- package/dist/utils/dom/link.d.ts +18 -0
- package/dist/utils/dom/link.js +44 -0
- package/dist/utils/dom/link.js.map +1 -0
- package/dist/utils/dom/media-query.d.ts +18 -0
- package/dist/utils/dom/media-query.js +36 -0
- package/dist/utils/dom/media-query.js.map +1 -0
- package/dist/utils/dom/move.d.ts +47 -0
- package/dist/utils/dom/move.js +69 -0
- package/dist/utils/dom/move.js.map +1 -0
- package/dist/utils/dom/open-change.d.ts +51 -0
- package/dist/utils/dom/open-change.js +21 -0
- package/dist/utils/dom/open-change.js.map +1 -0
- package/dist/utils/dom/overflow.d.ts +29 -0
- package/dist/utils/dom/overflow.js +108 -0
- package/dist/utils/dom/overflow.js.map +1 -0
- package/dist/utils/dom/overlay.d.ts +35 -0
- package/dist/utils/dom/overlay.js +104 -0
- package/dist/utils/dom/overlay.js.map +1 -0
- package/dist/utils/dom/page-visibility.d.ts +10 -0
- package/dist/utils/dom/page-visibility.js +22 -0
- package/dist/utils/dom/page-visibility.js.map +1 -0
- package/dist/utils/dom/pan-zoom.d.ts +109 -0
- package/dist/utils/dom/pan-zoom.js +257 -0
- package/dist/utils/dom/pan-zoom.js.map +1 -0
- package/dist/utils/dom/rasterize.d.ts +18 -0
- package/dist/utils/dom/rasterize.js +41 -0
- package/dist/utils/dom/rasterize.js.map +1 -0
- package/dist/utils/dom/resize.d.ts +4 -0
- package/dist/utils/dom/resize.js +65 -0
- package/dist/utils/dom/resize.js.map +1 -0
- package/dist/utils/dom/ripple.d.ts +40 -0
- package/dist/utils/dom/ripple.js +96 -0
- package/dist/utils/dom/ripple.js.map +1 -0
- package/dist/utils/dom/roving-focus.d.ts +44 -0
- package/dist/utils/dom/roving-focus.js +184 -0
- package/dist/utils/dom/roving-focus.js.map +1 -0
- package/dist/utils/dom/scroll-spy.d.ts +30 -0
- package/dist/utils/dom/scroll-spy.js +55 -0
- package/dist/utils/dom/scroll-spy.js.map +1 -0
- package/dist/utils/dom/sortable.d.ts +82 -0
- package/dist/utils/dom/sortable.js +437 -0
- package/dist/utils/dom/sortable.js.map +1 -0
- package/dist/utils/dom/storage.d.ts +21 -0
- package/dist/utils/dom/storage.js +66 -0
- package/dist/utils/dom/storage.js.map +1 -0
- package/dist/utils/dom/typeahead.d.ts +15 -0
- package/dist/utils/dom/typeahead.js +26 -0
- package/dist/utils/dom/typeahead.js.map +1 -0
- package/dist/utils/motion/active-indicator.d.ts +24 -0
- package/dist/utils/motion/active-indicator.js +58 -0
- package/dist/utils/motion/active-indicator.js.map +1 -0
- package/dist/utils/motion/animation.d.ts +58 -0
- package/dist/utils/motion/animation.js +83 -0
- package/dist/utils/motion/animation.js.map +1 -0
- package/dist/utils/motion/delayed-loading.d.ts +18 -0
- package/dist/utils/motion/delayed-loading.js +38 -0
- package/dist/utils/motion/delayed-loading.js.map +1 -0
- package/dist/utils/motion/layout.d.ts +17 -0
- package/dist/utils/motion/layout.js +43 -0
- package/dist/utils/motion/layout.js.map +1 -0
- package/dist/utils/motion/pointer.d.ts +14 -0
- package/dist/utils/motion/pointer.js +72 -0
- package/dist/utils/motion/pointer.js.map +1 -0
- package/dist/utils/motion/presence.d.ts +57 -0
- package/dist/utils/motion/presence.js +100 -0
- package/dist/utils/motion/presence.js.map +1 -0
- package/dist/utils/motion/reveal.d.ts +9 -0
- package/dist/utils/motion/reveal.js +68 -0
- package/dist/utils/motion/reveal.js.map +1 -0
- package/dist/utils/motion/tween.d.ts +34 -0
- package/dist/utils/motion/tween.js +50 -0
- package/dist/utils/motion/tween.js.map +1 -0
- package/dist/utils/props.d.ts +84 -0
- package/dist/utils/props.js +189 -0
- package/dist/utils/props.js.map +1 -0
- package/dist/utils/request/error-message.d.ts +17 -0
- package/dist/utils/request/error-message.js +50 -0
- package/dist/utils/request/error-message.js.map +1 -0
- package/dist/utils/request/http.d.ts +165 -0
- package/dist/utils/request/http.js +247 -0
- package/dist/utils/request/http.js.map +1 -0
- package/dist/utils/request/use-autosave.d.ts +35 -0
- package/dist/utils/request/use-autosave.js +69 -0
- package/dist/utils/request/use-autosave.js.map +1 -0
- package/dist/utils/request/use-request.d.ts +37 -0
- package/dist/utils/request/use-request.js +90 -0
- package/dist/utils/request/use-request.js.map +1 -0
- package/dist/utils/request/wire.d.ts +48 -0
- package/dist/utils/request/wire.js +208 -0
- package/dist/utils/request/wire.js.map +1 -0
- package/dist/utils/style/attached.d.ts +25 -0
- package/dist/utils/style/attached.js +82 -0
- package/dist/utils/style/attached.js.map +1 -0
- package/dist/utils/style/item-styles.d.ts +18 -0
- package/dist/utils/style/item-styles.js +79 -0
- package/dist/utils/style/item-styles.js.map +1 -0
- package/dist/utils/style/markers.d.ts +6 -0
- package/dist/utils/style/markers.js +11 -0
- package/dist/utils/style/markers.js.map +1 -0
- package/dist/utils/style/shimmer.d.ts +20 -0
- package/dist/utils/style/shimmer.js +58 -0
- package/dist/utils/style/shimmer.js.map +1 -0
- package/dist/utils/style/styles.d.ts +118 -0
- package/dist/utils/style/styles.js +114 -0
- package/dist/utils/style/styles.js.map +1 -0
- package/dist/utils/style/swatch-styles.d.ts +10 -0
- package/dist/utils/style/swatch-styles.js +19 -0
- package/dist/utils/style/swatch-styles.js.map +1 -0
- package/dist/utils/style/tone-styles.d.ts +58 -0
- package/dist/utils/style/tone-styles.js +180 -0
- package/dist/utils/style/tone-styles.js.map +1 -0
- package/dist/utils/style/transitions.d.ts +43 -0
- package/dist/utils/style/transitions.js +118 -0
- package/dist/utils/style/transitions.js.map +1 -0
- package/dist/utils/style/typography.d.ts +155 -0
- package/dist/utils/style/typography.js +80 -0
- package/dist/utils/style/typography.js.map +1 -0
- package/dist/utils/style/vars.d.ts +18 -0
- package/dist/utils/style/vars.js +21 -0
- package/dist/utils/style/vars.js.map +1 -0
- package/dist/utils/virtual/use-virtualizer.d.ts +43 -0
- package/dist/utils/virtual/use-virtualizer.js +94 -0
- package/dist/utils/virtual/use-virtualizer.js.map +1 -0
- package/dist/utils/virtual/virtualizer.d.ts +145 -0
- package/dist/utils/virtual/virtualizer.js +316 -0
- package/dist/utils/virtual/virtualizer.js.map +1 -0
- package/dist/xlsx/index.d.ts +7 -0
- package/dist/xlsx/index.js +1 -0
- package/dist/xlsx/workbook.d.ts +33 -0
- package/dist/xlsx/workbook.js +195 -0
- package/dist/xlsx/workbook.js.map +1 -0
- package/package.json +258 -3
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { clamp } from "../../utils/data/number.js";
|
|
2
|
+
import { durations } from "../../config/theme/tokens.js";
|
|
3
|
+
import { useConfig } from "../../config/context.js";
|
|
4
|
+
import { readToken } from "../../config/theme/theme.js";
|
|
5
|
+
import { parseDuration } from "../../utils/motion/animation.js";
|
|
6
|
+
import { useResizeObserver } from "../../utils/dom/resize.js";
|
|
7
|
+
import { useIntersectionObserver } from "../../utils/dom/intersection.js";
|
|
8
|
+
import { useReducedMotion } from "../../utils/dom/media-query.js";
|
|
9
|
+
import { usePointer } from "../../utils/motion/pointer.js";
|
|
10
|
+
import { usePageVisible } from "../../utils/dom/page-visibility.js";
|
|
11
|
+
import { disposeObject } from "./dispose.js";
|
|
12
|
+
import { acquireContext, releaseContext, resolveThreeQuality, retryWaiting } from "./quality.js";
|
|
13
|
+
import { createThemeColorSet } from "./theme-colors.js";
|
|
14
|
+
import { onScopeDispose, shallowRef, watch } from "vue";
|
|
15
|
+
import { PerspectiveCamera, Scene, WebGLRenderer } from "three";
|
|
16
|
+
//#region src/three/core/renderer.ts
|
|
17
|
+
/**
|
|
18
|
+
* three.js 渲染器的生命周期(ThreeCanvas 用它;要自己安排外层结构时也可以直接用):
|
|
19
|
+
*
|
|
20
|
+
* const three = useThree({ canvas: () => canvas, setup: (context) => { …; return { frame } } });
|
|
21
|
+
* <canvas key={three.generation} ref={…} />
|
|
22
|
+
*
|
|
23
|
+
* - 第一次进入视口时才创建渲染器,占用 WebGL 上下文的名额(quality.ts);被回收、上下文丢失后换一块新 canvas
|
|
24
|
+
* (generation 加一,渲染方用它作 key)再建,所以场景要在 setup 里搭,不要在外面持有渲染器;
|
|
25
|
+
* - 所有效果共用一个 requestAnimationFrame 循环;滚出视口、标签页隐藏、paused 时停下;
|
|
26
|
+
* - 减少动态效果(系统设置,或主题的时长为 0)时只画一帧静止画面,尺寸、主题色变化时(invalidate)重画;
|
|
27
|
+
* - 尺寸跟随 canvas 的布局尺寸(ResizeObserver),像素比取设备与画质档位上限的较小值;
|
|
28
|
+
* - 卸载、被回收时释放场景里的几何体、材质、纹理和渲染器,并立即交还上下文(forceContextLoss),
|
|
29
|
+
* 不等浏览器回收;上下文连续丢失三次后改显示降级内容。
|
|
30
|
+
*/
|
|
31
|
+
var tickers = /* @__PURE__ */ new Set();
|
|
32
|
+
var tickerFrame = 0;
|
|
33
|
+
function runTickers(now) {
|
|
34
|
+
tickerFrame = 0;
|
|
35
|
+
for (const tick of [...tickers]) tick(now);
|
|
36
|
+
if (tickers.size) tickerFrame = requestAnimationFrame(runTickers);
|
|
37
|
+
}
|
|
38
|
+
function subscribe(tick) {
|
|
39
|
+
tickers.add(tick);
|
|
40
|
+
tickerFrame ||= requestAnimationFrame(runTickers);
|
|
41
|
+
}
|
|
42
|
+
/** 上下文连续丢失这么多次后不再重建,改显示降级内容 */
|
|
43
|
+
var MAX_CONTEXT_LOSSES = 3;
|
|
44
|
+
/** 主题的时长为 0(主题编辑器关掉了动效,或系统要求减少动态效果):读不到主题时当作有动效 */
|
|
45
|
+
function themeMotionOff(element) {
|
|
46
|
+
try {
|
|
47
|
+
return parseDuration(readToken(element, durations.md)) === 0;
|
|
48
|
+
} catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** three.js 渲染器的生命周期(在 setup 里调用),见文件开头 */
|
|
53
|
+
function useThree(options) {
|
|
54
|
+
const config = useConfig();
|
|
55
|
+
const reducedMotion = useReducedMotion();
|
|
56
|
+
const off = () => options.quality?.() === "off";
|
|
57
|
+
const status = shallowRef(off() ? "fallback" : "idle");
|
|
58
|
+
const pointer = usePointer(options.canvas);
|
|
59
|
+
const generation = shallowRef(0);
|
|
60
|
+
const themeStill = shallowRef(false);
|
|
61
|
+
const pageVisible = usePageVisible();
|
|
62
|
+
const visible = shallowRef(false);
|
|
63
|
+
let instance;
|
|
64
|
+
let lastSeen = 0;
|
|
65
|
+
let losses = 0;
|
|
66
|
+
let unmounted = false;
|
|
67
|
+
let unsupported = false;
|
|
68
|
+
const still = () => reducedMotion.value || themeStill.value;
|
|
69
|
+
const holder = {
|
|
70
|
+
get visible() {
|
|
71
|
+
return visible.value;
|
|
72
|
+
},
|
|
73
|
+
get lastSeen() {
|
|
74
|
+
return lastSeen;
|
|
75
|
+
},
|
|
76
|
+
evict() {
|
|
77
|
+
teardown();
|
|
78
|
+
status.value = "idle";
|
|
79
|
+
generation.value++;
|
|
80
|
+
},
|
|
81
|
+
retry: () => start()
|
|
82
|
+
};
|
|
83
|
+
function draw(target, delta) {
|
|
84
|
+
target.handle.frame?.({
|
|
85
|
+
time: target.time,
|
|
86
|
+
delta
|
|
87
|
+
}, target.context);
|
|
88
|
+
target.renderer.render(target.context.scene, target.context.camera);
|
|
89
|
+
}
|
|
90
|
+
function tick(now) {
|
|
91
|
+
const target = instance;
|
|
92
|
+
if (!target) return;
|
|
93
|
+
const delta = target.last ? Math.min((now - target.last) / 1e3, .1) : 0;
|
|
94
|
+
target.last = now;
|
|
95
|
+
target.time += delta;
|
|
96
|
+
draw(target, delta);
|
|
97
|
+
}
|
|
98
|
+
function invalidate() {
|
|
99
|
+
const target = instance;
|
|
100
|
+
if (!target || target.ticking || target.pending) return;
|
|
101
|
+
target.pending = requestAnimationFrame(() => {
|
|
102
|
+
target.pending = 0;
|
|
103
|
+
if (instance === target) draw(target, 0);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
function resize(target) {
|
|
107
|
+
const { canvas, context, renderer, handle } = target;
|
|
108
|
+
const size = context.size;
|
|
109
|
+
size.width = canvas.clientWidth;
|
|
110
|
+
size.height = canvas.clientHeight;
|
|
111
|
+
size.pixelRatio = Math.min(globalThis.devicePixelRatio || 1, context.quality.pixelRatio) * clamp(options.resolution?.() ?? 1, .1, 1);
|
|
112
|
+
renderer.setPixelRatio(size.pixelRatio);
|
|
113
|
+
renderer.setSize(size.width, size.height, false);
|
|
114
|
+
const camera = context.camera;
|
|
115
|
+
if (camera.isPerspectiveCamera && size.height > 0) {
|
|
116
|
+
camera.aspect = size.width / size.height;
|
|
117
|
+
camera.updateProjectionMatrix();
|
|
118
|
+
}
|
|
119
|
+
handle.resize?.(size, context);
|
|
120
|
+
invalidate();
|
|
121
|
+
}
|
|
122
|
+
function create(canvas, level) {
|
|
123
|
+
const quality = resolveThreeQuality(level);
|
|
124
|
+
const renderer = new WebGLRenderer({
|
|
125
|
+
canvas,
|
|
126
|
+
alpha: true,
|
|
127
|
+
antialias: quality.antialias
|
|
128
|
+
});
|
|
129
|
+
renderer.setClearColor(0, 0);
|
|
130
|
+
const camera = new PerspectiveCamera(45, 1, .1, 100);
|
|
131
|
+
camera.position.z = 5;
|
|
132
|
+
const colorSets = [];
|
|
133
|
+
const context = {
|
|
134
|
+
renderer,
|
|
135
|
+
scene: new Scene(),
|
|
136
|
+
camera,
|
|
137
|
+
canvas,
|
|
138
|
+
size: {
|
|
139
|
+
width: 0,
|
|
140
|
+
height: 0,
|
|
141
|
+
pixelRatio: 1
|
|
142
|
+
},
|
|
143
|
+
quality,
|
|
144
|
+
pointer,
|
|
145
|
+
get still() {
|
|
146
|
+
return still();
|
|
147
|
+
},
|
|
148
|
+
invalidate,
|
|
149
|
+
themeColors(sources) {
|
|
150
|
+
const set = createThemeColorSet(invalidate);
|
|
151
|
+
set.refresh(canvas, sources, false);
|
|
152
|
+
colorSets.push({
|
|
153
|
+
set,
|
|
154
|
+
sources
|
|
155
|
+
});
|
|
156
|
+
return set.colors;
|
|
157
|
+
},
|
|
158
|
+
themeColorList(sources, size) {
|
|
159
|
+
const used = size == null ? sources : sources.slice(0, size);
|
|
160
|
+
const themed = context.themeColors(Object.fromEntries(used.map((color, i) => [i, color])));
|
|
161
|
+
const list = used.map((_, index) => themed[index]);
|
|
162
|
+
while (size != null && list.length < size) list.push(list.at(-1));
|
|
163
|
+
return list;
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
const target = {
|
|
167
|
+
renderer,
|
|
168
|
+
context,
|
|
169
|
+
handle: {},
|
|
170
|
+
canvas,
|
|
171
|
+
onLost: () => lose(target),
|
|
172
|
+
time: 0,
|
|
173
|
+
last: 0,
|
|
174
|
+
pending: 0,
|
|
175
|
+
ticking: false,
|
|
176
|
+
colorSets
|
|
177
|
+
};
|
|
178
|
+
canvas.addEventListener("webglcontextlost", target.onLost);
|
|
179
|
+
return target;
|
|
180
|
+
}
|
|
181
|
+
function start() {
|
|
182
|
+
const canvas = options.canvas();
|
|
183
|
+
if (unmounted || instance || !canvas || !visible.value || status.value === "fallback") return;
|
|
184
|
+
const level = options.quality?.();
|
|
185
|
+
if (level === "off") return;
|
|
186
|
+
if (!acquireContext(holder)) return;
|
|
187
|
+
try {
|
|
188
|
+
instance = create(canvas, level);
|
|
189
|
+
} catch {
|
|
190
|
+
releaseContext(holder);
|
|
191
|
+
unsupported = true;
|
|
192
|
+
status.value = "fallback";
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
try {
|
|
196
|
+
instance.handle = options.setup(instance.context) ?? {};
|
|
197
|
+
} catch (error) {
|
|
198
|
+
teardown();
|
|
199
|
+
unsupported = true;
|
|
200
|
+
status.value = "fallback";
|
|
201
|
+
throw error;
|
|
202
|
+
}
|
|
203
|
+
resize(instance);
|
|
204
|
+
update();
|
|
205
|
+
}
|
|
206
|
+
function teardown() {
|
|
207
|
+
const target = instance;
|
|
208
|
+
if (!target) return;
|
|
209
|
+
instance = void 0;
|
|
210
|
+
tickers.delete(tick);
|
|
211
|
+
cancelAnimationFrame(target.pending);
|
|
212
|
+
target.canvas.removeEventListener("webglcontextlost", target.onLost);
|
|
213
|
+
for (const { set } of target.colorSets) set.stop();
|
|
214
|
+
target.handle.dispose?.();
|
|
215
|
+
disposeObject(target.context.scene);
|
|
216
|
+
target.renderer.dispose();
|
|
217
|
+
if (!target.renderer.getContext().isContextLost()) target.renderer.forceContextLoss();
|
|
218
|
+
releaseContext(holder);
|
|
219
|
+
}
|
|
220
|
+
function lose(target) {
|
|
221
|
+
if (instance !== target) return;
|
|
222
|
+
teardown();
|
|
223
|
+
losses++;
|
|
224
|
+
unsupported = losses >= MAX_CONTEXT_LOSSES;
|
|
225
|
+
status.value = unsupported ? "fallback" : "idle";
|
|
226
|
+
if (status.value === "idle") generation.value++;
|
|
227
|
+
}
|
|
228
|
+
/** 按可见性、暂停、静止决定循环开还是停 */
|
|
229
|
+
function update() {
|
|
230
|
+
const target = instance;
|
|
231
|
+
if (!target) return;
|
|
232
|
+
const mode = still() ? "still" : options.paused?.() || !visible.value || !pageVisible.value ? "paused" : "running";
|
|
233
|
+
target.ticking = mode === "running";
|
|
234
|
+
if (target.ticking) {
|
|
235
|
+
target.last = 0;
|
|
236
|
+
subscribe(tick);
|
|
237
|
+
} else {
|
|
238
|
+
tickers.delete(tick);
|
|
239
|
+
if (mode === "still") invalidate();
|
|
240
|
+
}
|
|
241
|
+
status.value = mode;
|
|
242
|
+
}
|
|
243
|
+
if (typeof IntersectionObserver === "undefined") visible.value = true;
|
|
244
|
+
useIntersectionObserver(options.canvas, ([entry]) => {
|
|
245
|
+
visible.value = entry.isIntersecting;
|
|
246
|
+
lastSeen = performance.now();
|
|
247
|
+
});
|
|
248
|
+
useResizeObserver(options.canvas, () => instance && resize(instance));
|
|
249
|
+
watch(options.canvas, (canvas) => canvas && start(), {
|
|
250
|
+
immediate: true,
|
|
251
|
+
flush: "post"
|
|
252
|
+
});
|
|
253
|
+
watch(visible, (shown) => {
|
|
254
|
+
if (instance) update();
|
|
255
|
+
else start();
|
|
256
|
+
if (!shown && instance) retryWaiting();
|
|
257
|
+
});
|
|
258
|
+
watch([
|
|
259
|
+
() => options.paused?.(),
|
|
260
|
+
reducedMotion,
|
|
261
|
+
themeStill,
|
|
262
|
+
pageVisible
|
|
263
|
+
], update);
|
|
264
|
+
watch([() => config.theme, options.canvas], ([, canvas]) => {
|
|
265
|
+
if (!canvas) return;
|
|
266
|
+
themeStill.value = themeMotionOff(canvas);
|
|
267
|
+
for (const { set, sources } of instance?.colorSets ?? []) set.refresh(canvas, sources, true);
|
|
268
|
+
invalidate();
|
|
269
|
+
}, {
|
|
270
|
+
immediate: true,
|
|
271
|
+
flush: "post"
|
|
272
|
+
});
|
|
273
|
+
watch(() => options.resolution?.(), () => instance && resize(instance));
|
|
274
|
+
watch(() => options.quality?.(), () => {
|
|
275
|
+
if (unsupported) return;
|
|
276
|
+
if (off()) {
|
|
277
|
+
teardown();
|
|
278
|
+
status.value = "fallback";
|
|
279
|
+
} else if (instance || status.value === "fallback") {
|
|
280
|
+
teardown();
|
|
281
|
+
status.value = "idle";
|
|
282
|
+
generation.value++;
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
onScopeDispose(() => {
|
|
286
|
+
unmounted = true;
|
|
287
|
+
teardown();
|
|
288
|
+
releaseContext(holder);
|
|
289
|
+
});
|
|
290
|
+
return {
|
|
291
|
+
get status() {
|
|
292
|
+
return status.value;
|
|
293
|
+
},
|
|
294
|
+
get generation() {
|
|
295
|
+
return generation.value;
|
|
296
|
+
},
|
|
297
|
+
invalidate
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
//#endregion
|
|
301
|
+
export { useThree };
|
|
302
|
+
|
|
303
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","names":[],"sources":["../../../src/three/core/renderer.ts"],"sourcesContent":["/**\n * three.js 渲染器的生命周期(ThreeCanvas 用它;要自己安排外层结构时也可以直接用):\n *\n * const three = useThree({ canvas: () => canvas, setup: (context) => { …; return { frame } } });\n * <canvas key={three.generation} ref={…} />\n *\n * - 第一次进入视口时才创建渲染器,占用 WebGL 上下文的名额(quality.ts);被回收、上下文丢失后换一块新 canvas\n * (generation 加一,渲染方用它作 key)再建,所以场景要在 setup 里搭,不要在外面持有渲染器;\n * - 所有效果共用一个 requestAnimationFrame 循环;滚出视口、标签页隐藏、paused 时停下;\n * - 减少动态效果(系统设置,或主题的时长为 0)时只画一帧静止画面,尺寸、主题色变化时(invalidate)重画;\n * - 尺寸跟随 canvas 的布局尺寸(ResizeObserver),像素比取设备与画质档位上限的较小值;\n * - 卸载、被回收时释放场景里的几何体、材质、纹理和渲染器,并立即交还上下文(forceContextLoss),\n * 不等浏览器回收;上下文连续丢失三次后改显示降级内容。\n */\nimport { PerspectiveCamera, Scene, WebGLRenderer, type Camera, type Color } from 'three';\nimport { onScopeDispose, shallowRef, watch } from 'vue';\nimport { useConfig } from '../../config/context';\nimport { readToken } from '../../config/theme/theme';\nimport { durations } from '../../config/theme/tokens';\nimport { useReducedMotion } from '../../utils/dom/media-query';\nimport { useIntersectionObserver } from '../../utils/dom/intersection';\nimport { usePageVisible } from '../../utils/dom/page-visibility';\nimport { useResizeObserver } from '../../utils/dom/resize';\nimport { disposeObject } from './dispose';\nimport { clamp } from '../../utils/data/number';\nimport { parseDuration } from '../../utils/motion/animation';\nimport { usePointer, type PointerState } from '../../utils/motion/pointer';\nimport {\n acquireContext,\n releaseContext,\n resolveThreeQuality,\n retryWaiting,\n type ContextHolder,\n type ResolvedThreeQuality,\n type ThreeQuality,\n} from './quality';\nimport {\n createThemeColorSet,\n type ThemeColors,\n type ThemeColorSet,\n type ThemeColorSources,\n} from './theme-colors';\n\n/** 画布的尺寸(CSS 像素)与实际使用的像素比 */\nexport interface ThreeSize {\n /** 宽度(CSS 像素) */\n width: number;\n /** 高度(CSS 像素) */\n height: number;\n /** 实际使用的像素比:设备像素比按画质档位封顶 */\n pixelRatio: number;\n}\n\n/** 交给 setup 的场景上下文 */\nexport interface ThreeContext {\n /** 渲染器:透明背景,像素比与尺寸由这里管理 */\n readonly renderer: WebGLRenderer;\n /** 场景:卸载时连同里面的几何体、材质、纹理一起释放 */\n readonly scene: Scene;\n /** 相机:默认是透视相机(视角 45°,位于 z = 5),宽高比自动跟随;可以换成别的相机 */\n camera: Camera;\n /** 渲染器画到的 canvas 元素 */\n readonly canvas: HTMLCanvasElement;\n /** 当前尺寸,随布局变化 */\n readonly size: Readonly<ThreeSize>;\n /** 画质档位的参数:粒子数、细分等按 density 缩放 */\n readonly quality: ResolvedThreeQuality;\n /** 只画静止画面(减少动态效果):指针跟随之类的交互也应停下 */\n readonly still: boolean;\n /** 指针相对画布的位置(-1 到 1)与 strength(指针在画布上为 1,离开后淡出),弹簧阻尼,见 pointer.ts */\n readonly pointer: PointerState;\n /** 请求重画一帧:循环停着(静止、暂停)时,数据变了用它刷新 */\n invalidate: () => void;\n /**\n * 跟随画布所在位置主题的颜色(THREE.Color):换主题时原地过渡到新色并重画。\n * 材质的 color 直接赋这个对象(`material.color = palette.accent`),见 theme-colors.ts\n */\n themeColors: <Sources extends ThemeColorSources>(sources: Sources) => ThemeColors<Sources>;\n /**\n * 一列跟随主题的颜色(着色器的色板 uColors、粒子的色调):给了 size 时取前 size 个,不足的用最后一个补齐\n * (uniform 数组的长度是固定的);sources 不能为空\n */\n themeColorList: (sources: readonly string[], size?: number) => Color[];\n}\n\n/** 每帧交给 frame 的时间 */\nexport interface ThreeFrame {\n /** 动画时间(秒):只在循环运行时增长,暂停后接着走 */\n time: number;\n /** 距上一帧(秒),最多 0.1:切回标签页时不跳一大步 */\n delta: number;\n}\n\n/** setup 返回的场景回调,都可省 */\nexport interface ThreeSceneHandle {\n /** 每帧渲染前调用:更新 uniform、位置 */\n frame?(frame: ThreeFrame, context: ThreeContext): void;\n /** 尺寸变化后调用(相机的宽高比已更新) */\n resize?(size: Readonly<ThreeSize>, context: ThreeContext): void;\n /** 释放前调用:清理 setup 里自己加的监听、加载器;场景里的对象由这里统一释放 */\n dispose?(): void;\n}\n\n/** 渲染状态,写在根元素的 data-state 上 */\nexport type ThreeStatus =\n /** 还没创建(没进过视口、在排队、被回收) */\n | 'idle'\n /** 循环运行中 */\n | 'running'\n /** 停着:滚出视口、标签页隐藏或 paused */\n | 'paused'\n /** 只画了一帧静止画面(减少动态效果) */\n | 'still'\n /** 没有 WebGL,或画质是 off:显示降级内容 */\n | 'fallback';\n\n/** useThree 的选项 */\nexport interface ThreeOptions {\n /** 画在哪块 canvas 上(渲染方按 generation 换新的) */\n canvas: () => HTMLCanvasElement | null | undefined;\n /** 搭场景:每次创建渲染器时调用一次 */\n setup: (context: ThreeContext) => ThreeSceneHandle | void;\n /** 画质档位,默认 auto;变了会重建,off 时释放渲染器、显示降级内容 */\n quality?: () => ThreeQuality | undefined;\n /** 暂停循环(停在当前画面) */\n paused?: () => boolean | undefined;\n /** 渲染分辨率相对像素比的倍数(0–1),平滑的渐变类效果用 0.5 能省下大半的填充开销;默认 1 */\n resolution?: () => number | undefined;\n}\n\n/** useThree 的返回值 */\nexport interface ThreeController {\n /** 渲染状态,响应式 */\n readonly status: ThreeStatus;\n /** canvas 的代数:重建时加一,渲染方用作 canvas 的 key */\n readonly generation: number;\n /** 请求重画一帧 */\n invalidate: () => void;\n}\n\n// 所有效果共用一个动画帧循环\nconst tickers = new Set<(now: number) => void>();\nlet tickerFrame = 0;\n\nfunction runTickers(now: number) {\n tickerFrame = 0;\n for (const tick of [...tickers]) tick(now);\n if (tickers.size) tickerFrame = requestAnimationFrame(runTickers);\n}\n\nfunction subscribe(tick: (now: number) => void) {\n tickers.add(tick);\n tickerFrame ||= requestAnimationFrame(runTickers);\n}\n\n/** 上下文连续丢失这么多次后不再重建,改显示降级内容 */\nconst MAX_CONTEXT_LOSSES = 3;\n\n/** 主题的时长为 0(主题编辑器关掉了动效,或系统要求减少动态效果):读不到主题时当作有动效 */\nfunction themeMotionOff(element: Element) {\n try {\n return parseDuration(readToken(element, durations.md)) === 0;\n } catch {\n return false;\n }\n}\n\ninterface Instance {\n renderer: WebGLRenderer;\n context: ThreeContext;\n handle: ThreeSceneHandle;\n canvas: HTMLCanvasElement;\n onLost: () => void;\n time: number;\n last: number;\n pending: number;\n ticking: boolean;\n colorSets: { set: ThemeColorSet<ThemeColorSources>; sources: ThemeColorSources }[];\n}\n\n/** three.js 渲染器的生命周期(在 setup 里调用),见文件开头 */\nexport function useThree(options: ThreeOptions): ThreeController {\n const config = useConfig();\n const reducedMotion = useReducedMotion();\n const off = () => options.quality?.() === 'off';\n const status = shallowRef<ThreeStatus>(off() ? 'fallback' : 'idle');\n const pointer = usePointer(options.canvas);\n const generation = shallowRef(0);\n const themeStill = shallowRef(false);\n const pageVisible = usePageVisible();\n const visible = shallowRef(false);\n\n let instance: Instance | undefined;\n let lastSeen = 0;\n let losses = 0;\n let unmounted = false;\n // 创建失败或上下文反复丢失:换画质也不再重试(区别于 off 的降级)\n let unsupported = false;\n\n const still = () => reducedMotion.value || themeStill.value;\n\n const holder: ContextHolder = {\n get visible() {\n return visible.value;\n },\n get lastSeen() {\n return lastSeen;\n },\n evict() {\n teardown();\n status.value = 'idle';\n generation.value++;\n },\n retry: () => start(),\n };\n\n function draw(target: Instance, delta: number) {\n target.handle.frame?.({ time: target.time, delta }, target.context);\n target.renderer.render(target.context.scene, target.context.camera);\n }\n\n function tick(now: number) {\n const target = instance;\n if (!target) return;\n const delta = target.last ? Math.min((now - target.last) / 1000, 0.1) : 0;\n target.last = now;\n target.time += delta;\n draw(target, delta);\n }\n\n function invalidate() {\n const target = instance;\n if (!target || target.ticking || target.pending) return;\n target.pending = requestAnimationFrame(() => {\n target.pending = 0;\n if (instance === target) draw(target, 0);\n });\n }\n\n function resize(target: Instance) {\n const { canvas, context, renderer, handle } = target;\n const size = context.size as ThreeSize;\n size.width = canvas.clientWidth;\n size.height = canvas.clientHeight;\n size.pixelRatio =\n Math.min(globalThis.devicePixelRatio || 1, context.quality.pixelRatio) *\n clamp(options.resolution?.() ?? 1, 0.1, 1);\n renderer.setPixelRatio(size.pixelRatio);\n renderer.setSize(size.width, size.height, false);\n const camera = context.camera as Camera & Partial<PerspectiveCamera>;\n if (camera.isPerspectiveCamera && size.height > 0) {\n camera.aspect = size.width / size.height;\n camera.updateProjectionMatrix!();\n }\n handle.resize?.(size, context);\n invalidate();\n }\n\n function create(\n canvas: HTMLCanvasElement,\n level: Exclude<ThreeQuality, 'off'> | undefined,\n ): Instance {\n const quality = resolveThreeQuality(level);\n const renderer = new WebGLRenderer({ canvas, alpha: true, antialias: quality.antialias });\n renderer.setClearColor(0x000000, 0);\n const camera = new PerspectiveCamera(45, 1, 0.1, 100);\n camera.position.z = 5;\n const colorSets: Instance['colorSets'] = [];\n const context: ThreeContext = {\n renderer,\n scene: new Scene(),\n camera,\n canvas,\n size: { width: 0, height: 0, pixelRatio: 1 },\n quality,\n pointer,\n get still() {\n return still();\n },\n invalidate,\n themeColors(sources) {\n const set = createThemeColorSet<typeof sources>(invalidate);\n set.refresh(canvas, sources, false);\n colorSets.push({ set, sources });\n return set.colors;\n },\n themeColorList(sources, size) {\n const used = size == null ? sources : sources.slice(0, size);\n const themed = context.themeColors(Object.fromEntries(used.map((color, i) => [i, color])));\n const list = used.map((_, index) => themed[index]!);\n while (size != null && list.length < size) list.push(list.at(-1)!);\n return list;\n },\n };\n const target: Instance = {\n renderer,\n context,\n handle: {},\n canvas,\n onLost: () => lose(target),\n time: 0,\n last: 0,\n pending: 0,\n ticking: false,\n colorSets,\n };\n canvas.addEventListener('webglcontextlost', target.onLost);\n return target;\n }\n\n function start() {\n const canvas = options.canvas();\n if (unmounted || instance || !canvas || !visible.value || status.value === 'fallback') return;\n const level = options.quality?.();\n if (level === 'off') return;\n if (!acquireContext(holder)) return;\n try {\n instance = create(canvas, level);\n } catch {\n // 没有 WebGL(浏览器禁用、驱动黑名单、测试环境)\n releaseContext(holder);\n unsupported = true;\n status.value = 'fallback';\n return;\n }\n try {\n instance.handle = options.setup(instance.context) ?? {};\n } catch (error) {\n teardown();\n unsupported = true;\n status.value = 'fallback';\n throw error;\n }\n resize(instance);\n update();\n }\n\n function teardown() {\n const target = instance;\n if (!target) return;\n instance = undefined;\n tickers.delete(tick);\n cancelAnimationFrame(target.pending);\n target.canvas.removeEventListener('webglcontextlost', target.onLost);\n for (const { set } of target.colorSets) set.stop();\n target.handle.dispose?.();\n disposeObject(target.context.scene);\n target.renderer.dispose();\n if (!target.renderer.getContext().isContextLost()) target.renderer.forceContextLoss();\n releaseContext(holder);\n }\n\n function lose(target: Instance) {\n if (instance !== target) return;\n teardown();\n losses++;\n unsupported = losses >= MAX_CONTEXT_LOSSES;\n status.value = unsupported ? 'fallback' : 'idle';\n // 丢失过上下文的 canvas 拿不回新的上下文:换一块\n if (status.value === 'idle') generation.value++;\n }\n\n /** 按可见性、暂停、静止决定循环开还是停 */\n function update() {\n const target = instance;\n if (!target) return;\n const mode: ThreeStatus = still()\n ? 'still'\n : options.paused?.() || !visible.value || !pageVisible.value\n ? 'paused'\n : 'running';\n target.ticking = mode === 'running';\n if (target.ticking) {\n target.last = 0;\n subscribe(tick);\n } else {\n tickers.delete(tick);\n if (mode === 'still') invalidate();\n }\n status.value = mode;\n }\n\n // 没有 IntersectionObserver 的环境(服务端、旧测试环境)当作一直在视口里\n if (typeof IntersectionObserver === 'undefined') visible.value = true;\n useIntersectionObserver(options.canvas, ([entry]) => {\n visible.value = entry!.isIntersecting;\n lastSeen = performance.now();\n });\n useResizeObserver(options.canvas, () => instance && resize(instance));\n watch(options.canvas, (canvas) => canvas && start(), { immediate: true, flush: 'post' });\n\n watch(visible, (shown) => {\n if (instance) update();\n else start();\n // 滚出视口的效果可以被回收:排队的效果再试\n if (!shown && instance) retryWaiting();\n });\n watch([() => options.paused?.(), reducedMotion, themeStill, pageVisible], update);\n\n // 主题变了(含主题编辑器关掉动效):重新判断要不要静止,并重画\n watch(\n [() => config.theme, options.canvas],\n ([, canvas]) => {\n if (!canvas) return;\n themeStill.value = themeMotionOff(canvas);\n for (const { set, sources } of instance?.colorSets ?? []) set.refresh(canvas, sources, true);\n invalidate();\n },\n { immediate: true, flush: 'post' },\n );\n\n watch(\n () => options.resolution?.(),\n () => instance && resize(instance),\n );\n\n watch(\n () => options.quality?.(),\n () => {\n if (unsupported) return;\n if (off()) {\n teardown();\n status.value = 'fallback';\n } else if (instance || status.value === 'fallback') {\n // 换档重建;从 off 回来时渲染方重新挂上 canvas,再按可见性创建\n teardown();\n status.value = 'idle';\n generation.value++;\n }\n },\n );\n\n onScopeDispose(() => {\n unmounted = true;\n teardown();\n releaseContext(holder);\n });\n\n return {\n get status() {\n return status.value;\n },\n get generation() {\n return generation.value;\n },\n invalidate,\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 着色器的公共片段(GLSL 字符串),拼进自己的片段着色器:
|
|
3
|
+
*
|
|
4
|
+
* const fragmentShader = `
|
|
5
|
+
* ${shaderChunks.simplexNoise}
|
|
6
|
+
* ${shaderChunks.themePalette}
|
|
7
|
+
* void main() { gl_FragColor = vec4(themePalette(snoise(vec3(vUv * 3.0, uTime)) * 0.5 + 0.5), 1.0); }
|
|
8
|
+
* `;
|
|
9
|
+
*
|
|
10
|
+
* themePalette 用的 uColors、uColorCount 由 ShaderBackground 自动传入(主题色板)。
|
|
11
|
+
*/
|
|
12
|
+
/** 色板最多几个颜色(uColors 数组的长度) */
|
|
13
|
+
export declare const THEME_PALETTE_SIZE = 6;
|
|
14
|
+
/** 公共着色器片段:simplexNoise、fbm、themePalette */
|
|
15
|
+
export declare const shaderChunks: {
|
|
16
|
+
readonly simplexNoise: "\nvec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\nvec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\nvec4 permute(vec4 x) { return mod289(((x * 34.0) + 10.0) * x); }\nvec4 taylorInvSqrt(vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; }\n\nfloat snoise(vec3 v) {\n const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0);\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n vec3 i = floor(v + dot(v, C.yyy));\n vec3 x0 = v - i + dot(i, C.xxx);\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min(g.xyz, l.zxy);\n vec3 i2 = max(g.xyz, l.zxy);\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy;\n vec3 x3 = x0 - D.yyy;\n i = mod289(i);\n vec4 p = permute(permute(permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0));\n float n_ = 0.142857142857;\n vec3 ns = n_ * D.wyz - D.xzx;\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z);\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_);\n vec4 x = x_ * ns.x + ns.yyyy;\n vec4 y = y_ * ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n vec4 b0 = vec4(x.xy, y.xy);\n vec4 b1 = vec4(x.zw, y.zw);\n vec4 s0 = floor(b0) * 2.0 + 1.0;\n vec4 s1 = floor(b1) * 2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy;\n vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;\n vec3 p0 = vec3(a0.xy, h.x);\n vec3 p1 = vec3(a0.zw, h.y);\n vec3 p2 = vec3(a1.xy, h.z);\n vec3 p3 = vec3(a1.zw, h.w);\n vec4 norm = taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n vec4 m = max(0.5 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0);\n m = m * m;\n return 105.0 * dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));\n}\n";
|
|
17
|
+
readonly fbm: "\nfloat fbm(vec3 p) {\n float sum = 0.0;\n float amplitude = 0.5;\n for (int octave = 0; octave < 4; octave++) {\n sum += amplitude * snoise(p);\n p = p * 2.02 + vec3(17.0);\n amplitude *= 0.5;\n }\n return sum;\n}\n";
|
|
18
|
+
readonly themePalette: "\n#define THEME_PALETTE_SIZE 6\nuniform vec3 uColors[THEME_PALETTE_SIZE];\nuniform int uColorCount;\n\nvec3 themePalette(float t) {\n float scaled = clamp(t, 0.0, 1.0) * float(max(uColorCount - 1, 1));\n vec3 color = uColors[0];\n for (int i = 1; i < THEME_PALETTE_SIZE; i++) {\n if (i >= uColorCount) break;\n color = mix(color, uColors[i], clamp(scaled - float(i - 1), 0.0, 1.0));\n }\n return color;\n}\n";
|
|
19
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
//#region src/three/core/shaders.ts
|
|
2
|
+
/**
|
|
3
|
+
* 着色器的公共片段(GLSL 字符串),拼进自己的片段着色器:
|
|
4
|
+
*
|
|
5
|
+
* const fragmentShader = `
|
|
6
|
+
* ${shaderChunks.simplexNoise}
|
|
7
|
+
* ${shaderChunks.themePalette}
|
|
8
|
+
* void main() { gl_FragColor = vec4(themePalette(snoise(vec3(vUv * 3.0, uTime)) * 0.5 + 0.5), 1.0); }
|
|
9
|
+
* `;
|
|
10
|
+
*
|
|
11
|
+
* themePalette 用的 uColors、uColorCount 由 ShaderBackground 自动传入(主题色板)。
|
|
12
|
+
*/
|
|
13
|
+
/** 色板最多几个颜色(uColors 数组的长度) */
|
|
14
|
+
var THEME_PALETTE_SIZE = 6;
|
|
15
|
+
/** 公共着色器片段:simplexNoise、fbm、themePalette */
|
|
16
|
+
var shaderChunks = {
|
|
17
|
+
simplexNoise: `
|
|
18
|
+
vec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
|
|
19
|
+
vec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
|
|
20
|
+
vec4 permute(vec4 x) { return mod289(((x * 34.0) + 10.0) * x); }
|
|
21
|
+
vec4 taylorInvSqrt(vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; }
|
|
22
|
+
|
|
23
|
+
float snoise(vec3 v) {
|
|
24
|
+
const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0);
|
|
25
|
+
const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
|
|
26
|
+
vec3 i = floor(v + dot(v, C.yyy));
|
|
27
|
+
vec3 x0 = v - i + dot(i, C.xxx);
|
|
28
|
+
vec3 g = step(x0.yzx, x0.xyz);
|
|
29
|
+
vec3 l = 1.0 - g;
|
|
30
|
+
vec3 i1 = min(g.xyz, l.zxy);
|
|
31
|
+
vec3 i2 = max(g.xyz, l.zxy);
|
|
32
|
+
vec3 x1 = x0 - i1 + C.xxx;
|
|
33
|
+
vec3 x2 = x0 - i2 + C.yyy;
|
|
34
|
+
vec3 x3 = x0 - D.yyy;
|
|
35
|
+
i = mod289(i);
|
|
36
|
+
vec4 p = permute(permute(permute(
|
|
37
|
+
i.z + vec4(0.0, i1.z, i2.z, 1.0))
|
|
38
|
+
+ i.y + vec4(0.0, i1.y, i2.y, 1.0))
|
|
39
|
+
+ i.x + vec4(0.0, i1.x, i2.x, 1.0));
|
|
40
|
+
float n_ = 0.142857142857;
|
|
41
|
+
vec3 ns = n_ * D.wyz - D.xzx;
|
|
42
|
+
vec4 j = p - 49.0 * floor(p * ns.z * ns.z);
|
|
43
|
+
vec4 x_ = floor(j * ns.z);
|
|
44
|
+
vec4 y_ = floor(j - 7.0 * x_);
|
|
45
|
+
vec4 x = x_ * ns.x + ns.yyyy;
|
|
46
|
+
vec4 y = y_ * ns.x + ns.yyyy;
|
|
47
|
+
vec4 h = 1.0 - abs(x) - abs(y);
|
|
48
|
+
vec4 b0 = vec4(x.xy, y.xy);
|
|
49
|
+
vec4 b1 = vec4(x.zw, y.zw);
|
|
50
|
+
vec4 s0 = floor(b0) * 2.0 + 1.0;
|
|
51
|
+
vec4 s1 = floor(b1) * 2.0 + 1.0;
|
|
52
|
+
vec4 sh = -step(h, vec4(0.0));
|
|
53
|
+
vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy;
|
|
54
|
+
vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;
|
|
55
|
+
vec3 p0 = vec3(a0.xy, h.x);
|
|
56
|
+
vec3 p1 = vec3(a0.zw, h.y);
|
|
57
|
+
vec3 p2 = vec3(a1.xy, h.z);
|
|
58
|
+
vec3 p3 = vec3(a1.zw, h.w);
|
|
59
|
+
vec4 norm = taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));
|
|
60
|
+
p0 *= norm.x;
|
|
61
|
+
p1 *= norm.y;
|
|
62
|
+
p2 *= norm.z;
|
|
63
|
+
p3 *= norm.w;
|
|
64
|
+
vec4 m = max(0.5 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0);
|
|
65
|
+
m = m * m;
|
|
66
|
+
return 105.0 * dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));
|
|
67
|
+
}
|
|
68
|
+
`,
|
|
69
|
+
fbm: `
|
|
70
|
+
float fbm(vec3 p) {
|
|
71
|
+
float sum = 0.0;
|
|
72
|
+
float amplitude = 0.5;
|
|
73
|
+
for (int octave = 0; octave < 4; octave++) {
|
|
74
|
+
sum += amplitude * snoise(p);
|
|
75
|
+
p = p * 2.02 + vec3(17.0);
|
|
76
|
+
amplitude *= 0.5;
|
|
77
|
+
}
|
|
78
|
+
return sum;
|
|
79
|
+
}
|
|
80
|
+
`,
|
|
81
|
+
themePalette: `
|
|
82
|
+
#define THEME_PALETTE_SIZE 6
|
|
83
|
+
uniform vec3 uColors[THEME_PALETTE_SIZE];
|
|
84
|
+
uniform int uColorCount;
|
|
85
|
+
|
|
86
|
+
vec3 themePalette(float t) {
|
|
87
|
+
float scaled = clamp(t, 0.0, 1.0) * float(max(uColorCount - 1, 1));
|
|
88
|
+
vec3 color = uColors[0];
|
|
89
|
+
for (int i = 1; i < THEME_PALETTE_SIZE; i++) {
|
|
90
|
+
if (i >= uColorCount) break;
|
|
91
|
+
color = mix(color, uColors[i], clamp(scaled - float(i - 1), 0.0, 1.0));
|
|
92
|
+
}
|
|
93
|
+
return color;
|
|
94
|
+
}
|
|
95
|
+
`
|
|
96
|
+
};
|
|
97
|
+
//#endregion
|
|
98
|
+
export { THEME_PALETTE_SIZE, shaderChunks };
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=shaders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shaders.js","names":[],"sources":["../../../src/three/core/shaders.ts"],"sourcesContent":["/**\n * 着色器的公共片段(GLSL 字符串),拼进自己的片段着色器:\n *\n * const fragmentShader = `\n * ${shaderChunks.simplexNoise}\n * ${shaderChunks.themePalette}\n * void main() { gl_FragColor = vec4(themePalette(snoise(vec3(vUv * 3.0, uTime)) * 0.5 + 0.5), 1.0); }\n * `;\n *\n * themePalette 用的 uColors、uColorCount 由 ShaderBackground 自动传入(主题色板)。\n */\n\n/** 色板最多几个颜色(uColors 数组的长度) */\nexport const THEME_PALETTE_SIZE = 6;\n\n/**\n * 三维 simplex 噪声 `float snoise(vec3 v)`,返回 -1 到 1。\n * 来自 Ashima Arts 的 webgl-noise(Ian McEwan、Stefan Gustavson,MIT 许可)\n */\nconst simplexNoise = /* glsl */ `\nvec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\nvec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\nvec4 permute(vec4 x) { return mod289(((x * 34.0) + 10.0) * x); }\nvec4 taylorInvSqrt(vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; }\n\nfloat snoise(vec3 v) {\n const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0);\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n vec3 i = floor(v + dot(v, C.yyy));\n vec3 x0 = v - i + dot(i, C.xxx);\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min(g.xyz, l.zxy);\n vec3 i2 = max(g.xyz, l.zxy);\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy;\n vec3 x3 = x0 - D.yyy;\n i = mod289(i);\n vec4 p = permute(permute(permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0));\n float n_ = 0.142857142857;\n vec3 ns = n_ * D.wyz - D.xzx;\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z);\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_);\n vec4 x = x_ * ns.x + ns.yyyy;\n vec4 y = y_ * ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n vec4 b0 = vec4(x.xy, y.xy);\n vec4 b1 = vec4(x.zw, y.zw);\n vec4 s0 = floor(b0) * 2.0 + 1.0;\n vec4 s1 = floor(b1) * 2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy;\n vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;\n vec3 p0 = vec3(a0.xy, h.x);\n vec3 p1 = vec3(a0.zw, h.y);\n vec3 p2 = vec3(a1.xy, h.z);\n vec3 p3 = vec3(a1.zw, h.w);\n vec4 norm = taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n vec4 m = max(0.5 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0);\n m = m * m;\n return 105.0 * dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));\n}\n`;\n\n/** 分形噪声 `float fbm(vec3 p)`:几层 simplex 噪声叠加,返回约 -1 到 1;依赖 simplexNoise */\nconst fbm = /* glsl */ `\nfloat fbm(vec3 p) {\n float sum = 0.0;\n float amplitude = 0.5;\n for (int octave = 0; octave < 4; octave++) {\n sum += amplitude * snoise(p);\n p = p * 2.02 + vec3(17.0);\n amplitude *= 0.5;\n }\n return sum;\n}\n`;\n\n/** 主题色板 `vec3 themePalette(float t)`:t 从 0 到 1 依次经过 uColors 的各个颜色;uColors 的长度是 THEME_PALETTE_SIZE */\nconst themePalette = /* glsl */ `\n#define THEME_PALETTE_SIZE ${THEME_PALETTE_SIZE}\nuniform vec3 uColors[THEME_PALETTE_SIZE];\nuniform int uColorCount;\n\nvec3 themePalette(float t) {\n float scaled = clamp(t, 0.0, 1.0) * float(max(uColorCount - 1, 1));\n vec3 color = uColors[0];\n for (int i = 1; i < THEME_PALETTE_SIZE; i++) {\n if (i >= uColorCount) break;\n color = mix(color, uColors[i], clamp(scaled - float(i - 1), 0.0, 1.0));\n }\n return color;\n}\n`;\n\n/** 公共着色器片段:simplexNoise、fbm、themePalette */\nexport const shaderChunks = { simplexNoise, fbm, themePalette } as const;\n"],"mappings":";;;;;;;;;;;;;AAaA,IAAa,qBAAqB;;AA2FlC,IAAa,eAAe;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAc;;;;;;;;;;;;CAAK;;;;;;;;;;;;;;;AAAa"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Color } from 'three';
|
|
2
|
+
/** 一组要读的颜色:名字 → token 或 CSS 颜色 */
|
|
3
|
+
export type ThemeColorSources = Readonly<Record<string, string>>;
|
|
4
|
+
/** 一组主题色:名字 → THREE.Color(换色时原地修改) */
|
|
5
|
+
export type ThemeColors<Sources extends ThemeColorSources> = {
|
|
6
|
+
readonly [Name in keyof Sources]: Color;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* 在 scope 元素上读出 CSS 颜色,写进 target(sRGB 转成 three.js 的线性工作空间)。
|
|
10
|
+
* 解析不了时(读不到主题、格式不认识)保持原值,返回 false
|
|
11
|
+
*/
|
|
12
|
+
export declare function readThemeColor(scope: Element, value: string, target: Color): boolean;
|
|
13
|
+
/** 一组跟随主题的颜色:refresh 读取并过渡,stop 取消还在跑的过渡 */
|
|
14
|
+
export interface ThemeColorSet<Sources extends ThemeColorSources> {
|
|
15
|
+
/** 名字 → THREE.Color:材质直接引用这些对象,换主题时原地改值 */
|
|
16
|
+
readonly colors: ThemeColors<Sources>;
|
|
17
|
+
/** 在 scope 上重新读取;transition 为 false(第一次读)时直接换 */
|
|
18
|
+
refresh(scope: Element, sources: Sources, transition: boolean): void;
|
|
19
|
+
/** 取消还在跑的过渡 */
|
|
20
|
+
stop(): void;
|
|
21
|
+
}
|
|
22
|
+
/** 建一组主题色(useThemeColors 与场景上下文的 themeColors 共用) */
|
|
23
|
+
export declare function createThemeColorSet<Sources extends ThemeColorSources>(onChange?: () => void): ThemeColorSet<Sources>;
|
|
24
|
+
/** useThemeColors 的选项 */
|
|
25
|
+
export interface ThemeColorOptions {
|
|
26
|
+
/** 颜色变了(第一次读到、过渡的每一帧)时调用:循环停着的场景在这里请求重画 */
|
|
27
|
+
onChange?: () => void;
|
|
28
|
+
}
|
|
29
|
+
/** 组件里的主题色(在 setup 里调用):scope 元素挂载后读取,换主题或来源变了时过渡到新色,见文件开头 */
|
|
30
|
+
export declare function useThemeColors<Sources extends ThemeColorSources>(scope: () => Element | null | undefined, sources: Sources | (() => Sources), { onChange }?: ThemeColorOptions): ThemeColors<Sources>;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { clamp } from "../../utils/data/number.js";
|
|
2
|
+
import { useConfig } from "../../config/context.js";
|
|
3
|
+
import { themeTransitionOrInstant } from "../../utils/motion/animation.js";
|
|
4
|
+
import { onScopeDispose, watch } from "vue";
|
|
5
|
+
import { animate } from "animejs";
|
|
6
|
+
import { converter, modeLab, modeLch, modeLrgb, modeOklab, modeOklch, modeP3, modeRgb, parse, useMode } from "culori/fn";
|
|
7
|
+
import { Color, SRGBColorSpace } from "three";
|
|
8
|
+
//#region src/three/core/theme-colors.ts
|
|
9
|
+
/**
|
|
10
|
+
* 主题色 → THREE.Color:3D 场景拿不到 CSS 变量,这里在元素上读出颜色的当前取值,转成 three.js 的颜色。
|
|
11
|
+
*
|
|
12
|
+
* // 场景里(ThreeCanvas 的 setup):跟随画布所在位置的主题,换色时自动重画
|
|
13
|
+
* setup: ({ scene, themeColors }) => {
|
|
14
|
+
* const palette = themeColors({ accent: colors.accent, glow: colors.chart3 });
|
|
15
|
+
* material.color = palette.accent; // 直接赋同一个对象;构造参数里传会被复制一份
|
|
16
|
+
* uniforms.uGlow = { value: palette.glow };
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* // 组件里(颜色来源随 props 变化时)
|
|
20
|
+
* const palette = useThemeColors(() => host, () => ({ main: color }), { onChange: invalidate });
|
|
21
|
+
*
|
|
22
|
+
* 切换主题、主题编辑器改品牌色时重新读取,按主题的 lg 时长与 standard 缓动从旧色过渡到新色(减少动态效果时直接换);
|
|
23
|
+
* Color 对象始终是同一批,材质与 uniform 不用重建。
|
|
24
|
+
*
|
|
25
|
+
* 颜色可以是 token(`colors.accent`)或任意 CSS 颜色(`'#e5484d'`、`'color-mix(…)'`):
|
|
26
|
+
* 交给一个隐藏的探针元素,由浏览器解析出最终的颜色,light-dark()、color-mix()、主题覆盖都能用。透明度不保留。
|
|
27
|
+
*/
|
|
28
|
+
useMode(modeRgb);
|
|
29
|
+
useMode(modeLrgb);
|
|
30
|
+
useMode(modeP3);
|
|
31
|
+
useMode(modeLab);
|
|
32
|
+
useMode(modeLch);
|
|
33
|
+
useMode(modeOklab);
|
|
34
|
+
useMode(modeOklch);
|
|
35
|
+
var toRgb = converter("rgb");
|
|
36
|
+
/**
|
|
37
|
+
* 在 scope 元素上读出 CSS 颜色,写进 target(sRGB 转成 three.js 的线性工作空间)。
|
|
38
|
+
* 解析不了时(读不到主题、格式不认识)保持原值,返回 false
|
|
39
|
+
*/
|
|
40
|
+
function readThemeColor(scope, value, target) {
|
|
41
|
+
const probe = document.createElement("span");
|
|
42
|
+
probe.style.display = "none";
|
|
43
|
+
probe.style.color = value;
|
|
44
|
+
scope.append(probe);
|
|
45
|
+
const computed = getComputedStyle(probe).color;
|
|
46
|
+
probe.remove();
|
|
47
|
+
const parsed = computed ? parse(computed) : void 0;
|
|
48
|
+
const rgb = parsed && toRgb(parsed);
|
|
49
|
+
if (!rgb) return false;
|
|
50
|
+
const unit = (channel) => clamp(channel || 0, 0, 1);
|
|
51
|
+
target.setRGB(unit(rgb.r), unit(rgb.g), unit(rgb.b), SRGBColorSpace);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
/** 建一组主题色(useThemeColors 与场景上下文的 themeColors 共用) */
|
|
55
|
+
function createThemeColorSet(onChange) {
|
|
56
|
+
const colors = {};
|
|
57
|
+
let running;
|
|
58
|
+
return {
|
|
59
|
+
colors,
|
|
60
|
+
refresh(scope, sources, transition) {
|
|
61
|
+
running?.cancel();
|
|
62
|
+
const from = {};
|
|
63
|
+
const to = {};
|
|
64
|
+
for (const [name, value] of Object.entries(sources)) {
|
|
65
|
+
const color = colors[name] ??= new Color();
|
|
66
|
+
from[name] = color.clone();
|
|
67
|
+
to[name] = color.clone();
|
|
68
|
+
readThemeColor(scope, value, to[name]);
|
|
69
|
+
}
|
|
70
|
+
const apply = (progress) => {
|
|
71
|
+
for (const name of Object.keys(to)) colors[name].lerpColors(from[name], to[name], progress);
|
|
72
|
+
onChange?.();
|
|
73
|
+
};
|
|
74
|
+
const timing = transition ? themeTransitionOrInstant(scope, { duration: "lg" }) : {};
|
|
75
|
+
if (!timing.duration) return apply(1);
|
|
76
|
+
const state = { progress: 0 };
|
|
77
|
+
running = animate(state, {
|
|
78
|
+
progress: 1,
|
|
79
|
+
...timing,
|
|
80
|
+
onUpdate: () => apply(state.progress)
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
stop() {
|
|
84
|
+
running?.cancel();
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/** 组件里的主题色(在 setup 里调用):scope 元素挂载后读取,换主题或来源变了时过渡到新色,见文件开头 */
|
|
89
|
+
function useThemeColors(scope, sources, { onChange } = {}) {
|
|
90
|
+
const config = useConfig();
|
|
91
|
+
const set = createThemeColorSet(onChange);
|
|
92
|
+
const read = () => typeof sources === "function" ? sources() : sources;
|
|
93
|
+
for (const name of Object.keys(read())) set.colors[name] = new Color();
|
|
94
|
+
let loaded = false;
|
|
95
|
+
watch([
|
|
96
|
+
() => config.theme,
|
|
97
|
+
scope,
|
|
98
|
+
() => JSON.stringify(read())
|
|
99
|
+
], ([, element]) => {
|
|
100
|
+
if (!element) return;
|
|
101
|
+
set.refresh(element, read(), loaded);
|
|
102
|
+
loaded = true;
|
|
103
|
+
}, {
|
|
104
|
+
immediate: true,
|
|
105
|
+
flush: "post"
|
|
106
|
+
});
|
|
107
|
+
onScopeDispose(() => set.stop());
|
|
108
|
+
return set.colors;
|
|
109
|
+
}
|
|
110
|
+
//#endregion
|
|
111
|
+
export { createThemeColorSet, readThemeColor, useThemeColors };
|
|
112
|
+
|
|
113
|
+
//# sourceMappingURL=theme-colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-colors.js","names":[],"sources":["../../../src/three/core/theme-colors.ts"],"sourcesContent":["/**\n * 主题色 → THREE.Color:3D 场景拿不到 CSS 变量,这里在元素上读出颜色的当前取值,转成 three.js 的颜色。\n *\n * // 场景里(ThreeCanvas 的 setup):跟随画布所在位置的主题,换色时自动重画\n * setup: ({ scene, themeColors }) => {\n * const palette = themeColors({ accent: colors.accent, glow: colors.chart3 });\n * material.color = palette.accent; // 直接赋同一个对象;构造参数里传会被复制一份\n * uniforms.uGlow = { value: palette.glow };\n * }\n *\n * // 组件里(颜色来源随 props 变化时)\n * const palette = useThemeColors(() => host, () => ({ main: color }), { onChange: invalidate });\n *\n * 切换主题、主题编辑器改品牌色时重新读取,按主题的 lg 时长与 standard 缓动从旧色过渡到新色(减少动态效果时直接换);\n * Color 对象始终是同一批,材质与 uniform 不用重建。\n *\n * 颜色可以是 token(`colors.accent`)或任意 CSS 颜色(`'#e5484d'`、`'color-mix(…)'`):\n * 交给一个隐藏的探针元素,由浏览器解析出最终的颜色,light-dark()、color-mix()、主题覆盖都能用。透明度不保留。\n */\nimport { animate, type JSAnimation } from 'animejs';\nimport {\n converter,\n modeLab,\n modeLch,\n modeLrgb,\n modeOklab,\n modeOklch,\n modeP3,\n modeRgb,\n parse,\n useMode,\n} from 'culori/fn';\nimport { Color, SRGBColorSpace } from 'three';\nimport { onScopeDispose, watch } from 'vue';\nimport { useConfig } from '../../config/context';\nimport { clamp } from '../../utils/data/number';\nimport { themeTransitionOrInstant } from '../../utils/motion/animation';\n\n// 浏览器给出的计算值可能是 rgb()、color(srgb …)、color(display-p3 …)、oklch()、lab() 等\nuseMode(modeRgb);\nuseMode(modeLrgb);\nuseMode(modeP3);\nuseMode(modeLab);\nuseMode(modeLch);\nuseMode(modeOklab);\nuseMode(modeOklch);\nconst toRgb = converter('rgb');\n\n/** 一组要读的颜色:名字 → token 或 CSS 颜色 */\nexport type ThemeColorSources = Readonly<Record<string, string>>;\n\n/** 一组主题色:名字 → THREE.Color(换色时原地修改) */\nexport type ThemeColors<Sources extends ThemeColorSources> = {\n readonly [Name in keyof Sources]: Color;\n};\n\n/**\n * 在 scope 元素上读出 CSS 颜色,写进 target(sRGB 转成 three.js 的线性工作空间)。\n * 解析不了时(读不到主题、格式不认识)保持原值,返回 false\n */\nexport function readThemeColor(scope: Element, value: string, target: Color): boolean {\n const probe = document.createElement('span');\n probe.style.display = 'none';\n probe.style.color = value;\n scope.append(probe);\n const computed = getComputedStyle(probe).color;\n probe.remove();\n const parsed = computed ? parse(computed) : undefined;\n const rgb = parsed && toRgb(parsed);\n if (!rgb) return false;\n const unit = (channel: number) => clamp(channel || 0, 0, 1);\n target.setRGB(unit(rgb.r), unit(rgb.g), unit(rgb.b), SRGBColorSpace);\n return true;\n}\n\n/** 一组跟随主题的颜色:refresh 读取并过渡,stop 取消还在跑的过渡 */\nexport interface ThemeColorSet<Sources extends ThemeColorSources> {\n /** 名字 → THREE.Color:材质直接引用这些对象,换主题时原地改值 */\n readonly colors: ThemeColors<Sources>;\n /** 在 scope 上重新读取;transition 为 false(第一次读)时直接换 */\n refresh(scope: Element, sources: Sources, transition: boolean): void;\n /** 取消还在跑的过渡 */\n stop(): void;\n}\n\n/** 建一组主题色(useThemeColors 与场景上下文的 themeColors 共用) */\nexport function createThemeColorSet<Sources extends ThemeColorSources>(\n onChange?: () => void,\n): ThemeColorSet<Sources> {\n const colors: Record<string, Color> = {};\n let running: JSAnimation | undefined;\n return {\n colors: colors as ThemeColors<Sources>,\n refresh(scope, sources, transition) {\n void running?.cancel();\n const from: Record<string, Color> = {};\n const to: Record<string, Color> = {};\n for (const [name, value] of Object.entries(sources)) {\n const color = (colors[name] ??= new Color());\n from[name] = color.clone();\n to[name] = color.clone();\n readThemeColor(scope, value, to[name]!);\n }\n const apply = (progress: number) => {\n for (const name of Object.keys(to))\n colors[name]!.lerpColors(from[name]!, to[name]!, progress);\n onChange?.();\n };\n const timing = transition ? themeTransitionOrInstant(scope, { duration: 'lg' }) : {};\n if (!timing.duration) return apply(1);\n const state = { progress: 0 };\n running = animate(state, { progress: 1, ...timing, onUpdate: () => apply(state.progress) });\n },\n stop() {\n void running?.cancel();\n },\n };\n}\n\n/** useThemeColors 的选项 */\nexport interface ThemeColorOptions {\n /** 颜色变了(第一次读到、过渡的每一帧)时调用:循环停着的场景在这里请求重画 */\n onChange?: () => void;\n}\n\n/** 组件里的主题色(在 setup 里调用):scope 元素挂载后读取,换主题或来源变了时过渡到新色,见文件开头 */\nexport function useThemeColors<Sources extends ThemeColorSources>(\n scope: () => Element | null | undefined,\n sources: Sources | (() => Sources),\n { onChange }: ThemeColorOptions = {},\n): ThemeColors<Sources> {\n const config = useConfig();\n const set = createThemeColorSet<Sources>(onChange);\n const read = () => (typeof sources === 'function' ? sources() : sources);\n // 挂载前就能拿到全部名字:材质可以在第一次读取前引用这些对象\n for (const name of Object.keys(read())) (set.colors as Record<string, Color>)[name] = new Color();\n let loaded = false;\n watch(\n [() => config.theme, scope, () => JSON.stringify(read())],\n ([, element]) => {\n if (!element) return;\n set.refresh(element, read(), loaded);\n loaded = true;\n },\n { immediate: true, flush: 'post' },\n );\n onScopeDispose(() => set.stop());\n return set.colors;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,QAAQ,OAAO;AACf,QAAQ,QAAQ;AAChB,QAAQ,MAAM;AACd,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf,QAAQ,SAAS;AACjB,QAAQ,SAAS;AACjB,IAAM,QAAQ,UAAU,KAAK;;;;;AAc7B,SAAgB,eAAe,OAAgB,OAAe,QAAwB;CACpF,MAAM,QAAQ,SAAS,cAAc,MAAM;CAC3C,MAAM,MAAM,UAAU;CACtB,MAAM,MAAM,QAAQ;CACpB,MAAM,OAAO,KAAK;CAClB,MAAM,WAAW,iBAAiB,KAAK,CAAC,CAAC;CACzC,MAAM,OAAO;CACb,MAAM,SAAS,WAAW,MAAM,QAAQ,IAAI,KAAA;CAC5C,MAAM,MAAM,UAAU,MAAM,MAAM;CAClC,IAAI,CAAC,KAAK,OAAO;CACjB,MAAM,QAAQ,YAAoB,MAAM,WAAW,GAAG,GAAG,CAAC;CAC1D,OAAO,OAAO,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,cAAc;CACnE,OAAO;AACT;;AAaA,SAAgB,oBACd,UACwB;CACxB,MAAM,SAAgC,CAAC;CACvC,IAAI;CACJ,OAAO;EACG;EACR,QAAQ,OAAO,SAAS,YAAY;GAClC,SAAc,OAAO;GACrB,MAAM,OAA8B,CAAC;GACrC,MAAM,KAA4B,CAAC;GACnC,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,OAAO,GAAG;IACnD,MAAM,QAAS,OAAO,UAAU,IAAI,MAAM;IAC1C,KAAK,QAAQ,MAAM,MAAM;IACzB,GAAG,QAAQ,MAAM,MAAM;IACvB,eAAe,OAAO,OAAO,GAAG,KAAM;GACxC;GACA,MAAM,SAAS,aAAqB;IAClC,KAAK,MAAM,QAAQ,OAAO,KAAK,EAAE,GAC/B,OAAO,KAAK,CAAE,WAAW,KAAK,OAAQ,GAAG,OAAQ,QAAQ;IAC3D,WAAW;GACb;GACA,MAAM,SAAS,aAAa,yBAAyB,OAAO,EAAE,UAAU,KAAK,CAAC,IAAI,CAAC;GACnF,IAAI,CAAC,OAAO,UAAU,OAAO,MAAM,CAAC;GACpC,MAAM,QAAQ,EAAE,UAAU,EAAE;GAC5B,UAAU,QAAQ,OAAO;IAAE,UAAU;IAAG,GAAG;IAAQ,gBAAgB,MAAM,MAAM,QAAQ;GAAE,CAAC;EAC5F;EACA,OAAO;GACL,SAAc,OAAO;EACvB;CACF;AACF;;AASA,SAAgB,eACd,OACA,SACA,EAAE,aAAgC,CAAC,GACb;CACtB,MAAM,SAAS,UAAU;CACzB,MAAM,MAAM,oBAA6B,QAAQ;CACjD,MAAM,aAAc,OAAO,YAAY,aAAa,QAAQ,IAAI;CAEhE,KAAK,MAAM,QAAQ,OAAO,KAAK,KAAK,CAAC,GAAG,IAAK,OAAiC,QAAQ,IAAI,MAAM;CAChG,IAAI,SAAS;CACb,MACE;QAAO,OAAO;EAAO;QAAa,KAAK,UAAU,KAAK,CAAC;CAAC,IACvD,GAAG,aAAa;EACf,IAAI,CAAC,SAAS;EACd,IAAI,QAAQ,SAAS,KAAK,GAAG,MAAM;EACnC,SAAS;CACX,GACA;EAAE,WAAW;EAAM,OAAO;CAAO,CACnC;CACA,qBAAqB,IAAI,KAAK,CAAC;CAC/B,OAAO,IAAI;AACb"}
|