@quicktvui/ai 1.0.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/README.md +36 -0
- package/index.js +2 -0
- package/package.json +23 -0
- package/postinstall.js +61 -0
- package/rules/.claude/commands/create-component.md +39 -0
- package/rules/.claude/commands/create-page.md +44 -0
- package/rules/.claude/commands/create-project.md +25 -0
- package/rules/.claude/commands/lookup-api.md +28 -0
- package/rules/.claude/commands/lookup-css.md +53 -0
- package/rules/.claude/settings.local.json +11 -0
- package/rules/.clinerules +367 -0
- package/rules/.cursorrules +367 -0
- package/rules/.docs/examples/component/animation/alpha-props.vue +130 -0
- package/rules/.docs/examples/component/animation/alpha.vue +169 -0
- package/rules/.docs/examples/component/animation/animator-props.vue +101 -0
- package/rules/.docs/examples/component/animation/animators-props.vue +145 -0
- package/rules/.docs/examples/component/animation/animators.vue +322 -0
- package/rules/.docs/examples/component/animation/basic.vue +96 -0
- package/rules/.docs/examples/component/animation/interpolator.vue +330 -0
- package/rules/.docs/examples/component/animation/listener.vue +151 -0
- package/rules/.docs/examples/component/animation/repeat.vue +113 -0
- package/rules/.docs/examples/component/animation/rotation-props.vue +148 -0
- package/rules/.docs/examples/component/animation/rotation-xy.vue +255 -0
- package/rules/.docs/examples/component/animation/rotation.vue +188 -0
- package/rules/.docs/examples/component/animation/scale-props.vue +129 -0
- package/rules/.docs/examples/component/animation/scale.vue +169 -0
- package/rules/.docs/examples/component/animation/translation-props.vue +128 -0
- package/rules/.docs/examples/component/animation/translation.vue +169 -0
- package/rules/.docs/examples/component/aside/basic.vue +34 -0
- package/rules/.docs/examples/component/audio-player/basic.vue +104 -0
- package/rules/.docs/examples/component/audio-player/event-global.vue +492 -0
- package/rules/.docs/examples/component/audio-player/event.vue +447 -0
- package/rules/.docs/examples/component/audio-player/player-manager.vue +100 -0
- package/rules/.docs/examples/component/audio-player-service/basic.vue +102 -0
- package/rules/.docs/examples/component/audio-player-service/event-global.vue +488 -0
- package/rules/.docs/examples/component/audio-player-service/event.vue +420 -0
- package/rules/.docs/examples/component/audio-player-service/player-manager.vue +100 -0
- package/rules/.docs/examples/component/button/background.vue +28 -0
- package/rules/.docs/examples/component/button/basic.vue +13 -0
- package/rules/.docs/examples/component/button/border.vue +18 -0
- package/rules/.docs/examples/component/button/custom-content.vue +18 -0
- package/rules/.docs/examples/component/button/custom-icon-style.vue +25 -0
- package/rules/.docs/examples/component/button/custom-icon.vue +19 -0
- package/rules/.docs/examples/component/button/custom-net-icon.vue +20 -0
- package/rules/.docs/examples/component/button/custom-style.vue +17 -0
- package/rules/.docs/examples/component/button/custom-text.vue +23 -0
- package/rules/.docs/examples/component/button/disabled.vue +13 -0
- package/rules/.docs/examples/component/button/round.vue +13 -0
- package/rules/.docs/examples/component/button/size.vue +16 -0
- package/rules/.docs/examples/component/button/square.vue +13 -0
- package/rules/.docs/examples/component/checkbox-group/basic.vue +97 -0
- package/rules/.docs/examples/component/collapse/basic.vue +156 -0
- package/rules/.docs/examples/component/column/basic.vue +15 -0
- package/rules/.docs/examples/component/container/layout-ahm.vue +48 -0
- package/rules/.docs/examples/component/container/layout-ahmf.vue +51 -0
- package/rules/.docs/examples/component/container/layout-am.vue +43 -0
- package/rules/.docs/examples/component/container/layout-ham.vue +48 -0
- package/rules/.docs/examples/component/container/layout-hamf.vue +53 -0
- package/rules/.docs/examples/component/container/layout-hm.vue +43 -0
- package/rules/.docs/examples/component/container/layout-hmf.vue +46 -0
- package/rules/.docs/examples/component/dialog/basic.vue +72 -0
- package/rules/.docs/examples/component/div/background-img.vue +49 -0
- package/rules/.docs/examples/component/div/background.vue +28 -0
- package/rules/.docs/examples/component/div/basic.vue +28 -0
- package/rules/.docs/examples/component/div/border.vue +72 -0
- package/rules/.docs/examples/component/div/click.vue +66 -0
- package/rules/.docs/examples/component/div/focus-background.vue +60 -0
- package/rules/.docs/examples/component/div/focus.vue +58 -0
- package/rules/.docs/examples/component/div/gradient-background.vue +36 -0
- package/rules/.docs/examples/component/footer/basic.vue +34 -0
- package/rules/.docs/examples/component/grid-view/basic.vue +59 -0
- package/rules/.docs/examples/component/grid-view/page.vue +80 -0
- package/rules/.docs/examples/component/grid-view/ref-base.vue +50 -0
- package/rules/.docs/examples/component/grid-view/ref-page.vue +102 -0
- package/rules/.docs/examples/component/header/basic.vue +39 -0
- package/rules/.docs/examples/component/html/alert.vue +28 -0
- package/rules/.docs/examples/component/html/audio.vue +24 -0
- package/rules/.docs/examples/component/html/h.vue +30 -0
- package/rules/.docs/examples/component/html/sound.vue +33 -0
- package/rules/.docs/examples/component/html/video.vue +23 -0
- package/rules/.docs/examples/component/image/assets.vue +40 -0
- package/rules/.docs/examples/component/image/network.vue +36 -0
- package/rules/.docs/examples/component/img/assets.vue +40 -0
- package/rules/.docs/examples/component/img/network.vue +36 -0
- package/rules/.docs/examples/component/indicator-list-view/basic.vue +476 -0
- package/rules/.docs/examples/component/input/basic.vue +26 -0
- package/rules/.docs/examples/component/list-view/basic.vue +58 -0
- package/rules/.docs/examples/component/list-view/ref-basic.vue +33 -0
- package/rules/.docs/examples/component/list-view/ref-operations.vue +58 -0
- package/rules/.docs/examples/component/list-view/ref-page.vue +82 -0
- package/rules/.docs/examples/component/loading/basic.vue +12 -0
- package/rules/.docs/examples/component/lottie/basic.vue +83 -0
- package/rules/.docs/examples/component/lottie/event.vue +126 -0
- package/rules/.docs/examples/component/lottie/local.vue +90 -0
- package/rules/.docs/examples/component/lottie/network.vue +82 -0
- package/rules/.docs/examples/component/main/basic.vue +34 -0
- package/rules/.docs/examples/component/nav-bar/basic.vue +45 -0
- package/rules/.docs/examples/component/p/basic.vue +40 -0
- package/rules/.docs/examples/component/p/gravity.vue +62 -0
- package/rules/.docs/examples/component/player-manager/aspect-ratio.vue +286 -0
- package/rules/.docs/examples/component/player-manager/basic.vue +87 -0
- package/rules/.docs/examples/component/player-manager/control.vue +356 -0
- package/rules/.docs/examples/component/player-manager/custom-player-view.vue +105 -0
- package/rules/.docs/examples/component/player-manager/custom-player.vue +100 -0
- package/rules/.docs/examples/component/player-manager/decode.vue +218 -0
- package/rules/.docs/examples/component/player-manager/definition.vue +199 -0
- package/rules/.docs/examples/component/player-manager/event-global.vue +581 -0
- package/rules/.docs/examples/component/player-manager/event.vue +632 -0
- package/rules/.docs/examples/component/player-manager/image-player.vue +331 -0
- package/rules/.docs/examples/component/player-manager/media-item-interceptor.vue +105 -0
- package/rules/.docs/examples/component/player-manager/media-item-list-interceptor.vue +104 -0
- package/rules/.docs/examples/component/player-manager/media-item-list.vue +268 -0
- package/rules/.docs/examples/component/player-manager/media-source-interceptor.vue +115 -0
- package/rules/.docs/examples/component/player-manager/media-source-list-interceptor.vue +111 -0
- package/rules/.docs/examples/component/player-manager/multi-player.vue +130 -0
- package/rules/.docs/examples/component/player-manager/play-mode.vue +260 -0
- package/rules/.docs/examples/component/player-manager/play-rate.vue +244 -0
- package/rules/.docs/examples/component/player-manager/player-size.vue +119 -0
- package/rules/.docs/examples/component/player-manager/player-view.vue +381 -0
- package/rules/.docs/examples/component/player-manager/post-roll-ad.vue +189 -0
- package/rules/.docs/examples/component/player-manager/previous-roll-ad.vue +172 -0
- package/rules/.docs/examples/component/player-manager/start-position.vue +108 -0
- package/rules/.docs/examples/component/player-manager/text-left-player.vue +306 -0
- package/rules/.docs/examples/component/player-manager/text-right-player.vue +306 -0
- package/rules/.docs/examples/component/player-manager/window.vue +140 -0
- package/rules/.docs/examples/component/poster/basic.vue +144 -0
- package/rules/.docs/examples/component/poster/corner.vue +123 -0
- package/rules/.docs/examples/component/poster/decoration.vue +82 -0
- package/rules/.docs/examples/component/poster/float-title.vue +103 -0
- package/rules/.docs/examples/component/poster/ripple.vue +118 -0
- package/rules/.docs/examples/component/poster/score.vue +108 -0
- package/rules/.docs/examples/component/poster/shadow.vue +113 -0
- package/rules/.docs/examples/component/poster/shimmer.vue +113 -0
- package/rules/.docs/examples/component/poster/sub-title.vue +110 -0
- package/rules/.docs/examples/component/poster/title.vue +106 -0
- package/rules/.docs/examples/component/progress-bar/basic.vue +61 -0
- package/rules/.docs/examples/component/qr-code/basic.vue +16 -0
- package/rules/.docs/examples/component/radio-group/basic.vue +105 -0
- package/rules/.docs/examples/component/rating-bar/basic.vue +152 -0
- package/rules/.docs/examples/component/row/basic.vue +15 -0
- package/rules/.docs/examples/component/seek-bar/bar.vue +49 -0
- package/rules/.docs/examples/component/seek-bar/basic.vue +191 -0
- package/rules/.docs/examples/component/seek-bar/indicator.vue +74 -0
- package/rules/.docs/examples/component/seek-bar/range-mode.vue +130 -0
- package/rules/.docs/examples/component/seek-bar/single-mode.vue +113 -0
- package/rules/.docs/examples/component/seek-bar/step.vue +186 -0
- package/rules/.docs/examples/component/seek-bar/thumb.vue +148 -0
- package/rules/.docs/examples/component/seek-bar/tick-mark.vue +121 -0
- package/rules/.docs/examples/component/switch/basic.vue +26 -0
- package/rules/.docs/examples/component/tabs/basic.vue +109 -0
- package/rules/.docs/examples/component/tabs/custom-tab-item.vue +120 -0
- package/rules/.docs/examples/component/tabs/data.vue +121 -0
- package/rules/.docs/examples/component/tabs/horizontal.vue +118 -0
- package/rules/.docs/examples/component/tabs/item-add.vue +127 -0
- package/rules/.docs/examples/component/tabs/item-custom.vue +132 -0
- package/rules/.docs/examples/component/tabs/item-delete.vue +123 -0
- package/rules/.docs/examples/component/tabs/item-get.vue +124 -0
- package/rules/.docs/examples/component/tabs/item-update.vue +129 -0
- package/rules/.docs/examples/component/tabs/ref-basic.vue +63 -0
- package/rules/.docs/examples/component/tabs/ref-operations.vue +97 -0
- package/rules/.docs/examples/component/tabs/ref-page.vue +89 -0
- package/rules/.docs/examples/component/tabs/section-add.vue +138 -0
- package/rules/.docs/examples/component/tabs/section-delete.vue +126 -0
- package/rules/.docs/examples/component/tabs/section-get.vue +128 -0
- package/rules/.docs/examples/component/tabs/section-update.vue +137 -0
- package/rules/.docs/examples/component/tabs/section-vue.vue +111 -0
- package/rules/.docs/examples/component/tabs/single-tab.vue +112 -0
- package/rules/.docs/examples/component/text/basic.vue +20 -0
- package/rules/.docs/examples/component/text/ellipsize-mode.vue +122 -0
- package/rules/.docs/examples/component/text/gravity.vue +119 -0
- package/rules/.docs/examples/component/video-player/aspect-ratio.vue +242 -0
- package/rules/.docs/examples/component/video-player/basic.vue +82 -0
- package/rules/.docs/examples/component/video-player/control.vue +240 -0
- package/rules/.docs/examples/component/video-player/decode.vue +174 -0
- package/rules/.docs/examples/component/video-player/definition.vue +194 -0
- package/rules/.docs/examples/component/video-player/event-global.vue +89 -0
- package/rules/.docs/examples/component/video-player/event.vue +448 -0
- package/rules/.docs/examples/component/video-player/page.vue +150 -0
- package/rules/.docs/examples/component/video-player/play-mode.vue +220 -0
- package/rules/.docs/examples/component/video-player/play-rate.vue +198 -0
- package/rules/.docs/examples/component/video-player/progress.vue +211 -0
- package/rules/.docs/examples/component/video-player/render.vue +187 -0
- package/rules/.docs/examples/component/video-player/type.vue +133 -0
- package/rules/.docs/examples/component/view/background-img.vue +49 -0
- package/rules/.docs/examples/component/view/background.vue +28 -0
- package/rules/.docs/examples/component/view/basic.vue +28 -0
- package/rules/.docs/examples/component/view/border.vue +72 -0
- package/rules/.docs/examples/component/view/click.vue +66 -0
- package/rules/.docs/examples/component/view/focus-background.vue +60 -0
- package/rules/.docs/examples/component/view/focus.vue +58 -0
- package/rules/.docs/examples/component/view/gradient-background.vue +36 -0
- package/rules/.docs/examples/component/waterfall/basic.vue +167 -0
- package/rules/.docs/examples/component/waterfall/event.vue +154 -0
- package/rules/.docs/examples/component/waterfall/item-add.vue +82 -0
- package/rules/.docs/examples/component/waterfall/item-card-placeholder.vue +67 -0
- package/rules/.docs/examples/component/waterfall/item-card.vue +66 -0
- package/rules/.docs/examples/component/waterfall/item-custom.vue +81 -0
- package/rules/.docs/examples/component/waterfall/item-decoration.vue +63 -0
- package/rules/.docs/examples/component/waterfall/item-delete.vue +90 -0
- package/rules/.docs/examples/component/waterfall/item-get.vue +68 -0
- package/rules/.docs/examples/component/waterfall/item-update.vue +85 -0
- package/rules/.docs/examples/component/waterfall/ref-base.vue +141 -0
- package/rules/.docs/examples/component/waterfall/ref-operations.vue +192 -0
- package/rules/.docs/examples/component/waterfall/section-add.vue +72 -0
- package/rules/.docs/examples/component/waterfall/section-background.vue +94 -0
- package/rules/.docs/examples/component/waterfall/section-blank.vue +62 -0
- package/rules/.docs/examples/component/waterfall/section-card-placeholder.vue +90 -0
- package/rules/.docs/examples/component/waterfall/section-card.vue +83 -0
- package/rules/.docs/examples/component/waterfall/section-custom.vue +68 -0
- package/rules/.docs/examples/component/waterfall/section-decoration.vue +80 -0
- package/rules/.docs/examples/component/waterfall/section-delete.vue +76 -0
- package/rules/.docs/examples/component/waterfall/section-end.vue +91 -0
- package/rules/.docs/examples/component/waterfall/section-get.vue +74 -0
- package/rules/.docs/examples/component/waterfall/section-list.vue +56 -0
- package/rules/.docs/examples/component/waterfall/section-tabs-list.vue +149 -0
- package/rules/.docs/examples/component/waterfall/section-tabs.vue +153 -0
- package/rules/.docs/examples/component/waterfall/section-time.vue +48 -0
- package/rules/.docs/examples/component/waterfall/section-update.vue +118 -0
- package/rules/.docs/examples/component/waterfall/section-vue.vue +81 -0
- package/rules/.docs/examples/component/web-view/basic.vue +54 -0
- package/rules/.docs/examples/component/web-view/js-2-vue.vue +49 -0
- package/rules/.docs/examples/component/web-view/vue-2-js.vue +60 -0
- package/rules/.docs/examples/component/x5-web-view/basic.vue +54 -0
- package/rules/.docs/examples/css/gradient/basic.vue +43 -0
- package/rules/.docs/examples/css/gradient/corner-radii4.vue +86 -0
- package/rules/.docs/examples/css/gradient/corner-radius.vue +86 -0
- package/rules/.docs/examples/css/gradient/orientation.vue +168 -0
- package/rules/.docs/examples/css/gradient/shape.vue +97 -0
- package/rules/.docs/examples/css/gradient/type.vue +83 -0
- package/rules/.docs/examples/guide/router/app.vue +52 -0
- package/rules/.docs/examples/guide/slot/basic.vue +32 -0
- package/rules/.docs/examples/guide/slot/lifecycle.vue +106 -0
- package/rules/.docs/examples/module/action-bar/es-basic.vue +51 -0
- package/rules/.docs/examples/module/action-bar/qt-basic.vue +47 -0
- package/rules/.docs/examples/module/app-list/es-basic.vue +53 -0
- package/rules/.docs/examples/module/app-list/qt-basic.vue +50 -0
- package/rules/.docs/examples/module/audio/es-basic.vue +71 -0
- package/rules/.docs/examples/module/audio/qt-basic.vue +63 -0
- package/rules/.docs/examples/module/brightness/es-basic.vue +118 -0
- package/rules/.docs/examples/module/brightness/qt-basic.vue +115 -0
- package/rules/.docs/examples/module/broadcast/es-basic.vue +340 -0
- package/rules/.docs/examples/module/broadcast/qt-basic.vue +331 -0
- package/rules/.docs/examples/module/content-provider/es-basic.vue +92 -0
- package/rules/.docs/examples/module/content-provider/qt-basic.vue +86 -0
- package/rules/.docs/examples/module/develop/es-basic.vue +45 -0
- package/rules/.docs/examples/module/develop/qt-basic.vue +43 -0
- package/rules/.docs/examples/module/device/es-basic.vue +169 -0
- package/rules/.docs/examples/module/device/qt-basic.vue +166 -0
- package/rules/.docs/examples/module/display/es-basic.vue +45 -0
- package/rules/.docs/examples/module/display/qt-basic.vue +43 -0
- package/rules/.docs/examples/module/download/es-basic.vue +174 -0
- package/rules/.docs/examples/module/download/qt-basic.vue +168 -0
- package/rules/.docs/examples/module/es/es-basic.vue +74 -0
- package/rules/.docs/examples/module/es/qt-basic.vue +74 -0
- package/rules/.docs/examples/module/event-bus/es-emit.vue +31 -0
- package/rules/.docs/examples/module/event-bus/es-off.vue +53 -0
- package/rules/.docs/examples/module/event-bus/es-on.vue +56 -0
- package/rules/.docs/examples/module/event-bus/es-once.vue +47 -0
- package/rules/.docs/examples/module/event-bus/qt-emit.vue +28 -0
- package/rules/.docs/examples/module/event-bus/qt-off.vue +51 -0
- package/rules/.docs/examples/module/event-bus/qt-on.vue +53 -0
- package/rules/.docs/examples/module/event-bus/qt-once.vue +45 -0
- package/rules/.docs/examples/module/file/es-basic.vue +188 -0
- package/rules/.docs/examples/module/iac/es-basic.vue +211 -0
- package/rules/.docs/examples/module/iac/qt-basic.vue +208 -0
- package/rules/.docs/examples/module/key/es-back.vue +32 -0
- package/rules/.docs/examples/module/key/es-dispatch.vue +34 -0
- package/rules/.docs/examples/module/key/es-event.vue +34 -0
- package/rules/.docs/examples/module/local-storage/es-basic.vue +92 -0
- package/rules/.docs/examples/module/local-storage/qt-basic.vue +86 -0
- package/rules/.docs/examples/module/location/es-basic.vue +69 -0
- package/rules/.docs/examples/module/location/qt-basic.vue +67 -0
- package/rules/.docs/examples/module/log/es-basic.vue +45 -0
- package/rules/.docs/examples/module/log/qt-basic.vue +44 -0
- package/rules/.docs/examples/module/network/es-basic.vue +64 -0
- package/rules/.docs/examples/module/network/qt-basic.vue +60 -0
- package/rules/.docs/examples/module/page/es-app-lifecycle.vue +83 -0
- package/rules/.docs/examples/module/page/es-page-lifecycle.vue +80 -0
- package/rules/.docs/examples/module/page/es-page-state.vue +36 -0
- package/rules/.docs/examples/module/permission/es-basic.vue +62 -0
- package/rules/.docs/examples/module/permission/qt-basic.vue +59 -0
- package/rules/.docs/examples/module/plugin/es-basic.vue +71 -0
- package/rules/.docs/examples/module/plugin/qt-basic.vue +69 -0
- package/rules/.docs/examples/module/power/es-basic.vue +45 -0
- package/rules/.docs/examples/module/power/qt-basic.vue +41 -0
- package/rules/.docs/examples/module/runtime/es-basic.vue +42 -0
- package/rules/.docs/examples/module/runtime/qt-basic.vue +40 -0
- package/rules/.docs/examples/module/service/es-basic.vue +34 -0
- package/rules/.docs/examples/module/service/qt-basic.vue +31 -0
- package/rules/.docs/examples/module/share-data/es-basic.vue +266 -0
- package/rules/.docs/examples/module/share-data/qt-basic.vue +259 -0
- package/rules/.docs/examples/module/toast/es-basic.vue +47 -0
- package/rules/.docs/examples/module/toast/qt-basic.vue +44 -0
- package/rules/.docs/examples/module/upload/es-basic.vue +65 -0
- package/rules/.docs/examples/module/upload/qt-basic.vue +63 -0
- package/rules/.docs/examples/module/usb/es-basic.vue +138 -0
- package/rules/.docs/examples/module/usb/qt-basic.vue +135 -0
- package/rules/.docs/examples/module/xlog/es-basic.vue +45 -0
- package/rules/.docs/examples/module/xlog/qt-basic.vue +44 -0
- package/rules/.docs/examples/test/basic.vue +48 -0
- package/rules/.docs/index.md +7 -0
- package/rules/.docs/zh-CN/component/animation/alpha.md +22 -0
- package/rules/.docs/zh-CN/component/animation/animators.md +227 -0
- package/rules/.docs/zh-CN/component/animation/interpolator.md +59 -0
- package/rules/.docs/zh-CN/component/animation/introduction.md +101 -0
- package/rules/.docs/zh-CN/component/animation/listener.md +175 -0
- package/rules/.docs/zh-CN/component/animation/method.md +87 -0
- package/rules/.docs/zh-CN/component/animation/props.md +76 -0
- package/rules/.docs/zh-CN/component/animation/repeat.md +46 -0
- package/rules/.docs/zh-CN/component/animation/rotation-xy.md +17 -0
- package/rules/.docs/zh-CN/component/animation/rotation.md +23 -0
- package/rules/.docs/zh-CN/component/animation/scale.md +24 -0
- package/rules/.docs/zh-CN/component/animation/translation.md +22 -0
- package/rules/.docs/zh-CN/component/app-icon.md +22 -0
- package/rules/.docs/zh-CN/component/aside.md +14 -0
- package/rules/.docs/zh-CN/component/audio-player/basic.md +52 -0
- package/rules/.docs/zh-CN/component/audio-player/installation.md +26 -0
- package/rules/.docs/zh-CN/component/audio-player/introduction.md +12 -0
- package/rules/.docs/zh-CN/component/audio-player/player-manager.md +72 -0
- package/rules/.docs/zh-CN/component/audio-service-player/basic.md +52 -0
- package/rules/.docs/zh-CN/component/audio-service-player/installation.md +26 -0
- package/rules/.docs/zh-CN/component/audio-service-player/introduction.md +13 -0
- package/rules/.docs/zh-CN/component/audio-service-player/player-manager.md +71 -0
- package/rules/.docs/zh-CN/component/button.md +120 -0
- package/rules/.docs/zh-CN/component/card-container.md +24 -0
- package/rules/.docs/zh-CN/component/card.md +17 -0
- package/rules/.docs/zh-CN/component/checkbox-group.md +57 -0
- package/rules/.docs/zh-CN/component/classified-list-view.md +44 -0
- package/rules/.docs/zh-CN/component/collapse.md +45 -0
- package/rules/.docs/zh-CN/component/column.md +26 -0
- package/rules/.docs/zh-CN/component/container.md +81 -0
- package/rules/.docs/zh-CN/component/dialog.md +26 -0
- package/rules/.docs/zh-CN/component/div.md +234 -0
- package/rules/.docs/zh-CN/component/flex-view.md +14 -0
- package/rules/.docs/zh-CN/component/footer.md +14 -0
- package/rules/.docs/zh-CN/component/grid-view.md +221 -0
- package/rules/.docs/zh-CN/component/header.md +15 -0
- package/rules/.docs/zh-CN/component/html/alert.md +14 -0
- package/rules/.docs/zh-CN/component/html/audio.md +37 -0
- package/rules/.docs/zh-CN/component/html/h.md +15 -0
- package/rules/.docs/zh-CN/component/html/installation.md +67 -0
- package/rules/.docs/zh-CN/component/html/introduction.md +10 -0
- package/rules/.docs/zh-CN/component/html/video.md +39 -0
- package/rules/.docs/zh-CN/component/image.md +88 -0
- package/rules/.docs/zh-CN/component/img.md +118 -0
- package/rules/.docs/zh-CN/component/indicator-list-view.md +118 -0
- package/rules/.docs/zh-CN/component/input.md +54 -0
- package/rules/.docs/zh-CN/component/item-store.md +14 -0
- package/rules/.docs/zh-CN/component/item-view.md +14 -0
- package/rules/.docs/zh-CN/component/js-view.md +14 -0
- package/rules/.docs/zh-CN/component/js2vue.md +43 -0
- package/rules/.docs/zh-CN/component/large-list.md +20 -0
- package/rules/.docs/zh-CN/component/li.md +16 -0
- package/rules/.docs/zh-CN/component/list-item.md +34 -0
- package/rules/.docs/zh-CN/component/list-view.md +233 -0
- package/rules/.docs/zh-CN/component/loading.md +22 -0
- package/rules/.docs/zh-CN/component/lottie/assets.md +19 -0
- package/rules/.docs/zh-CN/component/lottie/basic.md +51 -0
- package/rules/.docs/zh-CN/component/lottie/event.md +23 -0
- package/rules/.docs/zh-CN/component/lottie/introduction.md +93 -0
- package/rules/.docs/zh-CN/component/lottie/network.md +12 -0
- package/rules/.docs/zh-CN/component/main.md +14 -0
- package/rules/.docs/zh-CN/component/media-series.md +44 -0
- package/rules/.docs/zh-CN/component/nav-bar.md +51 -0
- package/rules/.docs/zh-CN/component/overview.md +20 -0
- package/rules/.docs/zh-CN/component/p.md +55 -0
- package/rules/.docs/zh-CN/component/play-mark-view.md +25 -0
- package/rules/.docs/zh-CN/component/player/global-event.md +24 -0
- package/rules/.docs/zh-CN/component/player/interceptor.md +48 -0
- package/rules/.docs/zh-CN/component/player/media-player.md +43 -0
- package/rules/.docs/zh-CN/component/player/page-player.md +118 -0
- package/rules/.docs/zh-CN/component/player/player.md +190 -0
- package/rules/.docs/zh-CN/component/player-manager/aspect-ratio.md +51 -0
- package/rules/.docs/zh-CN/component/player-manager/basic.md +69 -0
- package/rules/.docs/zh-CN/component/player-manager/control.md +32 -0
- package/rules/.docs/zh-CN/component/player-manager/custom-control.md +105 -0
- package/rules/.docs/zh-CN/component/player-manager/data-structure.md +29 -0
- package/rules/.docs/zh-CN/component/player-manager/decode.md +46 -0
- package/rules/.docs/zh-CN/component/player-manager/definition.md +85 -0
- package/rules/.docs/zh-CN/component/player-manager/event.md +16 -0
- package/rules/.docs/zh-CN/component/player-manager/global-event.md +304 -0
- package/rules/.docs/zh-CN/component/player-manager/installation.md +33 -0
- package/rules/.docs/zh-CN/component/player-manager/introduction.md +207 -0
- package/rules/.docs/zh-CN/component/player-manager/media-item-interceptor.md +197 -0
- package/rules/.docs/zh-CN/component/player-manager/media-item-list-interceptor.md +189 -0
- package/rules/.docs/zh-CN/component/player-manager/media-item-list.md +31 -0
- package/rules/.docs/zh-CN/component/player-manager/media-source-interceptor.md +166 -0
- package/rules/.docs/zh-CN/component/player-manager/media-source-list-interceptor.md +168 -0
- package/rules/.docs/zh-CN/component/player-manager/mode.md +46 -0
- package/rules/.docs/zh-CN/component/player-manager/multiple-player.md +124 -0
- package/rules/.docs/zh-CN/component/player-manager/player-type.md +38 -0
- package/rules/.docs/zh-CN/component/player-manager/player-view.md +31 -0
- package/rules/.docs/zh-CN/component/player-manager/player.md +73 -0
- package/rules/.docs/zh-CN/component/player-manager/position.md +27 -0
- package/rules/.docs/zh-CN/component/player-manager/rate.md +53 -0
- package/rules/.docs/zh-CN/component/player-manager/size.md +17 -0
- package/rules/.docs/zh-CN/component/player-manager/window.md +65 -0
- package/rules/.docs/zh-CN/component/plugin-view.md +21 -0
- package/rules/.docs/zh-CN/component/poster.md +102 -0
- package/rules/.docs/zh-CN/component/progress-bar.md +347 -0
- package/rules/.docs/zh-CN/component/qr-code.md +23 -0
- package/rules/.docs/zh-CN/component/radio-group.md +57 -0
- package/rules/.docs/zh-CN/component/rating-bar.md +43 -0
- package/rules/.docs/zh-CN/component/replace-child.md +20 -0
- package/rules/.docs/zh-CN/component/ripple-view.md +14 -0
- package/rules/.docs/zh-CN/component/row.md +29 -0
- package/rules/.docs/zh-CN/component/scroll-view.md +21 -0
- package/rules/.docs/zh-CN/component/seek-bar.md +377 -0
- package/rules/.docs/zh-CN/component/surface-view.md +14 -0
- package/rules/.docs/zh-CN/component/swift-list.md +21 -0
- package/rules/.docs/zh-CN/component/swiper-slide.md +18 -0
- package/rules/.docs/zh-CN/component/swiper.md +34 -0
- package/rules/.docs/zh-CN/component/switch.md +37 -0
- package/rules/.docs/zh-CN/component/tabs-view.md +44 -0
- package/rules/.docs/zh-CN/component/tabs.md +286 -0
- package/rules/.docs/zh-CN/component/test.md +58 -0
- package/rules/.docs/zh-CN/component/text.md +115 -0
- package/rules/.docs/zh-CN/component/transition-img.md +22 -0
- package/rules/.docs/zh-CN/component/ul.md +83 -0
- package/rules/.docs/zh-CN/component/video-player/aspect-ratio.md +49 -0
- package/rules/.docs/zh-CN/component/video-player/basic.md +55 -0
- package/rules/.docs/zh-CN/component/video-player/control.md +23 -0
- package/rules/.docs/zh-CN/component/video-player/decode.md +46 -0
- package/rules/.docs/zh-CN/component/video-player/definition.md +85 -0
- package/rules/.docs/zh-CN/component/video-player/event.md +16 -0
- package/rules/.docs/zh-CN/component/video-player/global-event.md +268 -0
- package/rules/.docs/zh-CN/component/video-player/installation.md +33 -0
- package/rules/.docs/zh-CN/component/video-player/introduction.md +18 -0
- package/rules/.docs/zh-CN/component/video-player/mode.md +50 -0
- package/rules/.docs/zh-CN/component/video-player/progress.md +51 -0
- package/rules/.docs/zh-CN/component/video-player/rate.md +53 -0
- package/rules/.docs/zh-CN/component/video-player/render.md +47 -0
- package/rules/.docs/zh-CN/component/video-player/type.md +32 -0
- package/rules/.docs/zh-CN/component/view-pager.md +14 -0
- package/rules/.docs/zh-CN/component/view.md +234 -0
- package/rules/.docs/zh-CN/component/virtual-dom.md +4 -0
- package/rules/.docs/zh-CN/component/virtual.md +8 -0
- package/rules/.docs/zh-CN/component/vue-section.md +29 -0
- package/rules/.docs/zh-CN/component/vue2js.md +47 -0
- package/rules/.docs/zh-CN/component/waterfall.md +447 -0
- package/rules/.docs/zh-CN/component/web-view.md +100 -0
- package/rules/.docs/zh-CN/component/x5web-view.md +100 -0
- package/rules/.docs/zh-CN/cooperation/index.md +6 -0
- package/rules/.docs/zh-CN/css/color/gradient.md +111 -0
- package/rules/.docs/zh-CN/css/color/hsl.md +11 -0
- package/rules/.docs/zh-CN/css/color/name.md +151 -0
- package/rules/.docs/zh-CN/css/color/rgb.md +16 -0
- package/rules/.docs/zh-CN/css/color/transparent.md +9 -0
- package/rules/.docs/zh-CN/css/layout/align-items.md +13 -0
- package/rules/.docs/zh-CN/css/layout/align-self.md +12 -0
- package/rules/.docs/zh-CN/css/layout/background-position-x.md +12 -0
- package/rules/.docs/zh-CN/css/layout/background-position-y.md +12 -0
- package/rules/.docs/zh-CN/css/layout/background-size.md +12 -0
- package/rules/.docs/zh-CN/css/layout/collapsable.md +13 -0
- package/rules/.docs/zh-CN/css/layout/display.md +12 -0
- package/rules/.docs/zh-CN/css/layout/flex-basis.md +12 -0
- package/rules/.docs/zh-CN/css/layout/flex-direction.md +15 -0
- package/rules/.docs/zh-CN/css/layout/flex-grow.md +15 -0
- package/rules/.docs/zh-CN/css/layout/flex-shrink.md +12 -0
- package/rules/.docs/zh-CN/css/layout/flex-wrap.md +12 -0
- package/rules/.docs/zh-CN/css/layout/flex.md +12 -0
- package/rules/.docs/zh-CN/css/layout/height.md +12 -0
- package/rules/.docs/zh-CN/css/layout/justify-content.md +12 -0
- package/rules/.docs/zh-CN/css/layout/left.md +13 -0
- package/rules/.docs/zh-CN/css/layout/line-height.md +12 -0
- package/rules/.docs/zh-CN/css/layout/margin-bottom.md +12 -0
- package/rules/.docs/zh-CN/css/layout/margin-horizontal.md +12 -0
- package/rules/.docs/zh-CN/css/layout/margin-left.md +12 -0
- package/rules/.docs/zh-CN/css/layout/margin-right.md +12 -0
- package/rules/.docs/zh-CN/css/layout/margin-top.md +12 -0
- package/rules/.docs/zh-CN/css/layout/margin-vertical.md +12 -0
- package/rules/.docs/zh-CN/css/layout/margin.md +12 -0
- package/rules/.docs/zh-CN/css/layout/max-height.md +10 -0
- package/rules/.docs/zh-CN/css/layout/max-width.md +10 -0
- package/rules/.docs/zh-CN/css/layout/min-height.md +10 -0
- package/rules/.docs/zh-CN/css/layout/min-width.md +10 -0
- package/rules/.docs/zh-CN/css/layout/overflow.md +12 -0
- package/rules/.docs/zh-CN/css/layout/padding-bottom.md +12 -0
- package/rules/.docs/zh-CN/css/layout/padding-horizontal.md +12 -0
- package/rules/.docs/zh-CN/css/layout/padding-left.md +12 -0
- package/rules/.docs/zh-CN/css/layout/padding-right.md +12 -0
- package/rules/.docs/zh-CN/css/layout/padding-top.md +12 -0
- package/rules/.docs/zh-CN/css/layout/padding-vertical.md +12 -0
- package/rules/.docs/zh-CN/css/layout/padding.md +12 -0
- package/rules/.docs/zh-CN/css/layout/position.md +14 -0
- package/rules/.docs/zh-CN/css/layout/right.md +13 -0
- package/rules/.docs/zh-CN/css/layout/text-align.md +12 -0
- package/rules/.docs/zh-CN/css/layout/top.md +12 -0
- package/rules/.docs/zh-CN/css/layout/width.md +12 -0
- package/rules/.docs/zh-CN/css/layout/z-index.md +12 -0
- package/rules/.docs/zh-CN/css/overview.md +8 -0
- package/rules/.docs/zh-CN/css/style/background-color.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-bottom-color.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-bottom-left-radius.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-bottom-right-radius.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-bottom-width.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-color.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-left-color.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-left-width.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-radius.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-right-color.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-right-width.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-style.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-top-color.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-top-left-radius.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-top-right-radius.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-top-width.md +10 -0
- package/rules/.docs/zh-CN/css/style/border-width.md +10 -0
- package/rules/.docs/zh-CN/css/style/box-shadow.md +10 -0
- package/rules/.docs/zh-CN/css/style/color.md +10 -0
- package/rules/.docs/zh-CN/css/style/font-family.md +10 -0
- package/rules/.docs/zh-CN/css/style/font-size.md +10 -0
- package/rules/.docs/zh-CN/css/style/font-style.md +10 -0
- package/rules/.docs/zh-CN/css/style/font-weight.md +10 -0
- package/rules/.docs/zh-CN/css/style/letter-spacing.md +10 -0
- package/rules/.docs/zh-CN/css/style/opacity.md +10 -0
- package/rules/.docs/zh-CN/css/style/text-decoration-color.md +10 -0
- package/rules/.docs/zh-CN/css/style/text-decoration-line.md +10 -0
- package/rules/.docs/zh-CN/css/style/text-decoration.md +12 -0
- package/rules/.docs/zh-CN/css/style/tint-color.md +10 -0
- package/rules/.docs/zh-CN/css/style/visibility.md +10 -0
- package/rules/.docs/zh-CN/guide/basic/appendix.md +35 -0
- package/rules/.docs/zh-CN/guide/basic/dev-debug.md +94 -0
- package/rules/.docs/zh-CN/guide/basic/dev-tools.md +22 -0
- package/rules/.docs/zh-CN/guide/basic/installation.md +144 -0
- package/rules/.docs/zh-CN/guide/basic/language.md +10 -0
- package/rules/.docs/zh-CN/guide/basic/package-manager.md +8 -0
- package/rules/.docs/zh-CN/guide/basic/quick-start.md +150 -0
- package/rules/.docs/zh-CN/guide/changelog.md +20 -0
- package/rules/.docs/zh-CN/guide/commit-examples.md +90 -0
- package/rules/.docs/zh-CN/guide/compile/obfuscator.md +56 -0
- package/rules/.docs/zh-CN/guide/compile/pack.md +8 -0
- package/rules/.docs/zh-CN/guide/compile/resource.md +96 -0
- package/rules/.docs/zh-CN/guide/compile/split-chunks.md +66 -0
- package/rules/.docs/zh-CN/guide/dark-mode.md +84 -0
- package/rules/.docs/zh-CN/guide/design.md +34 -0
- package/rules/.docs/zh-CN/guide/dev-faq.md +41 -0
- package/rules/.docs/zh-CN/guide/dev-guide.md +55 -0
- package/rules/.docs/zh-CN/guide/device/ch.md +18 -0
- package/rules/.docs/zh-CN/guide/device/haier.md +12 -0
- package/rules/.docs/zh-CN/guide/device/hisense.md +24 -0
- package/rules/.docs/zh-CN/guide/device/huawei.md +16 -0
- package/rules/.docs/zh-CN/guide/device/konka.md +12 -0
- package/rules/.docs/zh-CN/guide/device/le.md +19 -0
- package/rules/.docs/zh-CN/guide/device/skyworth.md +25 -0
- package/rules/.docs/zh-CN/guide/device/tcl.md +21 -0
- package/rules/.docs/zh-CN/guide/device/tencent.md +24 -0
- package/rules/.docs/zh-CN/guide/device/tmall.md +18 -0
- package/rules/.docs/zh-CN/guide/device/xiaomi.md +46 -0
- package/rules/.docs/zh-CN/guide/faq/dev-faq.md +100 -0
- package/rules/.docs/zh-CN/guide/faq/develop-faq.md +39 -0
- package/rules/.docs/zh-CN/guide/faq/launch-params-faq.md +119 -0
- package/rules/.docs/zh-CN/guide/faq/layout-style-faq.md +66 -0
- package/rules/.docs/zh-CN/guide/focus/auto-focus.md +94 -0
- package/rules/.docs/zh-CN/guide/focus/basic.md +133 -0
- package/rules/.docs/zh-CN/guide/focus/debug-tool.md +40 -0
- package/rules/.docs/zh-CN/guide/focus/focus-method.md +317 -0
- package/rules/.docs/zh-CN/guide/focus/list-auto-focus.md +94 -0
- package/rules/.docs/zh-CN/guide/focus/request-focus.md +10 -0
- package/rules/.docs/zh-CN/guide/interaction/click.md +39 -0
- package/rules/.docs/zh-CN/guide/interaction/focus.md +44 -0
- package/rules/.docs/zh-CN/guide/key/back.md +65 -0
- package/rules/.docs/zh-CN/guide/key/dispatch-key-event.md +41 -0
- package/rules/.docs/zh-CN/guide/key/key-event.md +87 -0
- package/rules/.docs/zh-CN/guide/layout/adapter.md +33 -0
- package/rules/.docs/zh-CN/guide/layout/layout.md +42 -0
- package/rules/.docs/zh-CN/guide/layout/style.md +64 -0
- package/rules/.docs/zh-CN/guide/layout/theming.md +154 -0
- package/rules/.docs/zh-CN/guide/migration.md +25 -0
- package/rules/.docs/zh-CN/guide/namespace.md +69 -0
- package/rules/.docs/zh-CN/guide/nav.md +73 -0
- package/rules/.docs/zh-CN/guide/network/axios.md +47 -0
- package/rules/.docs/zh-CN/guide/network/fetch.md +70 -0
- package/rules/.docs/zh-CN/guide/network/websocket.md +107 -0
- package/rules/.docs/zh-CN/guide/node/install.md +179 -0
- package/rules/.docs/zh-CN/guide/npm/install.md +74 -0
- package/rules/.docs/zh-CN/guide/overview.md +41 -0
- package/rules/.docs/zh-CN/guide/page/application-lifecycle.md +37 -0
- package/rules/.docs/zh-CN/guide/page/lifecycle.md +32 -0
- package/rules/.docs/zh-CN/guide/page/page-lifecycle.md +35 -0
- package/rules/.docs/zh-CN/guide/page/page-state.md +31 -0
- package/rules/.docs/zh-CN/guide/page/type.md +49 -0
- package/rules/.docs/zh-CN/guide/publish/hub.md +31 -0
- package/rules/.docs/zh-CN/guide/publish/release-apk.md +51 -0
- package/rules/.docs/zh-CN/guide/publish/release-rpk.md +45 -0
- package/rules/.docs/zh-CN/guide/router/async.md +25 -0
- package/rules/.docs/zh-CN/guide/router/entry.md +60 -0
- package/rules/.docs/zh-CN/guide/router/error.md +25 -0
- package/rules/.docs/zh-CN/guide/router/install.md +70 -0
- package/rules/.docs/zh-CN/guide/router/introduction.md +35 -0
- package/rules/.docs/zh-CN/guide/router/launch.md +88 -0
- package/rules/.docs/zh-CN/guide/router/limit.md +33 -0
- package/rules/.docs/zh-CN/guide/router/native.md +104 -0
- package/rules/.docs/zh-CN/guide/router/result.md +42 -0
- package/rules/.docs/zh-CN/guide/sfc-component/async-component.md +88 -0
- package/rules/.docs/zh-CN/guide/sfc-component/native-component.md +127 -0
- package/rules/.docs/zh-CN/guide/slot/develop.md +42 -0
- package/rules/.docs/zh-CN/guide/slot/install.md +59 -0
- package/rules/.docs/zh-CN/guide/slot/introduction.md +45 -0
- package/rules/.docs/zh-CN/guide/slot/lifecycle.md +18 -0
- package/rules/.docs/zh-CN/guide/slot/project.md +22 -0
- package/rules/.docs/zh-CN/guide/test.md +8 -0
- package/rules/.docs/zh-CN/guide/theming.md +254 -0
- package/rules/.docs/zh-CN/guide/translation.md +39 -0
- package/rules/.docs/zh-CN/index.md +9 -0
- package/rules/.docs/zh-CN/module/action-bar.md +32 -0
- package/rules/.docs/zh-CN/module/app-list.md +57 -0
- package/rules/.docs/zh-CN/module/audio.md +45 -0
- package/rules/.docs/zh-CN/module/brightness.md +33 -0
- package/rules/.docs/zh-CN/module/broadcast.md +77 -0
- package/rules/.docs/zh-CN/module/content-provider.md +64 -0
- package/rules/.docs/zh-CN/module/develop.md +45 -0
- package/rules/.docs/zh-CN/module/device.md +108 -0
- package/rules/.docs/zh-CN/module/display.md +33 -0
- package/rules/.docs/zh-CN/module/download.md +97 -0
- package/rules/.docs/zh-CN/module/es.md +74 -0
- package/rules/.docs/zh-CN/module/event-bus.md +68 -0
- package/rules/.docs/zh-CN/module/file.md +62 -0
- package/rules/.docs/zh-CN/module/iac.md +51 -0
- package/rules/.docs/zh-CN/module/local-storage.md +35 -0
- package/rules/.docs/zh-CN/module/location.md +48 -0
- package/rules/.docs/zh-CN/module/log.md +52 -0
- package/rules/.docs/zh-CN/module/network.md +77 -0
- package/rules/.docs/zh-CN/module/overview.md +10 -0
- package/rules/.docs/zh-CN/module/permission.md +42 -0
- package/rules/.docs/zh-CN/module/plugin.md +38 -0
- package/rules/.docs/zh-CN/module/power.md +51 -0
- package/rules/.docs/zh-CN/module/runtime.md +41 -0
- package/rules/.docs/zh-CN/module/service.md +33 -0
- package/rules/.docs/zh-CN/module/share-data.md +85 -0
- package/rules/.docs/zh-CN/module/toast.md +30 -0
- package/rules/.docs/zh-CN/module/upload.md +53 -0
- package/rules/.docs/zh-CN/module/usb.md +52 -0
- package/rules/.docs/zh-CN/module/xlog.md +48 -0
- package/rules/.docs/zh-CN/resource/runtime.md +88 -0
- package/rules/.docs/zh-CN/resource/test-flight.md +27 -0
- package/rules/.docs/zh-CN/runtime/runtime.md +81 -0
- package/rules/.docs/zh-CN/runtime/test-flight.md +23 -0
- package/rules/.docs/zh-CN/sample/ai-dev.md +250 -0
- package/rules/.docs/zh-CN/sample/api-demo.md +26 -0
- package/rules/.docs/zh-CN/sample/app-list.md +12 -0
- package/rules/.docs/zh-CN/sample/hello-tv.md +98 -0
- package/rules/.docs/zh-CN/sdk/cus_component.md +249 -0
- package/rules/.docs/zh-CN/sdk/cus_module.md +163 -0
- package/rules/.docs/zh-CN/sdk/cus_splash.md +97 -0
- package/rules/.docs/zh-CN/sdk/empty.md +0 -0
- package/rules/.docs/zh-CN/sdk/first_implementation.md +15 -0
- package/rules/.docs/zh-CN/sdk/first_init.md +13 -0
- package/rules/.docs/zh-CN/sdk/first_start_app.md +4 -0
- package/rules/.docs/zh-CN/sdk/light-card.md +116 -0
- package/rules/.docs/zh-CN/sdk/overview.md +5 -0
- package/rules/.docs/zh-CN/tool/api/overview.md +103 -0
- package/rules/.docs/zh-CN/tool/cli/adb.md +32 -0
- package/rules/.docs/zh-CN/tool/cli/build.md +14 -0
- package/rules/.docs/zh-CN/tool/cli/clean.md +12 -0
- package/rules/.docs/zh-CN/tool/cli/config.md +37 -0
- package/rules/.docs/zh-CN/tool/cli/create.md +28 -0
- package/rules/.docs/zh-CN/tool/cli/debug.md +30 -0
- package/rules/.docs/zh-CN/tool/cli/info.md +14 -0
- package/rules/.docs/zh-CN/tool/cli/installation.md +12 -0
- package/rules/.docs/zh-CN/tool/cli/introduction.md +26 -0
- package/rules/.docs/zh-CN/tool/cli/logcat.md +10 -0
- package/rules/.docs/zh-CN/tool/cli/migrate.md +12 -0
- package/rules/.docs/zh-CN/tool/cli/pack.md +14 -0
- package/rules/.docs/zh-CN/tool/cli/preview.md +18 -0
- package/rules/.docs/zh-CN/tool/cli/publish.md +12 -0
- package/rules/.docs/zh-CN/tool/cli/setup.md +58 -0
- package/rules/.docs/zh-CN/tool/cli/start.md +54 -0
- package/rules/.docs/zh-CN/tool/cli/test.md +22 -0
- package/rules/.docs/zh-CN/tool/cli/upgrade.md +12 -0
- package/rules/.github/copilot-instructions.md +456 -0
- package/rules/.windsurfrules +367 -0
- package/rules/AGENTS.md +456 -0
- package/rules/AI_HANDOFF.md +376 -0
- package/rules/CLAUDE.md +836 -0
- package/rules/GEMINI.md +463 -0
package/rules/CLAUDE.md
ADDED
|
@@ -0,0 +1,836 @@
|
|
|
1
|
+
# QuickTVUI - AI 开发指南
|
|
2
|
+
|
|
3
|
+
> 本文件可放入任何 QuickTVUI 项目根目录,AI 工具会自动加载。
|
|
4
|
+
|
|
5
|
+
## 🔴 核心准则:权威来源与严禁幻觉 (CRITICAL)
|
|
6
|
+
|
|
7
|
+
**AI 在生成代码前,必须严格参考以下权威来源,严禁凭空想象任何组件名、属性名或 API。这是所有代码的唯一依据。**
|
|
8
|
+
|
|
9
|
+
1. **本地文档 (PRIMARY)**:项目根目录下的 `.docs/` 文件夹。包含所有组件、CSS、原生模块的详细 MD 文档。**AI 必须在生成代码前使用 `grep_search` 或 `read_file` 检索 `.docs/` 目录中的相关内容。**
|
|
10
|
+
2. **官方文档**:https://quicktvui.com (官网 390+ 篇详细文档)
|
|
11
|
+
3. **核心库示例**:https://github.com/quicktvui/quicktvui.git (Core library + samples)
|
|
12
|
+
4. **跨平台框架示例**:https://github.com/quicktvui/es-vue3.git (Cross-platform framework + samples)
|
|
13
|
+
5. **最佳实践应用**:https://github.com/quicktvui/hellotv.git (Complete video app)
|
|
14
|
+
|
|
15
|
+
**要求:**
|
|
16
|
+
- **检索与能力验证优先**:在实现任何功能(如“视频播放”)前,必须先在 `.docs/` 目录中检索相关文档,验证组件是否支持该功能。切勿想当然!**例如:`qt-web-view` 绝对不支持视频播放,视频播放必须使用框架提供的专用视频组件和管理器(如 `es-video-player` 和 `es-player-manager`)。**
|
|
17
|
+
- **非浏览器与无 HTML 环境**:**本框架绝对不支持标准 HTML 标签(如 `p`, `img`, `a`, `ul`, `li`, `h1` 等),严禁在模板中使用!绝对不支持 `window`、`document` (DOM) 对象或任何 DOM 操作 API。必须使用框架专属标签(如 `qt-text`, `qt-image`)和 Vue `ref`。**
|
|
18
|
+
- **严禁自造标签**:如 `qt-web` 是错的,官方示例中是 `qt-web-view`。
|
|
19
|
+
- **严禁自造 API**:如 `onBack` 是错的,必须是 `onBackPressed`。
|
|
20
|
+
- **参考优先**:遇到不确定的组件用法,必须先在上述仓库中搜索同名组件的实际用法。
|
|
21
|
+
|
|
22
|
+
## 快速创建项目 (Scaffolding)
|
|
23
|
+
|
|
24
|
+
当用户要求创建全新的 QuickTVUI 快应用项目时,AI **必须**严格遵循以下流程(切勿凭空生成目录和文件):
|
|
25
|
+
1. **获取模板**:`git clone https://github.com/quicktvui/quicktvui-template.git <项目名>`
|
|
26
|
+
2. **清理 Git**:`cd <项目名> && rm -rf .git`
|
|
27
|
+
3. **更新配置**:读取 `package.json`,修改 `name` 为目标项目名称,重置 `version` 为 `1.0.0`。
|
|
28
|
+
4. **安装依赖**:`yarn install`(推荐)。
|
|
29
|
+
5. **初始化提示**:提醒用户启动服务前,需确认是否已安装全局 CLI `npm install -g @quicktvui/cli@latest` 并执行了 `qui setup` 配置环境(详见 https://quicktvui.com/zh-CN/guide/basic/quick-start.html)。
|
|
30
|
+
|
|
31
|
+
## 🔥 核心架构避坑指南 (ARCHITECTURAL GOTCHAS)
|
|
32
|
+
|
|
33
|
+
AI 在编写业务逻辑时,极易带入传统 Web 开发习惯导致严重报错,**必须牢记以下框架特性**:
|
|
34
|
+
|
|
35
|
+
1. **视频/音频播放架构**:
|
|
36
|
+
* **绝对禁止**使用 HTML5 `<video>`、`<audio>` 或 `qt-web-view` 播放媒体。
|
|
37
|
+
* **最佳实践**:必须优先使用 **`es-player-manager`**(播放管理器)配合 `es-video-player` 或 `es-audio-player`。`es-player-manager` 负责处理窗口切换(全屏/小窗)、播放列表、焦点逻辑和生命周期,单用底层 player 会导致大量底层逻辑缺失。
|
|
38
|
+
2. **长列表组件 (`qt-list-view`, `qt-grid-view`, `qt-waterfall`)**:
|
|
39
|
+
* 必须设置 `listenBoundEvent="true"` 并监听 `@item-bind`。
|
|
40
|
+
* 列表的加载更多模版 `type` **必须**是 `1002`,底线提示 `type` **必须**是 `1003`。
|
|
41
|
+
3. **零 HTML 与 零 DOM 环境**:
|
|
42
|
+
* **这不是浏览器!** 底层是 Hippy 渲染的 Android Native View。
|
|
43
|
+
* **禁用标签**:`<p>`, `<img>`, `<ul>`, `<li>`, `<a>`, `<h1>`, `<button>` 等标准 HTML 标签**全部禁用**。只允许使用 `div`, `span` 或 `qt-` 开头的专属标签。
|
|
44
|
+
* **禁用 API**:没有 `window`, `document`, `e.preventDefault()`, `alert()`。本地存储必须用 `useESLocalStorage()`,提示必须用 `useESToast()`。
|
|
45
|
+
4. **CSS 严格子集**:
|
|
46
|
+
* 不支持任何 CSS 简写(例如 `margin: 10px` 必崩,必须写 `margin-top: 10px; margin-left: 10px;`)。
|
|
47
|
+
* 不支持 `auto`,不支持 `%`。所有组件**必须显式定义宽高**(`width` / `height` 赋明确的 px 值)。
|
|
48
|
+
|
|
49
|
+
## 框架概述
|
|
50
|
+
|
|
51
|
+
QuickTVUI 是基于 Vue 3 的 Android TV/大屏端 UI 框架。运行在快应用运行环境(Hippy-based)上,Vue 语法开发,渲染为 Android 原生视图。
|
|
52
|
+
|
|
53
|
+
核心特点:
|
|
54
|
+
|
|
55
|
+
- Vue 3 Composition API + TypeScript
|
|
56
|
+
- 面向 TV 遥控器交互(焦点系统是核心,没有鼠标/触摸)
|
|
57
|
+
- CSS 子集支持(非标准 Web CSS,有严格限制)
|
|
58
|
+
- 原生组件桥接(Vue 组件 → Android Native View)
|
|
59
|
+
- 设计分辨率 1920x1080,框架自动适配其他 TV 屏幕尺寸
|
|
60
|
+
|
|
61
|
+
## 示例代码仓库
|
|
62
|
+
|
|
63
|
+
写代码时参考这三个仓库的实际 Vue 代码风格:
|
|
64
|
+
|
|
65
|
+
- https://github.com/quicktvui/quicktvui.git — 核心库 + sample 示例
|
|
66
|
+
- https://github.com/quicktvui/es-vue3.git — 跨平台框架 + sample 示例
|
|
67
|
+
- https://github.com/quicktvui/hellotv.git — 完整视频应用项目(最佳实践)
|
|
68
|
+
|
|
69
|
+
## 在线文档
|
|
70
|
+
|
|
71
|
+
https://quicktvui.com
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## ⚠️ 严禁事项(AI 必读,违反任何一条都会导致运行失败)
|
|
76
|
+
|
|
77
|
+
### 函数命名(框架通过函数名匹配,名字错了就不会被调用)
|
|
78
|
+
|
|
79
|
+
- 返回键处理必须叫 `onBackPressed`,不能叫 `onBack`、`goBack`、`handleBack` 等任何其他名字
|
|
80
|
+
- 按键事件必须叫 `onKeyDown` / `onKeyUp`,不能叫 `handleKeyDown`、`onKeyPress` 等
|
|
81
|
+
- 生命周期必须叫 `onESCreate` / `onESResume` / `onESDestroy` 等,不能改名
|
|
82
|
+
- 这些函数必须在 `setup()` 中定义,并且必须在 `return { }` 中导出,缺一不可
|
|
83
|
+
|
|
84
|
+
### 每个页面必须包含的内容(Checklist)
|
|
85
|
+
|
|
86
|
+
- `onESCreate(params)` — 页面生命周期入口,必须定义并 return
|
|
87
|
+
- `onBackPressed()` — 返回键处理,必须定义并 return(通常调用 `router.back()`)
|
|
88
|
+
- 至少一个元素设置 `:autofocus="true"` — 否则页面打开后没有焦点,遥控器无法操作
|
|
89
|
+
- 页面根元素尺寸 `width: 1920px; height: 1080px`
|
|
90
|
+
|
|
91
|
+
### 组件名称(必须精确匹配,不能用 HTML 标签替代)
|
|
92
|
+
|
|
93
|
+
- 图片组件是 `qt-image`,不是 `qt-img`、`<img>`
|
|
94
|
+
- 文字必须用 `<qt-text>` 或 `<span>`,不能用 `<p>`、`<h1>`~`<h6>`、`<label>` 等 HTML 标签
|
|
95
|
+
- 容器用 `<div>`、`<qt-view>`、`<qt-row>`、`<qt-column>`,不能用 `<section>`、`<main>`、`<article>` 等语义标签
|
|
96
|
+
- 按钮用 `<qt-button>` 或可获焦的 `<div>`,不能用 `<button>`
|
|
97
|
+
|
|
98
|
+
### 强制组件命名规范 (CRITICAL)
|
|
99
|
+
|
|
100
|
+
**严禁凭空想象或使用标准 Web 标签。必须严格遵守以下映射:**
|
|
101
|
+
|
|
102
|
+
| 必须使用的标签 | 严禁使用的标签 (Do NOT use) |
|
|
103
|
+
| -------------- | ---------------------------------- |
|
|
104
|
+
| `<qt-image>` | `<qt-img>`, `<img>` |
|
|
105
|
+
| `<qt-text>` | `<p>`, `<h1>`~`<h6>`, `<label>` |
|
|
106
|
+
| `<qt-button>` | `<button>` |
|
|
107
|
+
| `<div>` | `<section>`, `<main>`, `<article>` |
|
|
108
|
+
| `<span>` | `<p>`, `<label>` |
|
|
109
|
+
|
|
110
|
+
### CSS 规则(这不是标准 Web CSS)
|
|
111
|
+
|
|
112
|
+
**`<style>` 中用 kebab-case(中划线),`<template>` 标签属性用 camelCase(驼峰)。不要搞反。**
|
|
113
|
+
|
|
114
|
+
错误写法——不要在 `<style>` 中用驼峰:
|
|
115
|
+
|
|
116
|
+
```css
|
|
117
|
+
/* 错误!驼峰写法在 <style> 中不生效 */
|
|
118
|
+
.item {
|
|
119
|
+
backgroundcolor: #333;
|
|
120
|
+
fontsize: 28px;
|
|
121
|
+
focusbackgroundcolor: #0066ff;
|
|
122
|
+
borderradius: 10px;
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
正确写法——`<style>` 中所有属性用中划线:
|
|
127
|
+
|
|
128
|
+
```css
|
|
129
|
+
/* 正确——<style> 中一律 kebab-case,包括框架扩展属性 */
|
|
130
|
+
.item {
|
|
131
|
+
background-color: #333;
|
|
132
|
+
font-size: 28px;
|
|
133
|
+
focus-background-color: #0066ff;
|
|
134
|
+
border-radius: 10px;
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
正确写法——`<template>` 标签属性用驼峰:
|
|
139
|
+
|
|
140
|
+
```vue
|
|
141
|
+
<!-- 正确——标签属性用 camelCase -->
|
|
142
|
+
<div :focusable="true" :focusScale="1.1" :enableFocusBorder="true">
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
其他 CSS 规则:
|
|
146
|
+
|
|
147
|
+
- **CRITICAL: NO `auto` sizing**. All elements MUST have explicit `px` values.
|
|
148
|
+
- **CRITICAL: NO `alert()`**. Use `useESToast().showToast()` instead.
|
|
149
|
+
- **CRITICAL: NO `e.preventDefault()`** or `e.stopPropagation()`. These do not exist in the native event system.
|
|
150
|
+
- **CRITICAL: NO `window` or `document` (DOM) objects**. The runtime is not a browser.
|
|
151
|
+
- **CRITICAL: Static styles MUST be in `<style>` (kebab-case), Dynamic styles MUST be in `:style` attributes.**
|
|
152
|
+
- **CRITICAL: NO `-webkit-font-smoothing: antialiased;`**. This is not supported.
|
|
153
|
+
- **CRITICAL: ONLY use `div` and `span` for standard tags.** Do NOT use `p`, `h1-h6`, `section`, etc.
|
|
154
|
+
- **⚠️ 强制要求:默认布局为 `flex-direction: column`**。与 Web 浏览器不同,QuickTVUI 默认就是垂直布局。你几乎不需要写 `display: flex`。
|
|
155
|
+
- 只有本文档"二、样式属性"章节中列出的属性才能使用
|
|
156
|
+
- `display: flex` 和 `flex-direction: column` 是支持的,但它们是默认值,通常不需要写
|
|
157
|
+
- 不要用 `<style scoped>`(在原生渲染中不可靠,直接用 `<style>`)
|
|
158
|
+
- 不支持 `%`、`auto`、`vh`、`vw`、`rem`、`em` 单位,只支持 `px`
|
|
159
|
+
- 不支持 CSS 简写如 `margin: 5px 10px`,必须拆写为 `margin-top: 5px; margin-right: 10px`
|
|
160
|
+
|
|
161
|
+
### clipChildren / clipPadding(TV 开发必设,不设会导致焦点放大被裁切)
|
|
162
|
+
|
|
163
|
+
Android 默认裁切超出父容器边界的子元素。TV 端使用 `focusScale` 放大焦点项时,放大部分会被父容器裁切掉,导致显示异常。
|
|
164
|
+
|
|
165
|
+
**强制规则:**
|
|
166
|
+
- 任何子元素使用了 `focusScale` 的容器,必须设置 `:clipChildren="false"`
|
|
167
|
+
- 列表组件(`qt-list-view`、`qt-waterfall`、`qt-grid-view`)必须同时设置 `:clipChildren="false"` 和 `:clipPadding="false"`
|
|
168
|
+
- 这两个属性写在 `<template>` 中,使用 camelCase
|
|
169
|
+
|
|
170
|
+
```vue
|
|
171
|
+
<!-- 容器内有焦点放大的子元素 -->
|
|
172
|
+
<div :clipChildren="false">
|
|
173
|
+
<div :focusable="true" :focusScale="1.1">...</div>
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
<!-- 列表组件必须同时设置两个 -->
|
|
177
|
+
<qt-list-view :clipChildren="false" :clipPadding="false" />
|
|
178
|
+
<qt-waterfall :clipChildren="false" :clipPadding="false" />
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### import 来源
|
|
182
|
+
|
|
183
|
+
- `defineComponent` 从 `vue` 导入(对),不要从 `@vue/runtime-core` 导入
|
|
184
|
+
- 路由用 `useESRouter`,从 `@extscreen/es3-router` 导入
|
|
185
|
+
- 原生模块从 `@extscreen/es3-core` 导入
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## 一、TV 焦点系统
|
|
190
|
+
|
|
191
|
+
TV 端没有鼠标/触摸,用户通过遥控器方向键移动焦点、确认键点击。每个页面必须有可获焦元素。
|
|
192
|
+
|
|
193
|
+
### 基础属性
|
|
194
|
+
|
|
195
|
+
```vue
|
|
196
|
+
<!-- 可获焦 + 焦点放大 + 焦点边框 -->
|
|
197
|
+
<div :focusable="true" :focusScale="1.1" :enableFocusBorder="true">
|
|
198
|
+
<qt-text text="按钮" :duplicateParentState="true" />
|
|
199
|
+
</div>
|
|
200
|
+
|
|
201
|
+
<!-- 自动获焦(初始化/可见性变化/列表数据重置时触发) -->
|
|
202
|
+
<div :autofocus="true" :focusable="true"></div>
|
|
203
|
+
|
|
204
|
+
<!-- 请求焦点 -->
|
|
205
|
+
<div :requestFocus="true" :focusable="true"></div>
|
|
206
|
+
|
|
207
|
+
<!-- 列表自动聚焦到第5项 -->
|
|
208
|
+
<qt-list-view :autofocusPosition="5"></qt-list-view>
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### 焦点 CSS 扩展属性
|
|
212
|
+
|
|
213
|
+
```css
|
|
214
|
+
.item {
|
|
215
|
+
backgroundcolor: grey;
|
|
216
|
+
focus-background-color: black; /* 焦点态背景色 */
|
|
217
|
+
focus-color: white; /* 焦点态文字色 */
|
|
218
|
+
select-background-color: blue; /* 选中态背景色 */
|
|
219
|
+
select-color: yellow; /* 选中态文字色 */
|
|
220
|
+
enable-focus-border: true; /* 启用焦点边框 */
|
|
221
|
+
focus-border-radius: 5px; /* 焦点边框圆角 */
|
|
222
|
+
focus-border-width: 3px; /* 焦点边框宽度 */
|
|
223
|
+
focus-border-color: red; /* 焦点边框颜色 */
|
|
224
|
+
enable-black-border: true; /* 焦点内部黑色边框 */
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### 焦点方向控制
|
|
229
|
+
|
|
230
|
+
```vue
|
|
231
|
+
<!-- 指定各方向下一个焦点元素 -->
|
|
232
|
+
<div :focusable="true" :nextFocusName="{ down: 'listC', right: 'listB' }" />
|
|
233
|
+
|
|
234
|
+
<!-- 阻止焦点向某方向移动 -->
|
|
235
|
+
<qt-list-view :blockFocusDirections="['left', 'right']" />
|
|
236
|
+
|
|
237
|
+
<!-- 禁用子树焦点(如弹窗时禁用主页面) -->
|
|
238
|
+
<div :descendantFocusability="2"></div>
|
|
239
|
+
|
|
240
|
+
<!-- 根据焦点状态显示/隐藏元素 -->
|
|
241
|
+
<qt-text showOnState="focused" text="焦点时显示" />
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### 焦点 API
|
|
245
|
+
|
|
246
|
+
```javascript
|
|
247
|
+
// 全局默认设置
|
|
248
|
+
Native.callNative("FocusModule", "setDefaultFocusBorderColor", "#ffffff");
|
|
249
|
+
Native.callNative("FocusModule", "setDefaultFocusScale", 1.1);
|
|
250
|
+
Native.callNative("FocusModule", "setDefaultFocusBorderEnable", true);
|
|
251
|
+
Native.callNative("FocusModule", "setDefaultFocusBorderCorner", 5);
|
|
252
|
+
|
|
253
|
+
// 编程式请求焦点
|
|
254
|
+
ESFocusManager.requestFocus(this.$refs.view);
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 二、样式属性(写代码必读)
|
|
260
|
+
|
|
261
|
+
QuickTVUI 的样式是 Web CSS 的子集,默认 Flexbox 布局,默认 flex-direction: column。
|
|
262
|
+
以下是全部支持的属性,不在此列表中的属性均不支持。
|
|
263
|
+
|
|
264
|
+
### 基本规则
|
|
265
|
+
|
|
266
|
+
- 只支持 px 单位(不支持 %、auto、vh/vw/rem/em)
|
|
267
|
+
- 不支持 CSS 简写属性(如 `margin: 5px 10px`,必须拆写)
|
|
268
|
+
- 不支持 CSS 变量 `var(--xxx)`、`!important`
|
|
269
|
+
- 不需要写 `display: flex`(默认就是)
|
|
270
|
+
- 所有元素必须显式指定 width 和 height
|
|
271
|
+
- 文字必须用 `<span>` 或 `<qt-text>` 包裹
|
|
272
|
+
|
|
273
|
+
### 布局与尺寸
|
|
274
|
+
|
|
275
|
+
```
|
|
276
|
+
width, height, left, top
|
|
277
|
+
overflow, direction, z-index, visibility
|
|
278
|
+
opacity, transform
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### 背景
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
background-color, background-image
|
|
285
|
+
background-position-x, background-position-y, background-size
|
|
286
|
+
linear-gradient
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### 边框
|
|
290
|
+
|
|
291
|
+
```
|
|
292
|
+
border-color, border-style, border-width, border-radius
|
|
293
|
+
border-top-color, border-top-style, border-top-width
|
|
294
|
+
border-bottom-color, border-bottom-style, border-bottom-width
|
|
295
|
+
border-left-color, border-left-style, border-left-width
|
|
296
|
+
border-right-color, border-right-style, border-right-width
|
|
297
|
+
border-top-left-radius, border-top-right-radius
|
|
298
|
+
border-bottom-left-radius, border-bottom-right-radius
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### 阴影
|
|
302
|
+
|
|
303
|
+
```
|
|
304
|
+
shadow-color, shadow-offset, shadow-offset-x, shadow-offset-y
|
|
305
|
+
shadow-opacity, shadow-radius
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### 文字
|
|
309
|
+
|
|
310
|
+
```
|
|
311
|
+
color, text, text-align, text-align-vertical
|
|
312
|
+
font-size, font-family, font-style, font-weight, fake-bold
|
|
313
|
+
letter-spacing, line-height, line-spacing-extra, line-spacing-multiplier
|
|
314
|
+
number-of-lines, ellipsize-mode, enable-scale, break-strategy
|
|
315
|
+
text-decoration-color, text-decoration-line, text-decoration-style
|
|
316
|
+
text-shadow-color, text-shadow-offset, text-shadow-radius
|
|
317
|
+
vertical-align
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### 图片
|
|
321
|
+
|
|
322
|
+
```
|
|
323
|
+
src, resize-mode, tint-color, tint-color-blend-mode
|
|
324
|
+
cap-insets, default-source
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### 焦点态样式
|
|
328
|
+
|
|
329
|
+
```
|
|
330
|
+
focus-background-color /* 焦点背景色 */
|
|
331
|
+
focus-color /* 焦点文字色 */
|
|
332
|
+
select-color /* 选中文字色 */
|
|
333
|
+
select-background-color /* 选中背景色 */
|
|
334
|
+
enable-focus-border /* 是否启用焦点边框 */
|
|
335
|
+
focus-border /* 焦点边框 */
|
|
336
|
+
focus-border-width /* 焦点边框宽度 */
|
|
337
|
+
focus-border-color /* 焦点边框颜色 */
|
|
338
|
+
focus-border-color-string /* 焦点边框颜色(字符串) */
|
|
339
|
+
focus-border-style /* 焦点边框样式 */
|
|
340
|
+
focus-border-radius /* 焦点边框圆角 */
|
|
341
|
+
focus-border-top-left-radius /* 焦点边框左上圆角 */
|
|
342
|
+
focus-border-top-right-radius /* 焦点边框右上圆角 */
|
|
343
|
+
focus-border-bottom-right-radius /* 焦点边框右下圆角 */
|
|
344
|
+
focus-border-bottom-left-radius /* 焦点边框左下圆角 */
|
|
345
|
+
focus-border-type /* 焦点边框类型 */
|
|
346
|
+
enable-black-border /* 焦点内部黑色边框 */
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### 输入与其他
|
|
350
|
+
|
|
351
|
+
```
|
|
352
|
+
caret-color /* 光标颜色 */
|
|
353
|
+
placeholderTextColor /* 占位文字颜色 */
|
|
354
|
+
blur /* 模糊效果 */
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### 颜色格式
|
|
358
|
+
|
|
359
|
+
```
|
|
360
|
+
'#f0f' '#ff00ff' '#ff00ff00'(含透明度)
|
|
361
|
+
'rgb(255, 0, 255)' 'rgba(255, 255, 255, 1.0)'
|
|
362
|
+
'hsl(360, 100%, 100%)' 'hsla(360, 100%, 100%, 1.0)'
|
|
363
|
+
'transparent'
|
|
364
|
+
支持 140+ CSS 命名颜色(red, blue, green 等)
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
## 三、页面与路由
|
|
370
|
+
|
|
371
|
+
### 路由配置
|
|
372
|
+
|
|
373
|
+
```typescript
|
|
374
|
+
// routes.ts
|
|
375
|
+
const routes = [
|
|
376
|
+
{ path: '/index', name: 'index', component: index },
|
|
377
|
+
{ path: '/detail', name: 'detail', component: detail },
|
|
378
|
+
{ path: '/error', name: 'error', component: error },
|
|
379
|
+
]
|
|
380
|
+
|
|
381
|
+
// main.ts
|
|
382
|
+
import { createESRouter } from '@extscreen/es3-router'
|
|
383
|
+
const router = createESRouter({ main: 'index', error: 'error', limit: 10, routes })
|
|
384
|
+
const app = createESApp(application, router)
|
|
385
|
+
|
|
386
|
+
// App.vue
|
|
387
|
+
<template>
|
|
388
|
+
<div id="root"><es-router-view /></div>
|
|
389
|
+
</template>
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### 页面跳转
|
|
393
|
+
|
|
394
|
+
```typescript
|
|
395
|
+
const router = useESRouter();
|
|
396
|
+
router.push({ name: "detail", params: { id: "123" } }); // 打开页面
|
|
397
|
+
router.back(); // 关闭页面
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
### 页面生命周期
|
|
401
|
+
|
|
402
|
+
只有在 routes.ts 中声明的组件才是 Page,子组件不能监听生命周期。生命周期方法不能用 `async`。
|
|
403
|
+
|
|
404
|
+
```
|
|
405
|
+
onESCreate(params) → 页面创建,初始化 UI 和资源,params 含启动参数
|
|
406
|
+
onESStart() → 页面可见但无焦点
|
|
407
|
+
onESResume() → 页面可见且有焦点(可交互)
|
|
408
|
+
onESPause() → 页面即将停止
|
|
409
|
+
onESStop() → 页面完全不可见
|
|
410
|
+
onESDestroy() → 页面销毁
|
|
411
|
+
onESRestart() → 页面从停止恢复
|
|
412
|
+
onESNewIntent() → SingleTask 模式下重复打开同一页面
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
### 按键事件
|
|
416
|
+
|
|
417
|
+
```typescript
|
|
418
|
+
// setup() 中定义,必须在 return 中导出
|
|
419
|
+
function onKeyDown(keyEvent: ESKeyEvent) {
|
|
420
|
+
// keyEvent.keyCode, keyEvent.action, keyEvent.keyRepeat
|
|
421
|
+
}
|
|
422
|
+
function onKeyUp(keyEvent: ESKeyEvent) {}
|
|
423
|
+
function onBackPressed() {
|
|
424
|
+
router.back();
|
|
425
|
+
}
|
|
426
|
+
return { onKeyDown, onKeyUp, onBackPressed };
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
常用键值:
|
|
430
|
+
|
|
431
|
+
- `ES_KEYCODE_DPAD_UP(19)` / `DOWN(20)` / `LEFT(21)` / `RIGHT(22)` — 方向键
|
|
432
|
+
- `ES_KEYCODE_DPAD_CENTER(23)` / `ES_KEYCODE_ENTER(66)` — 确认键
|
|
433
|
+
- `ES_KEYCODE_BACK(4)` — 返回键
|
|
434
|
+
- `ES_KEYCODE_MENU(82)` — 菜单键
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## 四、常用组件 API
|
|
439
|
+
|
|
440
|
+
### qt-button
|
|
441
|
+
|
|
442
|
+
```vue
|
|
443
|
+
<qt-button
|
|
444
|
+
text="确定"
|
|
445
|
+
:focusable="true"
|
|
446
|
+
:focusScale="1.08"
|
|
447
|
+
size="default"
|
|
448
|
+
@focus="onFocus"
|
|
449
|
+
@click="onClick"
|
|
450
|
+
/>
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
454
|
+
| ------------------ | ---------- | ------- | ------------------------------- |
|
|
455
|
+
| text | string | - | 按钮文本 |
|
|
456
|
+
| size | enum | default | default/large/medium/small/mini |
|
|
457
|
+
| focusable | boolean | true | 是否可获焦 |
|
|
458
|
+
| focusScale | number | 1.08 | 焦点放大倍数 |
|
|
459
|
+
| focusBorder | boolean | false | 焦点边框 |
|
|
460
|
+
| disabled | boolean | false | 禁用 |
|
|
461
|
+
| round | boolean | false | 圆角 |
|
|
462
|
+
| icon / focusIcon | string | - | 标准/焦点图标 |
|
|
463
|
+
| gradientBackground | QTGradient | - | 渐变背景 |
|
|
464
|
+
|
|
465
|
+
Events: `focus(isFocused: boolean)`, `click()`
|
|
466
|
+
|
|
467
|
+
### qt-text
|
|
468
|
+
|
|
469
|
+
```vue
|
|
470
|
+
<qt-text
|
|
471
|
+
text="标题"
|
|
472
|
+
:fontSize="28"
|
|
473
|
+
textColor="#ffffff"
|
|
474
|
+
:focusable="false"
|
|
475
|
+
:duplicateParentState="true"
|
|
476
|
+
gravity="center"
|
|
477
|
+
/>
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
| 属性 | 类型 | 说明 |
|
|
481
|
+
| ------------------------------------ | ------- | ------------------------------ |
|
|
482
|
+
| text | string | 文字内容 |
|
|
483
|
+
| fontSize / textSize | number | 字体大小 |
|
|
484
|
+
| textColor / focusColor / selectColor | string | 标准/焦点/选中文字颜色 |
|
|
485
|
+
| gravity | enum | 重心(center等) |
|
|
486
|
+
| lines / maxLines | number | 行数/最大行数 |
|
|
487
|
+
| ellipsizeMode | number | 省略模式 |
|
|
488
|
+
| lineSpacing / lineHeight | number | 行间距/行高 |
|
|
489
|
+
| autoWidth / autoHeight | boolean | 宽度/高度自适应 |
|
|
490
|
+
| duplicateParentState | boolean | 继承父类状态 |
|
|
491
|
+
| showOnState | enum | normal/focused/selected 时显示 |
|
|
492
|
+
|
|
493
|
+
Exposes: `setText(text)`, `setTextSize(size)`, `setTextColor(color)`
|
|
494
|
+
|
|
495
|
+
### qt-image
|
|
496
|
+
|
|
497
|
+
```vue
|
|
498
|
+
<qt-image
|
|
499
|
+
src="https://example.com/img.png"
|
|
500
|
+
:focusable="false"
|
|
501
|
+
:enableFade="true"
|
|
502
|
+
:fadeDuration="200"
|
|
503
|
+
/>
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
| 属性 | 类型 | 说明 |
|
|
507
|
+
| -------------------- | ------- | ------------ |
|
|
508
|
+
| src | string | 图片地址 |
|
|
509
|
+
| focusable | boolean | 是否可获焦 |
|
|
510
|
+
| focusScale | number | 焦点放大倍数 |
|
|
511
|
+
| enableFocusBorder | boolean | 焦点边框 |
|
|
512
|
+
| duplicateParentState | boolean | 继承父类状态 |
|
|
513
|
+
| enableFade | boolean | 淡入效果 |
|
|
514
|
+
| fadeDuration | number | 淡入时间(ms) |
|
|
515
|
+
| postDelay | number | 延迟加载(ms) |
|
|
516
|
+
| resizeMode | string | 缩放模式 |
|
|
517
|
+
|
|
518
|
+
Events: `load()`, `loadStart()`, `loadEnd(success, image)`, `error()`
|
|
519
|
+
|
|
520
|
+
### qt-input
|
|
521
|
+
|
|
522
|
+
```vue
|
|
523
|
+
<qt-input
|
|
524
|
+
hintText="请输入"
|
|
525
|
+
:textSize="22"
|
|
526
|
+
textColor="#ffffff"
|
|
527
|
+
:strokeWidth="1"
|
|
528
|
+
strokeColor="#979797"
|
|
529
|
+
:strokeRadius="16"
|
|
530
|
+
@onTextChange="onTextChange"
|
|
531
|
+
@onFocusChanged="onFocusChanged"
|
|
532
|
+
/>
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
536
|
+
| ------------------------------ | ------- | --------------- | ----------------- |
|
|
537
|
+
| text | string | - | 文字内容 |
|
|
538
|
+
| size | enum | small | 输入框尺寸 |
|
|
539
|
+
| hintText | string | 请输入 | 提示文字 |
|
|
540
|
+
| hintColor | string | #A8A8A8 | 提示文字颜色 |
|
|
541
|
+
| textColor | string | #ffffff | 输入文字颜色 |
|
|
542
|
+
| textSize | number | 22 | 文字大小 |
|
|
543
|
+
| strokeWidth / focusStrokeWidth | number | 1/3 | 边框/焦点边框宽度 |
|
|
544
|
+
| strokeColor / focusStrokeColor | string | #979797/#ffffff | 边框/焦点边框颜色 |
|
|
545
|
+
| strokeRadius | number | 16 | 边框圆角 |
|
|
546
|
+
| disable | boolean | false | 禁用 |
|
|
547
|
+
| mutiline | boolean | false | 多行输入 |
|
|
548
|
+
| maxlength | number | - | 最大字符数 |
|
|
549
|
+
|
|
550
|
+
Events: `onFocusChanged`, `onTextChange`
|
|
551
|
+
|
|
552
|
+
### qt-waterfall(瀑布流列表)
|
|
553
|
+
|
|
554
|
+
```vue
|
|
555
|
+
<qt-waterfall
|
|
556
|
+
ref="waterfallRef"
|
|
557
|
+
:focusable="false"
|
|
558
|
+
:blockFocusDirections="['left', 'right']"
|
|
559
|
+
@onItemClick="onItemClick"
|
|
560
|
+
@onItemFocused="onItemFocused"
|
|
561
|
+
@onScroll="onScroll"
|
|
562
|
+
/>
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
核心属性:enablePlaceholder, blockFocusDirections, autofocusPosition, focusMemory, useDiff, listenBoundEvent, makeChildVisibleType, scrollFactor, infiniteMode
|
|
566
|
+
|
|
567
|
+
Events:
|
|
568
|
+
|
|
569
|
+
- `onScroll(scrollX, scrollY)` — 滚动
|
|
570
|
+
- `onItemClick(sectionIndex, itemIndex, item)` — 点击
|
|
571
|
+
- `onItemFocused(sectionIndex, itemIndex, isFocused, item)` — 焦点变化
|
|
572
|
+
- `onSectionBind(pageIndex, sectionIndex)` — 板块绑定
|
|
573
|
+
|
|
574
|
+
### 其他常用组件
|
|
575
|
+
|
|
576
|
+
| 组件 | 用途 | 关键属性 |
|
|
577
|
+
| --------------- | ------------ | ---------------------------------------------------- |
|
|
578
|
+
| qt-card | 卡片 | load(cardId, useCache), reload(), requestCardFocus() |
|
|
579
|
+
| qt-tabs | 标签页 | defaultIndex, defaultFocusIndex, itemList |
|
|
580
|
+
| qt-seek-bar | 进度条/滑块 | progress, range, seekBarMode, thumbWidth |
|
|
581
|
+
| qt-dialog | 弹窗 | 全局弹窗 / 路由弹窗两种模式 |
|
|
582
|
+
| qt-list-view | 列表 | autofocusPosition, blockFocusDirections |
|
|
583
|
+
| qt-grid-view | 网格 | autofocusPosition |
|
|
584
|
+
| qt-scroll-view | 滚动容器 | - |
|
|
585
|
+
| qt-row | 横向flex容器 | 等同 flex-direction: row |
|
|
586
|
+
| qt-column | 纵向flex容器 | 等同 flex-direction: column |
|
|
587
|
+
| qt-view | 通用容器 | 等同 div |
|
|
588
|
+
| qt-loading | 加载中 | - |
|
|
589
|
+
| qt-progress-bar | 进度条 | - |
|
|
590
|
+
| qt-poster | 海报图 | - |
|
|
591
|
+
| qt-collapse | 折叠面板 | - |
|
|
592
|
+
| qt-nav-bar | 导航栏 | - |
|
|
593
|
+
| qt-web-view | 网页容器 | - |
|
|
594
|
+
| qt-animation | 动画 | alpha/rotation/scale/translation |
|
|
595
|
+
|
|
596
|
+
> 完整组件 API 详见 https://quicktvui.com
|
|
597
|
+
|
|
598
|
+
---
|
|
599
|
+
|
|
600
|
+
## 五、原生模块 API
|
|
601
|
+
|
|
602
|
+
通过全局 `qt` 对象或直接 import 使用。
|
|
603
|
+
|
|
604
|
+
### 本地存储
|
|
605
|
+
|
|
606
|
+
```typescript
|
|
607
|
+
import { useESLocalStorage } from "@extscreen/es3-core";
|
|
608
|
+
const storage = useESLocalStorage();
|
|
609
|
+
await storage.putString("key", "value");
|
|
610
|
+
const val = await storage.getString("key", "default");
|
|
611
|
+
// 同理: putInt/getInt, putBoolean/getBoolean, putLong/getLong
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
### Toast
|
|
615
|
+
|
|
616
|
+
```typescript
|
|
617
|
+
import { useESToast } from "@extscreen/es3-core";
|
|
618
|
+
const toast = useESToast();
|
|
619
|
+
toast.showToast("提示信息");
|
|
620
|
+
toast.showLongToast("长提示");
|
|
621
|
+
toast.showShortToast("短提示");
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
### 设备信息
|
|
625
|
+
|
|
626
|
+
```typescript
|
|
627
|
+
import { useESDevice } from "@extscreen/es3-core";
|
|
628
|
+
const device = useESDevice();
|
|
629
|
+
device.getScreenWidth(); // 屏幕宽度
|
|
630
|
+
device.getScreenHeight(); // 屏幕高度
|
|
631
|
+
device.getIPAddress(); // IP 地址
|
|
632
|
+
device.getDevice(); // 完整设备信息对象
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
### 网络
|
|
636
|
+
|
|
637
|
+
```typescript
|
|
638
|
+
import { useESNetwork } from "@extscreen/es3-core";
|
|
639
|
+
const network = useESNetwork();
|
|
640
|
+
network.isNetworkConnected(); // 是否联网
|
|
641
|
+
network.getActiveNetworkInfo(); // 网络信息
|
|
642
|
+
network.addListener(listener); // 监听网络变化
|
|
643
|
+
// 网络类型: NONE(-1), MOBILE(0), WIFI(1), ETHERNET(9)
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
### 音频控制
|
|
647
|
+
|
|
648
|
+
```typescript
|
|
649
|
+
import { useESAudio } from "@extscreen/es3-core";
|
|
650
|
+
const audio = useESAudio();
|
|
651
|
+
audio.getStreamMusicVolume(); // 当前音量
|
|
652
|
+
audio.getStreamMusicMaxVolume(); // 最大音量
|
|
653
|
+
audio.setStreamVolume(streamType, volume, flags);
|
|
654
|
+
audio.setStreamMute(streamType, true);
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
### 事件总线
|
|
658
|
+
|
|
659
|
+
```typescript
|
|
660
|
+
import { useESEventBus } from "@extscreen/es3-core";
|
|
661
|
+
const eventBus = useESEventBus();
|
|
662
|
+
eventBus.on("eventName", callback); // 监听
|
|
663
|
+
eventBus.once("eventName", callback); // 一次性监听
|
|
664
|
+
eventBus.emit("eventName", ...args); // 发送
|
|
665
|
+
eventBus.off("eventName", callback); // 取消监听
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
### 亮度控制
|
|
669
|
+
|
|
670
|
+
```typescript
|
|
671
|
+
import { useESBrightness } from "@extscreen/es3-core";
|
|
672
|
+
const brightness = useESBrightness();
|
|
673
|
+
brightness.getScreenBrightness();
|
|
674
|
+
brightness.changeScreenBrightness(value);
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
---
|
|
678
|
+
|
|
679
|
+
## 六、渐变背景(QTGradient)
|
|
680
|
+
|
|
681
|
+
```typescript
|
|
682
|
+
// 线性渐变示例
|
|
683
|
+
const gradient: QTGradient = {
|
|
684
|
+
colors: ["#FF0000", "#0000FF"],
|
|
685
|
+
orientation: 6, // LEFT_RIGHT
|
|
686
|
+
cornerRadius: 8,
|
|
687
|
+
};
|
|
688
|
+
// orientation: 0=TOP_BOTTOM, 4=BOTTOM_TOP, 6=LEFT_RIGHT, 2=RIGHT_LEFT
|
|
689
|
+
// 使用时 background-color 必须设为 transparent
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
---
|
|
693
|
+
|
|
694
|
+
## 七、代码模板
|
|
695
|
+
|
|
696
|
+
### 最小 TV 页面
|
|
697
|
+
|
|
698
|
+
```vue
|
|
699
|
+
<template>
|
|
700
|
+
<div class="page">
|
|
701
|
+
<div
|
|
702
|
+
class="item"
|
|
703
|
+
:focusable="true"
|
|
704
|
+
:focusScale="1.1"
|
|
705
|
+
:enableFocusBorder="true"
|
|
706
|
+
:autofocus="true"
|
|
707
|
+
@click="onClick"
|
|
708
|
+
>
|
|
709
|
+
<qt-text text="Hello TV" :duplicateParentState="true" class="text" />
|
|
710
|
+
</div>
|
|
711
|
+
</div>
|
|
712
|
+
</template>
|
|
713
|
+
|
|
714
|
+
<script lang="ts">
|
|
715
|
+
import { defineComponent } from "vue";
|
|
716
|
+
import { useESRouter } from "@extscreen/es3-router";
|
|
717
|
+
|
|
718
|
+
export default defineComponent({
|
|
719
|
+
setup() {
|
|
720
|
+
const router = useESRouter();
|
|
721
|
+
|
|
722
|
+
function onESCreate(params) {
|
|
723
|
+
// 页面初始化
|
|
724
|
+
}
|
|
725
|
+
function onClick() {}
|
|
726
|
+
function onBackPressed() {
|
|
727
|
+
router.back();
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
return { onESCreate, onClick, onBackPressed };
|
|
731
|
+
},
|
|
732
|
+
});
|
|
733
|
+
</script>
|
|
734
|
+
|
|
735
|
+
<style>
|
|
736
|
+
.page {
|
|
737
|
+
width: 1920px;
|
|
738
|
+
height: 1080px;
|
|
739
|
+
background-color: #000000;
|
|
740
|
+
}
|
|
741
|
+
.item {
|
|
742
|
+
width: 300px;
|
|
743
|
+
height: 100px;
|
|
744
|
+
background-color: #333333;
|
|
745
|
+
focus-background-color: #0066ff;
|
|
746
|
+
}
|
|
747
|
+
.text {
|
|
748
|
+
width: 300px;
|
|
749
|
+
height: 100px;
|
|
750
|
+
font-size: 28px;
|
|
751
|
+
color: #ffffff;
|
|
752
|
+
}
|
|
753
|
+
</style>
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
### 详情页模板(带参数接收 + 返回键处理)
|
|
757
|
+
|
|
758
|
+
```vue
|
|
759
|
+
<template>
|
|
760
|
+
<div class="detail-page">
|
|
761
|
+
<qt-text class="detail-title" :text="title" gravity="center" />
|
|
762
|
+
<div
|
|
763
|
+
class="detail-back-btn"
|
|
764
|
+
:focusable="true"
|
|
765
|
+
:focusScale="1.1"
|
|
766
|
+
:enableFocusBorder="true"
|
|
767
|
+
:autofocus="true"
|
|
768
|
+
@click="onBackPressed"
|
|
769
|
+
>
|
|
770
|
+
<qt-text
|
|
771
|
+
text="返回"
|
|
772
|
+
:duplicateParentState="true"
|
|
773
|
+
class="detail-back-text"
|
|
774
|
+
gravity="center"
|
|
775
|
+
/>
|
|
776
|
+
</div>
|
|
777
|
+
</div>
|
|
778
|
+
</template>
|
|
779
|
+
|
|
780
|
+
<script lang="ts">
|
|
781
|
+
import { defineComponent, ref } from "vue";
|
|
782
|
+
import { useESRouter } from "@extscreen/es3-router";
|
|
783
|
+
|
|
784
|
+
export default defineComponent({
|
|
785
|
+
setup() {
|
|
786
|
+
const router = useESRouter();
|
|
787
|
+
const title = ref("详情页");
|
|
788
|
+
|
|
789
|
+
function onESCreate(params) {
|
|
790
|
+
// 接收路由参数
|
|
791
|
+
if (params && params.title) {
|
|
792
|
+
title.value = params.title;
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
function onBackPressed() {
|
|
797
|
+
router.back();
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
return { title, onESCreate, onBackPressed };
|
|
801
|
+
},
|
|
802
|
+
});
|
|
803
|
+
</script>
|
|
804
|
+
|
|
805
|
+
<style>
|
|
806
|
+
.detail-page {
|
|
807
|
+
width: 1920px;
|
|
808
|
+
height: 1080px;
|
|
809
|
+
background-color: #1a1a1a;
|
|
810
|
+
align-items: center;
|
|
811
|
+
justify-content: center;
|
|
812
|
+
}
|
|
813
|
+
.detail-title {
|
|
814
|
+
width: 600px;
|
|
815
|
+
height: 80px;
|
|
816
|
+
font-size: 48px;
|
|
817
|
+
color: #ffffff;
|
|
818
|
+
margin-bottom: 40px;
|
|
819
|
+
}
|
|
820
|
+
.detail-back-btn {
|
|
821
|
+
width: 240px;
|
|
822
|
+
height: 70px;
|
|
823
|
+
background-color: #333333;
|
|
824
|
+
focus-background-color: #0066ff;
|
|
825
|
+
border-radius: 35px;
|
|
826
|
+
align-items: center;
|
|
827
|
+
justify-content: center;
|
|
828
|
+
}
|
|
829
|
+
.detail-back-text {
|
|
830
|
+
width: 240px;
|
|
831
|
+
height: 70px;
|
|
832
|
+
font-size: 26px;
|
|
833
|
+
color: #ffffff;
|
|
834
|
+
}
|
|
835
|
+
</style>
|
|
836
|
+
```
|