From ae544bf2484cc707b2d04618da91519983688e71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=B6=E7=9D=BF?= Date: Fri, 18 Mar 2022 06:09:11 +0000 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E9=80=80=20'Pull=20Request=20!2140=20?= =?UTF-8?q?:=20update=20docs'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic-resource-file-categories.md | 79 - .../figures/en-us_image_0000001164217678.png | Bin 0 -> 14603 bytes .../reference/arkui-ts/Readme-CN.md | 132 - .../reference/arkui-ts/Readme-EN.md | 136 + ...en-us_image_0000001211898504.png => 1.png} | Bin ...us_image_0000001257058401.png => 1111.png} | Bin ...image_0000001211898482.png => 11111-5.png} | Bin ...s_image_0000001212058500.png => 11111.png} | Bin ...us_image_0000001257058393.png => 2-01.png} | Bin ...-us_image_0000001212218464.gif => 222.gif} | Bin ...us_image_0000001212218448.png => 2222.png} | Bin ...en-us_image_0000001212058456.gif => 5.gif} | Bin ...s_image_0000001256978359.gif => 66666.gif} | Bin ...e_0000001256978387.gif => alertdialog.gif} | Bin ...00001212378392.gif => alphabetindexer.gif} | Bin ...age_0000001256978345.gif => animateto.gif} | Bin ..._image_0000001211898468.gif => appear.gif} | Bin ...0000001212378444.gif => attranimation.gif} | Bin ...us_image_0000001211898502.png => back.png} | Bin ...s_image_0000001212218470.gif => badge.gif} | Bin ..._image_0000001256858407.gif => blank1.gif} | Bin ..._image_0000001212378418.gif => blank2.gif} | Bin ..._image_0000001211898466.gif => border.gif} | Bin ..._image_0000001257138341.gif => button.gif} | Bin ..._image_0000001256978353.png => circle.png} | Bin ...us_image_0000001212218452.png => clip.png} | Bin ...0000001212218484.png => colorgradient.png} | Bin .../reference/arkui-ts/figures/column.gif | Bin 0 -> 8858 bytes ...e_0000001212378422.gif => columnsplit.gif} | Bin ...image_0000001212378424.gif => counter.gif} | Bin ..._0000001212058470.gif => customdialog.gif} | Bin ...age_0000001211898476.jpg => datapanel.jpg} | Bin ...212378416.png => device-width-type-lg.png} | Bin ...257058415.png => device-width-type-md.png} | Bin ...256858405.png => device-width-type-sm.png} | Bin ...2058504.gif => displaypriorityexample.gif} | Bin ..._image_0000001212058484.gif => duande.gif} | Bin ...image_0000001212058488.png => ellipse.png} | Bin .../figures/en-us_image_0000001192595194.png | Bin 0 -> 38133 bytes ...6.png => en-us_image_0000001192595214.png} | Bin ...0.png => en-us_image_0000001192595216.png} | Bin ...1.png => en-us_image_0000001192595220.png} | Bin ...7.png => en-us_image_0000001192595224.png} | Bin ...4.png => en-us_image_0000001192595226.png} | Bin ...8.png => en-us_image_0000001192595228.png} | Bin ...8.png => en-us_image_0000001192595230.png} | Bin ...6.png => en-us_image_0000001192595232.png} | Bin ...1.png => en-us_image_0000001192595234.png} | Bin ...8.png => en-us_image_0000001192595238.png} | Bin ...0.png => en-us_image_0000001192755172.png} | Bin ...5.png => en-us_image_0000001192755174.png} | Bin ...6.png => en-us_image_0000001192755178.png} | Bin ...6.png => en-us_image_0000001192755180.png} | Bin ...4.png => en-us_image_0000001192755182.png} | Bin ...0.png => en-us_image_0000001192755188.png} | Bin ...8.png => en-us_image_0000001192755194.png} | Bin ...2.png => en-us_image_0000001192915130.png} | Bin ...6.png => en-us_image_0000001192915154.png} | Bin ...5.png => en-us_image_0000001192915158.png} | Bin ...4.png => en-us_image_0000001192915162.png} | Bin .../figures/en-us_image_0000001192915178.gif | Bin 0 -> 48849 bytes ...7.png => en-us_image_0000001192915180.png} | Bin ...3.png => en-us_image_0000001192915184.png} | Bin ...1.gif => en-us_image_0000001193075122.gif} | Bin ...6.png => en-us_image_0000001193075134.png} | Bin ...1.png => en-us_image_0000001193075154.png} | Bin ...8.png => en-us_image_0000001193075164.png} | Bin ...9.png => en-us_image_0000001193075166.png} | Bin ...6.png => en-us_image_0000001193075168.png} | Bin ...6.png => en-us_image_0000001193075170.png} | Bin ...1.png => en-us_image_0000001193075172.png} | Bin ...2.png => en-us_image_0000001193075178.png} | Bin ...2.png => en-us_image_0000001193075180.png} | Bin ...1.png => en-us_image_0000001193321136.png} | Bin ...1.png => en-us_image_0000001193321138.png} | Bin ...0.png => en-us_image_0000001193322850.png} | Bin ...5.png => en-us_image_0000001193322872.png} | Bin ...2.png => en-us_image_0000001193322910.png} | Bin ...3.png => en-us_image_0000001193436448.png} | Bin ...4.png => en-us_image_0000001193481094.png} | Bin ...3.png => en-us_image_0000001193481096.png} | Bin ...3.png => en-us_image_0000001193481098.png} | Bin ...9.png => en-us_image_0000001193482814.png} | Bin ...9.png => en-us_image_0000001193482866.png} | Bin ...7.png => en-us_image_0000001193641084.png} | Bin ...7.png => en-us_image_0000001193641086.png} | Bin ...7.png => en-us_image_0000001193642802.png} | Bin ...0.png => en-us_image_0000001193642848.png} | Bin ...0.png => en-us_image_0000001193737314.png} | Bin ...6.png => en-us_image_0000001193756416.png} | Bin ...0.png => en-us_image_0000001193801070.png} | Bin ...3.png => en-us_image_0000001193801072.png} | Bin ...8.png => en-us_image_0000001193802788.png} | Bin ...3.png => en-us_image_0000001193802836.png} | Bin ...4.png => en-us_image_0000001194605518.png} | Bin ...2.png => en-us_image_0000001194911566.png} | Bin ...7.gif => en-us_image_0000001194942468.gif} | Bin .../figures/en-us_image_0000001196780640.png | Bin 0 -> 13293 bytes ...8.gif => en-us_image_0000001201475612.gif} | Bin .../figures/en-us_image_0000001211898486.gif | Bin 192891 -> 0 bytes .../figures/en-us_image_0000001211898512.gif | Bin 31747 -> 0 bytes .../figures/en-us_image_0000001212058464.gif | Bin 35360 -> 0 bytes .../figures/en-us_image_0000001212058468.png | Bin 14656 -> 0 bytes .../figures/en-us_image_0000001212058476.png | Bin 13960 -> 0 bytes .../figures/en-us_image_0000001212218450.gif | Bin 164517 -> 0 bytes .../figures/en-us_image_0000001212378432.gif | Bin 13546 -> 0 bytes .../figures/en-us_image_0000001237355087.gif | Bin 0 -> 87346 bytes ...5.png => en-us_image_0000001237355121.png} | Bin ...9.png => en-us_image_0000001237355131.png} | Bin ...2.png => en-us_image_0000001237355133.png} | Bin ...6.png => en-us_image_0000001237355135.png} | Bin ...4.png => en-us_image_0000001237355137.png} | Bin .../figures/en-us_image_0000001237475107.gif | Bin 0 -> 4617 bytes ...9.png => en-us_image_0000001237475113.png} | Bin ...5.png => en-us_image_0000001237475123.png} | Bin ...7.png => en-us_image_0000001237475133.png} | Bin ...7.png => en-us_image_0000001237475137.png} | Bin ...0.png => en-us_image_0000001237475139.png} | Bin ...1.png => en-us_image_0000001237555149.png} | Bin ...2.png => en-us_image_0000001237555151.png} | Bin ...2.png => en-us_image_0000001237555155.png} | Bin ...0.png => en-us_image_0000001237555163.png} | Bin ...9.png => en-us_image_0000001237555165.png} | Bin ...3.png => en-us_image_0000001237555167.png} | Bin ...5.png => en-us_image_0000001237555173.png} | Bin ...5.png => en-us_image_0000001237555179.png} | Bin ...0.png => en-us_image_0000001237555181.png} | Bin ...9.png => en-us_image_0000001237715141.png} | Bin ...9.png => en-us_image_0000001237715149.png} | Bin ...1.png => en-us_image_0000001237715151.png} | Bin ...2.png => en-us_image_0000001237715153.png} | Bin ...1.png => en-us_image_0000001237715155.png} | Bin ...8.png => en-us_image_0000001237715159.png} | Bin ...6.png => en-us_image_0000001237715165.png} | Bin ...9.png => en-us_image_0000001238281067.png} | Bin ...8.png => en-us_image_0000001238281069.png} | Bin ...9.png => en-us_image_0000001238282783.png} | Bin ...6.png => en-us_image_0000001238282827.png} | Bin ...0.png => en-us_image_0000001238401029.png} | Bin ...1.png => en-us_image_0000001238401031.png} | Bin ...9.png => en-us_image_0000001238402745.png} | Bin ...4.png => en-us_image_0000001238402777.png} | Bin ...9.png => en-us_image_0000001238457271.png} | Bin ...3.png => en-us_image_0000001238476361.png} | Bin ...3.png => en-us_image_0000001238521019.png} | Bin ...5.png => en-us_image_0000001238521021.png} | Bin ...8.png => en-us_image_0000001238522733.png} | Bin ...3.png => en-us_image_0000001238522783.png} | Bin ...7.png => en-us_image_0000001238537297.png} | Bin ...8.png => en-us_image_0000001238556395.png} | Bin ...5.png => en-us_image_0000001238601051.png} | Bin ...1.png => en-us_image_0000001238601053.png} | Bin ...7.png => en-us_image_0000001238602771.png} | Bin ...7.png => en-us_image_0000001238602821.png} | Bin .../figures/en-us_image_0000001239788885.gif | Bin ...4.gif => en-us_image_0000001239925031.gif} | Bin .../figures/en-us_image_0000001256858383.gif | Bin 45011 -> 0 bytes .../figures/en-us_image_0000001256858401.gif | Bin 102969 -> 0 bytes .../figures/en-us_image_0000001256858411.gif | Bin 5683 -> 0 bytes .../figures/en-us_image_0000001257058407.png | Bin 43629 -> 0 bytes .../figures/en-us_image_0000001257058417.png | Bin 12979 -> 0 bytes .../figures/en-us_image_0000001257138345.gif | Bin 30068 -> 0 bytes .../figures/en-us_image_0000001257138355.gif | Bin 153801 -> 0 bytes ...8496.gif => en_image_0000001174582862.gif} | Bin ...8361.gif => en_image_0000001186807708.gif} | Bin ...image_0000001212218428.gif => enabled.gif} | Bin ...en-us_image_0000001256978369.gif => f.gif} | Bin ...us_image_0000001212378394.png => flex.png} | Bin ..._image_0000001256978365.gif => flex01.gif} | Bin ..._image_0000001211898500.png => flex02.png} | Bin ..._image_0000001212218462.gif => flex03.gif} | Bin ...mage_0000001212378426.gif => flex04-2.gif} | Bin ..._image_0000001257138371.jpg => flex04.jpg} | Bin ..._image_0000001256858413.gif => flex05.gif} | Bin .../reference/arkui-ts/figures/gauge.png | Bin ..._0000001212058490.gif => gesturegroup.gif} | Bin ...s_image_0000001257138365.gif => gif-0.gif} | Bin .../reference/arkui-ts/figures/gif-1.gif | Bin .../reference/arkui-ts/figures/gif-4.gif | Bin 0 -> 138935 bytes .../reference/arkui-ts/figures/gif.gif | Bin 0 -> 83395 bytes ...us_image_0000001212218468.gif => gif1.gif} | Bin ...us_image_0000001257138351.gif => gif2.gif} | Bin ...us_image_0000001257058403.gif => gif4.gif} | Bin ..._image_0000001212218434.gif => grid-3.gif} | Bin ...us_image_0000001256858425.gif => grid.gif} | Bin ...mage_0000001256858433.gif => griditem.gif} | Bin ...0000001211898470.gif => imageanimator.gif} | Bin ...mage_0000001257058433.gif => keyevent.gif} | Bin ...001212218476.gif => landscape-display.gif} | Bin ...us_image_0000001256858387.jpg => line.jpg} | Bin ...us_image_0000001256978357.gif => list.gif} | Bin ...mage_0000001257138339.gif => listitem.gif} | Bin .../arkui-ts/figures/loadingProgress.png | Bin 0 -> 15368 bytes ...0001257058425.gif => longpressgesture.gif} | Bin ...f => lottie-ark-2-0-canvas-ui-animate.gif} | Bin ...ge_0000001257138369.gif => mediaquery.gif} | Bin ..._image_0000001212378420.gif => motion.gif} | Bin ...age_0000001212058486.gif => navigator.gif} | Bin ...image_0000001256858385.gif => opacity.gif} | Bin ...00001256978335.gif => pagetransition1.gif} | Bin ...00001212058460.gif => pagetransition2.gif} | Bin ...s_image_0000001256978381.gif => panel.gif} | Bin ...ge_0000001256978371.gif => pangesture.gif} | Bin ...us_image_0000001212058492.png => path.png} | Bin ..._0000001257058419.gif => pinchgesture.gif} | Bin ...image_0000001212218458.gif => polygon.gif} | Bin ...mage_0000001212218432.gif => polyline.gif} | Bin ...s_image_0000001212058458.gif => popup.gif} | Bin ...0001256978379.gif => portrait-display.gif} | Bin ...mage_0000001212218456.gif => position.gif} | Bin ...age_0000001256858409.gif => position2.gif} | Bin .../reference/arkui-ts/figures/progress.png | Bin 0 -> 3831 bytes ...n-us_image_0000001212378428.png => q1.png} | Bin ..._image_0000001256858415.png => qrcode.png} | Bin ..._image_0000001257058423.gif => rating.gif} | Bin ...us_image_0000001212218454.png => rect.png} | Bin ...00001256858403.gif => rotationgesture.gif} | Bin ...mage_0000001212058482.gif => rowsplit.gif} | Bin ...n-us_image_0000001256858419.png => s1.png} | Bin ...n-us_image_0000001212058494.png => s3.png} | Bin ..._image_0000001256978367.png => s4-(1).png} | Bin ..._image_0000001256978363.gif => scroll.gif} | Bin ...0001211898494.gif => sharedtransition.gif} | Bin ...us_image_0000001257138367.gif => size.gif} | Bin ..._image_0000001211898492.gif => slider.gif} | Bin ...us_image_0000001257138363.gif => span.gif} | Bin ...s_image_0000001212378400.jpg => stack.jpg} | Bin ..._image_0000001211898474.gif => swiper.gif} | Bin ...us_image_0000001212218430.gif => tabs.gif} | Bin ...ge_0000001256858417.gif => tapgesture.gif} | Bin ...s_image_0000001257138337.gif => text1.gif} | Bin ...s_image_0000001257058391.gif => text2.gif} | Bin ...age_0000001256858399.gif => textarea1.gif} | Bin ...ge_0000001212378402.gif => textinput1.gif} | Bin ...age_0000001256978333.png => textstyle.png} | Bin ..._image_0000001211898522.gif => toggle.gif} | Bin ...ge_0000001211898498.gif => transition.gif} | Bin ..._0000001256858435.png => unnaming-(3).png} | Bin ..._0000001212218482.png => unnaming-(4).png} | Bin ...ge_0000001257058421.gif => visibility.gif} | Bin ..._image_0000001257058443.png => zindex.png} | Bin .../reference/arkui-ts/ts-animation.md | 14 +- .../reference/arkui-ts/ts-animatorproperty.md | 173 +- .../reference/arkui-ts/ts-appendix-enums.md | 365 +- .../reference/arkui-ts/ts-appendix.md | 4 +- .../arkui-ts/ts-basic-components-blank.md | 107 +- .../arkui-ts/ts-basic-components-button.md | 227 +- .../arkui-ts/ts-basic-components-datapanel.md | 121 +- .../ts-basic-components-datepicker.md | 153 - .../arkui-ts/ts-basic-components-divider.md | 97 +- .../arkui-ts/ts-basic-components-gauge.md | 152 + .../arkui-ts/ts-basic-components-image.md | 333 +- .../ts-basic-components-imageanimator.md | 269 +- .../ts-basic-components-loadingprogress.md | 51 + .../arkui-ts/ts-basic-components-marquee.md | 172 + .../ts-basic-components-navigation.md | 222 - .../arkui-ts/ts-basic-components-progress.md | 202 +- .../arkui-ts/ts-basic-components-qrcode.md | 102 +- .../arkui-ts/ts-basic-components-rating.md | 161 +- .../arkui-ts/ts-basic-components-scrollbar.md | 96 - .../arkui-ts/ts-basic-components-select.md | 14 +- .../arkui-ts/ts-basic-components-slider.md | 291 +- .../arkui-ts/ts-basic-components-span.md | 119 +- .../arkui-ts/ts-basic-components-text.md | 326 +- .../arkui-ts/ts-basic-components-textarea.md | 244 +- .../arkui-ts/ts-basic-components-textinput.md | 390 +- .../ts-basic-components-textpicker.md | 69 - .../arkui-ts/ts-basic-components-texttimer.md | 94 - .../arkui-ts/ts-basic-components-toggle.md | 182 +- .../reference/arkui-ts/ts-basic-components.md | 38 +- .../ts-basic-gestures-longpressgesture.md | 150 +- .../arkui-ts/ts-basic-gestures-pangesture.md | 284 +- .../ts-basic-gestures-pinchgesture.md | 160 +- .../ts-basic-gestures-rotationgesture.md | 158 +- .../ts-basic-gestures-swipegesture.md | 185 +- .../arkui-ts/ts-basic-gestures-tapgesture.md | 107 +- .../reference/arkui-ts/ts-basic-gestures.md | 14 +- .../arkui-ts/ts-canvasrenderingcontext2d.md | 4341 +++++++++++----- .../arkui-ts/ts-combined-gestures.md | 135 +- .../arkui-ts/ts-components-canvas-canvas.md | 106 +- .../ts-components-canvas-canvasgradient.md | 113 +- .../ts-components-canvas-imagebitmap.md | 112 +- .../ts-components-canvas-imagedata.md | 49 +- .../arkui-ts/ts-components-canvas-lottie.md | 1780 +++++-- .../arkui-ts/ts-components-canvas-path2d.md | 1211 +++-- .../arkui-ts/ts-components-canvas.md | 18 +- .../arkui-ts/ts-components-container.md | 50 +- .../reference/arkui-ts/ts-components.md | 14 +- .../arkui-ts/ts-container-alphabet-indexer.md | 259 +- .../reference/arkui-ts/ts-container-badge.md | 250 +- .../reference/arkui-ts/ts-container-column.md | 30 +- .../arkui-ts/ts-container-columnsplit.md | 56 +- .../arkui-ts/ts-container-counter.md | 56 +- .../reference/arkui-ts/ts-container-flex.md | 261 +- .../reference/arkui-ts/ts-container-grid.md | 136 +- .../arkui-ts/ts-container-gridcontainer.md | 161 +- .../arkui-ts/ts-container-griditem.md | 112 +- .../reference/arkui-ts/ts-container-list.md | 411 +- .../arkui-ts/ts-container-listitem.md | 111 +- .../arkui-ts/ts-container-navigation.md | 418 ++ .../arkui-ts/ts-container-navigator.md | 153 +- .../reference/arkui-ts/ts-container-panel.md | 243 +- .../arkui-ts/ts-container-rowsplit.md | 56 +- .../reference/arkui-ts/ts-container-scroll.md | 413 +- .../arkui-ts/ts-container-scrollbar.md | 168 + .../reference/arkui-ts/ts-container-stack.md | 73 +- .../arkui-ts/ts-container-stepper.md | 184 + .../arkui-ts/ts-container-stepperitem.md | 123 + .../reference/arkui-ts/ts-container-swiper.md | 249 +- .../arkui-ts/ts-container-tabcontent.md | 141 +- .../reference/arkui-ts/ts-container-tabs.md | 312 +- .../arkui-ts/ts-drawing-components-circle.md | 161 +- .../arkui-ts/ts-drawing-components-ellipse.md | 161 +- .../arkui-ts/ts-drawing-components-line.md | 185 +- .../arkui-ts/ts-drawing-components-path.md | 115 +- .../arkui-ts/ts-drawing-components-polygon.md | 173 +- .../ts-drawing-components-polyline.md | 173 +- .../arkui-ts/ts-drawing-components-rect.md | 233 +- .../arkui-ts/ts-drawing-components-shape.md | 251 +- .../arkui-ts/ts-drawing-components.md | 18 +- .../arkui-ts/ts-explicit-animation.md | 128 +- .../arkui-ts/ts-gesture-processing.md | 8 +- .../reference/arkui-ts/ts-gesture-settings.md | 247 +- .../arkui-ts/ts-global-ui-methods.md | 12 +- .../arkui-ts/ts-interpolation-calculation.md | 324 +- .../arkui-ts/ts-matrix-transformation.md | 1073 ++-- .../arkui-ts/ts-media-components-video.md | 174 - .../reference/arkui-ts/ts-media-components.md | 5 - .../arkui-ts/ts-methods-action-sheet.md | 223 +- .../arkui-ts/ts-methods-alert-dialog-box.md | 305 +- .../arkui-ts/ts-methods-custom-dialog-box.md | 197 +- .../arkui-ts/ts-methods-image-cache.md | 241 +- .../arkui-ts/ts-methods-media-query.md | 333 +- .../arkui-ts/ts-methods-popup-window.md | 9 - .../arkui-ts/ts-motion-path-animation.md | 57 +- .../ts-offscreencanvasrenderingcontext2d.md | 4447 ++++++++++++----- .../arkui-ts/ts-page-transition-animation.md | 317 +- .../ts-transition-animation-component.md | 170 +- ...ts-transition-animation-shared-elements.md | 108 +- .../arkui-ts/ts-transition-animation.md | 8 +- .../ts-universal-attributes-background.md | 128 +- .../ts-universal-attributes-border.md | 134 +- .../arkui-ts/ts-universal-attributes-click.md | 52 - .../ts-universal-attributes-component-id.md | 104 - .../ts-universal-attributes-enable.md | 50 +- .../ts-universal-attributes-flex-layout.md | 85 +- .../arkui-ts/ts-universal-attributes-focus.md | 78 - .../ts-universal-attributes-gradient-color.md | 175 +- .../arkui-ts/ts-universal-attributes-grid.md | 97 +- .../ts-universal-attributes-hover-effect.md | 69 - .../ts-universal-attributes-image-effect.md | 155 +- ...universal-attributes-layout-constraints.md | 71 +- .../ts-universal-attributes-location.md | 144 +- .../ts-universal-attributes-opacity.md | 51 +- .../ts-universal-attributes-overlay.md | 53 +- ...-universal-attributes-polymorphic-style.md | 126 - .../arkui-ts/ts-universal-attributes-popup.md | 299 +- ...ts-universal-attributes-response-region.md | 133 + .../ts-universal-attributes-sharp-clipping.md | 60 +- .../arkui-ts/ts-universal-attributes-size.md | 138 +- .../ts-universal-attributes-text-style.md | 176 +- .../ts-universal-attributes-touch-target.md | 57 - .../ts-universal-attributes-touchable.md | 65 + .../ts-universal-attributes-transformation.md | 114 +- .../ts-universal-attributes-visibility.md | 86 +- .../ts-universal-attributes-z-order.md | 50 +- .../arkui-ts/ts-universal-attributes.md | 52 +- ...s-universal-component-area-change-event.md | 48 - .../arkui-ts/ts-universal-components.md | 8 +- .../arkui-ts/ts-universal-events-click.md | 210 +- ...-universal-events-component-area-change.md | 59 + .../arkui-ts/ts-universal-events-drag-drop.md | 147 - .../arkui-ts/ts-universal-events-key.md | 280 +- .../arkui-ts/ts-universal-events-show-hide.md | 49 +- .../arkui-ts/ts-universal-events-touch.md | 248 +- .../reference/arkui-ts/ts-universal-events.md | 18 +- .../arkui-ts/ts-universal-focus-event.md | 71 - .../arkui-ts/ts-universal-mouse-key.md | 87 - zh-cn/application-dev/Readme-CN.md | 1 + .../ability/ability-assistant-guidelines.md | 30 +- zh-cn/application-dev/ability/fa-brief.md | 23 +- .../application-dev/ability/fa-pageability.md | 129 +- .../ability/figures/fa-package-info.png | Bin 0 -> 36680 bytes .../figures/fa-pageAbility-lifecycle.png | Bin 0 -> 25157 bytes .../ability/figures/fa-threading-model.png | Bin 0 -> 50739 bytes .../basic-resource-file-categories.md | 79 - .../reference/apis/Readme-CN.md | 7 +- .../reference/apis/js-apis-ability-context.md | 64 +- .../js-apis-basic-features-app-context.md | 79 + .../js-apis-basic-features-configuration.md | 44 + .../apis/js-apis-basic-features-logs.md | 4 + .../reference/apis/js-apis-fileio.md | 6 +- .../reference/apis/js-apis-formprovider.md | 128 + .../reference/apis/js-apis-geolocation.md | 76 +- .../reference/apis/js-apis-media.md | 531 +- .../reference/apis/js-apis-pasteboard.md | 20 +- .../reference/apis/js-apis-request.md | 2 +- .../reference/apis/js-apis-system-app.md | 122 - .../reference/apis/js-apis-system-battery.md | 55 - .../apis/js-apis-system-bluetooth.md | 175 - .../apis/js-apis-system-brightness.md | 197 - .../reference/apis/js-apis-system-cipher.md | 164 - .../apis/js-apis-system-configuration.md | 45 - .../apis/js-apis-system-deviceinfo.md | 75 - .../reference/apis/js-apis-system-fetch.md | 104 - .../reference/apis/js-apis-system-file.md | 599 --- .../reference/apis/js-apis-system-location.md | 211 - .../apis/js-apis-system-mediaquery.md | 105 - .../reference/apis/js-apis-system-network.md | 134 - .../apis/js-apis-system-notification.md | 58 - .../reference/apis/js-apis-system-package.md | 57 - .../reference/apis/js-apis-system-prompt.md | 144 - .../reference/apis/js-apis-system-request.md | 191 - .../reference/apis/js-apis-system-router.md | 326 -- .../reference/apis/js-apis-system-sensor.md | 561 --- .../reference/apis/js-apis-system-storage.md | 163 - .../reference/apis/js-apis-system-time.md | 34 +- .../reference/apis/js-apis-system-vibrate.md | 46 - .../reference/apis/js-apis-volumemanager.md | 2 +- .../reference/apis/js-apis-wallpaper.md | 58 +- .../reference/apis/js-apis-workScheduler.md | 1 - .../reference/arkui-js/figures/transition.gif | Bin 0 -> 74240 bytes .../js-components-common-transition.md | 148 +- .../reference/arkui-ts/Readme-CN.md | 1 + .../arkui-ts/ts-basic-components-gauge.md | 63 - .../arkui-ts/ts-basic-components-marquee.md | 95 - .../ts-basic-components-plugincomponent.md | 318 -- .../arkui-ts/ts-basic-components-stepper.md | 125 - .../ts-basic-components-stepperitem.md | 46 - .../ts-methods-media-query.md} | 0 .../ui/ts-application-resource-access.md | 164 - .../ui/ts-system-resource-access.md | 20 - 432 files changed, 23582 insertions(+), 14629 deletions(-) delete mode 100644 en/application-dev/quick-start/basic-resource-file-categories.md create mode 100644 en/application-dev/reference/apis/figures/en-us_image_0000001164217678.png delete mode 100644 en/application-dev/reference/arkui-ts/Readme-CN.md create mode 100644 en/application-dev/reference/arkui-ts/Readme-EN.md rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898504.png => 1.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058401.png => 1111.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898482.png => 11111-5.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058500.png => 11111.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058393.png => 2-01.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218464.gif => 222.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218448.png => 2222.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058456.gif => 5.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978359.gif => 66666.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978387.gif => alertdialog.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378392.gif => alphabetindexer.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978345.gif => animateto.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898468.gif => appear.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378444.gif => attranimation.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898502.png => back.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218470.gif => badge.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858407.gif => blank1.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378418.gif => blank2.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898466.gif => border.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138341.gif => button.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978353.png => circle.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218452.png => clip.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218484.png => colorgradient.png} (100%) create mode 100644 en/application-dev/reference/arkui-ts/figures/column.gif rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378422.gif => columnsplit.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378424.gif => counter.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058470.gif => customdialog.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898476.jpg => datapanel.jpg} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378416.png => device-width-type-lg.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058415.png => device-width-type-md.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858405.png => device-width-type-sm.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058504.gif => displaypriorityexample.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058484.gif => duande.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058488.png => ellipse.png} (100%) create mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595194.png rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378446.png => en-us_image_0000001192595214.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898520.png => en-us_image_0000001192595216.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058411.png => en-us_image_0000001192595220.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978347.png => en-us_image_0000001192595224.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378404.png => en-us_image_0000001192595226.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058498.png => en-us_image_0000001192595228.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378438.png => en-us_image_0000001192595230.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378406.png => en-us_image_0000001192595232.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978351.png => en-us_image_0000001192595234.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898488.png => en-us_image_0000001192595238.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058510.png => en-us_image_0000001192755172.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978385.png => en-us_image_0000001192755174.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898516.png => en-us_image_0000001192755178.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378436.png => en-us_image_0000001192755180.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898514.png => en-us_image_0000001192755182.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218480.png => en-us_image_0000001192755188.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378408.png => en-us_image_0000001192755194.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378412.png => en-us_image_0000001192915130.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058466.png => en-us_image_0000001192915154.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058445.png => en-us_image_0000001192915158.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378434.png => en-us_image_0000001192915162.png} (100%) create mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915178.gif rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978377.png => en-us_image_0000001192915180.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978383.png => en-us_image_0000001192915184.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978331.gif => en-us_image_0000001193075122.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058496.png => en-us_image_0000001193075134.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138391.png => en-us_image_0000001193075154.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898508.png => en-us_image_0000001193075164.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858389.png => en-us_image_0000001193075166.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218436.png => en-us_image_0000001193075168.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378396.png => en-us_image_0000001193075170.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858431.png => en-us_image_0000001193075172.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218472.png => en-us_image_0000001193075178.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058462.png => en-us_image_0000001193075180.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058431.png => en-us_image_0000001193321136.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858421.png => en-us_image_0000001193321138.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898510.png => en-us_image_0000001193322850.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978375.png => en-us_image_0000001193322872.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898472.png => en-us_image_0000001193322910.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138373.png => en-us_image_0000001193436448.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378414.png => en-us_image_0000001193481094.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858423.png => en-us_image_0000001193481096.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978373.png => en-us_image_0000001193481098.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058409.png => en-us_image_0000001193482814.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138379.png => en-us_image_0000001193482866.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058397.png => en-us_image_0000001193641084.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138347.png => en-us_image_0000001193641086.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858427.png => en-us_image_0000001193642802.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898480.png => en-us_image_0000001193642848.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218440.png => en-us_image_0000001193737314.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218466.png => en-us_image_0000001193756416.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378430.png => en-us_image_0000001193801070.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858393.png => en-us_image_0000001193801072.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218438.png => en-us_image_0000001193802788.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978343.png => en-us_image_0000001193802836.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058474.png => en-us_image_0000001194605518.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058472.png => en-us_image_0000001194911566.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858397.gif => en-us_image_0000001194942468.gif} (100%) create mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001196780640.png rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058508.gif => en-us_image_0000001201475612.gif} (100%) delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898486.gif delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898512.gif delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058464.gif delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058468.png delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058476.png delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218450.gif delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378432.gif create mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237355087.gif rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138385.png => en-us_image_0000001237355121.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978339.png => en-us_image_0000001237355131.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218442.png => en-us_image_0000001237355133.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218446.png => en-us_image_0000001237355135.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218474.png => en-us_image_0000001237355137.png} (100%) create mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237475107.gif rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138389.png => en-us_image_0000001237475113.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138375.png => en-us_image_0000001237475123.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138387.png => en-us_image_0000001237475133.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138357.png => en-us_image_0000001237475137.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378410.png => en-us_image_0000001237475139.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858381.png => en-us_image_0000001237555149.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058512.png => en-us_image_0000001237555151.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058502.png => en-us_image_0000001237555155.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378440.png => en-us_image_0000001237555163.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058399.png => en-us_image_0000001237555165.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058413.png => en-us_image_0000001237555167.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058395.png => en-us_image_0000001237555173.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058405.png => en-us_image_0000001237555179.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058480.png => en-us_image_0000001237555181.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858429.png => en-us_image_0000001237715141.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978349.png => en-us_image_0000001237715149.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858391.png => en-us_image_0000001237715151.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378442.png => en-us_image_0000001237715153.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978341.png => en-us_image_0000001237715155.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898518.png => en-us_image_0000001237715159.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898506.png => en-us_image_0000001237715165.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138349.png => en-us_image_0000001238281067.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218478.png => en-us_image_0000001238281069.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058429.png => en-us_image_0000001238282783.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058506.png => en-us_image_0000001238282827.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898490.png => en-us_image_0000001238401029.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058441.png => en-us_image_0000001238401031.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058439.png => en-us_image_0000001238402745.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218444.png => en-us_image_0000001238402777.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138359.png => en-us_image_0000001238457271.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138343.png => en-us_image_0000001238476361.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138383.png => en-us_image_0000001238521019.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858395.png => en-us_image_0000001238521021.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378398.png => en-us_image_0000001238522733.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138353.png => en-us_image_0000001238522783.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058437.png => en-us_image_0000001238537297.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058478.png => en-us_image_0000001238556395.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058435.png => en-us_image_0000001238601051.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138381.png => en-us_image_0000001238601053.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138377.png => en-us_image_0000001238602771.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058427.png => en-us_image_0000001238602821.png} (100%) rename zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001250678457.gif => en/application-dev/reference/arkui-ts/figures/en-us_image_0000001239788885.gif (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898484.gif => en-us_image_0000001239925031.gif} (100%) delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858383.gif delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858401.gif delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858411.gif delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058407.png delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058417.png delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138345.gif delete mode 100644 en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138355.gif rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898496.gif => en_image_0000001174582862.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978361.gif => en_image_0000001186807708.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218428.gif => enabled.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978369.gif => f.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378394.png => flex.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978365.gif => flex01.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898500.png => flex02.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218462.gif => flex03.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378426.gif => flex04-2.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138371.jpg => flex04.jpg} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858413.gif => flex05.gif} (100%) rename zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001174422916.png => en/application-dev/reference/arkui-ts/figures/gauge.png (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058490.gif => gesturegroup.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138365.gif => gif-0.gif} (100%) rename zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001193499234.gif => en/application-dev/reference/arkui-ts/figures/gif-1.gif (100%) create mode 100644 en/application-dev/reference/arkui-ts/figures/gif-4.gif create mode 100644 en/application-dev/reference/arkui-ts/figures/gif.gif rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218468.gif => gif1.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138351.gif => gif2.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058403.gif => gif4.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218434.gif => grid-3.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858425.gif => grid.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858433.gif => griditem.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898470.gif => imageanimator.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058433.gif => keyevent.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218476.gif => landscape-display.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858387.jpg => line.jpg} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978357.gif => list.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138339.gif => listitem.gif} (100%) create mode 100644 en/application-dev/reference/arkui-ts/figures/loadingProgress.png rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058425.gif => longpressgesture.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978355.gif => lottie-ark-2-0-canvas-ui-animate.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138369.gif => mediaquery.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378420.gif => motion.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058486.gif => navigator.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858385.gif => opacity.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978335.gif => pagetransition1.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058460.gif => pagetransition2.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978381.gif => panel.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978371.gif => pangesture.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058492.png => path.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058419.gif => pinchgesture.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218458.gif => polygon.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218432.gif => polyline.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058458.gif => popup.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978379.gif => portrait-display.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218456.gif => position.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858409.gif => position2.gif} (100%) create mode 100644 en/application-dev/reference/arkui-ts/figures/progress.png rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378428.png => q1.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858415.png => qrcode.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058423.gif => rating.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218454.png => rect.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858403.gif => rotationgesture.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058482.gif => rowsplit.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858419.png => s1.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212058494.png => s3.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978367.png => s4-(1).png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978363.gif => scroll.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898494.gif => sharedtransition.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138367.gif => size.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898492.gif => slider.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138363.gif => span.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378400.jpg => stack.jpg} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898474.gif => swiper.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218430.gif => tabs.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858417.gif => tapgesture.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257138337.gif => text1.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058391.gif => text2.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858399.gif => textarea1.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212378402.gif => textinput1.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256978333.png => textstyle.png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898522.gif => toggle.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001211898498.gif => transition.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001256858435.png => unnaming-(3).png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001212218482.png => unnaming-(4).png} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058421.gif => visibility.gif} (100%) rename en/application-dev/reference/arkui-ts/figures/{en-us_image_0000001257058443.png => zindex.png} (100%) delete mode 100644 en/application-dev/reference/arkui-ts/ts-basic-components-datepicker.md create mode 100644 en/application-dev/reference/arkui-ts/ts-basic-components-gauge.md create mode 100644 en/application-dev/reference/arkui-ts/ts-basic-components-loadingprogress.md create mode 100644 en/application-dev/reference/arkui-ts/ts-basic-components-marquee.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-basic-components-navigation.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-basic-components-scrollbar.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-basic-components-textpicker.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-basic-components-texttimer.md create mode 100644 en/application-dev/reference/arkui-ts/ts-container-navigation.md create mode 100644 en/application-dev/reference/arkui-ts/ts-container-scrollbar.md create mode 100644 en/application-dev/reference/arkui-ts/ts-container-stepper.md create mode 100644 en/application-dev/reference/arkui-ts/ts-container-stepperitem.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-media-components-video.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-media-components.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-methods-popup-window.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-universal-attributes-click.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-universal-attributes-component-id.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-universal-attributes-focus.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-universal-attributes-hover-effect.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-universal-attributes-polymorphic-style.md create mode 100644 en/application-dev/reference/arkui-ts/ts-universal-attributes-response-region.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-universal-attributes-touch-target.md create mode 100644 en/application-dev/reference/arkui-ts/ts-universal-attributes-touchable.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-universal-component-area-change-event.md create mode 100644 en/application-dev/reference/arkui-ts/ts-universal-events-component-area-change.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-universal-events-drag-drop.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-universal-focus-event.md delete mode 100644 en/application-dev/reference/arkui-ts/ts-universal-mouse-key.md create mode 100755 zh-cn/application-dev/ability/figures/fa-package-info.png create mode 100755 zh-cn/application-dev/ability/figures/fa-pageAbility-lifecycle.png create mode 100755 zh-cn/application-dev/ability/figures/fa-threading-model.png delete mode 100644 zh-cn/application-dev/quick-start/basic-resource-file-categories.md create mode 100644 zh-cn/application-dev/reference/apis/js-apis-basic-features-app-context.md create mode 100644 zh-cn/application-dev/reference/apis/js-apis-basic-features-configuration.md create mode 100644 zh-cn/application-dev/reference/apis/js-apis-formprovider.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-app.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-battery.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-bluetooth.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-brightness.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-cipher.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-configuration.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-deviceinfo.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-fetch.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-file.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-location.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-mediaquery.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-network.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-notification.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-package.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-prompt.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-request.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-router.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-sensor.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-storage.md delete mode 100644 zh-cn/application-dev/reference/apis/js-apis-system-vibrate.md create mode 100644 zh-cn/application-dev/reference/arkui-js/figures/transition.gif delete mode 100644 zh-cn/application-dev/reference/arkui-ts/ts-basic-components-gauge.md delete mode 100644 zh-cn/application-dev/reference/arkui-ts/ts-basic-components-marquee.md delete mode 100644 zh-cn/application-dev/reference/arkui-ts/ts-basic-components-plugincomponent.md delete mode 100644 zh-cn/application-dev/reference/arkui-ts/ts-basic-components-stepper.md delete mode 100644 zh-cn/application-dev/reference/arkui-ts/ts-basic-components-stepperitem.md rename zh-cn/application-dev/reference/{apis/js-apis-mediaquery.md => arkui-ts/ts-methods-media-query.md} (100%) delete mode 100644 zh-cn/application-dev/ui/ts-application-resource-access.md delete mode 100644 zh-cn/application-dev/ui/ts-system-resource-access.md diff --git a/en/application-dev/quick-start/basic-resource-file-categories.md b/en/application-dev/quick-start/basic-resource-file-categories.md deleted file mode 100644 index db223b338d..0000000000 --- a/en/application-dev/quick-start/basic-resource-file-categories.md +++ /dev/null @@ -1,79 +0,0 @@ -# Resource File Categories - - -## resources Directory - -All the application resource files, such as strings, images, and audio files, are stored in the **resources** directory, allowing you to easily access, use, and maintain them. The **resources** directory consists of two types of sub-directories: the **base** sub-directory and qualifiers sub-directories, and the **rawfile** sub-directory. For details, see Categories of the **resources** directory. - - Example of the **resources** directory: - -``` -resources -|---base // Default directory -| |---element -| | |---string.json -| |---media -| | |---icon.png -|---en_GB-vertical-car-mdpi // Example of a qualifiers sub-directory, which needs to be created on your own -| |---element -| | |---string.json -| |---media -| | |---icon.png -|---rawfile // Default directory -``` - - **Table 1** Categories of the **resources** directory - -| Category | base and Qualifiers Sub-directories | rawfile Sub-directory | -| -------- | -------- | -------- | -| Structure | Sub-directories are structured in two levels. The directory name must comply with specified naming conventions so that its target resource file in the correct directory can be matched based on the device status.
  The **base** sub-directory and qualifiers sub-directories are the first level of sub-directories under **resources**.
- The **base** sub-directory is generated by default. If no qualifiers sub-directories in the **resources** directory of the application match the device status, the resource file in the **base** sub-directory will be automatically referenced.
- You need to create qualifiers sub-directories on your own. Each directory name consists of one or more qualifiers that represent the application scenarios or device characteristics. For details, see [Qualifiers Sub-directories](#qualifiers-sub-directories).
Resource group sub-directories are located at the second level of sub-directories to store basic elements such as strings, colors, and boolean values, as well as resource files such as media, animations, and layouts. For details, see [Resource Group Sub-directories](#resource-group-sub-directories). | You can create multiple levels of sub-directories with custom directory names. They can be used to store various resource files.
However, resource files in the **rawfile** sub-directory will not be matched based on the device status. | -| Compilation | Resource files in the sub-directories are compiled into binary files, and each resource file is assigned an ID. | Resource files in the sub-directory are directly packed into the application without being compiled, and no IDs will be assigned to the resource files. | -| Reference | Resource files in the sub-directories are referenced based on the resource type and resource name. | Resource files in the sub-directories are referenced based on the specified file path and file name. | - - -## Qualifiers Sub-directories - -The name of a qualifiers sub-directory consists of one or more qualifiers that represent the application scenarios or device characteristics, covering the mobile country code (MCC), mobile network code (MNC), language, script, country or region, screen orientation, device type, color mode, and screen density. The qualifiers are separated using underscores (_) or hyphens (-). When creating a qualifiers sub-directory, you need to understand the directory naming conventions and the rules for matching qualifiers sub-directories and the device status. - -**Naming Conventions for Qualifiers Sub-directories** - -- Qualifiers are ordered in the following sequence: _MCC_MNC-language_script_country/region-screen orientation-device type-color mode-screen density_. You can select one or multiple qualifiers to name your sub-directory based on your application scenarios and device characteristics. - -- Separation between qualifiers: The language, script, and country/region qualifiers are separated using underscores (_); the MNC and MCC qualifiers are also separated using underscores (_); other qualifiers are separated using hyphens (-). For example, **zh_Hant_CN** and **zh_CN-car-ldpi**. - -- Value range of qualifiers: The value of each qualifier must meet the requirements. Otherwise, the resource files in the sub-directory cannot be matched. - **Table 2** Requirements for qualifier values - - | Qualifier Type | Description and Value Range | - | -------- | -------- | - | MCC&MNC | Indicates the MCC and MNC, which are obtained from the network where the device is registered. The MCC can be either followed by the MNC with an underscore (_) in between or be used independently. For example, **mcc460** represents China, and **mcc460_mnc00** represents China Mobile.
For details about the value range, refer to **ITU-T E.212** (the international identification plan for public networks and subscriptions). | - | Language | Indicates the language used by the device. The value consists of two or three lowercase letters, for example, **zh** indicates Chinese, **en** indicates English, and **mai** indicates Maithili.
For details about the value range, refer to **ISO 639** (codes for the representation of names of languages). | - | Script | Indicates the script type used by the device. The value starts with one uppercase letter followed by three lowercase letters, for example, **Hans** indicates simplified Chinese and **Hant** indicates traditional Chinese.
For details about the value range, refer to **ISO 15924** (codes for the representation of names of scripts). | - | Country/Region | Indicates the country or region where a user is located. The value consists of two or three uppercase letters or three digits, for example, **CN** indicates China and **GB** indicates the United Kingdom.
For details about the value range, refer to **ISO 3166-1** (codes for the representation of names of countries and their subdivisions). | - | Screen orientation | Indicates the screen orientation of the device. The value can be:
- **vertical**: portrait orientation
- **horizontal**: landscape orientation | - | Device type | Indicates the device type. The value can be:
- **phone**: smartphones
- **tablet**: tablets
- **car**: head units
- **tv**: smart TVs
- **wearable**: wearables | - | Color mode | Indicates the color mode of the device. The value can be:
- **dark**: dark mode
- **light**: light mode | - | Screen density | Indicates the screen density of the device, in dpi. The value can be:
- **sdpi**: screen density with small-scale dots per inch (SDPI). This value is applicable for devices with a DPI range of (0, 120].
- **mdpi**: screen density with medium-scale dots per inch (MDPI). This value is applicable for devices with a DPI range of (120, 160].
- **ldpi**: screen density with large-scale dots per inch (LDPI). This value is applicable for devices with a DPI range of (160, 240].
- **xldpi**: screen density with extra-large-scale dots per inch (XLDPI). This value is applicable for devices with a DPI range of (240, 320].
- **xxldpi**: screen density with extra-extra-large-scale dots per inch (XXLDPI). This value is applicable for devices with a DPI range of (320, 480].
- **xxxldpi**: screen density with extra-extra-extra-large-scale dots per inch (XXXLDPI). This value is applicable for devices with a DPI range of (480, 640]. | - -**Rules for Matching Qualifiers Sub-directories and Device Resources** - -- Qualifiers are matched with the device resources in the following priorities: MCC&MNC > locale (options: language, language_script, language_country/region, and language_script_country/region) > screen orientation > device type > color mode > screen density - -- If the qualifiers sub-directories contain the **MCC, MNC, language, script, screen orientation, device type, and color mode** qualifiers, their values must be consistent with the current device status so that the sub-directories can be used for matching the device resources. For example, the qualifiers sub-directory **zh_CN-car-ldpi** cannot be used for matching the resource files labeled **en_US**. - - -## Resource Group Sub-directories - -You can create resource group sub-directories (including element, media, animation, layout, graphic, and profile) in the **base** and qualifiers sub-directories to store resource files of specific types. For details, see Resource group sub-directories. - - - **Table 3** Resource group sub-directories - -| Resource Group Sub-directory | Description | Resource File | -| -------- | -------- | -------- | -| element | Indicates element resources. Each type of data is represented by a JSON file. The options are as follows:
- **boolean**: boolean data
- **color**: color data
- **float**: floating-point data
- **intarray**: array of integer
- **integer**: integer data
- **pattern**: pattern data
- **plural**: plural form data
- **strarray**: array of strings
- **string**: string data | It is recommended that files in the **element** sub-directory be named the same as the following files, each of which can contain only data of the same type:
- boolean.json
- color.json
- float.json
- intarray.json
- integer.json
- pattern.json
- plural.json
- strarray.json
- string.json | -| media | Indicates media resources, including non-text files such as images, audios, and videos. | The file name can be customized, for example, **icon.png**. | -| animation | Indicates animation resources, in XML format. | The file name can be customized, for example, **zoom_in.xml**. | -| layout | Indicates layout resources, in XML format. | The file name can be customized, for example, **home_layout.xml**. | -| graphic | Indicates graphic resources, in XML format. | The file name can be customized, for example, **notifications_dark.xml**. | -| profile | Indicates other types of files, which are stored in their raw formats. | The file name can be customized. | diff --git a/en/application-dev/reference/apis/figures/en-us_image_0000001164217678.png b/en/application-dev/reference/apis/figures/en-us_image_0000001164217678.png new file mode 100644 index 0000000000000000000000000000000000000000..2128f0852380b2895198ab725a2f9d299c480d84 GIT binary patch literal 14603 zcmcJ0bx>W;vnLYVg1ZC=?hY3TuDOul?yiB0LvXj??(Xgu+}+*b;_kM5fA9C+Zq>f3 z-P)@CqxG#C}3RKskQMAb3~^2*^108{kI) z(&4A12t>s=(cwqold14`VF-xoD5MvCn2$1oos_x*1O#f&KLj~oTVw`lXM$@tw1+V-uJo*$g4F_yjfSLr^$EM z3=5}}Bj)3er4E~_^5cc%XRA?-&r0~I;M1vjrEJStxBZw1(D=fs@hzFoN3paLDvP=y zzlxn9*=AO!G|(~!+@H(Cm!TSSDE(xhqoQDPb4bj6(qh5nKV2`& z1X3~#aFqe=d}VD{PEu;R#PKF%4v>r@DQ*TeUH(*)*?GN~c#|7D#kH(&^SaxZ8>PB< zs7@IIzLceYB5gooao9oOOPnKOpLZ!A!Oc35j#_JZX?Z9dhY4^N0@}9u(O+%+d>2dJ zpMW4ZhXnnm>>0h4CQ=XDeph($qS?2d_PEDc6+vq`7`!ECK;`Y)H9i&vz8G$eiB8u1 z`YC`*PyNoB%LJOjWZp+=nuIQ$?9FP?TCg4R@=IonLfGopgs^FY+3eT!4vCPYz@WO! zru2RJ!k$5r5{mjd_#+xTsf59np$so6G@4zcN5UGE)9cZ#5Q~?M@6=nQz_J+Idm*=5 z98_UODL!8cuVy4%%D=9pNGMM&WoUUROo|xB{m~U$wmuCadr-mj=R^Dm$q_dix-{;f zoLvv1Q2Hx^y6hh{UAWlNBn=olE>1867Mz?JvU`7}qmIW`T}F*Q7F3U(;QZ;JqO^I; zm(UinfNPx!S-N_U(fi~egL%wEaV)=wIvgfx+9g(7!&d@Wb_g)1Y`uO)d`A5@WK;5thA zFUv=%Be4^bpm3ONQ>aj>l;`eK8TQM{Fq?l4JVTlWtzFV38K)(h`w5lymg!=s-$Sy> zYDkaHB&ate^Uk^Co2$!13h;H!JY8nbz|&=PT+4Hl=f{r>-PA!Q>2rV!u5+WgbG(mf z!ncndr>cgGr&i1)^N-M0!%-~$748j`?x9LqHYPZKd*0D-PFqM|6^5O~4 zZRPW?1<)MS<_C-?0eeon)iu}g@G26)4F%Ca-}yrp8NUhv3~7qYUj+ktNeKRd+=Nyx z@Q&A9*2|8I7YTy}kqb<*42=vXJ}9;!Ra?eE|8X(Z?{Vbf$W@ zTGh!);G7}3lk%--*|1p+B#gMvBQGC(}x-3_I0ihil5c?m|#UwG+NeVV7vKg zp9tV6IgikNPosvlW?&aVBgz{y6>o@GhiiCnW`T5LNaacDTIS6=%D0KO3uv>+VbXiH7DSS^beBf?y8@#nYJF|JtimS=$-l- zg_n+BU>j2C92lb?!jfCfVWO5$LrI%HDpUf3Nrbfw>Zi4#L{`~PoM`9oi@LvKF{u(n-K49vV=zSvWobdvK z--LaUF2D4J^>61xriFeFkJ~Q=M9mdy&Np)fDBQ0FJRT-?T+%2*ky8|746 z0zb2+DQMJf=t}0mylRT|0F{u~;f#_X-DQvudcOY9xe(aeNT)ZfUAql=5{~vG(JNlS zhAwwVz}}4v@TPEQk@PzMMXGgeuxW}5#gqN43lTs?D|J@ zW58t?e1rLR8pQS+e@Bs@jVGmSgcxtFGsD7rTiR>Km{%IMpobw`QvTU;by0L--4=(N z?=sIzux&<^AW0{IIblk|8PDBbmw&G^7^W!wJ7(SVl8(#fBnV}-L4$X?XUKx)2|?v=76xRV~1NpsA(zI7KKBa zL*IKQ7c`dD>?nGV@K}#}u~l%98rDWDWuj+zNkj!D@?#8qWQjdn z6@^ylbcmZwjs!JAI1^4q1dtG)aUdd6>P4_PL~4MA&$mO8fSYf5tKV}JijD6TMG=#Y z&*Ax#@4eUx_9Y~O$V&1*m% z!#~*n~?GWFK`6yQ#n~I-ow>tr@ER%E2Z!PZ8+qy0EO$jaUVZwZ>qf*_+>zN z&|oj6uOdbb^jtPc-@-;jg{fY=c!=c25przsz#MYA>%-hxnN063lr3_T+)>rt6x-*R z^cYeoxzSR0{S~ioc;VdTPh&9&R}-UoL0!2zH#u!aKj*p}`$cN^g)Gog?nEOZMGki* zXC`qW4ZJz&Y96yKjbodr-x=E^l(&eItug3hd|>!&0bg$~99KLauCr_1s*J8fv#_mt z_DLJJk-fuOCQ#e1l|4xEFpS@iJkl(4I>dV3E~NS0Bw%_D^Ylomx+m5&x}!1FdPN1d z{p;es_#i>zxzZ3%L_ z@f9hxA!48qqR}N%OcTi^rY1M=Q(@5!vEBh3W~3iVf5ngM4{tPU4Q`c_tF)7Z8o3%?%O>Y!Ob`n4Da$SbN9+cxSzJ>nZj!p{~(e6lCMyYVl`T zD2P^P-z!;sXe_EDBTrN|g&Q%Bk-A2bkY zUMmfs%0kES{fS}RZl@IU1?e30&bONG-`C6_+= z)RS@2AA?dqrYQ-x7!hx+Suu2Q9dlwqLhd9!QbH)Zrd&(CcFvJM*4MJQe<#uu$ITtP zsNW_Lf0P*JxFOomU2BLJC{4i>TI$~ysh`xYXKqkPnk#T_jsp(q^Gr$N6j`ftlyeYS z8@5h0F@BrZPr|l;by%1q>R||q_}r>4P-pF@o5v4eaBA(!mAu;fmI@KJ#{1WR`=2|I zVcN(z04mh5HJiT%xPE<+Aw33-gjI`udew&8Rg0&v3{J4}?H9hE0Z$v8zptaN-urcj zy-fHrJ@1kqHe{>ak7&JZJ)k#_brY`v5MkQk%qLls<~IVigcJgjoGFS7!%%2o?W!;YzV>cvw0Cc)i`lmAU10YV?TG>uI(3#{&cyH(3GhAsgYXf z+0sz$dG}K&t}X#4K&I4gi~Ql9FDVhze~(E!NTm=i_nBmuNtb zi&K=J^(}XM?Kgu${8hN37n$+YZi7&@OYFLHZaba!<%%sRo}~6L5%YeEnT{_z9Se)`l4{AM0!8f7t=IO}L3AQ9j%AXn?ffg|WZU^#Xb;?SCn|3VLH~k|q_A zlIOeB)@b}Ptc{K{*$zWu^W5Nt znBfUes;~$q=3yY|Dc*oa8~M84htqqk-x9RBXVY!|j7qe8mAZy`J?M)Acmi>RpnB@A zs^|-z&GPMwR&thYw@{69mzs$keQ&?X;74=DY0rriB-QSFsO!jE-;_J7V{L~G#GXZs zK*HV=UO{1rMJ$kXZNj4-6zyZy(}+{$B@O&eKZ8YnzA74e^yTG8C1i6A((j;k7`4y( zH|xz3rO@SWv@QpFkUNchf=XcxZe5HdrCpZkH~eoaTwJ1XQO3>RF<1N>vah9n>eS}k zsc=z+5DRY@G%^v71gvvn@$eFQ>)%*ABZU6+U4)subMa0+jOE5Roop`CIV$XnbRpXg ztaMI`q;=}`(U|uY?-dV+@BU5s9%8_d!8xQTW@stB_F0WG& zQ~I$o<$-%QYSzAHG2qwUizp9hJsL6?7agFbnn5N=W3Ual-+uuMM4$bbg5D57?eMGI znYurBj2*U@AEH1iScKV|x_+Pt|6G`N?nU$KGv!#~q2@D*u%14-sP%4YKEb$xZkdSgmK8s;uR>U0x47@VPgfXR?u>Yx+Yt z4w@Ekbvu!7F%QKf&$Ro_%9|beOt=%os9bdE#&=oDLa8MfgF_7bNL06s(-g`;N%)oi z#|&xXZIv`V+d!0h~WY+rpts8w6d_miKg{xbV0T+PHwvzheOmL`c+= zXq@0lR<9Htl3YjvkXqe2=vmNa^IWgMX6rq@AhnW3bhDW_$&S2)XfnZy+#01RQRMD| zICI2b6BU|5-YHLZ;q>b)R;6f1WIZ|;36`F_hujXhMRK9FI3xp2+Q(KLOiqJR)}o~O z)8TuZ6ib#KsJ#K!%w*Lglks|ZCahdCCwPJSDllQhJuL2!|C0mIkUsAGH+*6^ph9IB zT44UyyrbWMu$ESWJkKb6!H@e}KU%eiI=HM_3|aZudJo2+jGbXv0n((KB8_=TomG4i zI^8Di7`(~rpbCveq3Jta72h3*7Gc1+ClMZlMuqwbU5I$&gaqjd!`scERhbG{Y8C8S zf_HtUS7`<#U;k|biR627qLdr#(l9Q86%K>jB*2G3gxf4WJFUJeVUj82q@= zH^UbeZwn8sr?ii5DTRDURSg1xnQ(K6mr2WcoF@5(13-~N(tJqvhF1G@ln`7Raylf%Y=}=P4 z{?g%Rd}!?_SxERr94u9SOx(=!lA|{(OT3x^3x^nb2LrBse-T}my`bABHXik zjQXhQMD?B>1#L4UgI$1&0jrJ}t6@{~`+he+>QDcQKx@Uzye8y{qH^Qbh?f=*K=8MQ za+4{0ae_iKx$V|T!LW1c*<8Rc|g@OTgA+C__jKX zIiQD~xu`KK>XeM+jhb=MBpVaXTB(n|iD^si@0c|Q`WU$>TS#(-Ilq7INa8m^Hjty*uttBtz$_v~qCHb)0 zt#SDfdmbO+W}RjiQvxQcf|E)1%th9Ov;%!MuuR?5xt6r!!~&QENJviLN>U|nBih+V zM>US1=>@;xvuA9Keg6b6!{mJ z$P+AaWFuws6(XgFG;s4p2P_~oYJ;nulggo{?o}B*0weMzBdkf7Z>1h{Z23@}<;&QJ}2%w~ts- zF8I`Qc3tB?UPpX7gcH^`D0V9PeqFN}%?jfHM|i!3ngFY5Dc$HYTUgQK50T9lf^KYsQF; zU;o^06~>a7ESgX-W@%jr`0fWy`R5Y(mPweMo$WgqD>sraeN!3S0V}~{%7r!ta zsrTV0E_UkZ8?2|$&+U70s3h8g#1)l!)2%nR`g=w0xxsZV(g3MWfqKWl?Ysu+6iyB% ztpruT*kx<9N37)!0x^TOuXSMs*>{q2KQ;hlRPe;V=52~fE2`F{R zGlXk93V%0iE=6^U4cP(_#Y7adMceW83&e5;(Eib#ULAk=(O>}_FG ztt)@rO39C-H&F%E#Hnf@4x80I>(Gw?5OY-hb5~~Ew24#D{&6f~6x+c@j8yYftCmSt zl)x! zo=k|{8qa@<0F)bQKoHQcG??SySP}>7Coy^lL@x0Nx?d%y7$)ug6=^i+z+9&oF*2$Q zu<2)7D!9IxkuPn&?f$4x1DgZ|*f{HDuVDWF5k)(0T02YkAu_o4okQMl95{Q70{=Cj z=xXLGgA3A-^RM5ykN1@$@A882@1vkQ6>x^93gR03M3MJtPyq097Ku6795;L6>+7}9 zr-v(N$lq^XN@VQO$C;g|UN;d!zNEiTgY0fbqY>9IrLd&HTw+8CkVxsiZ7tfj`)_lO zv`!PRs@Q*x3@UX&%@o=TnQu3R7dxcyYVd1QQ|K>OiN~J8+ctGau%aUOQBku{u_3A* z7l>_7tECp^6A$x^v!i#Sv|NqXD18gRni5@db9Jkm4d>xx9C`P4@?eA=B zfH@AgF*IoT+zR^a*PjVRJkjC{_C2u$(M;92<(MCIF`%`nRP;Wip>pg^hMV! zv6J-)W=SI$e6&qSzP?It@hOr=VT*&I{^R11IAzjc8-n;|M>}{2*)=9a?G%VH*%+zs z!-jn#rX=^dHpHPix{TInNQmioV3OQT9`Zczb!^s_bK$cq&Wm$LU&o$CE#&L0S3_Jn z+#Qi1b6!-Qf%~lAhfq!Tq$4bHm7ezUL~7z!t7qxn?vLVj?xeYi4!+0CzFt>k7vTSb zataq_RM4#1^!Pa#L>qzL*pq?F9~(An#`@ka!jphEV#dX`2=#p5wxyZ&*>lo5Aw&b8 zIv?Kr$@ZO4*KHE62b6-cxk3xq_`tO;Eqb>5C+-_Xqyja3sC{hIE$eqI{^!qvpXs0N z%-rpkyFhf@h9dV06^fTad1QW~$Nvi`qf6rIZ=DegXhlJ$Z=>x7wYA<7+ST3>toGjy zs6{$U)H&Ic%yju$WY?nFnQlf}s7xvFbAYrY$;AMf+e_kU1NO^DljL31NNQ%`veyAx zpjY^Vu%v{jfoPoCCMlF(g<yGj9Xss2w&kNZuQwRk4;lEyDFh8=X;D}W>E8aJJGxK=AVsah&Y6Um ziXNSb7+q*$e*?%tg}0(jVNhb^prZ{RQEoSTHc}Y&1J0lXezhJ)8jHPF`vx!7T_MJ( zLp@>WY<5(9fy(#e2YFv|Dh?W4cIqDp%M`{sqWVTsHVi|(tSyYS3|gIqh+$_2q00fa`3|J&-K#ap0|Q6m^^Iy{!(~xMZfjbTT#l}DPy3m z3T~%OWJg?EyZZ9v6WT$F&Zl9T$1f2xxz=TE_9k(v@;QM9q-K-;p2uI{2Qx+v>W3uK z3zeDXPscZZCU?_ja&y8e2pFMcMN?)X-p~rlSWrvqXBfbei>lZt(X*AX4mJlb(TJMO z=JCYfsNu}Z<~Af#f$FUNXWMFGClQC_Fk50UxQ@HOUdkKHU>ABa9B{&Uq}lRie?DTe zfiK8!uNt`TayyJfM)JS$JXzLJye9qUbd;5w3WOFZo>+gtyD9Lww7^f&hZeLOz*&^V zqpS=a3!jg$cCnD1IM*FpKntQkW_}ORl6;K2Y4i1$3!`+DMi{|cSr^L&l#_O)f~JML z05&62d>FAD+0RAS1aGp2O_~ThQ$nsT+?plqAtZ|^=bpTkc({C`gPXZ>BHaISf?D`= z-GTH92BP-Q7j_3pIWZizh|z{4EE?3|OWzKBbkM;SnsDt6s12Qw8^r;~bV)b?|70w- zwN)GSgf$uNt8t^uktD!}TON&&C8|gi3`k?#sCk>{V=>}XVSROjxY%Y<6Igs`JBQZ8 z2A(21>;`pLMpOve@3$igLeYWzEza1(l_S9)Nc>`yfO<=KTgwey{0M_%fJs6@qf+#+ z4@tpAI*K^yW8V{Mg65TD_KI$)k7=4by!_Tpf;od# zmG+<4h#G+yAu^y_gyV-5&FYWK*j`4qD0hLNOC*khKtS4)lSY%=sD~p-Mhp`BZ|H!@ z;cT)TJaCn?aZ2|h9x-A>{t+LarQsCg;0#`Fx8k~1y^pqWfF`4!8Y-Wsrwpkut*vOs zuHFx$cDZbdUM?q+@mVTq*D>EIw__?gi)Y`@%pdR^5os+&Kie>Au2%S8u@1q1#ybBI z@%(pO{{z-LK{y?KT>j6J_o>s-6GOERtq z60Byb2?;83V^xWx$Qs)-X!J{+qbBS-myJr(<8VGs$#*Vq2YzDni#nwr*{^)I=4sc$;ZTZltcxA0TF;T0N*zWCOTVSbTahI;0ZA3<0&Dqvjz^_M zBRItoRf+0)g*NiZuMe7ZsUCt-M(wBdbnU~#E!VmP6m|JfX9FTIbbXF1vkiQX?FANQ-nAW(%^8r39NlqL;$5rC=D+a%44A zc`mYik7XY5b_WHP<)+P+oYkGvg&-C2#&{IhYSPiW9vz2#>|J&+Pg4h3hbiuE_I;{e z!wvZj!S+rz&gM}&}|HY9761N-kBsY(C|M+6&e z?x*js(lhEa>}sv;;Z^FgdZqS9E!g%gtGq=78@*VcfZF&a%H~3Dt!;SOeM3yXQ~WVM z&G1pI)}2|MYNg=PShOWs`STp*fy~~l z@*}HUuH<@A&B_@tfSBU+A~mKovQnD=ZQRHF!0+4h_XFBj50-AXI4HoFb6m}M2FUNhObC;yP{xR zXbsgMJGX#7e}!blIy@RJ(k_w^omh6v3(Adfq#IR7OQVRLeE#bp(4~SKK&S5}p^XgI zq9y9Ch9uYBhTOE61)6jze793PZr7iSn^N0 z_@q(6nYEYMWjAg@n7#HXw*-9(X!5ac!uMYff4~zQ%JL%+meKv*zI0yCOGm>vVMJ!X z2~R^qH_`ecl~e}{vou+x^5dv5?ZV?{g>dd(k9sJ&jfnf#W97wPs1lPgR03=`98gYB zvqf!bMJT14F4o}N*cH7mg*H~CmltduVwEHh8UHO$>LO#)hX*|M#iU~gGVT6%NvS{Ehji2Hc6*pXFyA-jCrfFF!9~;`*JlS91 zUv=E&3~1$@t09KmlQ;>Ml!5|Z!p>EbnxltUc*&VvBhh?;Aq^EQq0+g?LZ`g`kyZNd|U(xC5f1m zD-0{eslV41f$0s^;WG@5nmF!WkM-K|5zLh#Q51nI=HMnQVm_dl_PFfT6L$_ZAlt)D zd%KDY16efn6c^8Bct{hub>uFBz&U1++@T=x4a>I43zHd|ssNXy*Bs8sZirQ7+$cJQ zxjmu^*PfwP=Qk&DCvO^`9L@FKLKcG`Do-EzF4ESZwtw+nF#75}4j*%ul=AeeO=+Z1 z$Yw_)RFgr^q`F+&hIPQDse9<}fDePmoG`+NEvI(8SQHAFGg*aJoXp1UaC=9JQm6*R zX-XIXA!}$)r-M?EwpGbW@Vqja!4&4*-QRa0tcSIR?@87!v z-E;tFs;>1X()pxG<+HZN7LTYja|<&|8w>#)hhpV{`S0F)@d6_0}&4 zTlG1Dt_{TctvbP?@LhK8BqQ{aB?GU};3xVP-k+P~fG!btGm4}+b@u{SQY zHkKp~?>1%Y`>F6s3U~1W*;AV0bamL_W=CwI*i?t1t3Rsg1ItLs4pLoY-!g60fxml( zZ|t96>dyI>>_lD%fi{)Zn7^G0BeOiQwWb%)WRkd7a9N3KwI^*-eb$aruYV!htaFnz ztW@2_IEEf#3#;P#$__uNaYWL$;?*njSMb$;Iz=7NML;`_obL1YDQH`V%N*n5v*^kW2N3O-WO7SD*@{a`lpHhz%G&DtXOvR#$|HrF>vranl#q~T+680cF#(BbiDzi z^S|EA{PU0o_Q|X@^M}?4kN`(_M1Uh962Nh%s-AAKctvNi*l--$>F5s2>4*!*>8M}d zQn^a8vHfGZX>cdAr?ekU8BS&+dge<$q7HZc!bo1Uk7kM=q_$X07*wv@1zfxPSUv}m zk7k7*R9&UWjjCDdo8EHzG0T1ae}WbLLL0*mB5F{90XVLFj6Ul6_e0fg;9CC&@mQ53 zIvq9OIvpild#ASu1f;h_e9*6dEAF)jW477LQu?uh{a4l9vPP!c7L3cC^KZD0%jZt! zw3f>E_46+FCb_NAy9?3{hzDJ23m<)zPaiYxX8sL%k-tUtt z==dhWZ+E6%Nb89L52=J+n7@wJU%Og2J^TDRTd$oBl9yPuaNS?!rGtR-buVk@CGewE zA9Lk#Kc7Wkt~Ly^aep}OgnM8+Ds}wI_c|hq?W3R2tK0U1doiq7`8V4UPp(q%oo@A= z^j;a+gqoEY-~{Fhloxtc8mm@J{Fu$)4z>KIrqBcA%U!Iz5_~Pn%Mi48W!9NR(Amao zwMG|Wtnc-eo+ufv`}i&y zOi|~&AI_l}u>k#0$PE2*pj!kHsE)q7NbGqD|9153l`n!9sE(WY{&LV&Q>OQXu?9Ev z@3&#}F8dz^MLwM9pZMG47%xKN;?&lQFoWMUM+EQxHY$(jar7HEu43X*Xm%qeScolH z$bLp6r>bMpg*di{I~YfbKd8^p&|#-u=nadKT{!plvWIH#dbTvf>=X6A!uIx~`nE&e zKMO_E9^UVJY|*LmYa*6C*%@ghv8heJNv+|kauzCk_;~vr$lip+T`tN~vg*4Mv9hJ) zg<`Y2C+i*s5XF8ZI$ZB=v+dUQ{MMJ4{M83VqhC=5AI8w6#pTatLpjPit+pGjiMkSd zdWV&t2ujut^aDH5P4cv4O+SDdww&#(g?x5J@S%g(F>9_!WUAqBjb&A&s28bvwxTm{ z&n3RY(fVzcH|jVfpB6>6&h$0W7G=vlY3b+PEd&l7dopUl^ILK(ofgl(Tc*&O-89S1V*@#c++~%r znHkQw2AE}|A90Gfzod{gHYEMb;g@3acvUa$+FuCMet-Hi;Htrtb-frt3RaV52kxOD z%g8b(oZ}~G0y4SY7VK7v`7r1;Q4bhb8oawzr}NoL z_*XxGxl2c?+Pk#`uOs&Wvabug^9Xn`{=7Sgj&iP9#-V$BJ*agYg{LOp&qb*nrO@!s zu(vvD)8ty4JuScJpFJ#;=$H9 zia%o1$i(?iv?Rh`&@{OzE(1>uweB`m7Q%0{K~w|NNQtD6)><8q&f^9;9veY~NwzCq zc~BUG8Vx|gblzO#P&9t~)otUj!h6UEab>t3DdT3et%jJIfTL=xDvS^yap0UGwIb+K zP9y^H3*H33`GX^}=mBK`+~hqAQ96ca!JI3HA$slpny@L2X@dBc{<=wRkNzfsG zT`8WEcc}rj)39?HiNupZtB4hV1H!_PeLd&2jx08<1${X~v*wp4Lfc=b=fyglMIg1) zZz7*_z10}%dc5>kwgm2$XNk$;r9YJoaXR-|zr4pWm(zZkk(o~R^840RRh!r!l@Wl* zTV)e?<>Xnfx`y_$8PaybZ#7t(f)XcoM=GDD>7zIQ!jp*J6GVtr|w1 zOa%vrJEOP3+1LK@@{SC5{cN|wiz;#I>k_gOkee2rpnOVPEW}g@ zjQz)6!ZT?t)psF5JIIW1B1O|VRdvPF2|w5mvZatn^^b2nKn0Wd_LJGuxlVi;i#95S zz`33-&_Hm#D&;G}$}PdpCCx;gxdwo7@L_KOwQiM-OP7Q$;;d;*pLdj5I9$GguQO*p zXNR6?<7ZQPkilF)!Uoz5mN_;`(A2j*3g-a(`5HdQCV8=I3pb`kVGY_*g-T^#cb7*7 zj-Np{QOsL+iCL}(0}3M41t2RI6STo13~- z(8wEq=9#j2-|@FU4o+D&RYC7qmH1(WBmF>Pwy9!Ke+T0-T+~tYHhch9&?%Tkm22P- zy=^CJ=jY89bTyk;q+UL+qXnQ87NWv|n6vW(~)1<$i#3a1uR zPA(5D!5d`7jOdT(8|By72F$(CKFz#z97@kT8-H~iyL6QJgfD5HXrXG6207GR5$HC+ zN8)dOAZX%MXt|N8+-TSyC*=fLqujK54G*kxI40hR4}%L6(k02emc>AusoE5M?%UtA?`6e}ijryozwbSxTL-7N0)|2R)+nizGvWaBtX^Y*HQM!6?n#8Wx+Pd;*K z9$Cn8JpaTu;6;|k$f}WWcvU*ubGq8YAKCTA^rBl!mIdqA@;QnjHRe|x5hksB%5C5U$T}Rsw-cM| z!8KYsS21yf2JVIF-Ueq)W2_jgE!Q#f*@0}eAt%1ODW1+A-k9fA1ftTcwMr(MkMRX_ zb&Yf6e?1$KEh;2q^w9hP>|gZ5h;VWtRXerr`TcZ36|lm+sZt78nBHoKl#W|zkJ*-- z&bKYvq?vug&tubpQuwxF2f%BW`B0&rxc{1n)a{M7?X-T&1hogTadS=jF1Fh0H4s<& zz0MO(hhG0FE~welz)d}k&%nox0mf>wIh}8BGma(AUn~xLu3Y3kcx!jl=iu2JJC?!> zCcN-CmKRN&zwJlx{*(kO?H&th+Ng^`t9m-0$O81WdCs2)8X!}F=q24{1KW)1%940J zG0<4KAkXExVa8Xkwa{j^9BE*rqRx*zs)_*yxz^s;Y!Y6#5GKL`-D(E1m!wwn&o81n zLjo8p!*&_4|JQuu#G}b0J&mUK67iN@&A)4(30|udF>|d0EHIbjRB93Xv|#9Vdp~k2 ze=a=;ngA?J4Zq}#V~cg@VeeVkfi1QDCwQ&N$b< gf0wKTAl^wAObq;K1;WQZeqe-<76*z|i0JwL4?2Kz9RL6T literal 0 HcmV?d00001 diff --git a/en/application-dev/reference/arkui-ts/Readme-CN.md b/en/application-dev/reference/arkui-ts/Readme-CN.md deleted file mode 100644 index 50acfac05c..0000000000 --- a/en/application-dev/reference/arkui-ts/Readme-CN.md +++ /dev/null @@ -1,132 +0,0 @@ -# reference/arkui-ts - -- Components - - Universal Components - - Universal Events - - [Click Event](ts-universal-events-click.md) - - [Touch Event](ts-universal-events-touch.md) - - [Show/Hide Event](ts-universal-events-show-hide.md) - - [Drag/Drop Event](ts-universal-events-drag-drop.md) - - [Key Event](ts-universal-events-key.md) - - [Focus Event](ts-universal-focus-event.md) - - [Mouse Event](ts-universal-mouse-key.md) - - [Component Area Change Event](ts-universal-component-area-change-event.md) - - Universal Attributes - - [Size](ts-universal-attributes-size.md) - - [Location](ts-universal-attributes-location.md) - - [Layout Constraints](ts-universal-attributes-layout-constraints.md) - - [Flex Layout](ts-universal-attributes-flex-layout.md) - - [Border](ts-universal-attributes-border.md) - - [Background](ts-universal-attributes-background.md) - - [Opacity](ts-universal-attributes-opacity.md) - - [Visibility](ts-universal-attributes-visibility.md) - - [Enable/Disable](ts-universal-attributes-enable.md) - - [Overlay](ts-universal-attributes-overlay.md) - - [Z-order Control](ts-universal-attributes-z-order.md) - - [Transformation](ts-universal-attributes-transformation.md) - - [Image Effect Configuration](ts-universal-attributes-image-effect.md) - - [Shape Clipping](ts-universal-attributes-sharp-clipping.md) - - [Text Style](ts-universal-attributes-text-style.md) - - [Grid](ts-universal-attributes-grid.md) - - [Gradient Color](ts-universal-attributes-gradient-color.md) - - [Popup Control](ts-universal-attributes-popup.md) - - [Menu Control](ts-universal-attributes-menu.md) - - [Click Control](ts-universal-attributes-click.md) - - [Focus Control](ts-universal-attributes-focus.md) - - [Hover Effect](ts-universal-attributes-hover-effect.md) - - [Component ID](ts-universal-attributes-component-id.md) - - [Touch Target](ts-universal-attributes-touch-target.md) - - [Polymorphic Style](ts-universal-attributes-polymorphic-style.md) - - Gesture Processing - - [Gesture Binding Methods](ts-gesture-settings.md) - - Basic Gestures - - [TapGesture](ts-basic-gestures-tapgesture.md) - - [LongPressGesture](ts-basic-gestures-longpressgesture.md) - - [PanGesture](ts-basic-gestures-pangesture.md) - - [PinchGesture](ts-basic-gestures-pinchgesture.md) - - [RotationGesture](ts-basic-gestures-rotationgesture.md) - - [SwipeGesture](ts-basic-gestures-swipegesture.md) - - [Combined Gestures](ts-combined-gestures.md) - - Basic Components - - [Blank](ts-basic-components-blank.md) - - [Button](ts-basic-components-button.md) - - [DataPanel](ts-basic-components-datapanel.md) - - [DatePicker](ts-basic-components-datepicker.md) - - [Divider](ts-basic-components-divider.md) - - [Image](ts-basic-components-image.md) - - [ImageAnimator](ts-basic-components-imageanimator.md) - - [Progress](ts-basic-components-progress.md) - - [QRCode](ts-basic-components-qrcode.md) - - [Rating](ts-basic-components-rating.md) - - [Select](ts-basic-components-rating.md) - - [Span](ts-basic-components-span.md) - - [Slider](ts-basic-components-slider.md) - - [Text](ts-basic-components-text.md) - - [TextArea](ts-basic-components-textarea.md) - - [TextInput](ts-basic-components-textinput.md) - - [TextPicker](ts-basic-components-textpicker.md) - - [TextTimer](ts-basic-components-texttimer.md) - - [Toggle](ts-basic-components-toggle.md) - - [TextClock](ts-basic-components-textclock.md) - - Container Components - - [AlphabetIndexer](ts-container-alphabet-indexer.md) - - [Badge](ts-container-badge.md) - - [Column](ts-container-column.md) - - [ColumnSplit](ts-container-columnsplit.md) - - [Counter](ts-container-counter.md) - - [Flex](ts-container-flex.md) - - [GridContainer](ts-container-gridcontainer.md) - - [Grid](ts-container-grid.md) - - [GridItem](ts-container-griditem.md) - - [List](ts-container-list.md) - - [ListItem](ts-container-listitem.md) - - [Navigator](ts-container-navigator.md) - - [Navigation](ts-basic-components-navigation.md) - - [Panel](ts-container-panel.md) - - [Row](ts-container-row.md) - - [RowSplit](ts-container-rowsplit.md) - - [Scroll](ts-container-scroll.md) - - [ScrollBar](ts-basic-components-scrollbar.md) - - [Stack](ts-container-stack.md) - - [Swiper](ts-container-swiper.md) - - [Tabs](ts-container-tabs.md) - - [TabContent](ts-container-tabcontent.md) - - Media Components - - [Video](ts-media-components-video.md) - - Drawing Components - - [Circle](ts-drawing-components-circle.md) - - [Ellipse](ts-drawing-components-ellipse.md) - - [Line](ts-drawing-components-line.md) - - [Polyline](ts-drawing-components-polyline.md) - - [Polygon](ts-drawing-components-polygon.md) - - [Path](ts-drawing-components-path.md) - - [Rect](ts-drawing-components-rect.md) - - [Shape](ts-drawing-components-shape.md) - - Canvas Components - - [Canvas](ts-components-canvas-canvas.md) - - [CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md) - - [OffscreenCanvasRenderingConxt2D](ts-offscreencanvasrenderingcontext2d.md) - - [Lottie](ts-components-canvas-lottie.md) - - [Path2D](ts-components-canvas-path2d.md) - - [CanvasGradient](ts-components-canvas-canvasgradient.md) - - [ImageBitmap](ts-components-canvas-imagebitmap.md) - - [ImageData](ts-components-canvas-imagedata.md) -- Animation - - [AnimatorProperty](ts-animatorproperty.md) - - [Explicit Animation](ts-explicit-animation.md) - - Transition Animation - - [Page Transition](ts-page-transition-animation.md) - - [Component Transition](ts-transition-animation-component.md) - - [Transition of Shared Elements](ts-transition-animation-shared-elements.md) - - [Motion Path Animation](ts-motion-path-animation.md) - - [Matrix Transformation](ts-matrix-transformation.md) - - [Interpolation Calculation](ts-interpolation-calculation.md) -- Global UI Methods - - [Image Cache](ts-methods-image-cache.md) - - [Media Query](ts-methods-media-query.md) - - Pop-up Window - - [Alert Dialog Box](ts-methods-alert-dialog-box.md) - - [Action Sheet](ts-methods-action-sheet.md) - - [Custom Dialog Box](ts-methods-custom-dialog-box.md) -- Appendix - - [Built-in Enums](ts-appendix-enums.md) diff --git a/en/application-dev/reference/arkui-ts/Readme-EN.md b/en/application-dev/reference/arkui-ts/Readme-EN.md new file mode 100644 index 0000000000..775bd3d067 --- /dev/null +++ b/en/application-dev/reference/arkui-ts/Readme-EN.md @@ -0,0 +1,136 @@ +# TypeScript-based Declarative Development Paradigm + +- [Components](ts-components.md) + - [Universal Components](ts-universal-components.md) + - [Universal Events](ts-universal-events.md) + - [Click Event](ts-universal-events-click.md) + - [Touch](ts-universal-events-touch.md) + - [Show/Hide Event](ts-universal-events-show-hide.md) + - [Key Event](ts-universal-events-key.md) + - [Component Area Change Event](ts-universal-events-component-area-change.md) + + - [Universal Attributes](ts-universal-attributes.md) + - [Size](ts-universal-attributes-size.md) + - [Location](ts-universal-attributes-location.md) + - [Layout Constraints](ts-universal-attributes-layout-constraints.md) + - [Flex Layout](ts-universal-attributes-flex-layout.md) + - [Border Configuration](ts-universal-attributes-border.md) + - [Background](ts-universal-attributes-background.md) + - [Opacity](ts-universal-attributes-opacity.md) + - [Visibility](ts-universal-attributes-visibility.md) + - [Enable/Disable](ts-universal-attributes-enable.md) + - [Overlay](ts-universal-attributes-overlay.md) + - [Z-order Control](ts-universal-attributes-z-order.md) + - [Transformation](ts-universal-attributes-transformation.md) + - [Image Effect Configuration](ts-universal-attributes-image-effect.md) + - [Shape Clipping](ts-universal-attributes-sharp-clipping.md) + - [Text Style](ts-universal-attributes-text-style.md) + - [Grid](ts-universal-attributes-grid.md) + - [Gradient Color](ts-universal-attributes-gradient-color.md) + - [Popup Control](ts-universal-attributes-popup.md) + - [Menu Control](ts-universal-attributes-menu.md) + - [Click Control](ts-universal-attributes-touchable.md) + - [Touch Target](ts-universal-attributes-response-region.md) + + - [Gesture Processing](ts-gesture-processing.md) + - [Gesture Binding Methods](ts-gesture-settings.md) + - [Basic Gestures](ts-basic-gestures.md) + - [TapGesture](ts-basic-gestures-tapgesture.md) + - [LongPressGesture](ts-basic-gestures-longpressgesture.md) + - [PanGesture](ts-basic-gestures-pangesture.md) + - [PinchGesture](ts-basic-gestures-pinchgesture.md) + - [RotationGesture](ts-basic-gestures-rotationgesture.md) + - [SwipeGesture](ts-basic-gestures-swipegesture.md) + + - [Combined Gestures](ts-combined-gestures.md) + + - [Basic Components](ts-basic-components.md) + - [Blank](ts-basic-components-blank.md) + - [Button](ts-basic-components-button.md) + - [DataPanel](ts-basic-components-datapanel.md) + - [Divider](ts-basic-components-divider.md) + - [Gauge](ts-basic-components-gauge.md) + - [Image](ts-basic-components-image.md) + - [ImageAnimator](ts-basic-components-imageanimator.md) + - [LoadingProgress](ts-basic-components-loadingprogress.md) + - [Marquee](ts-basic-components-marquee.md) + - [Progress](ts-basic-components-progress.md) + - [QRCode](ts-basic-components-qrcode.md) + - [Rating](ts-basic-components-rating.md) + - [Select](ts-basic-components-select.md) + - [Slider](ts-basic-components-slider.md) + - [Span](ts-basic-components-span.md) + - [Text](ts-basic-components-text.md) + - [TextArea](ts-basic-components-textarea.md) + - [TextInput](ts-basic-components-textinput.md) + - [Toggle](ts-basic-components-toggle.md) + - [TextClock](ts-basic-components-textclock.md) + + - [Container Components](ts-components-container.md) + - [AlphabetIndexer](ts-container-alphabet-indexer.md) + - [Badge](ts-container-badge.md) + - [Column](ts-container-column.md) + - [ColumnSplit](ts-container-columnsplit.md) + - [Counter](ts-container-counter.md) + - [Flex](ts-container-flex.md) + - [GridContainer](ts-container-gridcontainer.md) + - [Grid](ts-container-grid.md) + - [GridItem](ts-container-griditem.md) + - [List](ts-container-list.md) + - [ListItem](ts-container-listitem.md) + - [Navigator](ts-container-navigator.md) + - [Navigation](ts-container-navigation.md) + - [Panel](ts-container-panel.md) + - [Row](ts-container-row.md) + - [RowSplit](ts-container-rowsplit.md) + - [Scroll](ts-container-scroll.md) + - [ScrollBar](ts-container-scrollbar.md) + - [Stack](ts-container-stack.md) + - [Swiper](ts-container-swiper.md) + - [Tabs](ts-container-tabs.md) + - [TabContent](ts-container-tabcontent.md) + + - [Refresh](ts-container-refresh.md) + - [Drawing Components](ts-drawing-components.md) + + - [Circle](ts-drawing-components-circle.md) + - [Ellipse](ts-drawing-components-ellipse.md) + - [Line](ts-drawing-components-line.md) + - [Polyline](ts-drawing-components-polyline.md) + - [Polygon](ts-drawing-components-polygon.md) + - [Path](ts-drawing-components-path.md) + - [Rect](ts-drawing-components-rect.md) + - [Shape](ts-drawing-components-shape.md) + + - [Canvas Components](ts-components-canvas.md) + - [Canvas](ts-components-canvas-canvas.md) + - [CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md) + - [OffscreenCanvasRenderingConxt2D](ts-offscreencanvasrenderingcontext2d.md) + - [Lottie](ts-components-canvas-lottie.md) + - [Path2D](ts-components-canvas-path2d.md) + - [CanvasGradient](ts-components-canvas-canvasgradient.md) + - [ImageBitmap](ts-components-canvas-imagebitmap.md) + - [ImageData](ts-components-canvas-imagedata.md) +- [Animation](ts-animation.md) + - [Attribute Animation](ts-animatorproperty.md) + - [Explicit Animation](ts-explicit-animation.md) + - [Transition Animation](ts-transition-animation.md) + - [Page Transition](ts-page-transition-animation.md) + - [Component Transition](ts-transition-animation-component.md) + - [Transition of Shared Elements](ts-transition-animation-shared-elements.md) + + - [Motion Path Animation](ts-motion-path-animation.md) + - [Matrix Transformation](ts-matrix-transformation.md) + - [Interpolation Calculation](ts-interpolation-calculation.md) + +- [Global UI Methods](ts-global-ui-methods.md) + - [Alert Dialog Box](ts-methods-alert-dialog-box.md) + - [Custom Dialog box](ts-methods-custom-dialog-box.md) + - [Image Cache](ts-methods-image-cache.md) + - [Media Query](ts-methods-media-query.md) + - [List Selection Dialog Box](ts-methods-action-sheet.md) + +- [Appendix](ts-appendix.md) + + - [Built-in Enums](ts-appendix-enums.md) + diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898504.png b/en/application-dev/reference/arkui-ts/figures/1.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898504.png rename to en/application-dev/reference/arkui-ts/figures/1.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058401.png b/en/application-dev/reference/arkui-ts/figures/1111.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058401.png rename to en/application-dev/reference/arkui-ts/figures/1111.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898482.png b/en/application-dev/reference/arkui-ts/figures/11111-5.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898482.png rename to en/application-dev/reference/arkui-ts/figures/11111-5.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058500.png b/en/application-dev/reference/arkui-ts/figures/11111.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058500.png rename to en/application-dev/reference/arkui-ts/figures/11111.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058393.png b/en/application-dev/reference/arkui-ts/figures/2-01.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058393.png rename to en/application-dev/reference/arkui-ts/figures/2-01.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218464.gif b/en/application-dev/reference/arkui-ts/figures/222.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218464.gif rename to en/application-dev/reference/arkui-ts/figures/222.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218448.png b/en/application-dev/reference/arkui-ts/figures/2222.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218448.png rename to en/application-dev/reference/arkui-ts/figures/2222.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058456.gif b/en/application-dev/reference/arkui-ts/figures/5.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058456.gif rename to en/application-dev/reference/arkui-ts/figures/5.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978359.gif b/en/application-dev/reference/arkui-ts/figures/66666.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978359.gif rename to en/application-dev/reference/arkui-ts/figures/66666.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978387.gif b/en/application-dev/reference/arkui-ts/figures/alertdialog.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978387.gif rename to en/application-dev/reference/arkui-ts/figures/alertdialog.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378392.gif b/en/application-dev/reference/arkui-ts/figures/alphabetindexer.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378392.gif rename to en/application-dev/reference/arkui-ts/figures/alphabetindexer.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978345.gif b/en/application-dev/reference/arkui-ts/figures/animateto.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978345.gif rename to en/application-dev/reference/arkui-ts/figures/animateto.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898468.gif b/en/application-dev/reference/arkui-ts/figures/appear.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898468.gif rename to en/application-dev/reference/arkui-ts/figures/appear.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378444.gif b/en/application-dev/reference/arkui-ts/figures/attranimation.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378444.gif rename to en/application-dev/reference/arkui-ts/figures/attranimation.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898502.png b/en/application-dev/reference/arkui-ts/figures/back.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898502.png rename to en/application-dev/reference/arkui-ts/figures/back.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218470.gif b/en/application-dev/reference/arkui-ts/figures/badge.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218470.gif rename to en/application-dev/reference/arkui-ts/figures/badge.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858407.gif b/en/application-dev/reference/arkui-ts/figures/blank1.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858407.gif rename to en/application-dev/reference/arkui-ts/figures/blank1.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378418.gif b/en/application-dev/reference/arkui-ts/figures/blank2.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378418.gif rename to en/application-dev/reference/arkui-ts/figures/blank2.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898466.gif b/en/application-dev/reference/arkui-ts/figures/border.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898466.gif rename to en/application-dev/reference/arkui-ts/figures/border.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138341.gif b/en/application-dev/reference/arkui-ts/figures/button.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138341.gif rename to en/application-dev/reference/arkui-ts/figures/button.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978353.png b/en/application-dev/reference/arkui-ts/figures/circle.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978353.png rename to en/application-dev/reference/arkui-ts/figures/circle.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218452.png b/en/application-dev/reference/arkui-ts/figures/clip.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218452.png rename to en/application-dev/reference/arkui-ts/figures/clip.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218484.png b/en/application-dev/reference/arkui-ts/figures/colorgradient.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218484.png rename to en/application-dev/reference/arkui-ts/figures/colorgradient.png diff --git a/en/application-dev/reference/arkui-ts/figures/column.gif b/en/application-dev/reference/arkui-ts/figures/column.gif new file mode 100644 index 0000000000000000000000000000000000000000..3213fc124d255584be8f21a3074806c304953e7b GIT binary patch literal 8858 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 Nr)~74PV?3K{{hlfaKQio literal 0 HcmV?d00001 diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378446.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595214.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378446.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595214.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898520.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595216.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898520.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595216.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058411.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595220.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058411.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595220.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978347.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595224.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978347.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595224.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378404.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595226.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378404.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595226.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058498.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595228.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058498.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595228.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378438.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595230.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378438.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595230.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378406.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595232.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378406.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595232.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978351.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595234.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978351.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595234.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898488.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595238.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898488.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192595238.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058510.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755172.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058510.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755172.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978385.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755174.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978385.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755174.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898516.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755178.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898516.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755178.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378436.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755180.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378436.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755180.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898514.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755182.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898514.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755182.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218480.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755188.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218480.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755188.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378408.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755194.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378408.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192755194.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378412.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915130.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378412.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915130.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058466.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915154.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058466.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915154.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058445.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915158.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058445.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915158.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378434.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915162.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378434.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915162.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915178.gif b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915178.gif new file mode 100644 index 0000000000000000000000000000000000000000..b1808e80a0e4d055d54b886ecca3ddc8efa64b9a GIT binary patch literal 48849 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 literal 0 HcmV?d00001 diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978377.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915180.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978377.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915180.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978383.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915184.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978383.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001192915184.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978331.gif b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075122.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978331.gif rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075122.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058496.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075134.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058496.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075134.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138391.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075154.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138391.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075154.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898508.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075164.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898508.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075164.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858389.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075166.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858389.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075166.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218436.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075168.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218436.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075168.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378396.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075170.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378396.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075170.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858431.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075172.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858431.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075172.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218472.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075178.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218472.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075178.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058462.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075180.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058462.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193075180.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058431.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193321136.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058431.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193321136.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858421.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193321138.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858421.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193321138.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898510.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193322850.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898510.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193322850.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978375.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193322872.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978375.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193322872.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898472.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193322910.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898472.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193322910.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138373.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193436448.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138373.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193436448.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378414.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193481094.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378414.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193481094.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858423.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193481096.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858423.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193481096.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978373.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193481098.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978373.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193481098.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058409.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193482814.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058409.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193482814.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138379.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193482866.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138379.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193482866.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058397.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193641084.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058397.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193641084.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138347.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193641086.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138347.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193641086.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858427.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193642802.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858427.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193642802.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898480.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193642848.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898480.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193642848.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218440.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193737314.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218440.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193737314.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218466.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193756416.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218466.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193756416.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378430.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193801070.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378430.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193801070.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858393.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193801072.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858393.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193801072.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218438.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193802788.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218438.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193802788.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978343.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193802836.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978343.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001193802836.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058474.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001194605518.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058474.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001194605518.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058472.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001194911566.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058472.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001194911566.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858397.gif b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001194942468.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858397.gif rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001194942468.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001196780640.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001196780640.png new file mode 100644 index 0000000000000000000000000000000000000000..857e773f72d0cd7cd9ae13f50aa843a11aae4f97 GIT binary patch literal 13293 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
  • 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 I4gf3uAN4vvOaK4? diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058407.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058407.png deleted file mode 100644 index f2deeb8445fe0f3b66d2b0facbf9e0f0ed9911ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43629 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 diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058417.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058417.png deleted file mode 100644 index 999ad44c80a018d45353044e13923a8566bf3cf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12979 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 WOq7!Afj^qC-7_$~U7`2z`TqqbDzUBr diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138345.gif b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138345.gif deleted file mode 100644 index 32d2334360f9fd90afd1709f50a39add4e2196c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30068 zcmeF(c~p$=-#GB=zGt7NnyIO#)wGdH21)u@?rGC*T1^Y4RT7er^>a@}sW1p3ObMls zeP>!#LaAuONRk%PLZs$*eZHUX_j#V*dY<1o&!5kIj?-Z}o$hOSU)S}1zb;E$oo(lb zwt@{{3jl^ci698TuL>nECqG{YzQAd=6_0?xf3k#sz+c~XVRCYkE*wP=gdX^7cyh9T ze3C|^jf{+tg2t8n$Mu3L=t2FzCq{_D!)m_cYJS7&>gxUd{c1tOO8z6nkbVmb3sUIV zhYugr0{i^@{8+)i=ggVY-rlaGqvPP<&^9u0_UzfN@yW)<#-gGkrQojQT^m}-CcuD)Dsi~=2P}lZ? zk*ut&+fT-)MKos?f7^KEi($aWIS~z}L5-2=oykS*tB!Z;_zbiB8}*lWsd@Yk%4*XI z9tl4Dp}g()z0P0CeqDcTY+`s$DtYxLUH+~V+%)iec+2U2#`1Qv@Gjlp>aO8QUEzSS z&)b+I!;aBCQAazjcMM;7_4Q`sh=ylx)~$X*P`CNY)_KDBkr{0f`^JNgj)v{2O*rx4 ze$(W`H^Y}}#|xT&jwl8`j{T@>8+ra#ky0`&xjeA-_;5;gPyW;4^R+)umH#?l@hc#y zOV6*vF8G;ke3!9bIe-02ov?O|z&9Mf2J3aNxL(6rVIOt;`bYs^I6-Zs=r6WwKAA7A zHIMzS4wP?+}4!mr&S{*AG3^NeMsPMd07H@AX_&Zs}T zmnAl<`*kR-?lcW7D<~c0dNtjA(%&&QsUGsW`P)R(&q-ysR`V6N^#jVj{Fr?4O`#n) zK@xnp`$oZ7)z;iTUfutR==EJMxFJ#6x$DB0%>`eh&i~qQzSBOcaqgy772{f8e#}&VJV|&5k=1n+}w3&VDw>ukm2fc;?md%sajN zua3@LQFo?%)XeAA;VQ-1>p%BCQ|!Iiot!t6bZ&C~n%CBA+a>4P4&45lUNB}C{WRnJ zkH3cZf9|0w07BJsDUp^YQ`OBws!MXqQ<=tYIWAZ8Dl<59Vmhj?o_%tF>yWPJdM&@^ zu$k}0keX}fo~BUZskk67l&C=_K9JYXuB0Ib0^S0qNiwd?4SCtZ1y6SGvEI+A=9U@J zRWV;jQR0USsk(Ghn!be$6J87VC-W_CMcLn&zoDR57J%E|i#0V6cpsZ)&yH-M&lS!a zD7`wrMyDl4%~5n~no7Kxr4)6e?p9tfw?#Y@mFnEu?GaN#{HR4#&75IhvN5tOY!0)_ z;#GdkRSI=~WO1C~CZVi0WOkomFq31?q_*>`GtsnQFj zPKD`0wXz|?-G}NG=G@9nhr=6H^DpH|h26x}X-C@YOMcf>va&eah^tf2BoyxT7w@o% zT~@!AnUx~P5?eoU`MDEhH4%CzGIR^b=W4F`Iy$d0R0}ZhRxUIEwrQpvC#Ia%_C92kM$$ZFK__yR8K#AKk%_g1dCUFiQlfq0H%uur_upm~yq$h+XI$ww7y|S%2F9;+6Kc z$}B0^W>$YLeKqIhrIyX^FL&h`P@8Tlm+VUqjILT- zy0X}S(JvjGT^#rD%w<#T5&CejGal8u`bE}y+5(SN{cxQ3@LPQGx|2yp?kf&8Mmh3I z4gS!*R&KJUopYEb;v36 z^6^dgbf0bwKHxqrG3@0$2aBUsb5py`UK{OPV|6+L#Vs!qmbcBd7tG!)dj;YY!cFBR zxi+WPRbotWw70(Rcpc^IwH=!OYm{~hEM#G+iQ$%9e43_6qfb3B}$GV9n9^j_z-&|MZ6=IR$>Ek zX7<+$?^)On&<|zb8Nk(lzm#hmv-tl&YNjP*UyCUCG7)nGv@<9gfJZ-jXtQ$-Dc=vSIuSut(V_4x`Mu@oU{7#TzidY~mJ zqRhe2p~4q??3%KpH~=*(!Dn_{<3_}Z8B{Ssw}s&{vB2fZPj@v-DQjxtDo6G~9I+K4 z%5i3Psf90geOE`kMd$c*DS6HJ*{85mg>(OGeYwjji$XQT*uRhCl0zef*xd7;;zF@% zL6+h4O%x@LoloIK^)pKKg_sUa>BQ#IV&#c*f$DJ$VxbsSa_Vz=Mz7meB_%Igo;Fh` zMHsd>&kH>J79G&W{TLMoIQ6(FneLyv$eOHbYYAL(TOMyaa@AY^B5%3*s|T7XAT(Nr z8p!<;tX|zk4Ha(M7hTcwG_J5 zzy+6NB@d#^=JIRHJ;Z7ZM6;+4hWkxD|%#Fs>2A_k-<-wbrlL6p*pg2Z=$GN<$o z(GZZUPkR07<$t#�*VIe>)#=b;lm|$4(db4c5}z?t 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 diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138355.gif b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138355.gif deleted file mode 100644 index c269eab06d9dd52463481510edc7089be19cb2b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153801 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®d}~xs?fS15AMZDB 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

    9orL#F62q=1rtQ@;SPBZd|h=~zwrO~ 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

    >tX9fwF4+cwD)IpItY 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 DN9Q5S literal 0 HcmV?d00001 diff --git a/en/application-dev/reference/arkui-ts/figures/gif.gif b/en/application-dev/reference/arkui-ts/figures/gif.gif new file mode 100644 index 0000000000000000000000000000000000000000..8eceb3bf5313485a1fedda5768e70cdb5febc464 GIT binary patch literal 83395 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 +- **[Attribute Animation](ts-animatorproperty.md)** +- **[Explicit Animation](ts-explicit-animation.md)** -- **[AnimatorProperty](ts-animatorproperty.md)** +- **[Transition Animation](ts-transition-animation.md)** -- **[Explicit Animation](ts-explicit-animation.md)** +- **[Motion Path Animation](ts-motion-path-animation.md)** -- **[Transition Animation](ts-transition-animation.md)** +- **[Matrix Transformation](ts-matrix-transformation.md)** -- **[Motion Path Animation](ts-motion-path-animation.md)** +- **[Interpolation Calculation](ts-interpolation-calculation.md)** -- **[Matrix Transformation](ts-matrix-transformation.md)** -- **[Interpolation Calculation](ts-interpolation-calculation.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-animatorproperty.md b/en/application-dev/reference/arkui-ts/ts-animatorproperty.md index f7073f5ef9..1e78fb758a 100644 --- a/en/application-dev/reference/arkui-ts/ts-animatorproperty.md +++ b/en/application-dev/reference/arkui-ts/ts-animatorproperty.md @@ -1,42 +1,148 @@ -# AnimatorProperty +# Attribute Animation +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This gesture is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +When the universal attributes of a component change, you can create an **AnimatorProperty** for gradient to improve user experience. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    duration

    +

    number

    +

    1000

    +

    Animation duration, in ms. The default duration is 1000 ms.

    +

    curve

    +

    Curve

    +

    Linear

    +

    The default curve is linear. For details about the valid values, see Curve enums.

    +

    delay

    +

    number

    +

    0

    +

    Delay of animation playback, in ms. By default, the playback is not delayed.

    +

    iterations

    +

    number

    +

    1

    +

    Number of times that the animation is played. By default, the animation is played once. The value -1 indicates that the animation is played for an unlimited number of times.

    +

    playMode

    +

    PlayMode

    +

    Normal

    +

    Playback mode. By default, the animation is played from the beginning after the playback is complete.

    +
    -When the universal attributes of a component change, you can create an **AnimatorProperty** for gradient to improve user experience. +- Curve enums + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Linear

    +

    The animation speed keeps unchanged.

    +

    Ease

    +

    The animation starts at a low speed and then accelerates. It slows down before the animation ends. The cubic-bezier curve (0.25, 0.1, 0.25, 1.0) is used.

    +

    EaseIn

    +

    The animation starts at a low speed. The cubic-bezier curve (0.42, 0.0, 1.0, 1.0) is used.

    +

    EaseOut

    +

    The animation ends at a low speed. The cubic-bezier curve (0.0, 0.0, 0.58, 1.0) is used.

    +

    EaseInOut

    +

    The animation starts and ends at a low speed. The cubic-bezier curve (0.42, 0.0, 0.58, 1.0) is used.

    +

    FastOutSlowIn

    +

    The animation uses the standard cubic-bezier curve (0.4, 0.0, 0.2, 1.0).

    +

    LinearOutSlowIn

    +

    The animation uses the deceleration cubic-bezier curve (0.0, 0.0, 0.2, 1.0).

    +

    FastOutLinearIn

    +

    The animation uses the acceleration cubic-bezier curve (0.4, 0.0, 1.0, 1.0).

    +

    ExtremeDeceleration

    +

    The animation uses the extreme deceleration cubic-bezier curve (0.0, 0.0, 0.0, 1.0).

    +

    Sharp

    +

    The animation uses the sharp cubic-bezier curve (0.33, 0.0, 0.67, 1.0).

    +

    Rhythm

    +

    The animation uses the rhythm cubic-bezier curve (0.7, 0.0, 0.2, 1.0).

    +

    Smooth

    +

    The animation uses the smooth cubic-bezier curve (0.4, 0.0, 0.4, 1.0).

    +

    Friction

    +

    Damping curve. The cubic-bezier curve (0.2, 0.0, 0.2, 1.0) is used.

    +
    -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| duration | number | 1000 | Animation duration, in ms. The default duration is 1000 ms. | -| curve | Curve | Curve.Linear | Animation curve. The default curve is linear. | -| delay | number | 0 | Delay of animation playback, in ms. By default, the playback is not delayed. | -| iterations | number | 1 | Number of times that the animation is played. By default, the animation is played once. The value **-1** indicates that the animation is played for an unlimited number of times. | -| playMode | [PlayMode](ts-appendix-enums.md#playmode-enums) | PlayMode.Normal | Playback mode. By default, the animation is played from the beginning after the playback is complete. | - - -- Curve enums - | Name | Description | - | -------- | -------- | - | Linear | The animation speed keeps unchanged. | - | Ease | The animation starts at a low speed and then accelerates. It slows down before the animation ends. The cubic-bezier curve (0.25, 0.1, 0.25, 1.0) is used. | - | EaseIn | The animation starts at a low speed. The cubic-bezier curve (0.42, 0.0, 1.0, 1.0) is used. | - | EaseOut | The animation ends at a low speed. The cubic-bezier curve (0.0, 0.0, 0.58, 1.0) is used. | - | EaseInOut | The animation starts and ends at a low speed. The cubic-bezier curve (0.42, 0.0, 0.58, 1.0) is used. | - | FastOutSlowIn | The animation uses the standard cubic-bezier curve (0.4, 0.0, 0.2, 1.0). | - | LinearOutSlowIn | The animation uses the deceleration cubic-bezier curve (0.0, 0.0, 0.2, 1.0). | - | FastOutLinearIn | The animation uses the acceleration cubic-bezier curve (0.4, 0.0, 1.0, 1.0). | - | ExtremeDeceleration | The animation uses the extreme deceleration cubic-bezier curve (0.0, 0.0, 0.0, 1.0). | - | Sharp | The animation uses the sharp cubic-bezier curve (0.33, 0.0, 0.67, 1.0). | - | Rhythm | The animation uses the rhythm cubic-bezier curve (0.7, 0.0, 0.2, 1.0). | - | Smooth | The animation uses the smooth cubic-bezier curve (0.4, 0.0, 0.4, 1.0). | - | Friction | Damping curve. The cubic-bezier curve (0.2, 0.0, 0.2, 1.0) is used. | - - -## Example +## Example ``` @Entry @@ -72,4 +178,5 @@ struct AttrAnimationExample { } ``` -![en-us_image_0000001212378444](figures/en-us_image_0000001212378444.gif) +![](figures/attranimation.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-appendix-enums.md b/en/application-dev/reference/arkui-ts/ts-appendix-enums.md index b45cb8914b..0947abd408 100644 --- a/en/application-dev/reference/arkui-ts/ts-appendix-enums.md +++ b/en/application-dev/reference/arkui-ts/ts-appendix-enums.md @@ -1,103 +1,300 @@ -# Built-in Enums +# Built-in Enums +## Alignment Enums -## Alignment Enums + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    TopStart

    +

    Top start.

    +

    Top

    +

    Horizontally centered on the top.

    +

    TopEnd

    +

    Top end.

    +

    Start

    +

    Vertically centered start.

    +

    Center

    +

    Horizontally and vertically centered.

    +

    End

    +

    Vertically centered end.

    +

    BottomStart

    +

    Bottom start.

    +

    Bottom

    +

    Horizontally centered on the bottom.

    +

    BottomEnd

    +

    Bottom end.

    +
    - | Name | Description | -| -------- | -------- | -| TopStart | Top start. | -| Top | Horizontally centered on the top. | -| TopEnd | Top end. | -| Start | Vertically centered start. | -| Center | Horizontally and vertically centered. | -| End | Vertically centered end. | -| BottomStart | Bottom start. | -| Bottom | Horizontally centered on the bottom. | -| BottomEnd | Bottom end. | +## Axis enums + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Vertical

    +

    Vertical direction.

    +

    Horizontal

    +

    Horizontal direction.

    +
    -## Axis Enums +## ItemAlign Enums - | Name | Description | -| -------- | -------- | -| Vertical | Vertical direction. | -| Horizontal | Horizontal direction. | + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Auto

    +

    The default configuration in the Flex container is used.

    +

    Start

    +

    The elements are in the Flex container, top-aligned in the cross-axis direction

    +

    Center

    +

    The elements are in the Flex container, centered in the cross-axis direction.

    +

    End

    +

    The elements are in the Flex container, bottom-aligned in the cross-axis direction.

    +

    Stretch

    +

    The elements are in the Flex container, stretched and padded in the cross-axis direction. If the size is not set, the elements are stretched to the container size.

    +

    Baseline

    +

    The elements are in the Flex container, text baseline aligned in the cross-axis direction.

    +
    +## LineCapStyle Enums -## ItemAlign Enums + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Butt

    +

    The ends of dividing lines are square.

    +

    Round

    +

    The ends of dividing lines are rounded.

    +

    Square

    +

    The ends of dividing lines are square.

    +
    - | Name | Description | -| -------- | -------- | -| Auto | The default configuration in the Flex container is used. | -| Start | The elements are in the Flex container, top-aligned in the cross-axis direction | -| Center | The elements are in the Flex container, centered in the cross-axis direction. | -| End | The elements are in the Flex container, bottom-aligned in the cross-axis direction. | -| Stretch | The elements are in the Flex container, stretched and padded in the cross-axis direction. If the size is not set, the elements are stretched to the container size. | -| Baseline | The elements are in the Flex container, text baseline aligned in the cross-axis direction. | +## PlayMode Enums + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Normal

    +

    The animation is played normally.

    +

    Reverse

    +

    The animation is played reversely.

    +

    Alternate

    +

    The animation is played normally for an odd number of times (1, 3, 5...) and reversely for an even number of times (2, 4, 6...).

    +

    AlternateReverse

    +

    The animation is played reversely for an odd number of times (1, 3, 5...) and normally for an even number of times (2, 4, 6...).

    +
    -## LineCapStyle Enums +## ImageRepeat Enums - | Name | Description | -| -------- | -------- | -| Butt | The ends of dividing lines are square. | -| Round | The ends of dividing lines are rounded. | -| Square | The ends of dividing lines are square. | + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    X

    +

    Images are repeatedly drawn only on the horizontal axis.

    +

    Y

    +

    Images are repeatedly drawn only on the vertical axis.

    +

    XY

    +

    Images are repeatedly drawn on both axes.

    +

    NoRepeat

    +

    Images are not repeatedly drawn.

    +
    +## TextDecorationType Enums -## PlayMode Enums + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Underline

    +

    Line under the text.

    +

    LineThrough

    +

    Line through the text.

    +

    Overline

    +

    Line over the text.

    +

    None

    +

    No decorative lines.

    +
    - | Name | Description | -| -------- | -------- | -| Normal | The animation is played normally. | -| Reverse | The animation is played reversely. | -| Alternate | The animation is played normally for an odd number of times (1, 3, 5...) and reversely for an even number of times (2, 4, 6...). | -| AlternateReverse | The animation is played reversely for an odd number of times (1, 3, 5...) and normally for an even number of times (2, 4, 6...). | +## TextCase Enums + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Normal

    +

    Normal case.

    +

    LowerCase

    +

    All lowercase.

    +

    UpperCase

    +

    All uppercase.

    +
    -## ImageRepeat Enums +## BarState Enums - | Name | Description | -| -------- | -------- | -| X | Images are repeatedly drawn only on the horizontal axis. | -| Y | Images are repeatedly drawn only on the vertical axis. | -| XY | Images are repeatedly drawn on both axes. | -| NoRepeat | Images are not repeatedly drawn. | - - -## TextDecorationType Enums - - | Name | Description | -| -------- | -------- | -| Underline | Line under the text. | -| LineThrough | Line through the text. | -| Overline | Line over the text. | -| None | No decorative lines. | - - -## TextCase Enums - - | Name | Description | -| -------- | -------- | -| Normal | Normal case. | -| LowerCase | All lowercase. | -| UpperCase | All uppercase. | - - -## BarState Enums - - | Name | Description | -| -------- | -------- | -| Off | Hide. | -| On | Display. | -| Auto | Display on demand (displays when the screen is touched and disappears after 2s). | - -## LayoutDirection Enums - -| Name | Description | -| ------------- | ------------------------------------------------------------ | -| Row | The child components are arranged in the same direction as the main axis runs along the rows. | -| Column | The child components are arranged in the same direction as the main axis runs down the columns. | -| RowReverse | The child components are arranged opposite to the **Row** direction. | -| ColumnReverse | The child components are arranged opposite to the **Column** direction. | + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Off

    +

    Hide.

    +

    On

    +

    Display.

    +

    Auto

    +

    Display on demand (displays when the screen is touched and disappears after 2s).

    +
    diff --git a/en/application-dev/reference/arkui-ts/ts-appendix.md b/en/application-dev/reference/arkui-ts/ts-appendix.md index 1c5695fcbd..3ba8ba978e 100644 --- a/en/application-dev/reference/arkui-ts/ts-appendix.md +++ b/en/application-dev/reference/arkui-ts/ts-appendix.md @@ -1,5 +1,5 @@ -# Appendix +# Appendix +- **[Built-in Enums](ts-appendix-enums.md)** -- **[Built-in Enums](ts-appendix-enums.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-blank.md b/en/application-dev/reference/arkui-ts/ts-basic-components-blank.md index 12a4e44539..d005082951 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-blank.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-blank.md @@ -1,46 +1,82 @@ -# Blank +# Blank +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component supports automatic filling of the empty part of the container along the main axis. This component is valid only when the parent component is **** or ****. - -The **<Blank>** component supports automatic filling of the empty part of the container along the main axis. This component is valid only when the parent component is **<Row>** or **<Column>**. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None +## APIs + +Blank\(min?: Length\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    min

    +

    Length

    +

    No

    +

    0

    +

    Minimum size of the <Blank> component in the container along the main axis.

    +
    + + +## Attributes + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    color

    +

    Color

    +

    0x00000000

    +

    Color to fill the blank.

    +
    + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>- Universal attribute methods are not supported. + +## Example -## APIs - -Blank(min?: Length) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | min | Length | No | 0 | Minimum size of the **<Blank>** component in the container along the main axis. | - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| color | Color | 0x00000000 | Color to fill the blank. | - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> - Universal attribute methods are not supported. - - -## Example - - ``` @Entry @Component @@ -59,8 +95,9 @@ struct BlankExample { Portrait mode -![en-us_image_0000001256858407](figures/en-us_image_0000001256858407.gif) +![](figures/blank1.gif) Landscape mode -![en-us_image_0000001212378418](figures/en-us_image_0000001212378418.gif) +![](figures/blank2.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-button.md b/en/application-dev/reference/arkui-ts/ts-basic-components-button.md index ef11b28c35..8f39a509ef 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-button.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-button.md @@ -1,67 +1,175 @@ -# Button +# Button +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component represents a component that can trigger actions. - -The **<Button>** component represents a component that can trigger actions. - - -## Required Permissions +## Required Permissions None - -## Child Component - -This component can contain child components. - - -## APIs - -- Button(options?: {type?: ButtonType, stateEffect?: boolean}) - **Table1** options parameters - - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | type | ButtonType | No | Capsule | Button type. | - | stateEffect | boolean | No | true | Whether to enable the state switchover effect when a button is pressed. When the state is set to **false**, the state switchover effect is disabled. | - - -- Button(label?: string, options?: { type?: ButtonType, stateEffect?: boolean }) - Creates a button component based on text content. In this case, the **<Button>** component cannot contain subcomponents. - - **Table2** value parameters - - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | label | string | No | - | Button text. | - | options | Object | No | - | For details, see the **options** parameters. | - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| type | ButtonType | Capsule | Button type. | -| stateEffect | boolean | true | Whether to enable the state switchover effect. When the state is set to **false**, the state switchover effect is disabled. | - -- ButtonType enums - | Name | Description | - | -------- | -------- | - | Capsule | Capsule-type button (the round corner is half of the height by default). | - | Circle | Circle button. | - | Normal | Normal button (without rounded corners by default). | - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> - The rounded corner of a button is set by using [Border](ts-universal-attributes-border.md). (The rounded corner cannot be set by using a border API.) -> -> - The button text is set using the [common text style](ts-universal-attributes-text-style.md). - - -## Example - +## Child Components + +This component can contain a single child component. + +## APIs + +- Button\(options?: \{type?: ButtonType, stateEffect?: boolean\}\) + + **Table 1** **options** parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    type

    +

    ButtonType

    +

    No

    +

    Capsule

    +

    Button type.

    +

    stateEffect

    +

    boolean

    +

    No

    +

    true

    +

    Whether to enable the state switchover effect when a button is pressed. When the state is set to false, the state switchover effect is disabled.

    +
    + + +- Button\(label?: string, options?: \{ type?: ButtonType, stateEffect?: boolean \}\) + + Creates a button component based on text content. In this case, the **** component cannot contain subcomponents. + + **Table 2** **value** parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    label

    +

    string

    +

    No

    +

    -

    +

    Button text.

    +

    options

    +

    Object

    +

    No

    +

    -

    +

    For details, see the options parameters.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    type

    +

    ButtonType

    +

    Capsule

    +

    Button type.

    +

    stateEffect

    +

    boolean

    +

    true

    +

    Whether to enable the state switchover effect. When the state is set to false, the state switchover effect is disabled.

    +
    + +- ButtonType enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Capsule

    +

    Capsule-type button (the round corner is half of the height by default).

    +

    Circle

    +

    Circle button.

    +

    Normal

    +

    Normal button (without rounded corners by default).

    +
    + + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>- The rounded corner of a button is set by using [**borderRadius**](ts-universal-attributes-border.md). \(The rounded corner cannot be set by using a border API.\) +>- The button text is set using the [common text style](ts-universal-attributes-text-style.md). + +## Example ``` @Entry @@ -112,4 +220,5 @@ struct ButtonExample { } ``` -![en-us_image_0000001257138341](figures/en-us_image_0000001257138341.gif) +![](figures/button.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-datapanel.md b/en/application-dev/reference/arkui-ts/ts-basic-components-datapanel.md index 5369c7767e..2045636c93 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-datapanel.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-datapanel.md @@ -1,44 +1,96 @@ -# DataPanel +# DataPanel +The **** component displays proportions in a chart. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -The **<DataPanel>** component displays proportions in a chart. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None - -## APIs - -DataPanel(value:{values: number[], max?: number, type?: DataPanelType}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | values | number[] | Yes | - | Value list. A maximum of nine values are supported. | - | max | number | No | 100 | - When set to a value greater than 0, this parameter indicates the maximum value in the **values** list.
    - When set to a value equal to or smaller than 0, this parameter indicates the sum of values in the **values** list. The values are displayed in proportion. | - | type8+ | DataPanelType | No | DataPanelType.Circle | Type of the data panel. | - - -- DataPanelType enums - | Name | Description | - | -------- | -------- | - | Line | Line data panel. | - | Circle | Circle data panel. | - - -## Example - +## APIs + +DataPanel\(value:\{values: number\[\], max?: number, type?: DataPanelType\}\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    values

    +

    number[]

    +

    Yes

    +

    -

    +

    Value list. A maximum of nine values are supported.

    +

    max

    +

    number

    +

    No

    +

    100

    +

    1. When set to a value greater than 0, this parameter indicates the maximum value in the values list.

    +

    2. When set to a value equal to or smaller than 0, this parameter indicates the sum of values in the values list. The values are displayed in proportion.

    +

    type8+

    +

    DataPanelType

    +

    No

    +

    DataPanelType.Circle

    +

    Type of the data panel.

    +
    + + +- DataPanelType enums + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Line

    +

    Line data panel.

    +

    Circle

    +

    Circle data panel.

    +
    + + +## Example ``` @Entry @@ -58,4 +110,5 @@ struct DataPanelExample { } ``` -![en-us_image_0000001211898476](figures/en-us_image_0000001211898476.jpg) +![](figures/datapanel.jpg) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-datepicker.md b/en/application-dev/reference/arkui-ts/ts-basic-components-datepicker.md deleted file mode 100644 index 28230a8c6c..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-datepicker.md +++ /dev/null @@ -1,153 +0,0 @@ -# DatePicker - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -The **<DatePicker>** component allows users to select date and time. - - -## Required Permissions - -None - - -## Child Component - -None - - -## APIs - -DatePicker(value:{start?: Date, end?: Date, selected?: Date, type?: DatePickerType}) - -Creates a date picker that allows users to select a date or time within the specified range. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | start | Date | No | Date('1970-1-1') | Start date of the date picker. | - | end | Date | No | Date('2100-12-31') | End date of the date picker. | - | selected | Date | No | Current system date or time | Selected date when **type** is set to **DatePickerType.Date** and selected time when **type** is set to **DatePickerType.Time**. | - | type | DatePickerType | No | DatePickerType.Date | Picker type, which can be date picker and time picker. The date picker is used by default. | - -- DatePickerType enums - | Name | Description | - | -------- | -------- | - | Date | Date picker. | - | Time | Time picker. | - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- |-------- | -| lunar | boolean | false | Whether to display the lunar calendar.
    - **true**: The lunar calendar is displayed.
    - **false**: The lunar calendar is not displayed. | -| useMilitaryTime | boolean | false | Whether the display time is in 24-hour format. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onChange(callback: (value: DatePickerResult) => void) | This event is triggered when a date or time is selected. | - -- DatePickerResult object description - | Name | Type | Description | - | -------- | -------- | -------- | - | year | number | Year of the selected date (when **type** is **DatePickerType.Date**). | - | month | number | Month of the selected date (when **type** is **DatePickerType.Date**). | - | day | number | Date of the selected date (when **type** is **DatePickerType.Date**). | - | hour | number | Hour portion of the selected time (when **type** is **DatePickerType.Time**). | - | minute | number | Minute portion of the selected time (when **type** is **DatePickerType.Time**). | - - -## Example - - -### Date Picker (with Lunar Calendar) - - -``` -@Entry -@Component -struct DatePickerExample01 { - private selectedDate: Date = new Date('2021-08-08') - - build() { - Column() { - DatePicker({ - start: new Date('1970-1-1'), - end: new Date('2200-1-1'), - selected: this.selectedDate, - type: DatePickerType.Date - }) - .lunar(true) - .onChange((date: DatePickerResult) => { - console.info('select current date is: ' + JSON.stringify(date)) - }) - }.width('100%') - } -} -``` - -![en-us_image_0000001211898486](figures/en-us_image_0000001211898486.gif) - - -### Date Picker (Without Lunar Calendar) - - -``` -@Entry -@Component -struct DatePickerExample02 { - private selectedDate: Date = new Date('2021-08-08') - - build() { - Column() { - DatePicker({ - start: new Date('1970-1-1'), - end: new Date('2200-1-1'), - selected: this.selectedDate, - type: DatePickerType.Date - }) - .lunar(false) - .onChange((date: DatePickerResult) => { - console.info('select current date is: ' + JSON.stringify(date)) - }) - }.width('100%') - } -} -``` - -![en-us_image_0000001257138355](figures/en-us_image_0000001257138355.gif) - - -### Time Picker - - -``` -@Entry -@Component -struct DatePickerExample03 { - private selectedTime: Date = new Date('2021-9-29 08:00:00') - - build() { - Column() { - DatePicker({ - start: new Date('00:00:00'), - end: new Date('23:59:59'), - selected: this.selectedTime, - type: DatePickerType.Time - }) - .useMilitaryTime(true) - .onChange((date: DatePickerResult) => { - console.info('select current date is: ' + JSON.stringify(date)) - }) - }.width('100%') - } -} -``` - -![en-us_image_0000001256858401](figures/en-us_image_0000001256858401.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-divider.md b/en/application-dev/reference/arkui-ts/ts-basic-components-divider.md index 748bdec42a..975737f94d 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-divider.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-divider.md @@ -1,45 +1,79 @@ -# Divider +# Divider +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used to separate content blocks and content elements. - -The **<Divider>** component is used to separate content blocks and content elements. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None - -## APIs - -Divider() - - -## Attributes - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| vertical | boolean | false | Whether a vertical divider is used. The value **true** means that a vertical divider is used, and **false** means that a horizontal divider is used. | -| color | Color | - | Color of the divider. | -| strokeWidth | Length | 1 | Width of the divider. | -| lineCap | [LineCapStyle](ts-appendix-enums.md#linecapstyle-enums) | LineCapStyle.Butt | Cap style of the divider. | - - -## Events +## APIs + +Divider\(\) + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    vertical

    +

    boolean

    +

    false

    +

    Whether a vertical divider is used. The value true means that a vertical divider is used, and false means that a horizontal divider is used.

    +

    color

    +

    Color

    +

    -

    +

    Color of the divider.

    +

    strokeWidth

    +

    Length

    +

    1

    +

    Width of the divider.

    +

    lineCap

    +

    LineCapStyle

    +

    Butt

    +

    Cap style of the divider. The default value is Butt.

    +
    + +## Events Universal events are not supported. - -## Example - +## Example ``` @Entry @@ -70,4 +104,5 @@ struct DividerExample { } ``` -![en-us_image_0000001257058407](figures/en-us_image_0000001257058407.png) +![](figures/en-us_image_0000001196780640.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-gauge.md b/en/application-dev/reference/arkui-ts/ts-basic-components-gauge.md new file mode 100644 index 0000000000..1f6b9bc92c --- /dev/null +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-gauge.md @@ -0,0 +1,152 @@ +# Gauge + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. + +Data gauge chart widget, which is used to display data in a ring chart. + +## Required Permissions + +None + +## Child Component + +N/A + +## APIs + +Gauge\(value:\{value: number, min?: number, max?: number\}\) + +- Parameter + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    value

    +

    number

    +

    Yes

    +

    -

    +

    Current data value.

    +

    min

    +

    number

    +

    No

    +

    0

    +

    Minimum value of the current data segment.

    +

    max

    +

    number

    +

    No

    +

    100

    +

    Maximum value of the current data segment.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    value

    +

    number

    +

    0

    +

    Sets the value of the current data chart.

    +

    startAngle

    +

    Angle

    +

    -150

    +

    Set the start angle. Clock 0 indicates 0 degree, and the clockwise direction indicates the positive angle.

    +

    endAngle

    +

    Angle

    +

    150

    +

    Sets the end angle position. The clock 0 point is 0 degree, and the clockwise direction is the positive angle.

    +

    colors

    +

    Color | Array<ColorStop>

    +

    -

    +

    Set the color of the chart. You can set the pure color or segmental gradient color.

    +

    strokeWidth

    +

    Length

    +

    -

    +

    Sets the ring thickness of a ring chart.

    +
    + +## Example + +``` +@Entry +@Component +struct GaugeExample { + build() { + Column() { + Gauge({ value: 50, min: 0, max: 100 }) + .startAngle(210).endAngle(150) + .colors([[0x317AF7, 1], [0x5BA854, 1], [0xE08C3A, 1], [0x9C554B, 1], [0xD94838, 1]]) + .strokeWidth(20) + .width(200).height(200) + }.width('100%').margin({ top: 5 }) + } +} +``` + +![](figures/gauge.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-image.md b/en/application-dev/reference/arkui-ts/ts-basic-components-image.md index ce5beb1a61..9909adf2da 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-image.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-image.md @@ -1,87 +1,271 @@ -# Image +# Image +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used to render and display images. +## Required Permissions -The **<Image>** component is used to render and display images. +ohos.permission.INTERNET \(using Internet images\) - -## Required Permissions - -ohos.permission.INTERNET (using Internet images) - - -## Child Components +## Child Components None - -## APIs - -Image(value: {uri: string | PixelMap}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | uri | string | Yes | - | Image URI. Both local and Internal URIs are supported. | - - -## Attributes - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| alt | string | - | Placeholder image displayed during loading. Both local and Internal URIs are supported. | -| objectFit | ImageFit | ImageFit.Cover | Image scale type. | -| objectRepeat | [ImageRepeat](ts-appendix-enums.md#imagerepeat enums) | ImageRepeat.NoRepeat | Whether the image is repeated.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > - This attribute is not applicable to SVG images. | -| interpolation | ImageInterpolation | ImageInterpolation.None | Interpolation effect of the image. This attribute is valid only when the image is zoomed in.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > - This attribute is not applicable to SVG images.

    > - This attribute is not applicable to a **PixelMap** object. | -| renderMode | ImageRenderMode | ImageRenderMode.Original | Rendering mode of the image.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > - This attribute is not applicable to SVG images. | -| sourceSize | {
    width: number,
    height: number
    } | - | Decoding size of the image. The original image is decoded into an image of the specified size. If the value is of the number type, the unit px is used.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > This attribute is not applicable to a **PixelMap** object. | -| syncLoad8+ | boolean | false | Whether to load images synchronously. By default, images are loaded asynchronously. During synchronous loading, the UI thread is blocked and the placeholder diagram is not displayed. | - -- ImageFit enums - | Name | Description | - | -------- | -------- | - | Cover | The image is scaled with its aspect ratio retained for both sides to be greater than or equal to the display boundaries. | - | Contain | The image is scaled with its aspect ratio retained for the content to be completely displayed within the display boundaries. | - | Fill | The video content is resized to fill the display area while retaining its aspect ratio. | - | None | The original size is retained. Generally, this enum is used together with the **objectRepeat** attribute. | - | ScaleDown | The image content is displayed with its aspect ratio retained. The size is smaller than or equal to the original size. | - -- ImageInterpolation enums - | Name | Description | - | -------- | -------- | - | None | Interpolation image data is not used. | - | High | The interpolation image data is used at the high level. The use of the interpolation image data may affect the image rendering speed. | - | Medium | The interpolation image data is used at the medium level. | - | Low | The interpolation image data is used at the low level. | - -- ImageRenderMode enums - | Name | Description | - | -------- | -------- | - | Original | The image is rendered based on the original image, including the color. | - | Template | The image is rendered as a template image, and its color is ignored. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onComplete(callback: (event?: { width: number, height: number, componentWidth: number, componentHeight: number, loadingStatus: number }) => void) | Triggered when an image is successfully loaded. The loaded image is returned. | -| onError(callback: (event?: { componentWidth: number, componentHeight: number }) => void) | An exception occurs during image loading. | -| onFinish(callback: () => void) | If the source file to be loaded is an SVG image, this callback is invoked when the SVG animation playback is complete. If the animation is an infinite loop, this callback is not triggered. | - - -## Example - +## APIs + +Image\(value: \{uri: string | PixelMap\}\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    uri

    +

    string

    +

    Yes

    +

    -

    +

    Image URI. Both local and Internal URIs are supported.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    alt

    +

    string

    +

    -

    +

    Placeholder image displayed during loading. Both local and Internal URIs are supported.

    +

    objectFit

    +

    ImageFit

    +

    Cover

    +

    Image scale type.

    +

    objectRepeat

    +

    ImageRepeat

    +

    NoRepeat

    +

    Whether the image is repeated.

    +
    NOTE:
    • This attribute is not applicable to SVG images.
    +
    +

    interpolation

    +

    ImageInterpolation

    +

    None

    +

    Interpolation effect of the image. This attribute is valid only when the image is zoomed in.

    +
    NOTE:
    • This attribute is not applicable to SVG images.
    • This attribute is not applicable to a PixelMap object.
    +
    +

    renderMode

    +

    ImageRenderMode

    +

    Original

    +

    Rendering mode of the image.

    +
    NOTE:
    • This attribute is not applicable to SVG images.
    +
    +

    sourceSize

    +

    {

    +

    width: number,

    +

    height: number

    +

    }

    +

    -

    +

    Decoding size of the image. The original image is decoded into an image of the specified size. If the value is of the number type, the unit px is used.

    +
    NOTE:

    This attribute is not applicable to a PixelMap object.

    +
    +

    syncLoad8+

    +

    boolean

    +

    false

    +

    Whether to load images synchronously. By default, images are loaded asynchronously. During synchronous loading, the UI thread is blocked and the placeholder diagram is not displayed.

    +
    + +- ImageFit enums + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Cover

    +

    The image is scaled with its aspect ratio retained for both sides to be greater than or equal to the display boundaries.

    +

    Contain

    +

    The image is scaled with its aspect ratio retained for the content to be completely displayed within the display boundaries.

    +

    Fill

    +

    The video content is resized to fill the display area while retaining its aspect ratio.

    +

    None

    +

    The original size is retained. Generally, this enum is used together with the objectRepeat attribute.

    +

    ScaleDown

    +

    The image content is displayed with its aspect ratio retained. The size is smaller than or equal to the original size.

    +
    + + +- ImageInterpolation enums + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    None

    +

    Interpolation image data is not used.

    +

    High

    +

    The interpolation image data is used at the high level. The use of the interpolation image data may affect the image rendering speed.

    +

    Medium

    +

    The interpolation image data is used at the medium level.

    +

    Low

    +

    The interpolation image data is used at the low level.

    +
    + + +- ImageRenderMode enums + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Original

    +

    The image is rendered based on the original image, including the color.

    +

    Template

    +

    The image is rendered as a template image, and its color is ignored.

    +
    + + +## Events + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    onComplete(callback: (event?: { width: number, height: number, componentWidth: number, componentHeight: number, loadingStatus: number }) => void)

    +

    Triggered when an image is successfully loaded. The loaded image is returned.

    +

    onError(callback: (event?: { componentWidth: number, componentHeight: number }) => void)

    +

    An exception occurs during image loading.

    +

    onFinish(callback: () => void)

    +

    If the source file to be loaded is an SVG image, this callback is invoked when the SVG animation playback is complete. If the animation is an infinite loop, this callback is not triggered.

    +
    + +## Example ``` // Image1 @Entry @Component struct ImageExample1 { - private on: string = 'www.example.com' + private on: string = 'www.example.com' @State src: string = this.on build() { @@ -141,8 +325,7 @@ struct ImageExample1 { } ``` -![en-us_image_0000001211898484](figures/en-us_image_0000001211898484.gif) - +![](figures/en-us_image_0000001239925031.gif) ``` // Image2 @@ -211,8 +394,7 @@ struct ImageExample2 { } ``` -![en-us_image_0000001212058474](figures/en-us_image_0000001212058474.png) - +![](figures/en-us_image_0000001194605518.png) ``` // Image3 @@ -274,4 +456,5 @@ struct ImageExample3 { } ``` -![en-us_image_0000001256858397](figures/en-us_image_0000001256858397.gif) +![](figures/en-us_image_0000001194942468.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-imageanimator.md b/en/application-dev/reference/arkui-ts/ts-basic-components-imageanimator.md index a80064b6e4..af1a3aaaa8 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-imageanimator.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-imageanimator.md @@ -1,69 +1,245 @@ -# ImageAnimator +# ImageAnimator +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component enables images to be played frame by frame. The list of images to be played can be configured, and the duration of each image can be configured. - -The **<ImageAnimator>** component enables images to be played frame by frame. The list of images to be played can be configured, and the duration of each image can be configured. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None +## APIs -## APIs - -ImageAnimator() +ImageAnimator\(\) +## Attributes -## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    images

    +

    Array<{

    +

    src:string,

    +

    width?:Length,

    +

    height?:Length,

    +

    top?:Length,

    +

    left?:Length,

    +

    duration?:number

    +

    }>

    +

    []

    +

    Yes

    +

    Image frame information. The information of each frame includes the image path, image size, image position, and image playback duration. The detailed description is as follows:

    +

    src: image path. The image format can be SVG, PNG, or JPG.

    +

    width: image width.

    +

    height: image height.

    +

    top: vertical coordinate of the image relative to the upper left corner of the component.

    +

    left: horizontal coordinate of the image relative to the upper left corner of the component.

    +

    duration: playback duration of the image, in ms.

    +

    state

    +

    AnimationStatus

    +

    Initial

    +

    No

    +

    Playback status of the animation. The default status is Initial.

    +

    duration

    +

    number

    +

    1000

    +

    No

    +

    Playback duration, in ms. The default duration is 1000 ms. When the duration is 0, no image is played. The value change takes effect only at the beginning of the next cycle. When a separate duration is set in images, the setting of this attribute is invalid.

    +

    reverse

    +

    boolean

    +

    false

    +

    No

    +

    Playback sequence. The value false indicates that images are played from the first one to the last one, and true indicates that images are played from the last one to the first one.

    +

    fixedSize

    +

    boolean

    +

    true

    +

    No

    +

    Whether the image size is the same as the component size. true: The image size is the same as the component size. In this case, the width, height, top, and left attributes of the image are invalid. false: The width, height, top, and left attributes of each image must be set separately.

    +

    preDecode

    +

    number

    +

    0

    +

    No

    +

    Whether to enable pre-decoding. The default value 0 indicates that pre-decoding is disabled. If this attribute is set to 2, two images following the currently playing frame will be cached in advance to improve performance.

    +

    fillMode

    +

    FillMode

    +

    Forwards

    +

    No

    +

    Status before and after the animation starts. For details about the options, see FillMode.

    +

    iterations

    +

    number

    +

    1

    +

    No

    +

    By default, the animation is played once. The value -1 indicates that the animation is played for an unlimited number of times.

    +
    -| Name | Type | Default Value | Mandatory | Description | -| -------- | -------- | -------- | -------- | -------- | -| images | Array<{
    src:string,
    width?:Length,
    height?:Length,
    top?:Length,
    left?:Length,
    duration?:number
    }> | [] | Yes | Image frame information. The information of each frame includes the image path, image size, image position, and image playback duration. The detailed description is as follows:
    **src**: image path. The image format can be SVG, PNG, or JPG.
    **width**: image width.
    **height**: image height.
    **top**: vertical coordinate of the image relative to the upper left corner of the component.
    **left**: horizontal coordinate of the image relative to the upper left corner of the component.
    **duration**: playback duration of the image, in ms. | -| state | AnimationStatus | AnimationStatus.Initial | No | Playback status of the animation. The default status is **Initial**. | -| duration | number | 1000 | No | Playback duration, in ms. The default duration is 1000 ms. When the duration is **0**, no image is played. The value change takes effect only at the beginning of the next cycle. When a separate duration is set in images, the setting of this attribute is invalid. | -| reverse | boolean | false | No | Playback sequence. The value **false** indicates that images are played from the first one to the last one, and **true** indicates that images are played from the last one to the first one. | -| fixedSize | boolean | true | No | Whether the image size is the same as the component size. **true**: The image size is the same as the component size. In this case, the width, height, top, and left attributes of the image are invalid. **false**: The width, height, top, and left attributes of each image must be set separately. | -| preDecode | number | 0 | No | Whether to enable pre-decoding. The default value **0** indicates that pre-decoding is disabled. If this attribute is set to **2**, two images following the currently playing frame will be cached in advance to improve performance. | -| fillMode | FillMode | FillMode.Forwards | No | Status before and after the animation starts. For details about the options, see **FillMode**. | -| iterations | number | 1 | No | By default, the animation is played once. The value **-1** indicates that the animation is played for an unlimited number of times. | +- AnimationStatus enums -- AnimationStatus enums - | Name | Description | - | -------- | -------- | - | Initial | The animation is in the initial state. | - | Running | The animation is being played. | - | Paused | The animation is paused. | - | Stopped | The animation is stopped. | + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Initial

    +

    The animation is in the initial state.

    +

    Running

    +

    The animation is being played.

    +

    Paused

    +

    The animation is paused.

    +

    Stopped

    +

    The animation is stopped.

    +
    -- FillMode enums - | Name | Description | - | -------- | -------- | - | None | After the playback is complete, the animation restores to the initial state. | - | Forwards | After the playback is complete, the animation remains in the end state. | +- FillMode enums -## Events + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    None

    +

    After the playback is complete, the animation restores to the initial state.

    +

    Forwards

    +

    After the playback is complete, the animation remains in the end state.

    +

    Backwards

    +

    The attribute value is applied during the period specified by animation-delay and before the animation is played.

    +

    Both

    +

    Both the Forwards and Backwards values are applied.

    +
    - | Name | Description | -| -------- | -------- | -------- | -| onStart() => void | Triggered when the animation starts to play. | -| onPause() => void | Triggered when the animation playback is paused. | -| onRepeat() => void | Triggered when the animation playback is repeated. | -| onCancel() => void | Triggered when the animation playback is canceled. | -| onFinish() => void | Triggered when the animation playback is complete. | +## Events -## Example + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    onStart() => void

    +

    Triggered when the animation starts to play.

    +

    onPause() => void

    +

    Triggered when the animation playback is paused.

    +

    onRepeat() => void

    +

    Triggered when the animation playback is repeated.

    +

    onCancel() => void

    +

    Triggered when the animation playback is canceled.

    +

    onFinish() => void

    +

    Triggered when the animation playback is complete.

    +
    +## Example ``` @Entry @@ -155,4 +331,5 @@ struct ImageAnimatorExample { } ``` -![en-us_image_0000001211898470](figures/en-us_image_0000001211898470.gif) +![](figures/imageanimator.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-loadingprogress.md b/en/application-dev/reference/arkui-ts/ts-basic-components-loadingprogress.md new file mode 100644 index 0000000000..c7e5d0022e --- /dev/null +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-loadingprogress.md @@ -0,0 +1,51 @@ +# LoadingProgress + +> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE** +> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. + +The **** component is used to display the loading progress. + + +## Required Permissions + +None + + +## Child Components + +None + + +## APIs + +LoadingProgress() + +Creates a **LoadingProgress** instance. + + + +## Attributes + +| Name| Type| Default Value| Description| +| -------- | -------- | -------- | -------- | +| color | Color | - | Foreground color of the loading progress bar.| + + + +## Example + +``` +@Entry +@Component +struct LoadingProgressExample { + build() { + Column({ space: 5 }) { + Text('Orbital LoadingProgress ').fontSize(9).fontColor(0xCCCCCC).width('90%') + LoadingProgress() + .color(Color.Blue) + }.width('100%').margin({ top: 5 }) + } +} +``` + +![zh-cn_image_0000001198839004](figures/loadingProgress.png) diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-marquee.md b/en/application-dev/reference/arkui-ts/ts-basic-components-marquee.md new file mode 100644 index 0000000000..5348e4f44d --- /dev/null +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-marquee.md @@ -0,0 +1,172 @@ +# Marquee + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. + +The **** component displays single-line scrolling text. + +## Required Permissions + +None + +## Child Components + +None + +## APIs + +Marquee\(value: \{ start: boolean, step?: number, loop?: number, fromStart?: boolean, src: string \}\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    start

    +

    boolean

    +

    Yes

    +

    -

    +

    Whether to set the marquee scroll.

    +

    step

    +

    number

    +

    No

    +

    6

    +

    Scroll step of the marquee text.

    +

    loop

    +

    number

    +

    No

    +

    -1

    +

    Number of times the marquee scrolls. If the value is less than or equal to 0, the marquee scrolls continuously.

    +

    fromStart

    +

    boolean

    +

    No

    +

    true

    +

    Whether the marquee scrolls from the start of the text. If the value is false, the marquee scrolls from the end of the text.

    +

    src

    +

    string

    +

    Yes

    +

    -

    +

    Text to be scrolled.

    +
    + + +## Events + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    onStart(callback: () => void)

    +

    Invoked when scrolling starts.

    +

    onBounce(callback: () => void)

    +

    Invoked when scrolling reaches the end.

    +

    onFinish(callback: () => void)

    +

    Invoked when scrolling is complete.

    +
    + +## Example + +``` +@Entry +@Component +struct MarqueeExample { + @State start: boolean = false + @State fromStart: boolean = true + @State step: number = 50 + @State loop: number = 3 + @State src: string = "Running Marquee starts rolling" + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Marquee({ + start: this.start, + step: this.step, + loop: this.loop, + fromStart: this.fromStart, + src: this.src + }) + .fontColor(Color.White) + .fontSize(50) + .allowScale(false) + .fontWeight(FontWeight.Bold) + .backgroundColor(Color.Black) + .margin({bottom:40}) + .onStart(() => { + console.log('Marquee animation complete onStart') + }) + .onBounce(() => { + console.log('Marquee animation complete onBounce') + }) + .onFinish(() => { + console.log('Marquee animation complete onFinish') + }) + Button('start') + .onClick(() => { + this.start = true + }) + .width(200) + .height(60) + .margin({bottom:20}) + } + .width('100%') + .height('100%') + } +} +``` + +![](figures/gif-1.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-navigation.md b/en/application-dev/reference/arkui-ts/ts-basic-components-navigation.md deleted file mode 100644 index 14c7af39a0..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-navigation.md +++ /dev/null @@ -1,222 +0,0 @@ -# Navigation - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -The **<Navigation>** component typically functions as the root container of a page and displays the page title, toolbar, and menu based on the attribute settings. - - -## Required Permissions - -None - - -## Child Component - -It can contain subcomponents. - - -## APIs - -Navigation() - -Creates a component that can automatically display the navigation bar, title, and toolbar based on the attribute settings. - - -## Attributes - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| title | string \| [Custom Builder](../../ui/ts-types.md) | - | Page title. | -| subtitle | string | - | Subtitle of the page. | -| menus | Array<NavigationMenuItem> \| [Custom Builder](../../ui/ts-types.md) | - | Menu in the upper right corner of the page. | -| titleMode | NavigationTitleMode | NavigationTitleMode.Free | Display mode of the page title bar. | -| toolBar | {
    items:[
    Object
    ] }
    \| [Custom Builder](../../ui/ts-types.md) | - | Content of the toolbar.
    **items**: all items on the toolbar. | -| hideToolBar | boolean | false | Whether to hide the toolbar.
    **true**: Hide the toolbar.
    **false**: Show the toolbar. | -| hideTitleBar | boolean | false | Whether to hide the title bar. | -| hideBackButton | boolean | false | Whether to hide the back button. | - -- NavigationMenuItem attributes - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | value | string | Yes | - | Text of an option on the menu bar. | - | icon | string | No | - | Icon path of an option on the menu bar. | - | action | () => void | No | - | Callback invoked when an option is selected. | - -- Object attributes - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | value | string | Yes | - | Text of an option on the toolbar. | - | icon | string | No | - | Icon path of an option on the toolbar. | - | action | () => void | No | - | Callback invoked when an option is selected. | - -- NavigationTitleMode enums - | Name | Description | - | -------- | -------- | - | Free | When the content is a scrollable component, the title shrinks as the content scrolls up (the subtitle fades out with its size remaining unchanged) and restores as the content scrolls down. | - | Mini | The mode is fixed at mini mode (icon + main title and subtitle). | - | Full | The mode is fixed at full mode (main title and subtitle). | - - > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** - > Currently, only the scrollable component **<List>** is supported. - - -## Events - - | Name | Description | -| -------- | -------- | -| onTitleModeChanged(callback: (titleMode: NavigationTitleMode) => void) | Triggered when **titleMode** is set to **NavigationTitleMode.Free** and the title bar mode changes as content scrolls. | - - -## Example - - -``` -// Example 01 -@Entry -@Component -struct NavigationExample { - private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - @State hideBar: boolean = true - - @Builder NavigationTitle() { - Column() { - Text('title') - .width(80) - .height(60) - .fontColor(Color.Blue) - .fontSize(30) - } - .onClick(() => { - console.log("title") - }) - } - - @Builder NavigationMenus() { - Row() { - Image('images/add.png') - .width(25) - .height(25) - Image('comment/more.png') - .width(25) - .height(25) - .margin({ left: 30 }) - }.width(100) - } - - build() { - Column() { - Navigation() { - Search({ value: '', placeholder: "" }).width('85%').margin(26) - List({ space: 5, initialIndex: 0 }) { - ForEach(this.arr, (item) => { - ListItem() { - Text('' + item) - .width('90%') - .height(80) - .backgroundColor('#3366CC') - .borderRadius(15) - .fontSize(16) - .textAlign(TextAlign.Center) - }.editable(true) - }, item => item) - } - .listDirection(Axis.Vertical) - .height(300) - .margin({ top: 10, left: 18 }) - .width('100%') - - Button(this.hideBar ? "tool bar" : "hide bar") - .onClick(() => { - this.hideBar = !this.hideBar - }) - .margin({ left: 135, top: 60 }) - } - .title(this.NavigationTitle) - .subTitle('subtitle') - .menus(this.NavigationMenus) - .titleMode(NavigationTitleMode.Free) - .hideTitleBar(false) - .hideBackButton(false) - .onTitleModeChanged((titleModel: NavigationTitleMode) => { - console.log('titleMode') - }) - .toolBar({ items: [ - { value: 'app', icon: 'images/grid.svg', action: () => { - console.log("app") - } }, - { value: 'add', icon: 'images/add.svg', action: () => { - console.log("add") - } }, - { value: 'collect', icon: 'images/collect.svg', action: () => { - console.log("collect") - } }] }) - .hideToolBar(this.hideBar) - } - } -} -``` - -![en-us_image_0000001256978359](figures/en-us_image_0000001256978359.gif) - - -``` -// Example 02 -@Entry -@Component -struct ToolbarBuilderExample { - @State currentIndex: number = 0 - @State Build: Array = [ - { - icon: $r('app.media.ic_public_add'), - icon_after: $r('app.media.ic_public_addcolor'), - text: 'add', - num: 0 - }, - { - icon: $r('app.media.ic_public_app'), - icon_after: $r('app.media.ic_public_appcolor'), - text: 'app', - num: 1 - }, - { - icon: $r('app.media.ic_public_collect'), - icon_after: $r('app.media.ic_public_collectcolor'), - text: 'collect', - num: 2 - } - ] - - @Builder NavigationToolbar() { - Row() { - ForEach(this.Build, item => { - Column() { - Image(this.currentIndex == item.num ? item.icon_after : item.icon) - .width(25) - .height(25) - Text(item.text) - .fontColor(this.currentIndex == item.num ? "#ff7500" : "#000000") - } - .onClick(() => { - this.currentIndex = item.num - }) - .margin({ left: 70 }) - }) - } - } - - build() { - Column() { - Navigation() { - Flex() { - } - } - .toolBar(this.NavigationToolbar) - } - } -} -``` - -![en-us_image_0000001212058484](figures/en-us_image_0000001212058484.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-progress.md b/en/application-dev/reference/arkui-ts/ts-basic-components-progress.md index cc24250298..8652d7554c 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-progress.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-progress.md @@ -1,99 +1,145 @@ -# Progress +# Progress +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used to provide a progress bar that displays the progress of content loading or an operation. - -The **<Progress>** component is used to provide a progress bar that displays the progress of content loading or an operation. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None +## APIs + +Progress\(value: \{value: number, total?: number, style?: ProgressStyle\}\) + +Creates a progress bar with a specified progress value. + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    value

    +

    number

    +

    Yes

    +

    -

    +

    Current progress.

    +

    total

    +

    number

    +

    No

    +

    100

    +

    Total progress.

    +

    style

    +

    ProgressStyle

    +

    No

    +

    Linear

    +

    Style of the progress bar.

    +
    + + +- ProgressStyle enums + + + + + + + + + + +

    Name

    +

    Description

    +

    Linear

    +

    Linear progress bar.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    value

    +

    number

    +

    -

    +

    Current progress.

    +

    color

    +

    Color

    +

    -

    +

    Background color of the progress bar.

    +
    + +## Example -## APIs - -Progress(value: {value: number, total?: number, style?: ProgressStyle}) - -Creates a progress bar. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | value | number | Yes | - | Current progress. | - | total | number | No | 100 | Total progress. | - | style | ProgressStyle | No | ProgressStyle.Linear | Style of the progress bar. | - - -- ProgressStyle enums - | Name | Description | - | -------- | -------- | - | Linear | Linear style. | - | Ring8+ | Ring style without scale. The ring fills up as the progress increases. | - | Eclipse | Eclipse style, which visualizes the progress in a way similar to the moon waxing from new to full. | - | ScaleRing8+ | Ring style with scale, which is similar to the clock scale style. | - | Capsule8+ | Capsule style. At both ends, the progress bar changes from an arc to a straight line and from a straight line to an arc. In the middle part of the capsule, the progress bar moves to the right. | - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| value | number | - | Current progress. | -| color | Color | - | Background color of the progress bar. | -| style8+ | {
    strokeWidth? : Length,
    scaleCount? : number,
    scaleWidth? : Length
    } | - | Component style.
    - **strokeWidth**: width of the progress bar.
    - **scaleCount**: scale count of the circular progress bar.
    - **scaleWidth**: scale width of the circular progress bar.
    If the scale thickness is greater than the progress bar width, the default scale thickness is used. | - - -## Example - - ``` @Entry @Component struct ProgressExample { build() { - Column({ space: 15 }) { + Column({ space: 5 }) { Text('Linear Progress').fontSize(9).fontColor(0xCCCCCC).width('90%') Progress({ value: 10, style: ProgressStyle.Linear }).width(200) - Progress({ value: 20, total: 150, style: ProgressStyle.Linear }).color(Color.Grey).value(50).width(200) - - Text('Eclipse Progress').fontSize(9).fontColor(0xCCCCCC).width('90%') - Row({ space: 40 }) { - Progress({ value: 10, style: ProgressStyle.Eclipse }).width(100) - Progress({ value: 20, total: 150, style: ProgressStyle.Eclipse }).color(Color.Grey).value(50).width(100) - } - - Text('ScaleRing Progress').fontSize(9).fontColor(0xCCCCCC).width('90%') - Row({ space: 40 }) { - Progress({ value: 10, style: ProgressStyle.ScaleRing }).width(100) - Progress({ value: 20, total: 150, style: ProgressStyle.ScaleRing }) - .color(Color.Grey).value(50).width(100) - .style({ strokeWidth: 15, scaleCount: 15, scaleWidth: 5 }) - } - - Text('Ring Progress').fontSize(9).fontColor(0xCCCCCC).width('90%') - Row({ space: 40 }) { - Progress({ value: 10, style: ProgressStyle.Ring }).width(100) - Progress({ value: 20, total: 150, style: ProgressStyle.Ring }) - .color(Color.Grey).value(50).width(100) - .style({ strokeWidth: 20, scaleCount: 30, scaleWidth: 20 }) - } - - Text('Capsule Progress').fontSize(9).fontColor(0xCCCCCC).width('90%') - Row({ space: 40 }) { - Progress({ value: 10, style: ProgressStyle.Capsule }).width(100) - Progress({ value: 20, total: 150, style: ProgressStyle.Capsule }).color(Color.Grey).value(50).width(100) - } - }.width('100%').margin({ top: 30 }) + + Text('Linear Progress Color').fontSize(9).fontColor(0xCCCCCC).width('90%') + Progress({ value: 20, total: 150, style: ProgressStyle.Linear }).color(Color.Red).value(50).width(200) + }.width('100%').margin({ top: 5 }) } } ``` -![en-us_image_0000001212378432](figures/en-us_image_0000001212378432.gif) +![](figures/progress.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-qrcode.md b/en/application-dev/reference/arkui-ts/ts-basic-components-qrcode.md index 612fdfeb29..05e0575e61 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-qrcode.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-qrcode.md @@ -1,48 +1,83 @@ -# QRCode +# QRCode +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used to display QR code information. - -The **<QRCode>** component is used to display QR code information. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None - -## APIs - -QRCode(value: string) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | value | string | Yes | - | QR code content string. | - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| color | Color | Black | QR code color. | - - -## Events +## APIs + +QRCode\(value: string\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    value

    +

    string

    +

    Yes

    +

    -

    +

    QR code content string.

    +
    + + +## Attributes + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    color

    +

    Color

    +

    Black

    +

    QR code color.

    +
    + +## Events Among all the universal events, only the click event is supported. +## Example -## Example - - ``` @Entry @Component @@ -61,4 +96,5 @@ struct QRCodeExample { } ``` -![en-us_image_0000001256858415](figures/en-us_image_0000001256858415.png) +![](figures/qrcode.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-rating.md b/en/application-dev/reference/arkui-ts/ts-basic-components-rating.md index b7de6f882c..240dd36195 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-rating.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-rating.md @@ -1,52 +1,130 @@ -# Rating +# Rating +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component provides a rating bar. - -The **<Rating>** component provides a rating bar. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None - -## APIs - -Rating(options?: { rating: number, indicator?: boolean }) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | rating | number | Yes | 0 | Value to rate. | - | indicator | boolean | No | false | Used only as an indicator and cannot be operated. | - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| stars | number | 5 | Total number of stars. | -| stepSize | number | 0.5 | Step of an operation. | -| starStyle | {
    backgroundUri: string,
    foregroundUri: string,
    secondaryUri?: string
    } | - | **backgroundSrc**: image link of the unselected star. You can customize the image or use the default image. Only local images are supported.
    **foregroundSrc**: image path of the selected star. You can customize the image or use the default image. Only local images are supported.
    **secondarySrc**: image path of the partially selected star. You can customize the image or use the default image. Only local images are supported. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onChange(callback:(value: number) => void) | Triggered when the rating value changes. | - - -## Example - +## APIs + +Rating\(options?: \{ rating: number, indicator?: boolean \}\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    rating

    +

    number

    +

    Yes

    +

    0

    +

    Value to rate.

    +

    indicator

    +

    boolean

    +

    No

    +

    false

    +

    Used only as an indicator and cannot be operated.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    stars

    +

    number

    +

    5

    +

    Total number of stars.

    +

    stepSize

    +

    number

    +

    0.5

    +

    Step of an operation.

    +

    starStyle

    +

    {

    +

    backgroundUri: string,

    +

    foregroundUri: string,

    +

    secondaryUri?: string

    +

    }

    +

    -

    +

    backgroundSrc: image link of the unselected star. You can customize the image or use the default image. Only local images are supported.

    +

    foregroundSrc: image path of the selected star. You can customize the image or use the default image. Only local images are supported.

    +

    secondarySrc: image path of the partially selected star. You can customize the image or use the default image. Only local images are supported.

    +
    + +## Events + + + + + + + + + + +

    Name

    +

    Description

    +

    onChange(callback:(value: number) => void)

    +

    Triggered when the rating value changes.

    +
    + +## Example ``` @Entry @@ -69,4 +147,5 @@ struct RatingExample { } ``` -![en-us_image_0000001257058423](figures/en-us_image_0000001257058423.gif) +![](figures/rating.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-scrollbar.md b/en/application-dev/reference/arkui-ts/ts-basic-components-scrollbar.md deleted file mode 100644 index 1d0e8d4d76..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-scrollbar.md +++ /dev/null @@ -1,96 +0,0 @@ -# ScrollBar - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -The **<ScrollBar>** is used together with scrollable components, such as **<List>**, **<Grid>**, and **<Scroll>**. - - -## Required Permissions - -None - - -## Child Components - -This component can contain a single child component. - - -## APIs - -ScrollBar(value: ScrollBarOption) - -- ScrollBarOption parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | scroller | [Scroller](ts-container-scroll.md#scroller) | Yes | - | Scroller, which can be bound to and control scrollable components. | - | direction | ScrollBarDirection | No | ScrollBarDirection.Vertical | Scrollbar direction in which scrollable components scroll. | - | state | BarState | No | BarState.Auto | Scrollbar state. | - - > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** - > The **<ScrollBar>** component defines the behavior style of the scrollable area, and its subnodes define the behavior style of the scrollbar. - > - > This component is bound to a scrollable component through **scroller**, and can be used to scroll the scrollable component only when their directions are the same. The **<ScrollBar>** component can be bound to only one scrollable component, and vice versa. - -- ScrollBarDirection enums - | Name | Description | - | -------- | -------- | - | Vertical | Vertical scrollbar. | - | Horizontal | Horizontal scrollbar. | - -- BarState enums - | Name | Description | - | -------- | -------- | - | On | Always display. | - | Off | Hide. | - | Auto | Display on demand (displays when the screen is touched and disappears after 2s of inactivity). | - - -## Example - - -``` -@Entry -@Component -struct ScrollBarExample { - private scroller: Scroller = new Scroller() - private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - - build() { - Column() { - Stack({ alignContent: Alignment.End }) { - Scroll(this.scroller) { - Flex({ direction: FlexDirection.Column }) { - ForEach(this.arr, (item) => { - Row() { - Text(item.toString()) - .width('90%') - .height(100) - .backgroundColor('#3366CC') - .borderRadius(15) - .fontSize(16) - .textAlign(TextAlign.Center) - .margin({ top: 5 }) - } - }, item => item) - }.margin({ left: 52 }) - } - .scrollBar(BarState.Off) - .scrollable(ScrollDirection.Vertical) - ScrollBar({ scroller: this.scroller, direction: ScrollBarDirection.Vertical,state: BarState.Auto }) { - Text() - .width(30) - .height(100) - .borderRadius(10) - .backgroundColor('#C0C0C0') - }.width(30).backgroundColor('#ededed') - } - } - } -} -``` - - -![en-us_image_0000001256978369](figures/en-us_image_0000001256978369.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-select.md b/en/application-dev/reference/arkui-ts/ts-basic-components-select.md index 1f4891eb9c..25d73234a3 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-select.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-select.md @@ -20,8 +20,8 @@ Select(options: Array) | Name| Type| Mandatory| Default Value| Description| | ------ | ----------------------------------------------- | ---- | ------ | -------------- | - | value | [ResourceStr](../../ui/ts-types.md#resourcestr) | Yes| - | Value of an option in the drop-down list box.| - | icon | [ResourceStr](../../ui/ts-types.md#resourcestr) | No| - | Icon of an option in the drop-down list box.| + | value | [ResourceStr](../../ui/ts-types.md#ResourceStr) | Yes| - | Value of an option in the drop-down list box.| + | icon | [ResourceStr](../../ui/ts-types.md#ResourceStr) | No| - | Icon of an option in the drop-down list box.| ## Attributes @@ -30,13 +30,13 @@ Select(options: Array) | selected | number | - | Index of the initial selected option in the drop-down list box. The index of the first option is **0**.| | value | string | - | Text of the drop-down button.| | font | [Font](../../ui/ts-types.md) | - | Text font of the drop-down button.| -| fontColor | [ResourceColor](../../ui/ts-types.md#resourcecolor) | - | Text color of the drop-down button.| -| selectedOptionBgColor | [ResourceColor](../../ui/ts-types.md#resourcecolor) | - | Background color of the selected option in the drop-down list box.| +| fontColor | [ResourceColor](../../ui/ts-types.md#ResourceColor) | - | Text color of the drop-down button.| +| selectedOptionBgColor | [ResourceColor](../../ui/ts-types.md#ResourceColor) | - | Background color of the selected option in the drop-down list box.| | selectedOptionFont | [Font](../../ui/ts-types.md) | - | Text font of the selected option in the drop-down list box.| -| selectedOptionFontColor | [ResourceColor](../../ui/ts-types.md#resourcecolor) | - | Text color of the selected option in the drop-down list box.| -| optionBgColor | [ResourceColor](../../ui/ts-types.md#resourcecolor) | - | Background color of an option in the drop-down list box.| +| selectedOptionFontColor | [ResourceColor](../../ui/ts-types.md#ResourceColor) | - | Text color of the selected option in the drop-down list box.| +| optionBgColor | [ResourceColor](../../ui/ts-types.md#ResourceColor) | - | Background color of an option in the drop-down list box.| | optionFont | [Font](../../ui/ts-types.md) | - | Text font of an option in the drop-down list box.| -| optionFontColor | [ResourceColor](../../ui/ts-types.md#resourcecolor) | - | Text color of an option in the drop-down list box.| +| optionFontColor | [ResourceColor](../../ui/ts-types.md#ResourceColor) | - | Text color of an option in the drop-down list box.| ## Events diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-slider.md b/en/application-dev/reference/arkui-ts/ts-basic-components-slider.md index 5635d1fbed..009ab92e5a 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-slider.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-slider.md @@ -1,76 +1,242 @@ -# Slider +# Slider +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used to quickly adjust settings, such as the volume and brightness. - -The **<Slider>** component is used to quickly adjust settings, such as the volume and brightness. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None - -## APIs - -Slider(value:{value?: number, min?: number, max?: number, step?: number, style?: SliderStyle, direction?: Axis}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | value | number | No | 0 | Current progress. | - | min | number | No | 0 | Minimum value. | - | max | number | No | 100 | Maximum value. | - | step | number | No | 1 | Step of the slider. When the corresponding step is set, the slider slides intermittently. | - | style | SliderStyle | No | SliderStyle.OutSet | Style of the slider. | - | direction8+ | [Axis](ts-appendix-enums.md) | No | Axis.Horizontal | Whether the slider moves horizontally or vertically. | - | reverse8+ | boolean | No | false | Whether the slider values are reversed. | - -- SliderStyle enums - | Name | Description | - | -------- | -------- | - | OutSet | The slider is on the slider rail. | - | InSet | The slider is in the slider rail. | - - -## Attributes +## APIs + +Slider\(value:\{value?: number, min?: number, max?: number, step?: number, style?: SliderStyle, direction?: Axis\}\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    value

    +

    number

    +

    No

    +

    0

    +

    Current progress.

    +

    min

    +

    number

    +

    No

    +

    0

    +

    Minimum value.

    +

    max

    +

    number

    +

    No

    +

    100

    +

    Maximum value.

    +

    step

    +

    number

    +

    No

    +

    1

    +

    Step of the slider. When the corresponding step is set, the slider slides intermittently.

    +

    style

    +

    SliderStyle

    +

    No

    +

    SliderStyle.OutSet

    +

    Style of the slider.

    +

    direction8+

    +

    Axis

    +

    No

    +

    Axis.Horizontal

    +

    Whether the slider moves horizontally or vertically.

    +
    + +- SliderStyle enums + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    OutSet

    +

    The slider is on the slider rail.

    +

    InSet

    +

    The slider is in the slider rail.

    +
    + + +## Attributes Touch target configuration is not supported. - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| blockColor | Color | - | Color of the slider. | -| trackColor | Color | - | Background color of the slider. | -| selectedColor | Color | - | Color of the slider rail that has been slid. | -| showSteps | boolean | false | Whether to display the current step. | -| showTips | boolean | false | Whether to display a bubble to indicate the percentage when sliding. | - - -## Events - -Among all the universal events, only **OnAppear** and **OnDisAppear** are supported. - -| Name | Description | -| -------- | -------- | -| onChange(callback: (value: number, mode: SliderChangeMode) => void) | Callback invoked when the slider slides.
    **value**: current progress.
    **mode**: dragging state. | - -- SliderChangeMode enums - | Name | Description | - | -------- | -------- | - | Begin | The user starts to drag the slider. | - | Moving | The user is dragging the slider. | - | End | The user stops dragging the slider. | - - -## Example - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    blockColor

    +

    Color

    +

    -

    +

    Color of the slider.

    +

    trackColor

    +

    Color

    +

    -

    +

    Background color of the slider.

    +

    selectedColor

    +

    Color

    +

    -

    +

    Color of the slider rail that has been slid.

    +

    showSteps

    +

    boolean

    +

    false

    +

    Whether to display the current step.

    +

    showTips

    +

    boolean

    +

    false

    +

    Whether to display a bubble to indicate the percentage when sliding.

    +
    + +## Events + +Among all the universal events, only **OnAppear** and **OnDisAppear** are supported. + + + + + + + + + + +

    Name

    +

    Description

    +

    onChange(callback: (value: number, mode: SliderChangeMode) => void)

    +

    Callback invoked when the slider slides.

    +

    value: current progress.

    +

    mode: dragging state.

    +
    + +- SliderChangeMode enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Begin

    +

    The user starts to drag the slider.

    +

    Moving

    +

    The user is dragging the slider.

    +

    End

    +

    The user stops dragging the slider.

    +
    + + +## Example ``` @Entry @@ -179,4 +345,5 @@ struct SliderExample { } ``` -![en-us_image_0000001211898492](figures/en-us_image_0000001211898492.gif) +![](figures/slider.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-span.md b/en/application-dev/reference/arkui-ts/ts-basic-components-span.md index 568211d1bb..5ff2deb232 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-span.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-span.md @@ -1,53 +1,101 @@ -# Span +# Span +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The component is used to display a paragraph of textual information. It can be used only as a child component in the **** component. - -The **<Span>** component is used to display a paragraph of textual information. It can be used only as a child component in the **<Text>** component. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None - -## APIs - -Span(content: string) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | content | string | Yes | - | Text content. | - - -## Attributes +## APIs + +Span\(content: string\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    content

    +

    string

    +

    Yes

    +

    -

    +

    Text content.

    +
    + + +## Attributes In addition to the text style attributes, the attributes below are supported. -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| decoration | {
    type: [TextDecorationType](ts-appendix-enums.md#textdecorationtype-enums),
    color?: Color
    } | {
    type: TextDecorationType.None
    } | Style and color of the text decorative line. | -| textCase | [TextCase](ts-appendix-enums.md#textcase-enums) | Normal | Text case. | - - -## Events + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    decoration

    +

    {

    +

    type: TextDecorationType,

    +

    color?: Color

    +

    }

    +

    {

    +

    type: TextDecorationType.None

    +

    }

    +

    Style and color of the text decorative line.

    +

    textCase

    +

    TextCase

    +

    Normal

    +

    Text case.

    +
    + +## Events Among all the universal events, only the click event is supported. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> As the **<Span>** component does not have size information, the **target** attribute of the **ClickEvent** object returned by the click event is invalid. - - -## Example +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>As the **** component does not have size information, the **target** attribute of the **ClickEvent** object returned by the click event is invalid. +## Example ``` @Entry @@ -86,4 +134,5 @@ struct SpanExample { } ``` -![en-us_image_0000001257138363](figures/en-us_image_0000001257138363.gif) +![](figures/span.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-text.md b/en/application-dev/reference/arkui-ts/ts-basic-components-text.md index 89ca41780e..6973ed419c 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-text.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-text.md @@ -1,80 +1,258 @@ -# Text +# Text +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used to display a paragraph of textual information. - -The **<Text>** component is used to display a paragraph of textual information. - - -## Required Permissions +## Required Permissions None - -## Child Components - -The **<Text>** component can contain the child component [](../reference/arkui-ts/ts-basic-components-span.md). - - -## APIs - -Text(content?: string) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | content | string | No | '' | Text content, which is the content of the child component **<Span>**. This parameter does not take effect when the child component **<Span>** is contained. | - - -## Attributes - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| textAlign | TextAlign | TextAlign.Start | Text alignment mode of multiple lines of text. | -| textOverflow | {overflow: TextOverflow} | {overflow: TextOverflow.Clip} | Display mode when the text is too long. | -| maxLines | number | Infinity | Maximum number of lines in the text. | -| lineHeight | Length | - | Text line height. If the value is less than or equal to **0**, the line height is not limited and the font size is adaptive. If the value of the number type, the unit fp is used. | -| decoration | {
    type: TextDecorationType,
    color?: Color
    } | {
    type: TextDecorationType.None,
    color: Color.Black
    } | Style and color of the text decorative line. | -| baselineOffset | Length | - | Offset of the text baseline. | -| textCase | TextCase | TextCase.Normal | Text case. | - -- TextAlign enums - | Name | Description | - | -------- | -------- | - | Center | The text is center-aligned. | - | Start | The text is aligned with the direction in which the text is written. | - | End | The text is aligned with the opposite direction in which the text is written. | - -- TextOverflow enums - | Name | Description | - | -------- | -------- | - | Clip | Extra text is truncated. | - | Ellipsis | The ellipsis (...) is used for extra-long text. | - | None | No truncation or ellipsis is used for extra-long text. | - -- TextDecorationType enums - | Name | Description | - | -------- | -------- | - | Underline | An underline is used. | - | LineThrough | A strikethrough is used. | - | Overline | An overline is used. | - | None | No decorative line is used. | - -- TextCase enums - | Name | Description | - | -------- | -------- | - | Normal | The original case of the text is retained. | - | LowerCase | All letters in the text are in lowercase. | - | UpperCase | All letters in the text are in uppercase. | - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> The **<Text>** component cannot contain both the text and the child component **<Span>**. If both of them exist, only the content in **<Span>** is displayed. - - -## Example - +## Child Components + +The **** component can contain the child component [](ts-basic-components-span.md). + +## APIs + +Text\(content?: string\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    content

    +

    string

    +

    No

    +

    ''

    +

    Text content, which is the content of the child component <Span>. This parameter does not take effect when the child component <Span> is contained.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    textAlign

    +

    TextAlign

    +

    Start

    +

    Text alignment mode of multiple lines of text.

    +

    textOverflow

    +

    {overflow: TextOverflow}

    +

    {overflow: TextOverflow.Clip}

    +

    Display mode when the text is too long.

    +

    maxLines

    +

    number

    +

    Infinity

    +

    Maximum number of lines in the text.

    +

    lineHeight

    +

    Length

    +

    -

    +

    Text line height. If the value is less than or equal to 0, the line height is not limited and the font size is adaptive. If the value of the number type, the unit fp is used.

    +

    decoration

    +

    {

    +

    type: TextDecorationType,

    +

    color?: Color

    +

    }

    +

    {

    +

    type: TextDecorationType.None,

    +

    color: Color.Black

    +

    }

    +

    Style and color of the text decorative line.

    +

    baselineOffset

    +

    Length

    +

    -

    +

    Offset of the text baseline.

    +

    textCase

    +

    TextCase

    +

    Normal

    +

    Text case.

    +
    + +- TextAlign enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Center

    +

    The text is center-aligned.

    +

    Start

    +

    The text is aligned with the direction in which the text is written.

    +

    End

    +

    The text is aligned with the opposite direction in which the text is written.

    +
    + + +- TextOverflow enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Clip

    +

    Extra text is truncated.

    +

    Ellipsis

    +

    The ellipsis (...) is used for extra-long text.

    +

    None

    +

    No truncation or ellipsis is used for extra-long text.

    +
    + + +- TextDecorationType enums + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Underline

    +

    An underline is used.

    +

    LineThrough

    +

    A strikethrough is used.

    +

    Overline

    +

    An overline is used.

    +

    None

    +

    No decorative line is used.

    +
    + + +- TextCase enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Normal

    +

    The original case of the text is retained.

    +

    LowerCase

    +

    All letters in the text are in lowercase.

    +

    UpperCase

    +

    All letters in the text are in uppercase.

    +
    + + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>The **** component cannot contain both the text and the child component ****. If both of them exist, only the content in **** is displayed. + +## Example ``` @Entry @@ -112,8 +290,7 @@ struct TextExample1 { } ``` -![en-us_image_0000001257138337](figures/en-us_image_0000001257138337.gif) - +![](figures/text1.gif) ``` @Entry @@ -155,4 +332,5 @@ struct TextExample2 { } ``` -![en-us_image_0000001257058391](figures/en-us_image_0000001257058391.gif) +![](figures/text2.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-textarea.md b/en/application-dev/reference/arkui-ts/ts-basic-components-textarea.md index 5f0d05bb0a..8ea07e9d81 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-textarea.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-textarea.md @@ -1,87 +1,168 @@ -# TextArea +# TextArea +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +Provides the multi-line text input component. - -The **<TextArea>** component provides multi-line text input. - - -## Required Permissions +## Required Permissions None - -## Child Component +## Child Component N/A - -## APIs - -TextArea(value?:{placeholder?: string controller?: TextAreaController}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | placeholder | string | No | - | Text displayed when there is no input. | - | controller8+ | [TextAreaController](#textareacontroller8) | No | - | Text area controller. | - - -## Attributes - -In addition to [universal attributes](ts-universal-attributes.md), the following attributes are supported. - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| placeholderColor | Color | - | Placeholder text color. | -| placeholderFont | {
    size?: number,
    weight?:number \| [FontWeight](ts-universal-attributes-text-style.md),
    family?: string,
    style?: [FontStyle](ts-universal-attributes-text-style.md)
    } | - | Placeholder text style.
    - **size**: font size. If the value is of the number type, the unit fp is used.
    - **weight**: font weight. For the number type, the value ranges from 100 to 900, at an interval of 100. The default value is **400**. A larger value indicates a larger font weight.
    - **family**: font family. Use commas (,) to separate multiple fonts, for example, **'Arial, sans-serif'**. The priority of the fonts is the sequence in which they are placed.
    - **style**: font style. | -| textAlign | TextAlign | Start | Sets the text horizontal alignment mode. | -| caretColor | Color | - | Sets the color of the cursor in the text box. | -| inputFilter8+ | {
    value: [ResourceStr](../../ui/ts-types.md),
    error?: (value: string)
    } | - | Regular expression for input filtering. Only inputs that comply with the regular expression can be displayed. Other inputs are ignored. The specified regular expression can match single characters, but not strings. Example: ^(? =.\*\d)(? =.\*[a-z])(? =.\*[A-Z]).{8,10}$. Strong passwords containing 8 to 10 characters cannot be filtered.
    - **value**: indicates the regular expression to set.
    - **error**: returns the ignored content when regular expression matching fails. | - -- TextAlign enums - | Name | Description | - | -------- | -------- | - | Start | Aligns the header horizontally. | - | Center | Horizontal center alignment. | - | End | Align the tail horizontally. | - - -### TextAreaController8+ - -Defines the controller for controlling the **<TextArea>** component. - - | Name | Description | -| -------- | -------- | -| caretPosition(value: number): void | Position of the input cursor.
    **value**: indicates the length from the start of the string to the position where the input cursor is located. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onChange(callback: (value: string) => void) | Triggered when the input changes. | -| onCopy8+(callback:(value: string) => void) | Triggered when the copy button on the pasteboard, which displays when the text box is long pressed, is clicked.
    **value**: text to be copied. | -| onCut8+(callback:(value: string) => void) | Triggered when the cut button on the pasteboard, which displays when the text box is long pressed, is clicked.
    **value**: text to be cut. | -| onPaste8+(callback:(value: string) => void) | Triggered when the paste button on the pasteboard, which displays when the text box is long pressed, is clicked.
    **value**: text to be pasted. | - - -## Example - - -### Multi-line Text Input - +## APIs + +TextArea\(value?: \{ placeholder?: string \}\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    placeholder

    +

    string

    +

    No

    +

    -

    +

    Text displayed when there is no input.

    +
    + + +## Attributes + +In addition to the attributes in [Universal Attributes](ts-universal-attributes.md), the following attributes are supported. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    placeholderColor

    +

    Color

    +

    -

    +

    Placeholder text color.

    +

    placeholderFont

    +

    {

    +

    size?: number,

    +

    weight?:number | FontWeight,

    +

    family?: string,

    +

    style?: FontStyle

    +

    }

    +

    -

    +

    Placeholder text style.

    +
    • size: font size. If the value is of the number type, the unit fp is used.
    • weight: font weight. For the number type, the value ranges from 100 to 900, at an interval of 100. The default value is 400. A larger value indicates a larger font weight.
    • family: font family. Use commas (,) to separate multiple fonts. The priority of the fonts is the sequence in which they are placed. An example value is Arial, sans-serif.
    • style: font style.
    +

    textAlign

    +

    TextAlign

    +

    TextAlign.Start

    +

    Sets the text horizontal alignment mode.

    +

    caretColor

    +

    Color

    +

    -

    +

    Sets the color of the cursor in the text box.

    +
    + +- TextAlign enumeration description + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Start

    +

    Aligns the header horizontally.

    +

    Center

    +

    Horizontal center alignment.

    +

    End

    +

    Align the tail horizontally.

    +
    + + +## Events + + + + + + + + + + +

    Name

    +

    Description

    +

    onChange(callback: (value: string) => void)

    +

    When the input changes, the callback function is triggered.

    +
    + +## Example ``` @Entry @Component -struct TextAreaExample2 { +struct TextAreaExample { @State text: string = '' + build() { Column() { - TextArea({ placeholder: 'input your word'}) + TextArea({ placeholder: 'input your word' }) .placeholderColor("rgb(0,0,225)") .placeholderFont({ size: 30, weight: 100, family: 'cursive', style: FontStyle.Italic }) .textAlign(TextAlign.Center) @@ -92,9 +173,6 @@ struct TextAreaExample2 { .fontFamily("sans-serif") .fontStyle(FontStyle.Normal) .fontColor(Color.Red) - .inputFilter('^[\u4E00-\u9FA5A-Za-z0-9_]+$',(value: string) => { - console.info("hyb"+value) - }) .onChange((value: string) => { this.text = value }) @@ -104,27 +182,5 @@ struct TextAreaExample2 { } ``` -![en-us_image_0000001256858399](figures/en-us_image_0000001256858399.gif) - - -### Setting the Input Cursor - - -``` -@Entry -@Component -struct TextAreaTest { - controller: TextAreaController = new TextAreaController() - build() { - Column() { - TextArea({ placeholder: 'input your word',controller:this.controller }) - Button('caretPosition') - .onClick(() => { - this.controller.caretPosition(4) - }) - } - } -} -``` +![](figures/textarea1.gif) -![en-us_image_0000001212058476](figures/en-us_image_0000001212058476.png) diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-textinput.md b/en/application-dev/reference/arkui-ts/ts-basic-components-textinput.md index e805c5feaa..c2073e5be9 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-textinput.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-textinput.md @@ -1,164 +1,268 @@ -# TextInput +# TextInput +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component provides single-line text input. - -The **<TextInput>** component provides single-line text input. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None - -## APIs - -TextInput(value?:{placeholder?: string controller?: TextInputController}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | placeholder | string | No | - | Text displayed when there is no input. | - | controller8+ | [TextInputController](#textinputcontroller8) | No | - | Text input controller. | - - -## Attributes - -In addition to [universal attributes](ts-universal-attributes.md), the following attributes are supported. - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| type | InputType | InputType.Normal | Input box type. | -| placeholderColor | Color | - | Placeholder color. | -| placeholderFont | {
    size?: Length,
    weight?: number\|[FontWeight](ts-universal-attributes-text-style.md),
    family?: string,
    style?: [FontStyle](ts-universal-attributes-text-style.md)
    } | - | Placeholder text style.
    - **size**: font size. If the value is of the number type, the unit fp is used.
    - **weight**: font weight. For the number type, the value ranges from 100 to 900, at an interval of 100. The default value is **400**. A larger value indicates a larger font weight.
    - **family**: font family. Use commas (,) to separate multiple fonts, for example, **'Arial, sans-serif'**. The priority of the fonts is the sequence in which they are placed.
    - **style**: font style. | -| enterKeyType | EnterKeyType | EnterKeyType.Done | How the Enter key is labeled. | -| caretColor | Color | - | Color of the caret (also known as the text insertion cursor). | -| maxLength8+ | number | - | Maximum number of characters in the text input. | -| inputFilter8+ | {
    value: [ResourceStr](../../ui/ts-types.md#resourcestr8),
    error?: (value: string)
    } | - | Regular expression for input filtering. Only inputs that comply with the regular expression can be displayed. Other inputs are ignored. The specified regular expression can match single characters, but not strings. Example: ^(? =.\*\d)(? =.\*[a-z])(? =.\*[A-Z]).{8,10}$. Strong passwords containing 8 to 10 characters cannot be filtered.
    - **value**: indicates the regular expression to set.
    - **error**: returns the ignored content when regular expression matching fails. | - -- EnterKeyType enums - | Name | Description | - | -------- | -------- | - | EnterKeyType.Go | The Enter key is labeled "Go." | - | EnterKeyType.Search | The Enter key is labeled "Search." | - | EnterKeyType.Send | The Enter key is labeled "Send." | - | EnterKeyType.Next | The Enter key is labeled "Next." | - | EnterKeyType.Done | The Enter key is labeled "Done." | - -- InputType enums - | Name | Description | - | -------- | -------- | - | InputType.Normal | Normal input mode. | - | InputType.Password | Password input mode. | - | InputType.Email | Email address input mode. | - | InputType.Number | Digit input mode. | - - -### TextInputController8+ - -Implements the controller of the **<TextInput>** component. - - | Name | Description | -| -------- | -------- | -| caretPosition(value: number):void | Position of the input cursor.
    **value**: indicates the length from the start of the string to the position where the input cursor is located. | - - -### Objects to Import - - -``` -controller: TextInputController = new TextInputController() -``` - - -### controller.createPosition - -caretPosition(value: number): void - -Sets the cursor in a specified position. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | value | number | Yes | - | Position of the input cursor.
    **value**: indicates the length from the start of the string to the position where the input cursor is located. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onChange(value: string) => void | Triggered when the input changes. | -| onSubmit(callback: (enterKey: EnterKeyType) => void) | Triggered when the Enter key on the physical or soft keyboard is pressed. | -| onEditChanged(callback: (isEditing: boolean) => void) | Triggered when the input status changes. | -| onCopy8+(callback:(value: string) => void) | Triggered when the copy button on the pasteboard, which displays when the text box is long pressed, is clicked.
    **value**: text to be copied. | -| onCut8+(callback:(value: string) => void) | Triggered when the cut button on the pasteboard, which displays when the text box is long pressed, is clicked.
    **value**: text to be cut. | -| onPaste8+(callback:(value: string) => void) | Triggered when the paste button on the pasteboard, which displays when the text box is long pressed, is clicked.
    **value**: text to be pasted. | - - -## Example - - -### Single-line Text Input - - -``` -@Entry -@Component -struct TextAreaExample2 { - @State text: string = '' - - build() { - Column() { - TextArea({ placeholder: 'input your word' }) - .placeholderColor("rgb(0,0,225)") - .placeholderFont({ size: 30, weight: 100, family: 'cursive', style: FontStyle.Italic }) - .textAlign(TextAlign.Center) - .caretColor(Color.Blue) - .height(50) - .fontSize(30) - .fontWeight(FontWeight.Bold) - .fontFamily("sans-serif") - .fontStyle(FontStyle.Normal) - .fontColor(Color.Red) - .onChange((value: string) => { - this.text = value - }) - Text(this.text).width('90%') - } - } -} -``` - - -![en-us_image_0000001212378402](figures/en-us_image_0000001212378402.gif) - - -### Setting the Input Cursor - +## APIs + +TextInput\(value?: \{ placeholder?: string \}\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    placeholder

    +

    string

    +

    No

    +

    -

    +

    Text displayed when there is no input.

    +
    + + +## Attributes + +In addition to the attributes in [Universal Attributes](ts-universal-attributes.md), the following attributes are supported. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    type

    +

    InputType

    +

    InputType.Normal

    +

    Input box type.

    +

    placeholderColor

    +

    Color

    +

    -

    +

    Placeholder color.

    +

    placeholderFont

    +

    {

    +

    size?: Length,

    +

    weight?: number | FontWeight,

    +

    family?: string,

    +

    style?: FontStyle

    +

    }

    +

    -

    +

    Placeholder text style.

    +
    • size: font size. If the value is of the number type, the unit fp is used.
    • weight: font weight. For the number type, the value ranges from 100 to 900, at an interval of 100. The default value is 400. A larger value indicates a larger font weight.
    • family: font family. Use commas (,) to separate multiple fonts. The priority of the fonts is the sequence in which they are placed. An example value is Arial, sans-serif.
    • style: font style.
    +

    enterKeyType

    +

    EnterKeyType

    +

    EnterKeyType.Done

    +

    How the Enter key is labeled.

    +

    caretColor

    +

    Color

    +

    -

    +

    Color of the caret (also known as the text insertion cursor).

    +

    maxLength

    +

    number

    +

    -

    +

    Maximum number of characters in the text input.

    +
    + +- EnterKeyType enums + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Go

    +

    The Enter key is labeled "Go."

    +

    Search

    +

    The Enter key is labeled "Search."

    +

    Send

    +

    The Enter key is labeled "Send."

    +

    Next

    +

    The Enter key is labeled "Next."

    +

    Done

    +

    The Enter key is labeled "Done."

    +
    + + +- InputType enums + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Normal

    +

    Normal input mode.

    +

    Password

    +

    Password input mode.

    +

    Email

    +

    Email address input mode.

    +

    Number

    +

    Digit input mode.

    +
    + + +## Events + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    onChange(value: string) => void

    +

    Triggered when the input changes.

    +

    onSubmit(callback: (enterKey: EnterKeyType) => void)

    +

    Triggered when the Enter key on the physical or soft keyboard is pressed.

    +

    onEditChanged(callback: (isEditing: boolean) => void)

    +

    Triggered when the input status changes.

    +
    + +## Example ``` @Entry @Component struct TextInputTest { @State text: string = '' - controller: TextInputController = new TextInputController() + @State text1: string = '' + @State text2: string = '' build() { - Column() { - TextInput({ placeholder: 'Please input your words.', controller:this.controller}) - Button('caretPosition') - .onClick(() => { - this.controller.caretPosition(4) - }) + Column() { + TextInput({ placeholder: 'input your word' }) + .type(InputType.Normal) + .placeholderColor(Color.Blue) + .placeholderFont({ size: 40, weight: FontWeight.Normal, family: "sans-serif", style: FontStyle.Normal }) + .enterKeyType(EnterKeyType.Next) + .caretColor(Color.Green) + .height(60) + .fontSize(30) + .fontWeight(FontWeight.Bold) + .fontFamily("cursive") + .fontStyle(FontStyle.Italic) + .fontColor(Color.Red) + .maxLength(20) + .onChange((value: string) => { + this.text = value + }) + .onSubmit((enterKey) => { + this.text1 = 'onSubmit' + }) + .onEditChanged((isEditing) => { + this.text2 = 'onEditChanged' + }) + Text(this.text) + Text(this.text1) + Text(this.text2) } } } ``` -![en-us_image_0000001212058468](figures/en-us_image_0000001212058468.png) +![](figures/textinput1.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-textpicker.md b/en/application-dev/reference/arkui-ts/ts-basic-components-textpicker.md deleted file mode 100644 index c9557ccbc4..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-textpicker.md +++ /dev/null @@ -1,69 +0,0 @@ -# TextPicker - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -The **<TextPicker>** component allows users to select text from a list of options. - - -## Required Permissions - -None - - -## Child Component - -None - - -## APIs - -TextPicker(value: {range: string[], selected?: number}) - -Creates a text picker based on the selection range specified by **range**. - -- Parameter - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | range | string[] | Yes | - | Data selection range of the picker. | - | selected | number | No | First element | Index value of the selected item in the array. | - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| defaultPickerItemHeight | Length | - | Default height of a Picker content item element. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onChange(callback: (value: string, index: number) => void) | Triggered when an item in the picker is selected.
    - **value**: text of the selected item.
    - **index**: index of the selected item. | - - -## Example - - -``` -@Entry -@Component -struct TextPickerExample { - private select: number = 1 - private fruits: string[] = ['apple1', 'orange2', 'peach3', 'grape4'] - - build() { - Column() { - TextPicker({range: this.fruits, selected: this.select}) - .onChange((value: string, index: number) => { - console.info('Picker item changed, value: ' + value + ', index: ' + index) - }) - } - } -} -``` - -![en-us_image_0000001257058417](figures/en-us_image_0000001257058417.png) diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-texttimer.md b/en/application-dev/reference/arkui-ts/ts-basic-components-texttimer.md deleted file mode 100644 index a56349de22..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-texttimer.md +++ /dev/null @@ -1,94 +0,0 @@ -# TextTimer - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -The **<TextTimer>** component supports custom time formats. - - -## Required Permissions - -None - - -## Child Components - -None - - -## APIs - -TextTimer(options: { isCountDown?: boolean, count?: number, controller?: TextTimerController }) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | isCountDown | boolean | No | false | Whether to count down. | - | count | number | No | 60000 | Countdown time, in milliseconds. This parameter is valid only when **isCountDown** is set to **true**.
    - If the value of **count** is less than or equal to 0, the default value is used.
    - If the value of **count** is greater than 0, it is used. | - | controller | [TextTimerController](#texttimercontroller) | No | null | **<TextTimer>** controller. | - - -### TextTimerController - -Defines the controller for controlling the **<TextTimer>** component. - - | Name | Description | -| -------- | -------- | -| start() | Starts the timer. | -| pause() | Pauses the timer. | -| reset() | Resets the timer. | - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| format | string | 'hh:mm:ss.ms' | Custom format. The value must contain at least one of the following keywords: **hh**, **mm**, **ss**, and **ms**. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onTimer(callback: (utc: number, elapsedTime: number) => void) | Triggered when the time text changes.
    **utc**: currently displayed time, in milliseconds.
    **elapsedTime**: elapsed time of the timer, in milliseconds. | - - -## Example - - -``` -@Entry -@Component -struct TextTimerExample { - myTimerController: TextTimerController = new TextTimerController() - @State format: string = 'hh:mm:ss.ms' - - build() { - Column() { - TextTimer({controller: this.myTimerController}) - .format(this.format) - .fontColor(Color.Black) - .fontSize(this.textSize) - .onTimer((utc: number, elapsedTime: number) => { - console.info('textTimer notCountDown utc is:' + utc + ', elapsedTime: ' + elapsedTime) - }) - Row() { - Button("start").onClick(() => { - this.myTimerController.start(); - }); - Button("pause").onClick(() => { - this.myTimerController.pause(); - }); - Button("reset").onClick(() => { - this.myTimerController.reset(); - }); - } - } - } -} -``` - - -![en-us_image_0000001257138345](figures/en-us_image_0000001257138345.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components-toggle.md b/en/application-dev/reference/arkui-ts/ts-basic-components-toggle.md index a969be1ae9..2d4f723cbb 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components-toggle.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components-toggle.md @@ -1,56 +1,145 @@ -# Toggle +# Toggle +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None - -## APIs - -Toggle(options: { type: ToggleType, isOn?: boolean }) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | type | ToggleType | Yes | - | Type of the toggle. | - | isOn | boolean | No | false | Initial state of the toggle.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > If **isOn** is not set during component creation, the selected state can be retained during component reuse. If **isOn** is set, the selected state needs to be retained during component reuse after the selected state is recorded using an event method. | - - -- ToggleType enums - | Name | Description | - | -------- | -------- | - | Checkbox | A checkbox is provided. The text setting of the child component does not take effect. If the text setting is required, you can place the **<Text>** component and the current component in the layout component. | - | Button | A button is provided. If the text setting is available, the corresponding text content is displayed inside the button. | - | Switch | A switch is provided. The text setting of the child component does not take effect. If the text setting is required, you can place the **<Text>** component and the current component in the layout component. | - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| selectedColor | Color | - | Background color of the toggle when it is enabled. | -| switchPointColor | Color | - | Color of the circular slider of the **Switch** type.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > This attribute is valid only when type is set to **ToggleType.Switch**. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onChange(callback: (isOn: boolean) => void) | Triggered when the switch status changes. | - - -## Example - +## APIs + +Toggle\(options: \{ type: ToggleType, isOn?: boolean \}\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    type

    +

    ToggleType

    +

    Yes

    +

    -

    +

    Type of the toggle.

    +

    isOn

    +

    boolean

    +

    No

    +

    false

    +

    Initial state of the toggle.

    +
    NOTE:

    If isOn is not set during component creation, the selected state can be retained during component reuse. If isOn is set, the selected state needs to be retained during component reuse after the selected state is recorded using an event method.

    +
    +
    + + +- ToggleType enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Checkbox

    +

    A checkbox is provided. The text setting of the child component does not take effect. If the text setting is required, you can place the <Text> component and the current component in the layout component.

    +

    Button

    +

    A button is provided. If the text setting is available, the corresponding text content is displayed inside the button.

    +

    Switch

    +

    A switch is provided. The text setting of the child component does not take effect. If the text setting is required, you can place the <Text> component and the current component in the layout component.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    selectedColor

    +

    Color

    +

    -

    +

    Background color of the toggle when it is enabled.

    +

    switchPointColor

    +

    Color

    +

    -

    +

    Color of the circular slider of the Switch type.

    +
    NOTE:

    This attribute is valid only when type is set to ToggleType.Switch.

    +
    +
    + +## Events + + + + + + + + + + +

    Name

    +

    Description

    +

    onChange(callback: (isOn: boolean) => void)

    +

    Triggered when the switch status changes.

    +
    + +## Example ``` @Entry @@ -115,4 +204,5 @@ struct ToggleExample { } ``` -![en-us_image_0000001211898522](figures/en-us_image_0000001211898522.gif) +![](figures/toggle.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-components.md b/en/application-dev/reference/arkui-ts/ts-basic-components.md index 657554b6f2..4d256bb16e 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-components.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-components.md @@ -1,39 +1,37 @@ -# Basic Components +# Basic Components +- **[Blank](ts-basic-components-blank.md)** +- **[Button](ts-basic-components-button.md)** -- **[Blank](ts-basic-components-blank.md)** +- **[DataPanel](ts-basic-components-datapanel.md)** -- **[Button](ts-basic-components-button.md)** +- **[Divider](ts-basic-components-divider.md)** -- **[DataPanel](ts-basic-components-datapanel.md)** +- **[Gauge](ts-basic-components-gauge.md)** -- **[DatePicker](ts-basic-components-datepicker.md)** +- **[Image](ts-basic-components-image.md)** -- **[Divider](ts-basic-components-divider.md)** +- **[ImageAnimator](ts-basic-components-imageanimator.md)** -- **[Image](ts-basic-components-image.md)** +- **[Marquee](ts-basic-components-marquee.md)** -- **[ImageAnimator](ts-basic-components-imageanimator.md)** +- **[Progress](ts-basic-components-progress.md)** -- **[Progress](ts-basic-components-progress.md)** +- **[QRCode](ts-basic-components-qrcode.md)** -- **[QRCode](ts-basic-components-qrcode.md)** +- **[Rating](ts-basic-components-rating.md)** -- **[Rating](ts-basic-components-rating.md)** +- **[Span](ts-basic-components-span.md)** -- **[Span](ts-basic-components-span.md)** +- **[Slider](ts-basic-components-slider.md)** -- **[Slider](ts-basic-components-slider.md)** +- **[Text](ts-basic-components-text.md)** -- **[Text](ts-basic-components-text.md)** +- **[TextArea](ts-basic-components-textarea.md)** -- **[TextArea](ts-basic-components-textarea.md)** +- **[TextInput](ts-basic-components-textinput.md)** -- **[TextInput](ts-basic-components-textinput.md)** +- **[Toggle](ts-basic-components-toggle.md)** -- **[TextPicker](ts-basic-components-textpicker.md)** -- **[TextTimer](ts-basic-components-texttimer.md)** - -- **[Toggle](ts-basic-components-toggle.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-basic-gestures-longpressgesture.md b/en/application-dev/reference/arkui-ts/ts-basic-gestures-longpressgesture.md index 952bf6d555..ffef167c0a 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-gestures-longpressgesture.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-gestures-longpressgesture.md @@ -1,43 +1,120 @@ -# LongPressGesture +# LongPressGesture +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This gesture is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This gesture is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## APIs - -LongPressGesture(options?: { fingers?: number, repeat?: boolean, duration?: number }) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | fingers | number | No | 1 | Minimum number of fingers to trigger a long press gesture. The value ranges from 1 to 10. | - | repeat | boolean | No | false | Whether to continuously trigger the event callback. | - | duration | number | No | 500 | Minimum hold-down time, in ms. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onAction((event?: LongPressGestureEvent) => void) | Callback invoked when a long press gesture is recognized. | -| onActionEnd((event?: LongPressGestureEvent) => void) | Callback invoked when the finger used for a long press gesture is lift. | -| onActionCancel(event: () => void) | Callback invoked when a tap cancellation event is received after a long press gesture is recognized. | - -- LongPressGestureEvent8+ attributes - | Name | Type | Description | - | -------- | -------- | -------- | - | repeat | boolean | Whether the event is repeated. | - - -## Example - +## APIs + +LongPressGesture\(options?: \{ fingers?: number, repeat?: boolean, duration?: number \}\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    fingers

    +

    number

    +

    No

    +

    1

    +

    Minimum number of fingers to trigger a long press gesture. The value ranges from 1 to 10.

    +

    repeat

    +

    boolean

    +

    No

    +

    false

    +

    Whether to continuously trigger the event callback.

    +

    duration

    +

    number

    +

    No

    +

    500

    +

    Minimum hold-down time, in ms.

    +
    + + +## Events + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    onAction((event?: LongPressGestureEvent) => void)

    +

    Callback invoked when a long press gesture is recognized.

    +

    onActionEnd((event?: LongPressGestureEvent) => void)

    +

    Callback invoked when the finger used for a long press gesture is lift.

    +

    onActionCancel(event: () => void)

    +

    Callback invoked when a tap cancellation event is received after a long press gesture is recognized.

    +
    + +- LongPressGestureEvent attributes8+ + + Inherited from [GestureEvent](ts-gesture-settings.md#table290mcpsimp). + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    repeat

    +

    boolean

    +

    Whether the event is repeated.

    +
    + + +## Example ``` @Entry @@ -65,4 +142,5 @@ struct LongPressGestureExample { } ``` -![en-us_image_0000001257058425](figures/en-us_image_0000001257058425.gif) +![](figures/longpressgesture.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-gestures-pangesture.md b/en/application-dev/reference/arkui-ts/ts-basic-gestures-pangesture.md index 9cf81839ba..176c52260a 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-gestures-pangesture.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-gestures-pangesture.md @@ -1,74 +1,223 @@ -# PanGesture +# PanGesture +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This gesture is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This gesture is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## APIs - -PanGesture(options?: { fingers?: number, direction?: PanDirection, distance?: number } | [PanGestureOption](#pangestureoption)) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | fingers | number | No | 1 | Minimum number of fingers to trigger a long press gesture. The value ranges from 1 to 10. | - | direction | PanDirection | No | All | Slide direction. The enumerated value supports the AND (&) and OR (\|) operations. | - | distance | number | No | 5.0 | Minimum slide recognition distance, in vp. | - -- PanDirection enums - | Name | Description | - | -------- | -------- | - | All | All directions. | - | Horizontal | Horizontal slide. | - | Vertical | Vertical slide. | - | Left | Slide to the left. | - | Right | Slide to the right. | - | Up | Slide up. | - | Down | Slide down. | - | None | Slide disabled. | - - -### PanGestureOption - -The attributes of the slide gesture recognizer can be dynamically modified using the **PanGestureOption** AP. This avoids modifying attributes through status variables, which will cause the UI to be refreshed. - -PanGestureOption(options?: { fingers?: number, direction?: PanDirection, distance?: number }) - -- Parameters - For details, see **PanGesture**. - -- APIs - | Name | Description | - | -------- | -------- | - | setDirection(value: PanDirection) | Sets the direction. | - | setDistance(value: number) | Sets the distance. | - | setFingers(value: number) | Sets the number of fingers. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onActionStart(callback: (event?: PanGestureEvent) => void) | Callback for the pan gestures reorganization event. | -| onActionUpdate(callback: (event?: PanGestureEvent) => void) | Callback invoked when a pan gesture is recognized. | -| onActionEnd(callback: (event?: PanGestureEvent) => void) | Callback invoked when the finger used for a pan gesture is lift. | -| onActionCancel(callback: () => void) | Callback invoked when a tap cancellation event is received after a pan gesture is recognized. | - -- PanGestureEvent8+ attributes - | Name | Type | Description | - | -------- | -------- | -------- | - | offsetX | number | Offset of the gesture event, in vp. | - | offsetY | number | Offset of the gesture event, in vp. | - - -## Example - +## APIs + +PanGesture\(options?: \{ fingers?: number, direction?: PanDirection, distance?: number \} | [PanGestureOption](#section14214195212149)\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    fingers

    +

    number

    +

    No

    +

    1

    +

    Minimum number of fingers to trigger a long press gesture. The value ranges from 1 to 10.

    +

    direction

    +

    PanDirection

    +

    No

    +

    All

    +

    Slide direction. The enumerated value supports the AND (&) and OR (|) operations.

    +

    distance

    +

    number

    +

    No

    +

    5.0

    +

    Minimum slide recognition distance, in vp.

    +
    + +- PanDirection enums + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    All

    +

    All directions.

    +

    Horizontal

    +

    Horizontal slide.

    +

    Vertical

    +

    Vertical slide.

    +

    Left

    +

    Slide to the left.

    +

    Right

    +

    Slide to the right.

    +

    Up

    +

    Slide up.

    +

    Down

    +

    Slide down.

    +

    None

    +

    Slide disabled.

    +
    + + +### PanGestureOption + +The attributes of the slide gesture recognizer can be dynamically modified using the **PanGestureOption** AP. This avoids modifying attributes through status variables, which will cause the UI to be refreshed. + +PanGestureOption\(options?: \{ fingers?: number, direction?: PanDirection, distance?: number \}\) + +- Parameters + + For details, see the parameter description of [PanGesture](#li118312377710). + + +- APIs + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    setDirection(value: PanDirection)

    +

    Sets the direction.

    +

    setDistance(value: number)

    +

    Sets the distance.

    +

    setFingers(value: number)

    +

    Sets the number of fingers.

    +
    + + +## Events + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    onActionStart(callback: (event?: PanGestureEvent) => void)

    +

    Callback for the pan gestures recognition event.

    +

    onActionUpdate(callback: (event?: PanGestureEvent) => void)

    +

    Callback for the pan gesture movement event.

    +

    onActionEnd(callback: (event?: PanGestureEvent) => void)

    +

    Callback for fingers pick-up.

    +

    onActionCancel(callback: () => void)

    +

    Callback for the touch cancellation event.

    +
    + +- PanGestureEvent attributes8+ + + Inherited from [GestureEvent](ts-gesture-settings.md#table290mcpsimp). + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    offsetX

    +

    number

    +

    Offset of the gesture event, in vp.

    +

    offsetY

    +

    number

    +

    Offset of the gesture event, in vp.

    +
    + + +## Example ``` @Entry @@ -100,4 +249,5 @@ struct PanGestureExample { } ``` -![en-us_image_0000001256978371](figures/en-us_image_0000001256978371.gif) +![](figures/pangesture.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-gestures-pinchgesture.md b/en/application-dev/reference/arkui-ts/ts-basic-gestures-pinchgesture.md index a3eab5de94..0906de7217 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-gestures-pinchgesture.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-gestures-pinchgesture.md @@ -1,45 +1,128 @@ -# PinchGesture +# PinchGesture +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This gesture is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This gesture is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## APIs - -PinchGesture(options?: { fingers?: number, distance?: number }) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | fingers | number | No | 2 | Minimum number of fingers to trigger a pinch. The value ranges from 2 to 5. | - | distance | number | No | 3.0 | Minimum recognition distance, in vp. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onActionStart((event?: PinchGestureEvent) => void) | Callback invoked when a pinch gesture is recognized. | -| onActionUpdate((event?: PinchGestureEvent) => void) | Callback invoked during the movement of a pinch gesture. | -| onActionEnd((event?: PinchGestureEvent) => void) | Callback invoked when the finger used for a pinch gesture is lift. | -| onActionCancel(event: () => void) | Callback invoked when a tap cancellation event is received after a pinch gesture is recognized. | - -- PinchGestureEvent8+ attributes - | Name | Type | Description | - | -------- | -------- | -------- | - | scale | number | Scale ratio. This attribute is used for the pinch gesture. | - | pinchCenterX | number | X-coordinate of the center of the pinch gesture, in px. | - | pinchCenterY | number | Y-coordinate of the center of the pinch gesture, in px. | - - -## Example - +## APIs + +PinchGesture\(options?: \{ fingers?: number, distance?: number \}\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    fingers

    +

    number

    +

    No

    +

    2

    +

    Minimum number of fingers to trigger a pinch. The value ranges from 2 to 5.

    +

    distance

    +

    number

    +

    No

    +

    3.0

    +

    Minimum recognition distance, in vp.

    +
    + + +## Events + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    onActionStart((event?: PinchGestureEvent) => void)

    +

    Callback invoked when a pinch gesture is recognized.

    +

    onActionUpdate((event?: PinchGestureEvent) => void)

    +

    Callback invoked during the movement of a pinch gesture.

    +

    onActionEnd((event?: PinchGestureEvent) => void)

    +

    Callback invoked when the finger used for a pinch gesture is lift.

    +

    onActionCancel(event: () => void)

    +

    Callback invoked when a tap cancellation event is received after a pinch gesture is recognized.

    +
    + +- PinchGestureEvent attributes8+ + + Inherited from [GestureEvent](ts-gesture-settings.md#table290mcpsimp). + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    scale

    +

    number

    +

    Scale ratio. This attribute is used for the pinch gesture.

    +

    pinchCenterX

    +

    number

    +

    X coordinate of the center of the pinch, in px.

    +

    pinchCenterY

    +

    number

    +

    Y coordinate of the center of the pinch, in px.

    +
    + + +## Example ``` @Entry @@ -69,4 +152,5 @@ struct PinchGestureExample { } ``` -![en-us_image_0000001257058419](figures/en-us_image_0000001257058419.gif) +![](figures/pinchgesture.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-gestures-rotationgesture.md b/en/application-dev/reference/arkui-ts/ts-basic-gestures-rotationgesture.md index f8aba76627..a5b02f3285 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-gestures-rotationgesture.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-gestures-rotationgesture.md @@ -1,43 +1,128 @@ -# RotationGesture +# RotationGesture +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This gesture is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This gesture is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## APIs - -RotationGesture(options?: { fingers?: number, angle?: number }) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | fingers | number | No | 2 | Minimum number of fingers to trigger a rotation. The value ranges from 2 to 5. | - | angle | number | No | 1.0 | Minimum degree that can trigger the rotation gesture. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onActionStart((event?: RotationGestureEvent) => void) | Callback invoked when a rotation gesture is recognized. | -| onActionUpdate((event?: RotationGestureEvent) => void) | Callback invoked during the movement of the rotation gesture. | -| onActionEnd((event?: RotationGestureEvent) => void) | Callback invoked when the finger used for the rotation gesture is lift. | -| onActionCancel(event: () => void) | Callback invoked when a tap cancellation event is received after the rotation gesture is recognized. | - -- RotationGestureEvent8+ attributes - | Name | Type | Description | - | -------- | -------- | -------- | - | angle | number | Rotation angle. | - - -## Example - +## APIs + +RotationGesture\(options?: \{ fingers?: number, angle?: number \}\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    fingers

    +

    number

    +

    No

    +

    2

    +

    Minimum number of fingers to trigger a rotation. The value ranges from 2 to 5.

    +

    angle

    +

    number

    +

    No

    +

    1.0

    +

    Minimum degree that can trigger the rotation gesture.

    +
    + + +## Events + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    onActionStart((event?: RotationGestureEvent) => void)

    +

    Callback invoked when a rotation gesture is recognized.

    +

    onActionUpdate((event?: RotationGestureEvent) => void)

    +

    Callback invoked during the movement of the rotation gesture.

    +

    onActionEnd((event?: RotationGestureEvent) => void)

    +

    Callback invoked when the finger used for the rotation gesture is lift.

    +

    onActionCancel(event: () => void)

    +

    Callback invoked when a tap cancellation event is received after the rotation gesture is recognized.

    +
    + +- RotationGestureEvent attributes8+ + + Inherited from [GestureEvent](ts-gesture-settings.md#table290mcpsimp). + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    angle

    +

    number

    +

    Rotation angle.

    +

    pinchCenterX

    +

    number

    +

    X coordinate of the center of the pinch, in px.

    +

    pinchCenterY

    +

    number

    +

    Y coordinate of the center of the pinch, in px.

    +
    + + +## Example ``` @Entry @@ -67,4 +152,5 @@ struct RotationGestureExample { } ``` -![en-us_image_0000001256858403](figures/en-us_image_0000001256858403.gif) +![](figures/rotationgesture.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-gestures-swipegesture.md b/en/application-dev/reference/arkui-ts/ts-basic-gestures-swipegesture.md index f4431bc798..77bb943dc6 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-gestures-swipegesture.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-gestures-swipegesture.md @@ -1,50 +1,144 @@ -# SwipeGesture +# SwipeGesture +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This gesture is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## APIs - -SwipeGesture(value?: { fingers?: number; direction?: SwipeDirection; speed?: number }) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | fingers | number | No | 1 | Minimum number of fingers to trigger a swipe gesture. The value ranges from 1 to 10. | - | direction | SwipeDirection | No | SwipeDirection.All | Swipe direction. | - | speed | number | No | 100 | Minimum speed of the swipe gesture (100 vp/s). | - -- SwipeDirection enums - | Name | Description | - | -------- | -------- | - | All | All directions. | - | Horizontal | Horizontal direction. | - | Vertical | Vertical direction. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onAction(callback:(event?: SwipeGestureEvent) => void) | Callback invoked when a swipe gesture is recognized. | - - -- SwipeGestureEvent attributes - | Name | Type | Description | - | -------- | -------- | -------- | - | angle | number | Angle of the swipe gesture. | - | speed | number | Speed of the swipe gesture. | - - -## Example - +## APIs + +SwipeGesture\(value?: \{ fingers?: number; direction?: SwipeDirection; speed?: number \}\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    fingers

    +

    number

    +

    No

    +

    1

    +

    Minimum number of fingers to trigger a swipe gesture. The value ranges from 1 to 10.

    +

    direction

    +

    SwipeDirection

    +

    No

    +

    SwipeDirection.All

    +

    Swipe direction

    +

    speed

    +

    number

    +

    No

    +

    100

    +

    Minimum speed of the swipe operation (100 vp/s).

    +
    + +- SwipeDirection enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    All

    +

    All directions.

    +

    Horizontal

    +

    Horizontal direction.

    +

    Vertical

    +

    Vertical direction.

    +
    + + +## Events + + + + + + + + + + +

    Name

    +

    Description

    +

    onAction(callback:(event?: SwipeGestureEvent) => void)

    +

    Callback for the swipe gesture recognition event.

    +
    + +- SwipeGestureEvent attributes + + Inherited from [GestureEvent](ts-gesture-settings.md#table290mcpsimp). + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    angle

    +

    number

    +

    Angle of the swipe gesture.

    +

    speed

    +

    number

    +

    Speed of the swipe gesture.

    +
    + + +## Example ``` @Entry @@ -55,8 +149,8 @@ struct SwipeGestureExample { build() { Column() { - Text("SwipGesture speed : " + this.speed) - Text("SwipGesture angle : " + this.rotateAngle) + Text("SwipGesture speed : " + this.speed) + Text("SwipGesture angle : " + this.rotateAngle) } .position({x: 80, y: 200}) .border({width:2}) @@ -73,4 +167,5 @@ struct SwipeGestureExample { } ``` -![en-us_image_0000001257138365](figures/en-us_image_0000001257138365.gif) +![](figures/gif-0.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-gestures-tapgesture.md b/en/application-dev/reference/arkui-ts/ts-basic-gestures-tapgesture.md index f0e6dd76bd..79dc179371 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-gestures-tapgesture.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-gestures-tapgesture.md @@ -1,35 +1,85 @@ -# TapGesture +# TapGesture +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This gesture is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This gesture is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## APIs - -TapGesture(options?: { count?: number, fingers?: number }) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | count | number | No | 1 | Number of consecutive taps. If this parameter is set to a value less than **1**, the default value will be used.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > If multi-tap is configured, the timeout interval between a lift and the next tap is 300 ms. | - | fingers | number | No | 1 | Minimum number of fingers to trigger a tap. The value ranges from 1 to 10.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > 1. When multi-finger is configured, if the number of fingers used for tap does not reach the specified number within 300 ms after the first finger is tapped, the gesture fails to be recognized.

    > 2. Gesture recognition fails if the number of fingers used for tap exceeds the configured number. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onAction((event?: GestureEvent) => void) | Callback invoked when a tap gesture is recognized. | - - -## Example - +## APIs + +TapGesture\(options?: \{ count?: number, fingers?: number \}\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    count

    +

    number

    +

    No

    +

    1

    +

    Number of consecutive taps. If this parameter is set to a value less than 1, the default value will be used.

    +
    NOTE:

    If multi-tap is configured, the timeout interval between a lift and the next tap is 300 ms.

    +
    +

    fingers

    +

    number

    +

    No

    +

    1

    +

    Minimum number of fingers to trigger a tap. The value ranges from 1 to 10.

    +
    NOTE:

    1. When multi-finger is configured, if the number of fingers used for tap does not reach the specified number within 300 ms after the first finger is tapped, the gesture fails to be recognized.

    +

    2. Gesture recognition fails if the number of fingers used for tap exceeds the configured number.

    +
    +
    + + +## Events + + + + + + + + + + +

    Name

    +

    Description

    +

    onAction((event?: TapGestureEvent) => void)

    +

    Callback invoked when a tap gesture is recognized.

    +
    + +- TapGestureEvent attributes8+ + + Inherited from [GestureEvent](ts-gesture-settings.md#table290mcpsimp). + + +## Example ``` @Entry @@ -53,4 +103,5 @@ struct TapGestureExample { } ``` -![en-us_image_0000001256858417](figures/en-us_image_0000001256858417.gif) +![](figures/tapgesture.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-basic-gestures.md b/en/application-dev/reference/arkui-ts/ts-basic-gestures.md index 25046a17e2..1dca7a6b84 100644 --- a/en/application-dev/reference/arkui-ts/ts-basic-gestures.md +++ b/en/application-dev/reference/arkui-ts/ts-basic-gestures.md @@ -1,15 +1,15 @@ -# Basic Gestures +# Basic Gestures +- **[TapGesture](ts-basic-gestures-tapgesture.md)** +- **[LongPressGesture](ts-basic-gestures-longpressgesture.md)** -- **[TapGesture](ts-basic-gestures-tapgesture.md)** +- **[PanGesture](ts-basic-gestures-pangesture.md)** -- **[LongPressGesture](ts-basic-gestures-longpressgesture.md)** +- **[PinchGesture](ts-basic-gestures-pinchgesture.md)** -- **[PanGesture](ts-basic-gestures-pangesture.md)** +- **[RotationGesture](ts-basic-gestures-rotationgesture.md)** -- **[PinchGesture](ts-basic-gestures-pinchgesture.md)** +- **[SwipeGesture](ts-basic-gestures-swipegesture.md)** -- **[RotationGesture](ts-basic-gestures-rotationgesture.md)** -- **[SwipeGesture](ts-basic-gestures-swipegesture.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-canvasrenderingcontext2d.md b/en/application-dev/reference/arkui-ts/ts-canvasrenderingcontext2d.md index 7592659277..542885a1c1 100644 --- a/en/application-dev/reference/arkui-ts/ts-canvasrenderingcontext2d.md +++ b/en/application-dev/reference/arkui-ts/ts-canvasrenderingcontext2d.md @@ -1,64 +1,274 @@ -# CanvasRenderingContext2D - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -Use **RenderingContext** to draw rectangles, text, images, and other objects on a canvas. - - -## APIs - -CanvasRenderingContext2D(setting: RenderingContextSetting) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | setting | [RenderingContextSettings](#renderingcontextsettings) | Yes | - | See RenderingContextSettings. | - - -### RenderingContextSettings - -RenderingContextSettings(antialias?: bool) - -Configures the settings of a **CanvasRenderingContext2D** object, including whether to enable antialiasing. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | antialias | bool | No | false | Whether antialiasing is enabled. | - - -## Attributes - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| [fillStyle](#fillstyle) | <color> \| [CanvasGradient](ts-components-canvas-canvasgradient.md) \| [CanvasPattern](#canvaspattern) | - | Style used to fill an area.
    - When the type is **<color>**, this attribute indicates the fill color.
    - When the type is **CanvasGradient**, this attribute indicates a gradient object, which is created using the [createLinearGradient](#createlineargradient) method.
    - When the type is **CanvasPattern**, this attribute indicates a pattern, which is created using the [createPattern](#createpattern) method. | -| [lineWidth](#linewidth) | number | - | Line width. | -| [strokeStyle](#strokestyle) | <color> \| [CanvasGradient](ts-components-canvas-canvasgradient.md) \| [CanvasPattern](#canvaspattern) | - | Stroke style.
    - When the type is **<color>**, this attribute indicates the stroke color.
    - When the type is **CanvasGradient**, this attribute indicates a gradient object, which is created using the [createLinearGradient](#createlineargradient) method.
    - When the type is **CanvasPattern**, this attribute indicates a pattern, which is created using the [createPattern](#createpattern) method. | -| [lineCap](#linecap) | string | 'butt' | Style of the line endpoints. The options are as follows:
    - **'butt'**: The endpoints of the line are squared off.
    - **'round'**: The endpoints of the line are rounded.
    - **'square'**: The endpoints of the line are squared off by adding a box with an equal width and half the height of the line's thickness. | -| [lineJoin](#linejoin) | string | 'miter' | Style of the shape used to join line segments. The options are as follows:
    - **'round'**: The shape used to join line segments is a rounded corner with the radius equal to the line width.
    - **'bevel'**: The shape used to join line segments is a beveled corner. The rectangular corner of each line is independent.
    - **'miter'**: The shape used to join line segments is a mitered corner. The corner is formed by extending the outside edges of the lines until they meet. You can adjust the effect of this attribute using **miterLimit**. | -| [miterLimit](#miterlimit) | number | 10 | Maximum miter length. The miter length is the distance between the inner corner and the outer corner where two lines meet. | -| [font](#font) | string | 'normal normal 14px sans-serif' | Font style.
    Syntax: ctx.font='font-size font-family'
    - (Optional) **font-size**: font size and row height. The unit can only be px.
    - (Optional) **font-family**: font family.
    Syntax: ctx.font='font-style font-weight font-size font-family'
    - (Optional) **font-style**: font style. Available values are **'normal'** and **'italic'**.
    - (Optional) **font-weight**: font weight. Available values are as follows: **'normal'**, **'bold'**, **'bolder'**, **'lighter'**, **100**, **200**, **300**, **400**, **500**, **600**, **700**, **800**, **900**
    - (Optional) **font-size**: font size and row height. The unit can only be px.
    - (Optional) **font-family**: font family. Available values are **'sans-serif'**, **'serif'**, and **'monospace'**. | -| [textAlign](#textalign) | string | 'left' | Text alignment mode. Available values are as follows:
    - **'left'**: The text is left-aligned.
    - **'right'**: The text is right-aligned.
    - **'center'**: The text is center-aligned.
    - **'start'**: The text is aligned with the start bound.
    - **'end'**: The text is aligned with the end bound.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > In the **ltr** layout mode, the value **'start'** equals **'left'**. In the **rtl** layout mode, the value **'start'** equals **'right'**. | -| [textBaseline](#textbaseline) | string | 'alphabetic' | Horizontal alignment mode of text. Available values are as follows:
    - **'alphabetic'**: The text baseline is the normal alphabetic baseline.
    - **'top'**: The text baseline is on the top of the text bounding box.
    - **'hanging'**: The text baseline is a hanging baseline over the text.
    - **'middle'**: The text baseline is in the middle of the text bounding box.
    - **'ideographic'**: The text baseline is the ideographic baseline. If a character exceeds the alphabetic baseline, the ideographic baseline is located at the bottom of the excess character.
    - **'bottom'**: The text baseline is at the bottom of the text bounding box. Its difference from the ideographic baseline is that the ideographic baseline does not consider letters in the next line. | -| [globalAlpha](#globalalpha) | number | - | Opacity. **0.0**: completely transparent; **1.0**: completely opaque. | -| [lineDashOffset](#linedashoffset) | number | 0.0 | Offset of the dashed line. The precision is float. | -| [globalCompositeOperation](#globalcompositeoperation) | string | 'source-over' | Composition operation type. Available values are as follows: **'source-over'**, **'source-atop'**, **'source-in'**, **'source-out'**, **'destination-over'**, **'destination-atop'**, **'destination-in'**, **'destination-out'**, **'lighter'**, **'copy'**, and **'xor'**. | -| [shadowBlur](#shadowblur) | number | 0.0 | Blur level during shadow drawing. A larger value indicates a more blurred effect. The precision is float. | -| [shadowColor](#shadowcolor) | <color> | - | Shadow color. | -| [shadowOffsetX](#shadowoffsetx) | number | - | X-axis shadow offset relative to the original object. | -| [shadowOffsetY](#shadowoffsety) | number | - | Y-axis shadow offset relative to the original object. | -| [imageSmoothingEnabled](#imagesmoothingenabled) | boolean | true | Whether to adjust the image smoothness during image drawing. The value **true** means to enable this feature, and **false** means the opposite. | -| imageSmoothingQuality | string | 'low' | Image smoothness. The value can be **'low'**, **'medium'**, or **'high'**. | - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> The value of the **<color>** type can be in 'rgb(255, 255, 255)', 'rgba(255, 255, 255, 1.0)', or '\#FFFFFF' format. - - -### fillStyle - +# CanvasRenderingContext2D + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. + +Use **RenderingContext** to draw rectangles, text, images, and other objects on a canvas. + +## APIs + +CanvasRenderingContext2D\(setting: RenderingContextSettings\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    setting

    +

    RenderingContextSettings

    +

    Yes

    +

    -

    +

    See RenderingContextSettings.

    +
    + + +### RenderingContextSettings + +RenderingContextSettings\(antialias?: bool\) + +Configures the settings of a **CanvasRenderingContext2D** object, including whether to enable antialiasing. + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    antialias

    +

    bool

    +

    No

    +

    false

    +

    Whether antialiasing is enabled.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    fillStyle

    +

    <color> | CanvasGradient | CanvasPattern

    +

    -

    +

    Style to fill an area.

    +
    • When the type is <color>, this parameter indicates the color of the filling area.
    • When the type is CanvasGradient, this parameter indicates a gradient object, which is created using the createLinearGradient method.
    • When the type is CanvasPattern, use the createPattern method to create a pattern.
    +

    lineWidth

    +

    number

    +

    -

    +

    Line width.

    +

    strokeStyle

    +

    <color> | CanvasGradient | CanvasPattern

    +

    -

    +

    Stroke style.

    +
    • When the type is <color>, this parameter indicates the stroke color.
    • When the type is CanvasGradient, this parameter indicates a gradient object, which is created using the createLinearGradient method.
    • When the type is CanvasPattern, use the createPattern method to create a pattern.
    +

    lineCap

    +

    string

    +

    'butt'

    +

    Style of the specified line endpoint. The options are as follows:

    +
    • butt: The endpoints of the line are squared off.
    • round: The endpoints of the line are rounded.
    • square: The endpoints of the line are squared off, and each endpoint has added a rectangle whose length is the same as the line thickness and whose width is half of the line thickness.
    +

    lineJoin

    +

    string

    +

    'miter'

    +

    Style of the intersection point between line segments. The options are as follows:

    +
    • 'round': The intersection is a sector, whose radius at the rounded corner is equal to the line width.
    • 'bevel': The intersection is a triangle. The rectangular corner of each line is independent.
    • 'miter': The intersection has a miter corner by extending the outside edges of the lines until they meet. You can view the effect of this attribute in miterLimit.
    +

    miterLimit

    +

    number

    +

    10

    +

    Maximum miter length. The miter length is the distance between the inner corner and the outer corner where two lines meet.

    +

    font

    +

    string

    +

    'normal normal 14px sans-serif'

    +

    Font style.

    +

    Syntax: ctx.font="font-size font-family"

    +
    • (Optional) font-size: font size and row height. The unit can only be pixels.
    • (Optional) font-family: font family.
    +

    Syntax: ctx.font="font-style font-weight font-size font-family"

    +
    • (Optional) font-style: font style. Available values are 'normal' and 'italic'.
    • (Optional) font-weight: font weight. Available values are as follows: 'normal', 'bold', 'bolder', 'lighter', 100, 200, 300, 400, 500, 600, 700, 800, 900
    • (Optional) font-size: font size and row height. The unit can only be pixels.
    • (Optional) font-family: font family. Available values are 'sans-serif', 'serif', and 'monospace'.
    +

    textAlign

    +

    string

    +

    'left'

    +

    Text alignment mode. Available values are as follows:

    +
    • 'left': The text is left-aligned.
    • 'right': The text is right-aligned.
    • 'center': The text is center-aligned.
    • 'start': The text is aligned with the start bound.
    • 'end': The text is aligned with the end bound.
    +
    NOTE:

    In the ltr layout mode, the value 'start' equals 'left'. In the rtl layout mode, the value 'start' equals 'right'.

    +
    +

    textBaseline

    +

    string

    +

    'alphabetic'

    +

    Horizontal alignment mode of text. Available values are as follows:

    +
    • 'alphabetic': The text baseline is the normal alphabetic baseline.
    • 'top': The text baseline is on the top of the text bounding box.
    • 'hanging': The text baseline is a hanging baseline over the text.
    • 'middle': The text baseline is in the middle of the text bounding box.
    • 'ideographic': The text baseline is the ideographic baseline. If a character exceeds the alphabetic baseline, the ideographic baseline is located at the bottom of the excess character.
    • 'bottom': The text baseline is at the bottom of the text bounding box. Its difference from the ideographic baseline is that the ideographic baseline does not consider letters in the next line.
    +

    globalAlpha

    +

    number

    +

    -

    +

    Opacity. 0.0: completely transparent; 1.0: completely opaque.

    +

    lineDashOffset

    +

    number

    +

    0.0

    +

    Offset of the dashed line. The precision is float.

    +

    globalCompositeOperation

    +

    string

    +

    'source-over'

    +

    Composition operation type. Available values are as follows: 'source-over', 'source-atop', 'source-in', 'source-out', 'destination-over', 'destination-atop', 'destination-in', 'destination-out', 'lighter', 'copy', and 'xor'.

    +

    shadowBlur

    +

    number

    +

    0.0

    +

    Blur level during shadow drawing. A larger value indicates a more blurred effect. The precision is float.

    +

    shadowColor

    +

    <color>

    +

    -

    +

    Shadow color.

    +

    shadowOffsetX

    +

    number

    +

    -

    +

    X-axis shadow offset relative to the original object.

    +

    shadowOffsetY

    +

    number

    +

    -

    +

    Y-axis shadow offset relative to the original object.

    +

    imageSmoothingEnabled

    +

    boolean

    +

    true

    +

    Whether to adjust the image smoothness during image drawing. The value true means to enable this feature, and false means the opposite.

    +

    imageSmoothingQuality

    +

    string

    +

    'low'

    +

    Image smoothness. The value can be 'low', 'medium', or 'high'.

    +
    + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>The value of the **** type can be in 'rgb\(255, 255, 255\)', 'rgba\(255, 255, 255, 1.0\)', or '\#FFFFFF' format. + +### fillStyle ``` @Entry @@ -84,11 +294,9 @@ struct FillStyleExample { } ``` -![en-us_image_0000001257058395](figures/en-us_image_0000001257058395.png) - - -### lineWidth +![](figures/en-us_image_0000001193322850.png) +### lineWidth ``` @Entry @@ -114,11 +322,9 @@ struct LineWidthExample { } ``` -![en-us_image_0000001212378408](figures/en-us_image_0000001212378408.png) - - -### strokeStyle +![](figures/en-us_image_0000001238402745.png) +### strokeStyle ``` @Entry @@ -145,12 +351,9 @@ struct StrokeStyleExample { } ``` +![](figures/en-us_image_0000001238282783.png) -![en-us_image_0000001212218446](figures/en-us_image_0000001212218446.png) - - -### lineCap - +### lineCap ``` @Entry @@ -180,11 +383,9 @@ struct LineCapExample { } ``` -![en-us_image_0000001212378406](figures/en-us_image_0000001212378406.png) - - -### lineJoin +![](figures/en-us_image_0000001193642802.png) +### lineJoin ``` @Entry @@ -215,11 +416,9 @@ struct LineJoinExample { } ``` -![en-us_image_0000001212218438](figures/en-us_image_0000001212218438.png) - - -### miterLimit +![](figures/en-us_image_0000001193802788.png) +### miterLimit ``` @Entry @@ -250,11 +449,9 @@ struct MiterLimit { } ``` -![en-us_image_0000001212378398](figures/en-us_image_0000001212378398.png) - - -### font +![](figures/en-us_image_0000001238522733.png) +### font ``` @Entry @@ -280,11 +477,9 @@ struct Font { } ``` -![en-us_image_0000001257058409](figures/en-us_image_0000001257058409.png) - - -### textAlign +![](figures/en-us_image_0000001193482814.png) +### textAlign ``` @Entry @@ -325,11 +520,9 @@ struct CanvasExample { } ``` -![en-us_image_0000001256978351](figures/en-us_image_0000001256978351.png) - - -### textBaseline +![](figures/en-us_image_0000001238602771.png) +### textBaseline ``` @Entry @@ -370,11 +563,9 @@ struct TextBaseline { } ``` -![en-us_image_0000001212058462](figures/en-us_image_0000001212058462.png) - - -### globalAlpha +![](figures/en-us_image_0000001193322872.png) +### globalAlpha ``` @Entry @@ -403,11 +594,9 @@ struct GlobalAlpha { } ``` -![en-us_image_0000001212218444](figures/en-us_image_0000001212218444.png) - - -### lineDashOffset +![](figures/en-us_image_0000001238402777.png) +### lineDashOffset ``` @Entry @@ -434,25 +623,74 @@ struct LineDashOffset { } ``` -![en-us_image_0000001212058480](figures/en-us_image_0000001212058480.png) - - -### globalCompositeOperation - - | Name | Description | -| -------- | -------- | -| source-over | Displays the new drawing above the existing drawing. This attribute is used by default. | -| source-atop | Displays the new drawing on the top of the existing drawing. | -| source-in | Displays the new drawing inside the existing drawing. | -| source-out | Displays the part of the new drawing that is outside of the existing drawing. | -| destination-over | Displays the existing drawing above the new drawing. | -| destination-atop | Displays the existing drawing on the top of the new drawing. | -| destination-in | Displays the existing drawing inside the new drawing. | -| destination-out | Displays the part of the existing drawing that is outside of the new drawing. | -| lighter | Displays both the new drawing and the existing drawing. | -| copy | Displays the new drawing and neglects the existing drawing. | -| xor | Combines the new drawing and existing drawing using the XOR operation. | - +![](figures/en-us_image_0000001238282827.png) + +### globalCompositeOperation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    source-over

    +

    Displays the new drawing above the existing drawing. This attribute is used by default.

    +

    source-atop

    +

    Displays the new drawing on the top of the existing drawing.

    +

    source-in

    +

    Displays the new drawing inside the existing drawing.

    +

    source-out

    +

    Displays the part of the new drawing that is outside of the existing drawing.

    +

    destination-over

    +

    Displays the existing drawing above the new drawing.

    +

    destination-atop

    +

    Displays the existing drawing above the new drawing.

    +

    destination-in

    +

    Displays the existing drawing inside the new drawing.

    +

    destination-out

    +

    Displays the part of the existing drawing that is outside of the new drawing.

    +

    lighter

    +

    Displays both the new drawing and the existing drawing.

    +

    copy

    +

    Displays the new drawing and neglects the existing drawing.

    +

    xor

    +

    Combines the new drawing and existing drawing using the XOR operation.

    +
    ``` @Entry @@ -486,11 +724,9 @@ struct GlobalCompositeOperation { } ``` -![en-us_image_0000001211898480](figures/en-us_image_0000001211898480.png) - - -### shadowBlur +![](figures/en-us_image_0000001193642848.png) +### shadowBlur ``` @Entry @@ -518,11 +754,9 @@ struct ShadowBlur { } ``` -![en-us_image_0000001256978343](figures/en-us_image_0000001256978343.png) - - -### shadowColor +![](figures/en-us_image_0000001193802836.png) +### shadowColor ``` @Entry @@ -550,11 +784,9 @@ struct ShadowColor { } ``` -![en-us_image_0000001257138353](figures/en-us_image_0000001257138353.png) - - -### shadowOffsetX +![](figures/en-us_image_0000001238522783.png) +### shadowOffsetX ``` @Entry @@ -583,11 +815,9 @@ struct ShadowOffsetX { } ``` -![en-us_image_0000001212218436](figures/en-us_image_0000001212218436.png) - - -### shadowOffsetY +![](figures/en-us_image_0000001193482866.png) +### shadowOffsetY ``` @Entry @@ -615,11 +845,9 @@ struct ShadowOffsetY { } ``` -![en-us_image_0000001212378410](figures/en-us_image_0000001212378410.png) - - -### imageSmoothingEnabled +![](figures/en-us_image_0000001238602821.png) +### imageSmoothingEnabled ``` @Entry @@ -646,1399 +874,2932 @@ struct ImageSmoothingEnabled { } ``` -![en-us_image_0000001211898472](figures/en-us_image_0000001211898472.png) +![](figures/en-us_image_0000001193322910.png) +## Methods -## Methods +### fillRect - -### fillRect - -fillRect(x: number, y: number, w: number, h: number): void +fillRect\(x: number, y: number, w: number, h: number\): void Fills a rectangle on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the upper left corner of the rectangle. | - | y | number | Yes | 0 | Y-coordinate of the upper left corner of the rectangle. | - | width | number | Yes | 0 | Width of the rectangle. | - | height | number | Yes | 0 | Height of the rectangle. | - -- Example - - ``` - @Entry - @Component - struct FillRect { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.fillRect(0,30,100,100) - }) - } - .width('100%') - .height('100%') +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the upper left corner of the rectangle.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the upper left corner of the rectangle.

    +

    width

    +

    number

    +

    Yes

    +

    0

    +

    Width of the rectangle.

    +

    height

    +

    number

    +

    Yes

    +

    0

    +

    Height of the rectangle.

    +
    + + +- Example + + ``` + @Entry + @Component + struct FillRect { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillRect(0,30,100,100) + }) + } + .width('100%') + .height('100%') + } } - } - ``` - - ![en-us_image_0000001212218440](figures/en-us_image_0000001212218440.png) - - -### strokeRect - -strokeRect(x: number, y: number, w: number, h: number): void - -Draws an outlined rectangle on the canvas. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the upper left corner of the rectangle. | - | y | number | Yes | 0 | Y-coordinate of the upper left corner of the rectangle. | - | width | number | Yes | 0 | Width of the rectangle. | - | height | number | Yes | 0 | Height of the rectangle. | - -- Example - - ``` - @Entry - @Component - struct StrokeRect { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.strokeRect(30, 30, 200, 150) - }) + ``` + + ![](figures/en-us_image_0000001193737314.png) + + +### strokeRect + +strokeRect\(x: number, y: number, w: number, h: number\): void + +Draws a rectangle stroke on the canvas. + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the upper left corner of the rectangle stroke.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the upper left corner of the rectangle stroke.

    +

    width

    +

    number

    +

    Yes

    +

    0

    +

    Width of the rectangle.

    +

    height

    +

    number

    +

    Yes

    +

    0

    +

    Height of the rectangle.

    +
    + + +- Example + + ``` + @Entry + @Component + struct StrokeRect { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.strokeRect(30, 30, 200, 150) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257138359](figures/en-us_image_0000001257138359.png) + ![](figures/en-us_image_0000001238457271.png) -### clearRect +### clearRect -clearRect(x: number, y: number, w: number, h: number): void +clearRect\(x: number, y: number, w: number, h: number\): void Clears the content in a rectangle on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the upper left corner of the rectangle. | - | y | number | Yes | 0 | Y-coordinate of the upper left corner of the rectangle. | - | width | number | Yes | 0 | Width of the rectangle. | - | height | number | Yes | 0 | Height of the rectangle. | - -- Example - - ``` - @Entry - @Component - struct ClearRect { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.fillStyle = 'rgb(0,0,255)' - this.context.fillRect(0,0,500,500) - this.context.clearRect(20,20,150,100) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the upper left corner of the rectangle.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the upper left corner of the rectangle.

    +

    width

    +

    number

    +

    Yes

    +

    0

    +

    Width of the rectangle.

    +

    height

    +

    number

    +

    Yes

    +

    0

    +

    Height of the rectangle.

    +
    + + +- Example + + ``` + @Entry + @Component + struct ClearRect { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillStyle = 'rgb(0,0,255)' + this.context.fillRect(0,0,500,500) + this.context.clearRect(20,20,150,100) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001211898482](figures/en-us_image_0000001211898482.png) + ![](figures/11111.png) -### fillText +### fillText -fillText(text: string, x: number, y: number): void +fillText\(text: string, x: number, y: number\): void Draws filled text on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | text | string | Yes | "" | Text to draw. | - | x | number | Yes | 0 | X-coordinate of the lower left corner of the text. | - | y | number | Yes | 0 | Y-coordinate of the lower left corner of the text. | - -- Example - - ``` - @Entry - @Component - struct FillText { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.font = '30px sans-serif' - this.context.fillText("Hello World!", 20, 100) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    text

    +

    string

    +

    Yes

    +

    ""

    +

    Text to draw.

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the lower left corner of the text.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the lower left corner of the text.

    +
    + + +- Example + + ``` + @Entry + @Component + struct FillText { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.font = '30px sans-serif' + this.context.fillText("Hello World!", 20, 100) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257058399](figures/en-us_image_0000001257058399.png) + ![](figures/en-us_image_0000001238537297.png) -### strokeText +### strokeText -strokeText(text: string, x: number, y: number): void +strokeText\(text: string, x: number, y: number\): void Draws a text stroke on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | text | string | Yes | "" | Text to draw. | - | x | number | Yes | 0 | X-coordinate of the lower left corner of the text. | - | y | number | Yes | 0 | Y-coordinate of the lower left corner of the text. | - -- Example - - ``` - @Entry - @Component - struct StrokeText { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.font = '55px sans-serif' - this.context.strokeText("Hello World!", 20, 60) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    text

    +

    string

    +

    Yes

    +

    ""

    +

    Text to draw.

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the lower left corner of the text.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the lower left corner of the text.

    +
    + + +- Example + + ``` + @Entry + @Component + struct StrokeText { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.font = '55px sans-serif' + this.context.strokeText("Hello World!", 20, 60) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` - - ![en-us_image_0000001256978349](figures/en-us_image_0000001256978349.png) - - -### measureText - -measureText(text: string): TextMetrics - -Returns a **TextMetrics** object used to obtain the width of specified text. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | text | string | Yes | "" | Text to be measured. | - -- Return value - | Type | Description | - | -------- | -------- | - | TextMetrics | **TextMetrics** object. | - -- **TextMetrics** attributes - | Name | Type | Description | - | -------- | -------- | -------- | - | width | number | Width of the text. | - -- Example - - ``` - @Entry - @Component - struct MeasureText { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.font = '50px sans-serif' - this.context.fillText("Hello World!", 20, 100) - this.context.fillText("width:" + this.context.measureText("Hello World!").width, 20, 200) - }) + ``` + + ![](figures/en-us_image_0000001193756416.png) + + +### measureText + +measureText\(text: string\): TextMetrics + +Returns a **TextMetrics** object used to obtain the width of specified text. + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    text

    +

    string

    +

    Yes

    +

    ""

    +

    Text to be measured.

    +
    + + +- Return values + + + + + + + + + + +

    Type

    +

    Description

    +

    TextMetrics

    +

    TextMetrics object.

    +
    + +- **TextMetrics** attributes + + + + + + + + + + + + +

    Attribute

    +

    Type

    +

    Description

    +

    width

    +

    number

    +

    Width of the text string.

    +
    + + +- Example + + ``` + @Entry + @Component + struct MeasureText { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.font = '50px sans-serif' + this.context.fillText("Hello World!", 20, 100) + this.context.fillText("width:" + this.context.measureText("Hello World!").width, 20, 200) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257138343](figures/en-us_image_0000001257138343.png) + ![](figures/en-us_image_0000001238476361.png) -### stroke +### stroke -stroke(path?: Path2D): void +stroke\(path?: Path2D\): void Strokes a path. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | path | [Path2D](../reference/arkui-ts/ts-components-canvas-path2d.md) | No | null | A **Path2D** path to draw. | - -- Example - - ``` - @Entry - @Component - struct Stroke { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.moveTo(25, 25) - this.context.lineTo(25, 105) - this.context.strokeStyle = 'rgb(0,0,255)' - this.context.stroke() - }) +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    path

    +

    Path2D

    +

    No

    +

    null

    +

    A Path2D path to draw.

    +
    + + +- Example + + ``` + @Entry + @Component + struct CanvasExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.moveTo(25, 25) + this.context.lineTo(25, 105) + this.context.strokeStyle = 'rgb(0,0,255)' + this.context.stroke() + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257058411](figures/en-us_image_0000001257058411.png) + ![](figures/en-us_image_0000001193436448.png) -### beginPath +### beginPath -beginPath(): void +beginPath\(\): void Creates a drawing path. -- Example - - ``` - @Entry - @Component - struct BeginPath { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.beginPath() - this.context.lineWidth = 6 - this.context.strokeStyle = '#0000ff' - this.context.moveTo(15, 80) - this.context.lineTo(280, 160) - this.context.stroke() - }) +- Example + + ``` + @Entry + @Component + struct BeginPath { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.lineWidth = 6 + this.context.strokeStyle = '#0000ff' + this.context.moveTo(15, 80) + this.context.lineTo(280, 160) + this.context.stroke() + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212058478](figures/en-us_image_0000001212058478.png) + ![](figures/en-us_image_0000001238556395.png) -### moveTo +### moveTo -moveTo(x: number, y: number): void +moveTo\(x: number, y: number\): void Moves a drawing path to a target position on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the target position. | - | y | number | Yes | 0 | Y-coordinate of the target position. | - -- Example - - ``` - @Entry - @Component - struct MoveTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.beginPath() - this.context.moveTo(10, 10) - this.context.lineTo(280, 160) - this.context.stroke() - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the target position.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the target position.

    +
    + + +- Example + + ``` + @Entry + @Component + struct MoveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.moveTo(10, 10) + this.context.lineTo(280, 160) + this.context.stroke() + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001256858391](figures/en-us_image_0000001256858391.png) + ![](figures/en-us_image_0000001193481094.png) -### lineTo +### lineTo -lineTo(x: number, y: number): void +lineTo\(x: number, y: number\): void Connects the current point to a target position using a straight line. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the target position. | - | y | number | Yes | 0 | Y-coordinate of the target position. | - -- Example - - ``` - @Entry - @Component - struct LineTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.beginPath() - this.context.moveTo(10, 10) - this.context.lineTo(280, 160) - this.context.stroke() - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the target position.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the target position.

    +
    + + +- Example + + ``` + @Entry + @Component + struct LineTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.moveTo(10, 10) + this.context.lineTo(280, 160) + this.context.stroke() + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212378414](figures/en-us_image_0000001212378414.png) + ![](figures/en-us_image_0000001238601051.png) -### closePath +### closePath -closePath(): void +closePath\(\): void Draws a closed path. -- Example - - ``` - @Entry - @Component - struct ClosePath { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.beginPath() - this.context.moveTo(30, 30) - this.context.lineTo(110, 30) - this.context.lineTo(70, 90) - this.context.closePath() - this.context.stroke() - }) +- Example + + ``` + @Entry + @Component + struct ClosePath { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.moveTo(30, 30) + this.context.lineTo(110, 30) + this.context.lineTo(70, 90) + this.context.closePath() + this.context.stroke() + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001256978347](figures/en-us_image_0000001256978347.png) + ![](figures/en-us_image_0000001193321136.png) -### createPattern +### createPattern -createPattern(image: ImageBitmap, repetition: string): void +createPattern\(image: ImageBitmap, repetition: string\): void Creates a pattern for image filling based on a specified source image and repetition mode. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | image | [ERROR:Invalid link:en-us_topic_0000001212378364.xml#en-us_topic_0000001193075104_xref1892917323814,link:en-us_topic_0000001192915114.xml](en-us_topic_0000001192915114.xml) | Yes | null | Source image. For details, see [ERROR:Invalid link:en-us_topic_0000001212378364.xml#xref539610179238,link:en-us_topic_0000001192915114.xml](en-us_topic_0000001192915114.xml). | - | repetition | string | Yes | "" | Repetition mode. The value can be **'repeat'**, **'repeat-x'**, **'repeat-y'**, or **'no-repeat'**. | - -- Example - - ``` - @Entry - @Component - struct CreatePattern { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg") - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - var pattern = this.context.createPattern(this.img, 'repeat') - this.context.fillStyle = pattern - this.context.fillRect(0, 0, 200, 200) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    image

    +

    ImageBitmap

    +

    Yes

    +

    null

    +

    Source image. For details, see ImageBitmap.

    +

    repetition

    +

    string

    +

    Yes

    +

    ""

    +

    Repetition mode. The value can be 'repeat', 'repeat-x', 'repeat-y', or 'no-repeat'.

    +
    + +- Example + + ``` + @Entry + @Component + struct CreatePattern { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg") + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var pattern = this.context.createPattern(this.img, 'repeat') + this.context.fillStyle = pattern + this.context.fillRect(0, 0, 200, 200) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001211898490](figures/en-us_image_0000001211898490.png) + ![](figures/en-us_image_0000001238401029.png) -### bezierCurveTo +### bezierCurveTo -bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void +bezierCurveTo\(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number\): void Draws a cubic bezier curve on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | cp1x | number | Yes | 0 | X-coordinate of the first parameter of the bezier curve. | - | cp1y | number | Yes | 0 | Y-coordinate of the first parameter of the bezier curve. | - | cp2x | number | Yes | 0 | X-coordinate of the second parameter of the bezier curve. | - | cp2y | number | Yes | 0 | Y-coordinate of the second parameter of the bezier curve. | - | x | number | Yes | 0 | X-coordinate of the end point on the bezier curve. | - | y | number | Yes | 0 | Y-coordinate of the end point on the bezier curve. | - -- Example - - ``` - @Entry - @Component - struct BezierCurveTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.beginPath() - this.context.moveTo(10, 10) - this.context.bezierCurveTo(20, 100, 200, 100, 200, 20) - this.context.stroke() - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    cp1x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the first parameter of the bezier curve.

    +

    cp1y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the first parameter of the bezier curve.

    +

    cp2x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the second parameter of the bezier curve.

    +

    cp2y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the second parameter of the bezier curve.

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the end point on the bezier curve.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the end point on the bezier curve.

    +
    + + +- Example + + ``` + @Entry + @Component + struct BezierCurveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.moveTo(10, 10) + this.context.bezierCurveTo(20, 100, 200, 100, 200, 20) + this.context.stroke() + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257138349](figures/en-us_image_0000001257138349.png) + ![](figures/en-us_image_0000001238281067.png) -### quadraticCurveTo +### quadraticCurveTo -quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void +quadraticCurveTo\(cpx: number, cpy: number, x: number, y: number\): void Draws a quadratic curve on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | cpx | number | Yes | 0 | X-coordinate of the bezier curve parameter. | - | cpy | number | Yes | 0 | Y-coordinate of the bezier curve parameter. | - | x | number | Yes | 0 | X-coordinate of the end point on the bezier curve. | - | y | number | Yes | 0 | Y-coordinate of the end point on the bezier curve. | - -- Example - - ``` - @Entry - @Component - struct QuadraticCurveTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true); - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings); - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.beginPath(); - this.context.moveTo(20, 20); - this.context.quadraticCurveTo(100, 100, 200, 20); - this.context.stroke(); - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    cpx

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the bezier curve parameter.

    +

    cpy

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the bezier curve parameter.

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the end point on the bezier curve.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the end point on the bezier curve.

    +
    + + +- Example + + ``` + @Entry + @Component + struct QuadraticCurveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true); + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings); + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath(); + this.context.moveTo(20, 20); + this.context.quadraticCurveTo(100, 100, 200, 20); + this.context.stroke(); + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257058397](figures/en-us_image_0000001257058397.png) + ![](figures/en-us_image_0000001193641084.png) -### arc +### arc -arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void +arc\(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean\): void Draws an arc on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the center point of the arc. | - | y | number | Yes | 0 | Y-coordinate of the center point of the arc. | - | radius | number | Yes | 0 | Radius of the arc. | - | startAngle | number | Yes | 0 | Start radian of the arc. | - | endAngle | number | Yes | 0 | End radian of the arc. | - | anticlockwise | boolean | No | false | Whether to draw the arc counterclockwise. | - -- Example - - ``` - @Entry - @Component - struct Arc { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.beginPath() - this.context.arc(100, 75, 50, 0, 6.28) - this.context.stroke() - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the center point of the arc.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the center point of the arc.

    +

    radius

    +

    number

    +

    Yes

    +

    0

    +

    Radius of the arc.

    +

    startAngle

    +

    number

    +

    Yes

    +

    0

    +

    Start radian of the arc.

    +

    endAngle

    +

    number

    +

    Yes

    +

    0

    +

    End radian of the arc.

    +

    anticlockwise

    +

    boolean

    +

    No

    +

    false

    +

    Whether to draw the arc counterclockwise.

    +
    + + +- Example + + ``` + @Entry + @Component + struct Arc { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.arc(100, 75, 50, 0, 6.28) + this.context.stroke() + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212378404](figures/en-us_image_0000001212378404.png) + ![](figures/en-us_image_0000001193801070.png) -### arcTo +### arcTo -arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void +arcTo\(x1: number, y1: number, x2: number, y2: number, radius: number\): void Draws an arc based on the radius and points on the arc. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x1 | number | Yes | 0 | X-coordinate of the first point on the arc. | - | y1 | number | Yes | 0 | Y-coordinate of the first point on the arc. | - | x2 | number | Yes | 0 | X-coordinate of the second point on the arc. | - | y2 | number | Yes | 0 | Y-coordinate of the second point on the arc. | - | radius | number | Yes | 0 | Radius of the arc. | - -- Example - - ``` - @Entry - @Component - struct ArcTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.moveTo(100, 20); - this.context.arcTo(150, 20, 150, 70, 50); - this.context.stroke(); - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x1

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the first point on the arc.

    +

    y1

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the first point on the arc.

    +

    x2

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the second point on the arc.

    +

    y2

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the second point on the arc.

    +

    radius

    +

    number

    +

    Yes

    +

    0

    +

    Radius of the arc.

    +
    + + +- Example + + ``` + @Entry + @Component + struct ArcTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.moveTo(100, 20); + this.context.arcTo(150, 20, 150, 70, 50); + this.context.stroke(); + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257058413](figures/en-us_image_0000001257058413.png) + ![](figures/en-us_image_0000001238521019.png) -### ellipse +### ellipse -ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void +ellipse\(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean\): void Draws an ellipse in the specified rectangular region. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the ellipse center. | - | y | number | Yes | 0 | Y-coordinate of the ellipse center. | - | radiusX | number | Yes | 0 | Ellipse radius on the x-axis. | - | radiusY | number | Yes | 0 | Ellipse radius on the y-axis. | - | rotation | number | Yes | 0 | Rotation angle of the ellipse, in radians. | - | startAngle | number | Yes | 0 | Angle of the start point for drawing the ellipse, in radians. | - | endAngle | number | Yes | 0 | Angle of the end point for drawing the ellipse, in radians. | - | anticlockwise | boolean | No | false | Whether to draw the ellipse in the counterclockwise direction. | - -- Example - - - ``` - @Entry - @Component - struct CanvasExample { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.beginPath() - this.context.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI) - this.context.stroke() - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the ellipse center.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the ellipse center.

    +

    radiusX

    +

    number

    +

    Yes

    +

    0

    +

    Ellipse radius on the x-axis.

    +

    radiusY

    +

    number

    +

    Yes

    +

    0

    +

    Ellipse radius on the y-axis.

    +

    rotation

    +

    number

    +

    Yes

    +

    0

    +

    Rotation angle of the ellipse, in radians.

    +

    startAngle

    +

    number

    +

    Yes

    +

    0

    +

    Angle of the start point for drawing the ellipse, in radians.

    +

    endAngle

    +

    number

    +

    Yes

    +

    0

    +

    Angle of the end point for drawing the ellipse, in radians.

    +

    anticlockwise

    +

    number

    +

    No

    +

    0

    +

    Whether to draw the ellipse in the counterclockwise direction. The value 0 means to draw the ellipse in the clockwise direction, and 1 means to draw the ellipse in the counterclockwise direction. This parameter is optional. The default value is 0.

    +
    + + +- Example + + ``` + @Entry + @Component + struct Ellipse { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.beginPath() + this.context.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI, true) + this.context.stroke() + }) + Button('back') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001256978339](figures/en-us_image_0000001256978339.png) + ![](figures/en-us_image_0000001193481096.png) -### rect +### rect -rect(x: number, y: number, width: number, height: number): void +rect\(x: number, y: number, width: number, height: number\): void Creates a rectangle. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the upper left corner of the rectangle. | - | y | number | Yes | 0 | Y-coordinate of the upper left corner of the rectangle. | - | width | number | Yes | 0 | Width of the rectangle. | - | height | number | Yes | 0 | Height of the rectangle. | - -- Example - - ``` - @Entry - @Component - struct CanvasExample { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20) - this.context.stroke() - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the upper left corner of the rectangle.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the upper left corner of the rectangle.

    +

    width

    +

    number

    +

    Yes

    +

    0

    +

    Width of the rectangle.

    +

    height

    +

    number

    +

    Yes

    +

    0

    +

    Height of the rectangle.

    +
    + + +- Example + + ``` + @Entry + @Component + struct CanvasExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20) + this.context.stroke() + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001256978341](figures/en-us_image_0000001256978341.png) + ![](figures/en-us_image_0000001238601053.png) -### fill +### fill -fill(): void +fill\(\): void Fills the area inside a closed path. -- Example - - ``` - @Entry - @Component - struct Fill { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20) - this.context.fill() - }) +- Example + + ``` + @Entry + @Component + struct Fill { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20) + this.context.fill() + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001256858389](figures/en-us_image_0000001256858389.png) + ![](figures/en-us_image_0000001193321138.png) -### clip +### clip -clip(): void +clip\(\): void Sets the current path to a clipping path. -- Example - - ``` - @Entry - @Component - struct Clip { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.rect(0, 0, 200, 200) - this.context.stroke() - this.context.clip() - this.context.fillStyle = "rgb(255,0,0)" - this.context.fillRect(0, 0, 150, 150) - }) +- Example + + ``` + @Entry + @Component + struct Clip { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.rect(0, 0, 200, 200) + this.context.stroke() + this.context.clip() + this.context.fillStyle = "rgb(255,0,0)" + this.context.fillRect(0, 0, 150, 150) + }) + Button('back') + .onClick(() => { + router.back() + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001211898488](figures/en-us_image_0000001211898488.png) + ![](figures/en-us_image_0000001238401031.png) -### rotate +### rotate -rotate(rotate: number): void +rotate\(rotate: number\): void Rotates a canvas clockwise around its coordinate axes. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | rotate | number | Yes | 0 | Clockwise rotation angle. You can use **Math.PI / 180** to convert the angle to a radian. | - -- Example - - ``` - @Entry - @Component - struct Rotate { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.rotate(45 * Math.PI / 180) // Rotate the rectangle 45 degrees - this.context.fillRect(70, 20, 50, 50) - }) +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    rotate

    +

    number

    +

    Yes

    +

    0

    +

    Clockwise rotation angle. You can use Math.PI / 180 to convert the angle to a radian.

    +
    + + +- Example + + ``` + @Entry + @Component + struct Rotate { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.rotate(45 * Math.PI / 180) // Rotate the rectangle 45 degrees + this.context.fillRect(70, 20, 50, 50) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` - - ![en-us_image_0000001212218442](figures/en-us_image_0000001212218442.png) - - -### scale - -scale(x: number, y: number): void - -Scales a canvas based on scale factors. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | Horizontal scale factor. | - | y | number | Yes | 0 | Vertical scale factor. | - -- Example - - ``` - @Entry - @Component - struct Scale { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.strokeRect(10, 10, 25, 25) - this.context.scale(2, 2) // Scale to 200% - this.context.strokeRect(10, 10, 25, 25) - }) + ``` + + ![](figures/en-us_image_0000001238281069.png) + + +### scale + +scale\(x: number, y: number\): void + +Scales a canvas based on scaling factors. + +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    Horizontal scale factor.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Vertical scale factor.

    +
    + + +- Example + + ``` + @Entry + @Component + struct Scale { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.strokeRect(10, 10, 25, 25) + this.context.scale(2, 2) // Scale to 200% + this.context.strokeRect(10, 10, 25, 25) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257138347](figures/en-us_image_0000001257138347.png) + ![](figures/en-us_image_0000001193641086.png) -### transform +### transform -transform(scaleX: number, skewX: number, skewY: number, scaleY: number, translateX: number, translateY: number): void +transform\(scaleX: number, skewX: number, skewY: number, scaleY: number, translateX: number, translateY: number\): void Defines a transformation matrix. To transform a graph, you only need to set parameters of the matrix. The coordinates of the graph are multiplied by the matrix values to obtain new coordinates of the transformed graph. You can use the matrix to implement multiple transform effects. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> The following formulas calculate coordinates of the transformed graph. **x** and **y** represent coordinates before transformation, and **x'** and **y'** represent coordinates after transformation. -> -> - x' = scaleX \* x + skewY \* y + translateX -> -> - y' = skewX \* x + scaleY \* y + translateY - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | scaleX | number | Yes | 0 | X-axis scale. | - | skewX | number | Yes | 0 | X-axis skew. | - | skewY | number | Yes | 0 | Y-axis skew. | - | scaleY | number | Yes | 0 | Y-axis scale. | - | translateX | number | Yes | 0 | X-axis translation. | - | translateY | number | Yes | 0 | Y-axis translation. | - -- Example - - ``` - @Entry - @Component - struct Transform { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: RenderingContext = new RenderingContext(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.fillStyle = 'rgb(0,0,0)' - this.context.fillRect(0, 0, 100, 100) - this.context.transform(1, 0.5, -0.5, 1, 10, 10) - this.context.fillStyle = 'rgb(255,0,0)' - this.context.fillRect(0, 0, 100, 100) - this.context.transform(1, 0.5, -0.5, 1, 10, 10) - this.context.fillStyle = 'rgb(0,0,255)' - this.context.fillRect(0, 0, 100, 100) - }) +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>The following formulas calculate coordinates of the transformed graph. **x** and **y** represent coordinates before transformation, and **x'** and **y'** represent coordinates after transformation. +>- x' = scaleX \* x + skewY \* y + translateX +>- y' = skewX \* x + scaleY \* y + translateY + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    scaleX

    +

    number

    +

    Yes

    +

    0

    +

    X-axis scale.

    +

    skewX

    +

    number

    +

    Yes

    +

    0

    +

    X-axis skew.

    +

    skewY

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis skew.

    +

    scaleY

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis scale.

    +

    translateX

    +

    number

    +

    Yes

    +

    0

    +

    X-axis translation.

    +

    translateY

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis translation.

    +
    + +- Example + + ``` + @Entry + @Component + struct Transform { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillStyle = 'rgb(0,0,0)' + this.context.fillRect(0, 0, 100, 100) + this.context.transform(1, 0.5, -0.5, 1, 10, 10) + this.context.fillStyle = 'rgb(255,0,0)' + this.context.fillRect(0, 0, 100, 100) + this.context.transform(1, 0.5, -0.5, 1, 10, 10) + this.context.fillStyle = 'rgb(0,0,255)' + this.context.fillRect(0, 0, 100, 100) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` - - ![en-us_image_0000001256858393](figures/en-us_image_0000001256858393.png) - - -### setTransform - -setTransform(scaleX: number, skewX: number, skewY: number, scale: number, translateX: number, translateY: number): void - -Resets the existing transformation matrix and creates a new transformation matrix by using the same parameters as the **transform()** function. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | scaleX | number | Yes | 0 | X-axis scale. | - | skewX | number | Yes | 0 | X-axis skew. | - | skewY | number | Yes | 0 | Y-axis skew. | - | scaleY | number | Yes | 0 | Y-axis scale. | - | translateX | number | Yes | 0 | X-axis translation. | - | translateY | number | Yes | 0 | Y-axis translation. | - -- Example - - ``` - @Entry - @Component - struct SetTransform { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.fillStyle = 'rgb(255,0,0)' - this.context.fillRect(0, 0, 100, 100) - this.context.setTransform(1,0.5, -0.5, 1, 10, 10) - this.context.fillStyle = 'rgb(0,0,255)' - this.context.fillRect(0, 0, 100, 100) - }) + ``` + + ![](figures/en-us_image_0000001193801072.png) + + +### setTransform + +setTransform\(scaleX: number, skewX: number, skewY: number, scale: number, translateX: number, translateY: number\): void + +Resets the existing transformation matrix and creates a new transformation matrix by using the same parameters as the **transform\(\)** function. + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    scaleX

    +

    number

    +

    Yes

    +

    0

    +

    X-axis scale.

    +

    skewX

    +

    number

    +

    Yes

    +

    0

    +

    X-axis skew.

    +

    skewY

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis skew.

    +

    scaleY

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis scale.

    +

    translateX

    +

    number

    +

    Yes

    +

    0

    +

    X-axis translation.

    +

    translateY

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis translation.

    +
    + +- Example + + ``` + @Entry + @Component + struct SetTransform { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillStyle = 'rgb(255,0,0)' + this.context.fillRect(0, 0, 100, 100) + this.context.setTransform(1,0.5, -0.5, 1, 10, 10) + this.context.fillStyle = 'rgb(0,0,255)' + this.context.fillRect(0, 0, 100, 100) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001256858395](figures/en-us_image_0000001256858395.png) + ![](figures/en-us_image_0000001238521021.png) -### translate +### translate -translate(x: number, y: number): void +translate\(x: number, y: number\): void Moves the origin of the coordinate system. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-axis translation. | - | y | number | Yes | 0 | Y-axis translation. | - -- Example - - ``` - @Entry - @Component - struct Translate { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.fillRect(10, 10, 50, 50) - this.context.translate(70, 70) - this.context.fillRect(10, 10, 50, 50) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-axis translation

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis translation.

    +
    + +- Example + + ``` + @Entry + @Component + struct Translate { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.fillRect(10, 10, 50, 50) + this.context.translate(70, 70) + this.context.fillRect(10, 10, 50, 50) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257138357](figures/en-us_image_0000001257138357.png) + ![](figures/en-us_image_0000001193481098.png) -### drawImage +### drawImage -drawImage(image: ImageBitmap, dx: number, dy: number): void +drawImage\(image: ImageBitmap, dx: number, dy: number\): void -drawImage(image: ImageBitmap, dx: number, dy: number, dWidth: number, dHeight: number): void +drawImage\(image: ImageBitmap, dx: number, dy: number, dWidth: number, dHeight: number\): void -drawImage(image: ImageBitmap, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number):void +drawImage\(image: ImageBitmap, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number\):void Draws an image. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | image | [ERROR:Invalid link:en-us_topic_0000001212378364.xml#en-us_topic_0000001193075104_xref962584519412,link:en-us_topic_0000001192915114.xml](en-us_topic_0000001192915114.xml) | Yes | null | Image resource. For details, see [ERROR:Invalid link:en-us_topic_0000001212378364.xml#xref29052050153012,link:en-us_topic_0000001192915114.xml](en-us_topic_0000001192915114.xml). | - | sx | number | No | 0 | X-coordinate of the upper left corner of the rectangle used to crop the source image. | - | sy | number | No | 0 | Y-coordinate of the upper left corner of the rectangle used to crop the source image. | - | sWidth | number | No | 0 | Target width to crop the source image. | - | sHeight | number | No | 0 | Target height to crop the source image. | - | dx | number | Yes | 0 | X-coordinate of the upper left corner of the drawing area on the canvas. | - | dy | number | Yes | 0 | Y-coordinate of the upper left corner of the drawing area on the canvas. | - | dWidth | number | No | 0 | Width of the drawing area. | - | dHeight | number | No | 0 | Height of the drawing area. | - - -- Example - - ``` - @Entry - @Component - struct ImageExample { - private settings: RenderingContextSettings = new RenderingContextSettings(true); - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings); - private img:ImageBitmap = new ImageBitmap("common/images/example.jpg"); - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.drawImage( this.img,0,0,500,500,0,0,400,200); - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    image

    +

    ImageBitmap

    +

    Yes

    +

    null

    +

    Image resource. For details, see ImageBitmap.

    +

    sx

    +

    number

    +

    No

    +

    0

    +

    X-coordinate of the upper left corner of the rectangle used to crop the source image.

    +

    sy

    +

    number

    +

    No

    +

    0

    +

    Y-coordinate of the upper left corner of the rectangle used to crop the source image.

    +

    sWidth

    +

    number

    +

    No

    +

    0

    +

    Target width to crop the source image.

    +

    sHeight

    +

    number

    +

    No

    +

    0

    +

    Target height to crop the source image.

    +

    dx

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the upper left corner of the drawing area on the canvas.

    +

    dy

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the upper left corner of the drawing area on the canvas.

    +

    dWidth

    +

    number

    +

    No

    +

    0

    +

    Width of the drawing area.

    +

    dHeight

    +

    number

    +

    No

    +

    0

    +

    Height of the drawing area.

    +
    + + +- Example + + ``` + @Entry + @Component + struct ImageExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true); + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings); + private img:ImageBitmap = new ImageBitmap("common/images/example.jpg"); + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.drawImage( this.img,0,0,500,500,0,0,400,200); + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` - - ![en-us_image_0000001212058466](figures/en-us_image_0000001212058466.png) - - -### createImageData - -createImageData(width: number, height: number): Object - -Creates an **ImageData** object. For details, see [ImageData](../reference/arkui-ts/ts-components-canvas-imagebitmap.md). - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | width | number | Yes | 0 | Width of the **ImageData** object. | - | height | number | Yes | 0 | Height of the **ImageData** object. | - - -### createImageData - -createImageData(imageData: Object): Object - -Creates an **ImageData** object. For details, see [ImageData](../reference/arkui-ts/ts-components-canvas-imagebitmap.md). - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | imagedata | Object | Yes | null | **ImageData** object with the same width and height copied from the original **ImageData** object. | - - -### getImageData - -getImageData(sx: number, sy: number, sw: number, sh: number): Object - - Creates an [ImageData](../reference/arkui-ts/ts-components-canvas-imagebitmap.md) object with pixels in the specified area on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | sx | number | Yes | 0 | X-coordinate of the upper left corner of the output area. | - | sy | number | Yes | 0 | Y-coordinate of the upper left corner of the output area. | - | sw | number | Yes | 0 | Width of the output area. | - | sh | number | Yes | 0 | Height of the output area. | - - -### putImageData - -putImageData(imageData: Object, dx: number, dy: number, dirtyX?: number, dirtyY?: number, dirtyWidth?: number, dirtyHeight?: number): void - -Puts the [ImageData](../reference/arkui-ts/ts-components-canvas-imagebitmap.md) onto a rectangular area on the canvas. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | imagedata | Object | Yes | null | **ImageData** object with pixels to put onto the canvas. | - | dx | number | Yes | 0 | X-axis offset of the rectangular area on the canvas. | - | dy | number | Yes | 0 | Y-axis offset of the rectangular area on the canvas. | - | dirtyX | number | No | 0 | X-axis offset of the upper left corner of the rectangular area relative to that of the source image. | - | dirtyY | number | No | 0 | Y-axis offset of the upper left corner of the rectangular area relative to that of the source image. | - | dirtyWidth | number | No | Width of the **ImageData** object | Width of the rectangular area to crop the source image. | - | dirtyHeight | number | No | Height of the **ImageData** object | Height of the rectangular area to crop the source image. | - -- Example - - ``` - @Entry - @Component - struct PutImageData { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - var imageData = this.context.createImageData(100, 100) - for (var i = 0; i < imageData.data.length; i += 4) { - imageData.data[i + 0] = 255 - imageData.data[i + 1] = 0 - imageData.data[i + 2] = 255 - imageData.data[i + 3] = 255 - } - this.context.putImageData(imageData, 10, 10) - }) + ``` + + ![](figures/en-us_image_0000001192915154.png) + + +### createImageData + +createImageData\(width: number, height: number\): Object + +Creates an **ImageData** object. For details, see [ImageData](ts-components-canvas-imagedata.md). + +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default

    +

    Description

    +

    width

    +

    number

    +

    Yes

    +

    0

    +

    Width of the ImageData object.

    +

    height

    +

    number

    +

    Yes

    +

    0

    +

    Height of the ImageData object.

    +
    + + +### createImageData + +createImageData\(imageData: Object\): Object + +Creates an **ImageData** object. For details, see [ImageData](ts-components-canvas-imagedata.md). + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default

    +

    Description

    +

    imagedata

    +

    Object

    +

    Yes

    +

    null

    +

    ImageData object with the same width and height copied from the original ImageData object.

    +
    + + +### getImageData + +getImageData\(sx: number, sy: number, sw: number, sh: number\): Object + +Creates an [ImageData](ts-components-canvas-imagedata.md) object with pixels in the specified area on the canvas. + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    sx

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the upper left corner of the output area.

    +

    sy

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the upper left corner of the output area.

    +

    sw

    +

    number

    +

    Yes

    +

    0

    +

    Width of the output area.

    +

    sh

    +

    number

    +

    Yes

    +

    0

    +

    Height of the output area.

    +
    + + +### putImageData + +putImageData\(imageData: Object, dx: number, dy: number, dirtyX?: number, dirtyY?: number, dirtyWidth?: number, dirtyHeight?: number\): void + +Puts the [ImageData](ts-components-canvas-imagedata.md) onto a rectangular area on the canvas. + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    imagedata

    +

    Object

    +

    Yes

    +

    null

    +

    ImageData object with pixels to put onto the canvas.

    +

    dx

    +

    number

    +

    Yes

    +

    0

    +

    X-axis offset of the rectangular area on the canvas.

    +

    dy

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis offset of the rectangular area on the canvas.

    +

    dirtyX

    +

    number

    +

    No

    +

    0

    +

    X-axis offset of the upper left corner of the rectangular area relative to that of the source image.

    +

    dirtyY

    +

    number

    +

    No

    +

    0

    +

    Y-axis offset of the upper left corner of the rectangular area relative to that of the source image.

    +

    dirtyWidth

    +

    number

    +

    No

    +

    Width of the ImageData object

    +

    Width of the rectangular area to crop the source image.

    +

    dirtyHeight

    +

    number

    +

    No

    +

    Height of the ImageData object

    +

    Height of the rectangular area to crop the source image.

    +
    + +- Example + + ``` + @Entry + @Component + struct PutImageData { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var imageData = this.context.createImageData(100, 100) + for (var i = 0; i < imageData.data.length; i += 4) { + imageData.data[i + 0] = 255 + imageData.data[i + 1] = 0 + imageData.data[i + 2] = 255 + imageData.data[i + 3] = 255 + } + this.context.putImageData(imageData, 10, 10) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212378396](figures/en-us_image_0000001212378396.png) + ![](figures/en-us_image_0000001193075134.png) -### restore +### restore -restore(): void +restore\(\): void Restores the saved drawing context. -- Example - - ``` - @Entry - @Component - struct CanvasExample { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.restore() - }) +- Example + + ``` + @Entry + @Component + struct CanvasExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.restore() + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` -### save +### save -save(): void +save\(\): void Saves the current drawing context. -- Example - - ``` - @Entry - @Component - struct CanvasExample { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.context.save() - }) +- Example + + ``` + @Entry + @Component + struct CanvasExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.save() + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` -### createLinearGradient +### createLinearGradient -createLinearGradient(x0: number, y0: number, x1: number, y1: number): void +createLinearGradient\(x0: number, y0: number, x1: number, y1: number\): void Creates a linear gradient. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x0 | number | Yes | 0 | X-coordinate of the start point. | - | y0 | number | Yes | 0 | Y-coordinate of the start point. | - | x1 | number | Yes | 0 | X-coordinate of the end point. | - | y1 | number | Yes | 0 | Y-coordinate of the end point. | - -- Example - - ``` - @Entry - @Component - struct CreateLinearGradient { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x0

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the start point.

    +

    y0

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the start point.

    +

    x1

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the end point.

    +

    y1

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the end point.

    +
    + +- Example + + ``` + @Entry + @Component + struct CreateLinearGradient { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - var grad = this.context.createLinearGradient(50,0, 300,100) - this.grad.addColorStop(0.0, 'red') - this.grad.addColorStop(0.5, 'white') - this.grad.addColorStop(1.0, 'green') - this.context.fillStyle = grad - this.context.fillRect(0, 0, 500, 500) - }) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var grad = this.context.createLinearGradient(50,0, 300,100) + gra.addColorStop(0.0, 'red') + gra.addColorStop(0.5, 'white') + gra.addColorStop(1.0, 'green') + this.context.fillStyle = grad + this.context.fillRect(0, 0, 500, 500) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` + - ![en-us_image_0000001212378412](figures/en-us_image_0000001212378412.png) +![](figures/en-us_image_0000001237555149.png) -### createRadialGradient +### createRadialGradient -createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): void +createRadialGradient\(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number\): void Creates a linear gradient. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x0 | number | Yes | 0 | X-coordinate of the center of the start circle. | - | y0 | number | Yes | 0 | Y-coordinate of the center of the start circle. | - | r0 | number | Yes | 0 | Radius of the start circle, which must be a non-negative finite number. | - | x1 | number | Yes | 0 | X-coordinate of the center of the end circle. | - | y1 | number | Yes | 0 | Y-coordinate of the center of the end circle. | - | r1 | number | Yes | 0 | Radius of the end circle, which must be a non-negative finite number. | - -- Example - - ``` - @Entry - @Component - struct CreateRadialGradient { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - var grad = this.context.createRadialGradient(200,200,50, 200,200,200) - this.grad.addColorStop(0.0, 'red') - this.grad.addColorStop(0.5, 'white') - this.grad.addColorStop(1.0, 'green') - this.context.fillStyle = grad - this.context.fillRect(0, 0, 500, 500) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x0

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the center of the start circle.

    +

    y0

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the center of the start circle.

    +

    r0

    +

    number

    +

    Yes

    +

    0

    +

    Radius of the start circle, which must be a non-negative finite number.

    +

    x1

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the center of the end circle.

    +

    y1

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the center of the end circle.

    +

    r1

    +

    number

    +

    Yes

    +

    0

    +

    Radius of the end circle, which must be a non-negative finite number.

    +
    + +- Example + + ``` + @Entry + @Component + struct CreateRadialGradient { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var grad = this.context.createRadialGradient(200,200,50, 200,200,200) + gra.addColorStop(0.0, 'red') + gra.addColorStop(0.5, 'white') + gra.addColorStop(1.0, 'green') + this.context.fillStyle = grad + this.context.fillRect(0, 0, 500, 500) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` + +![](figures/en-us_image_0000001192755188.png) - ![en-us_image_0000001257058405](figures/en-us_image_0000001257058405.png) +## CanvasPattern -## CanvasPattern +Defines an object created by using the [createPattern](#section1643216163371) method. -Defines an object created by using the [createPattern](#createpattern) method. diff --git a/en/application-dev/reference/arkui-ts/ts-combined-gestures.md b/en/application-dev/reference/arkui-ts/ts-combined-gestures.md index cbfe726ced..bbcfb02bb9 100644 --- a/en/application-dev/reference/arkui-ts/ts-combined-gestures.md +++ b/en/application-dev/reference/arkui-ts/ts-combined-gestures.md @@ -1,42 +1,106 @@ -# Combined Gestures +# Combined Gestures +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This gesture is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> Combined gestures are supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## APIs - -GestureGroup(mode: GestureMode, ...gesture: GestureType[]) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | mode | GestureMode | Yes | - | Recognition mode of combined gestures. | - | gesture | [TapGesture](ts-basic-gestures-tapgesture.md)
    \| [LongPressGesture](ts-basic-gestures-longpressgesture.md)
    \| [PanGesture](ts-basic-gestures-pangesture.md)
    \| [PinchGesture](ts-basic-gestures-pinchgesture.md)
    \| [RotationGesture](ts-basic-gestures-rotationgesture.md) | Yes | - | Variable-length parameter, indicating one or more basic gesture types. These gestures are recognized in combination. | - -- GestureMode enums - | Name | Description | - | -------- | -------- | - | Sequence | Sequential recognition: Gestures are recognized in the registration sequence until all gestures are recognized successfully. When one gesture fails to be recognized, all gestures fail to be recognized. | - | Parallel | Parallel recognition. Registered gestures are recognized concurrently until all gestures are recognized. The recognition result of each gesture does not affect each other. | - | Exclusive | Exclusive recognition. Registered gestures are identified concurrently. If one gesture is successfully recognized, gesture recognition ends. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onCancel(event: () => void) | Callback for the GestureMode.Sequence cancellation event. | - - -## Example - +## APIs + +GestureGroup\(mode: GestureMode, ...gesture: GestureType\[\]\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    mode

    +

    GestureMode

    +

    Yes

    +

    -

    +

    Recognition mode of combined gestures.

    +

    gesture

    +

    TapGesture

    +

    | LongPressGesture

    +

    | PanGesture

    +

    | PinchGesture

    +

    | RotationGesture

    +

    Yes

    +

    -

    +

    Variable-length parameter, indicating one or more basic gesture types. These gestures are recognized in combination.

    +
    + +- GestureMode enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Sequence

    +

    Sequential recognition: Gestures are recognized in the registration sequence until all gestures are recognized successfully. When one gesture fails to be recognized, all gestures fail to be recognized.

    +

    Parallel

    +

    Parallel recognition. Registered gestures are recognized concurrently until all gestures are recognized. The recognition result of each gesture does not affect each other.

    +

    Exclusive

    +

    Exclusive recognition. Registered gestures are identified concurrently. If one gesture is successfully recognized, gesture recognition ends.

    +
    + + +## Events + + + + + + + + + + +

    Name

    +

    Description

    +

    onCancel(event: () => void)

    +

    Callback for the GestureMode.Sequence cancellation event.

    +
    + +## Example ``` @Entry @@ -81,4 +145,5 @@ struct GestureGroupExample { } ``` -![en-us_image_0000001212058490](figures/en-us_image_0000001212058490.gif) +![](figures/gesturegroup.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-components-canvas-canvas.md b/en/application-dev/reference/arkui-ts/ts-components-canvas-canvas.md index 1fd47e4c50..f34c7ce4e1 100644 --- a/en/application-dev/reference/arkui-ts/ts-components-canvas-canvas.md +++ b/en/application-dev/reference/arkui-ts/ts-components-canvas-canvas.md @@ -1,49 +1,80 @@ -# Canvas +# Canvas +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. +The **** component can be used to customize drawings. - -The **<Canvas>** component can be used to customize drawings. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None - -## APIs - -Canvas(context: CanvasRenderingContext2D) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | context | [CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md) | Yes | - | For details, see CanvasRenderingContext2D. | - - -## Attributes - -[Universal attributes](ts-universal-attributes-size.md) are supported. - - -## Events - -In addition to [universal events](ts-universal-events-click.md), the following events are supported. - - | Name | Parameter | Description | -| -------- | -------- | -------- | -| onReady(callback: () => void) | None | Triggered when . | - - -## Example - +## APIs + +Canvas\(context: CanvasRenderingContext2D\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    context

    +

    CanvasRenderingContext2D

    +

    Yes

    +

    -

    +

    For details, see CanvasRenderingContext2D.

    +
    + + +## Attributes + +[Universal attributes](ts-universal-attributes-size.md) are supported. + +## Events + +In addition to [universal events](ts-universal-events-click.md), the following events are supported. + + + + + + + + + + + + +

    Name

    +

    Parameter

    +

    Description

    +

    onReady(callback: () => void)

    +

    None

    +

    Triggered when .

    +
    + +## Example ``` @Entry @@ -67,3 +98,4 @@ struct CanvasExample { } } ``` + diff --git a/en/application-dev/reference/arkui-ts/ts-components-canvas-canvasgradient.md b/en/application-dev/reference/arkui-ts/ts-components-canvas-canvasgradient.md index c218127bbb..b601e5821a 100644 --- a/en/application-dev/reference/arkui-ts/ts-components-canvas-canvasgradient.md +++ b/en/application-dev/reference/arkui-ts/ts-components-canvas-canvasgradient.md @@ -1,53 +1,86 @@ -# CanvasGradient +# CanvasGradient +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. +**CanvasGradient** provides a gradient object. +## addColorStop -**CanvasGradient** provides a gradient object. +addColorStop\(offset: number, color: string\): void +Adds a color stop for the **CanvasGradient** object based on the specified offset and gradient color. -## addColorStop +- Parameters -addColorStop(offset: number, color: string): void + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    offset

    +

    number

    +

    Yes

    +

    0

    +

    Proportion of the distance between the color stop and the start point to the total length. The value ranges from 0 to 1.

    +

    color

    +

    string

    +

    Yes

    +

    'ffffff'

    +

    Gradient color to set.

    +
    -Adds a color stop for the **CanvasGradient** object based on the specified offset and gradient color. +- Example -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | offset | number | Yes | 0 | Proportion of the distance between the color stop and the start point to the total length. The value ranges from 0 to 1. | - | color | string | Yes | 'ffffff' | Gradient color to set. | - -- Example + ``` + @Entry + @Component + struct Page45 { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private gra:CanvasGradient = new CanvasGradient() - ``` - @Entry - @Component - struct Page45 { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - var grad = this.context.createLinearGradient(50,0, 300,100) - this.grad.addColorStop(0.0, 'red') - this.grad.addColorStop(0.5, 'white') - this.grad.addColorStop(1.0, 'green') - this.context.fillStyle = grad - this.context.fillRect(0, 0, 500, 500) - }) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var grad = this.context.createLinearGradient(50,0, 300,100) + gra.addColorStop(0.0, 'red') + gra.addColorStop(0.5, 'white') + gra.addColorStop(1.0, 'green') + this.context.fillStyle = grad + this.context.fillRect(0, 0, 500, 500) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` + + ![](figures/en-us_image_0000001192915130.png) - ![en-us_image_0000001256858381](figures/en-us_image_0000001256858381.png) diff --git a/en/application-dev/reference/arkui-ts/ts-components-canvas-imagebitmap.md b/en/application-dev/reference/arkui-ts/ts-components-canvas-imagebitmap.md index 4c19546b8c..ad48b3ddbe 100644 --- a/en/application-dev/reference/arkui-ts/ts-components-canvas-imagebitmap.md +++ b/en/application-dev/reference/arkui-ts/ts-components-canvas-imagebitmap.md @@ -1,17 +1,109 @@ -# ImageBitmap +# ImageBitmap +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. +**ImageBitmap** allows you to add an image bitmap. +## APIs -**CanvasImageData** stores pixel data rendered on a canvas. +ImageBitmap\(src: string\) +- Parameters -## Attributes + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    src

    +

    string

    +

    Yes

    +

    -

    +

    Path of the image bitmap object.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + +

    Attribute

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    width

    +

    Length

    +

    0px

    +

    No

    +

    Image width.

    +

    height

    +

    Length

    +

    0px

    +

    No

    +

    Image height.

    +
    + +Example + +``` +@Entry +@Component +struct DrawImageExample { + private settings:RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private img:ImageBitmap = new ImageBitmap("common/images/example.jpg") + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.context.drawImage( this.img,0,0,400,200) + }) + } + .width('100%') + .height('100%') + } +} +``` + +![](figures/en-us_image_0000001192595194.png) - | Name | Type | Description | -| -------- | -------- | -------- | -| width | number | Actual width of the rectangle on the canvas, in pixels. | -| height | number | Actual height of the rectangle on the canvas, in pixels. | -| data | <Uint8ClampedArray> | A one-dimensional array of color values. The values range from 0 to 255. | diff --git a/en/application-dev/reference/arkui-ts/ts-components-canvas-imagedata.md b/en/application-dev/reference/arkui-ts/ts-components-canvas-imagedata.md index 5b749411fc..43aa9147a1 100644 --- a/en/application-dev/reference/arkui-ts/ts-components-canvas-imagedata.md +++ b/en/application-dev/reference/arkui-ts/ts-components-canvas-imagedata.md @@ -1,17 +1,42 @@ -# ImageData +# ImageData +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. +**CanvasImageData** stores pixel data rendered on a canvas. +## Attributes -**ImageData** stores pixel data rendered on a canvas. + + + + + + + + + + + + + + + + + + + +

    Attribute

    +

    Type

    +

    Description

    +

    width

    +

    number

    +

    Actual width of the rectangle on the canvas, in pixels.

    +

    height

    +

    number

    +

    Actual height of the rectangle on the canvas, in pixels.

    +

    data

    +

    <Uint8ClampedArray>

    +

    A one-dimensional array of color values. The values range from 0 to 255.

    +
    - -## Attributes - - | Name | Type | Description | -| -------- | -------- | -------- | -| width | number | Actual width of the rectangle on the canvas, in pixels. | -| height | number | Actual height of the rectangle on the canvas, in pixels. | -| data | <Uint8ClampedArray> | A one-dimensional array of color values. The values range from 0 to 255. | diff --git a/en/application-dev/reference/arkui-ts/ts-components-canvas-lottie.md b/en/application-dev/reference/arkui-ts/ts-components-canvas-lottie.md index 2a3247ecc0..b2a63e4de0 100644 --- a/en/application-dev/reference/arkui-ts/ts-components-canvas-lottie.md +++ b/en/application-dev/reference/arkui-ts/ts-components-canvas-lottie.md @@ -1,589 +1,1343 @@ -# Lottie +# Lottie +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. +Lottie is a third-party open-source library and depends on **Canvas** and **RenderingContext**. - -## Required Permissions +## Required Permissions None +## Modules to Import -## Modules to Import - - ``` -import lottie from 'lottie-ohos-ets' +import lottie from 'lottie-web' ``` -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> In the **Terminal** window, run the **npm install'lottie-ohos-ets...** command to download Lottie. - - -## lottie.loadAnimation - -loadAnimation( - -path: string, container: object, render: string, loop: boolean, autoplay: boolean, name: string ): AnimationItem - -Loads an animation. Before calling this method, declare the **Animator('__lottie_ets')** object and check that the canvas layout is complete. This method can be used together with a lifecycle callback of the **Canvas** component, for example, **onAppear()** and **onPageShow()**. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | path | string | Yes | Path of the animation resource file in the HAP file. The resource file must be in JSON format. Example: **path: "common/lottie/data.json"**. | - | container | object | Yes | Canvas drawing context. A **CanvasRenderingContext2D** object must be declared in advance. | - | render | string | Yes | Rendering type. The value can only be **"canvas"**. | - | loop | boolean \| number | No | If the value is of the Boolean type, this parameter indicates whether to repeat the animation cyclically after the animation ends; the default value is **true**. If the value is of the number type and is greater than or equal to 1, this parameter indicates the number of times the animation plays. | - | autoplay | boolean | No | Whether to automatically play the animation. The default value is **true**. | - | name | string | No | Custom animation name. In later versions, the name can be used to reference and control the animation. The default value is null. | - | initialSegment | [number, number] | No | Start frame and end frame of the animation, respectively. | - - -## lottie.destroy - -destroy(name: string): void - -Destroys the animation. This method must be called when a page exits. This method can be used together with a lifecycle callback of the **Canvas** component, for example, **onDisappear()** and **onPageHide()**. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | name | string | Yes | Name of the animation to destroy, which is the same as the **name** in the **loadAnimation** interface. By default, all animations are destroyed. | - -- Example +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>**'lottie-web'** is subject to the actual released name. + +## lottie.loadAnimation + +loadAnimation\( + +path: string, container: object, render: string, loop: boolean, autoplay: boolean, name: string \): AnimationItem + +Loads an animation. Before calling this method, declare the **Animator\('\_\_lottie\_ets'\)** object and check that the canvas layout is complete. This method can be used together with a lifecycle callback of the **Canvas** component, for example, **onAppear\(\)** and **onPageShow\(\)**. + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    path

    +

    string

    +

    Yes

    +

    Path of the animation resource file in the HAP file. The resource file must be in JSON format. Example: path: "common/lottie/data.json".

    +

    container

    +

    object

    +

    Yes

    +

    Canvas drawing context. A CanvasRenderingContext2D object must be declared in advance.

    +

    render

    +

    string

    +

    Yes

    +

    Rendering type. Only canvas is supported.

    +

    loop

    +

    boolean | number

    +

    No

    +

    If the value is of the Boolean type, this parameter indicates whether to repeat the animation cyclically after the animation ends; the default value is true. If the value is of the number type and is greater than or equal to 1, this parameter indicates the number of times the animation plays.

    +

    autoplay

    +

    boolean

    +

    No

    +

    Whether to automatically play the animation. The default value is true.

    +

    name

    +

    string

    +

    No

    +

    Custom animation name. In later versions, the name can be used to reference and control the animation. The default value is null.

    +

    initialSegment

    +

    [number, number]

    +

    No

    +

    Start frame and end frame of the animation, respectively.

    +
    + + +## lottie.destroy + +destroy\(name: string\): void + +Destroys the animation. This method must be called when a page exits. This method can be used together with a lifecycle callback of the **Canvas** component, for example, **onDisappear\(\)** and **onPageHide\(\)**. + +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    name

    +

    string

    +

    Yes

    +

    Name of the animation to destroy, which is the same as the name in the loadAnimation interface. By default, all animations are destroyed.

    +
    + +- Example + + ``` + import lottie from 'lottie-web' - ``` - import lottie from 'lottie-web' - - @Entry - @Component - struct Index { - private controller: CanvasRenderingContext2D = new CanvasRenderingContext2D() - private animateName: string = "animate" - private animatePath: string = "common/lottie/data.json" - private animateItem: any = null - - private onPageHide(): void { - console.log('onPageHide') - lottie.destroy() - } - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.controller) - .width('30%') - .height('20%') - .backgroundColor('#0D9FFB') - .onAppear(() => { - console.log('canvas onAppear'); - this.animateItem = lottie.loadAnimation({ - container: this.controller, - renderer: 'canvas', - loop: true, - autoplay: true, - name: this.animateName, - path: this.animatePath, - }) - }) - - Animator('__lottie_ets') // declare Animator('__lottie_ets') when use lottie - Button('load animation') - .onClick(() => { - if (this.animateItem != null) { - this.animateItem.destroy() - this.animateItem = null - } - this.animateItem = lottie.loadAnimation({ - container: this.controller, - renderer: 'canvas', - loop: true, - autoplay: true, - name: this.animateName, - path: this.animatePath, - initialSegment: [10, 50], + @Entry + @Component + struct Index { + private controller: CanvasRenderingContext2D = new CanvasRenderingContext2D() + private animateName: string = "animate" + private animatePath: string = "common/lottie/data.json" + private animateItem: any = null + + private onPageHide(): void { + console.log('onPageHide') + lottie.destroy() + } + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.controller) + .width('30%') + .height('20%') + .backgroundColor('#0D9FFB') + .onAppear(() => { + console.log('canvas onAppear'); + this.animateItem = lottie.loadAnimation({ + container: this.controller, + renderer: 'canvas', + loop: true, + autoplay: true, + name: this.animateName, + path: this.animatePath, + }) }) - }) - - Button('destroy animation') - .onClick(() => { - lottie.destroy(this.animateName) - this.animateItem = null + + Animator('__lottie_ets') // declare Animator('__lottie_ets') when use lottie + Button('load animation') + .onClick(() => { + if (this.animateItem != null) { + this.animateItem.destroy() + this.animateItem = null + } + this.animateItem = lottie.loadAnimation({ + container: this.controller, + renderer: 'canvas', + loop: true, + autoplay: true, + name: this.animateName, + path: this.animatePath, + initialSegment: [10, 50], + }) }) + + Button('destroy animation') + .onClick(() => { + lottie.destroy(this.animateName) + this.animateItem = null + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001256978355](figures/en-us_image_0000001256978355.gif) + ![](figures/lottie-ark-2-0-canvas-ui-animate.gif) -## lottie.play +## lottie.play -play(name: string): void +play\(name: string\): void Plays a specified animation. -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | name | string | Yes | Name of the animation to play, which is the same as the **name** in the **loadAnimation** interface. By default, all animations are played. | - -- Example - - ``` - lottie.play(this.animateName) - ``` - - -## lottie.pause - -pause(name: string): void - -Pauses a specified animation. The next time **lottie.play()** is called, the animation starts from the current frame. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | name | string | Yes | Name of the animation to pause, which is the same as the **name** in the **loadAnimation** interface. By default, all animations are paused. | - -- Example - - ``` - lottie.pause(this.animateName) - ``` - - -## lottie.togglePause - -togglePause(name: string): void - -Pauses or plays a specified animation. This method is equivalent to the switching between **lottie.play()** and **lottie.pause()**. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | name | string | Yes | Name of the target animation, which is the same as the **name** in the **loadAnimation** interface. By default, all animations are paused. | - -- Example - - ``` - lottie.togglePause(this.animateName) - ``` - - -## lottie.stop - -stop(name: string): void - -Stops the specified animation. The next time **lottie.play()** is called, the animation starts from the first frame. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | name | string | Yes | Name of the target animation, which is the same as the **name** in the **loadAnimation** interface. By default, all animations are paused. | - -- Example - - ``` - lottie.stop(this.animateName) - ``` - - -## lottie.setSpeed - -setSpeed(speed: number, name: string): void +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    name

    +

    string

    +

    Yes

    +

    Name of the animation to play, which is the same as the name in the loadAnimation interface. By default, all animations are played.

    +
    + +- Example + + ``` + lottie.play(this.animateName) + ``` + + +## lottie.pause + +pause\(name: string\): void + +Pauses a specified animation. The next time **lottie.play\(\)** is called, the animation starts from the current frame. + +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    name

    +

    string

    +

    Yes

    +

    Name of the animation to pause, which is the same as the name in the loadAnimation interface. By default, all animations are paused.

    +
    + +- Example + + ``` + lottie.pause(this.animateName) + ``` + + +## lottie.togglePause + +togglePause\(name: string\): void + +Pauses or plays a specified animation. This method is equivalent to the switching between **lottie.play\(\)** and **lottie.pause\(\)**. + +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    name

    +

    string

    +

    Yes

    +

    Name of the target animation, which is the same as the name in the loadAnimation interface. By default, all animations are paused.

    +
    + +- Example + + ``` + lottie.togglePause(this.animateName) + ``` + + +## lottie.stop + +stop\(name: string\): void + +Stops the specified animation. The next time **lottie.play\(\)** is called, the animation starts from the first frame. + +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    name

    +

    string

    +

    Yes

    +

    Name of the animation to stop, which is the same as the name in the loadAnimation interface. By default, all animations are stopped.

    +
    + +- Example + + ``` + lottie.stop(this.animateName) + ``` + + +## lottie.setSpeed + +setSpeed\(speed: number, name: string\): void Sets the playback speed of the specified animation. -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | speed | number | Yes | Playback speed. The value is a floating-point number. If the value is greater than 0, the animation plays in forward direction. If the value is less than 0, the animation plays in reversed direction. If the value is 0, the animation is paused. If the value is 1.0 or -1.0, the animation plays at the normal speed. | - | name | string | Yes | Name of the target animation, which is the same as the **name** in the **loadAnimation** interface. By default, all animations are stopped. | - -- Example - - ``` - lottie.setSpeed(5, this.animateName) - ``` - - -## lottie.setDirection - -setDirection(direction: AnimationDirection, name: string): void - -Sets the direction in which the specified animation plays. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | direction | AnimationDirection | Yes | Direction in which the animation plays. **1**: forwards; **-1**: backwards. When set to play backwards, the animation plays from the current playback progress to the first frame. When this setting is combined with **loop** being set to **true**, the animation plays backwards continuously. When the value of **speed** is less than 0, the animation also plays backwards.
    **AnimationDirection**: 1 \| -1. | - | name | string | Yes | Name of the target animation, which is the same as the **name** in the **loadAnimation** interface. By default, all animations are set. | - -- Example - - ``` - lottie.setDirection(-1, this.animateName) - ``` - - -## AnimationItem - -Defines an **AnimationItem** object, which is returned by the **loadAnimation** interface and has attributes and interfaces. The attributes are described as follows: - - | Name | Type | Description | -| -------- | -------- | -------- | -| name | string | Animation name. | -| isLoaded | boolean | Whether the animation is loaded. | -| currentFrame | number | Frame that is being played. The default precision is a floating-point number greater than or equal to 0.0. After **setSubframe(false)** is called, the value is a positive integer without decimal points. | -| currentRawFrame | number | Number of frames that are being played. The precision is a floating point number greater than or equal to 0.0. | -| firstFrame | number | First frame of the animation segment that is being played. | -| totalFrames | number | Total number of frames in the animation segment that is being played. | -| frameRate | number | Frame rate (frame/s). | -| frameMult | number | Frame rate (frame/ms). | -| playSpeed | number | Playback speed. The value is a floating-point number. If the value is greater than 0, the animation plays in forward direction. If the value is less than 0, the animation plays in reversed direction. If the value is 0, the animation is paused. If the value is **1.0** or **-1.0**, the animation plays at the normal speed. | -| playDirection | number | Playback direction. The options are **1** (forward) and **-1** (backward). | -| playCount | number | Number of times the animation plays. | -| isPaused | boolean | Whether the current animation is paused. The value **true** means that the animation is paused. | -| autoplay | boolean | Whether to automatically play the animation upon completion of the loading. The value **false** means that the **play()** interface needs to be called to start playing. | -| loop | boolean \| number | If the value is of the Boolean type, this parameter indicates whether to repeat the animation cyclically after the animation ends. If the value is of the number type and is greater than or equal to 1, this parameter indicates the number of times the animation plays. | -| renderer | any | Animation rendering object, which depends on the rendering type. | -| animationID | string | Animation ID. | -| timeCompleted | number | Number of frames that are played for an animation sequence. The value is affected by the setting of **AnimationSegment** and is the same as the value of **totalFrames**. | -| segmentPos | number | ID of the current animation segment. The value is a positive integer greater than or equal to 0. | -| isSubframeEnabled | boolean | Whether the precision of **currentFrame** is a floating point number. | -| segments | AnimationSegment \| AnimationSegment[] | Current segment of the animation. | - - -## AnimationItem.play - -play(name?: string): void +- Parameters + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    speed

    +

    number

    +

    Yes

    +

    Playback speed. The value is a floating-point number. If the value is greater than 0, the animation plays in forward direction. If the value is less than 0, the animation plays in reversed direction. If the value is 0, the animation is paused. If the value is 1.0 or -1.0, the animation plays at the normal speed.

    +

    name

    +

    string

    +

    Yes

    +

    Name of the target animation, which is the same as the name in the loadAnimation interface. By default, all animations are stopped.

    +
    + +- Example + + ``` + lottie.setSpeed(5, this.animateName) + ``` + + +## lottie.setDirection + +setDirection\(direction: AnimationDirection, name: string\): void + +Sets the dierection in which the specified animation plays. + +- Parameters + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    direction

    +

    AnimationDirection

    +

    Yes

    +

    Direction in which the animation plays. 1: forwards; -1: backwards. When set to play backwards, the animation plays from the current playback progress to the first frame. When this setting is combined with loop being set to true, the animation plays backwards continuously. When the value of speed is less than 0, the animation also plays backwards.

    +

    AnimationDirection: 1 | -1

    +

    name

    +

    string

    +

    Yes

    +

    Name of the target animation, which is the same as the name in the loadAnimation interface. By default, all animations are set.

    +
    + + +- Example + + ``` + lottie.setDirection(-1, this.controlName) + ``` + + +## AnimationItem + +Defines an **AnimationItem** object, which is returned by the **loadAnimation** interface and has attributes and interfaces. The attributes are described as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    name

    +

    string

    +

    Animation name.

    +

    isLoaded

    +

    boolean

    +

    Whether the animation is loaded.

    +

    currentFrame

    +

    number

    +

    Frame that is being played. The default precision is a floating-point number greater than or equal to 0.0. After setSubframe(false) is called, the value is a positive integer without decimal points.

    +

    currentRawFrame

    +

    number

    +

    Number of frames that are being played. The precision is a floating point number greater than or equal to 0.0.

    +

    firstFrame

    +

    number

    +

    First frame of the animation segment that is being played.

    +

    totalFrames

    +

    number

    +

    Total number of frames in the animation segment that is being played.

    +

    frameRate

    +

    number

    +

    Frame rate (frame/s).

    +

    frameMult

    +

    number

    +

    Frame rate (frame/ms).

    +

    playSpeed

    +

    number

    +

    Playback speed. The value is a floating-point number. If the value is greater than 0, the animation plays in forward direction. If the value is less than 0, the animation plays in reversed direction. If the value is 0, the animation is paused. If the value is 1.0 or -1.0, the animation plays at the normal speed.

    +

    playDirection

    +

    number

    +

    Playback direction. The options are 1 (forward) and -1 (backward).

    +

    playCount

    +

    number

    +

    Number of times the animation plays.

    +

    isPaused

    +

    boolean

    +

    Whether the current animation is paused. The value true means that the animation is paused.

    +

    autoplay

    +

    boolean

    +

    Whether to automatically play the animation upon completion of the loading. The value false means that the play() interface needs to be called to start playing.

    +

    loop

    +

    boolean | number

    +

    If the value is of the Boolean type, this parameter indicates whether to repeat the animation cyclically after the animation ends. If the value is of the number type and is greater than or equal to 1, this parameter indicates the number of times the animation plays.

    +

    renderer

    +

    any

    +

    Animation rendering object, which depends on the rendering type.

    +

    animationID

    +

    string

    +

    Animation ID.

    +

    timeCompleted

    +

    number

    +

    Number of frames that are played for an animation sequence. The value is affected by the setting of AnimationSegment and is the same as the value of totalFrames.

    +

    segmentPos

    +

    number

    +

    ID of the current animation segment. The value is a positive integer greater than or equal to 0.

    +

    isSubframeEnabled

    +

    boolean

    +

    Whether the precision of currentFrame is a floating point number.

    +

    segments

    +

    AnimationSegment | AnimationSegment[]

    +

    Current segment of the animation.

    +
    + +## AnimationItem.play + +play\(name?: string\): void Plays an animation. -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | name | string | No | Name of the target animation. By default, the value is null. | - -- Example - - ``` - this.animateItem.play() - ``` - - -## AnimationItem.destroy - -destroy(name?: string): void +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    name

    +

    string

    +

    No

    +

    Name of the target animation. By default, the value is null.

    +
    + +- Example + + ``` + this.anim.play() + ``` + + +## AnimationItem.destroy + +destroy\(name?: string\): void Destroys an animation. -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | name | string | No | Name of the target animation. By default, the value is null. | - -- Example - - ``` - this.animateItem.destroy() - ``` - - -## AnimationItem.pause - -pause(name?: string): void - -Pauses an animation. When the **play** interface is called next time, the animation is played from the current frame. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | name | string | No | Name of the target animation. By default, the value is null. | - -- Example - - ``` - this.animateItem.pause() - ``` - - -## AnimationItem.togglePause - -togglePause(name?: string): void - -Pauses or plays an animation. This method is equivalent to the switching between **play** and **pause**. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | name | string | No | Name of the target animation. By default, the value is null. | - -- Example - - ``` - this.animateItem.togglePause() - ``` - - -## AnimationItem.stop - -stop(name?: string): void - -Stops an animation. When the **play** interface is called next time, the animation is played from the first frame. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | name | string | No | Name of the target animation. By default, the value is null. | - -- Example - - ``` - this.animateItem.stop() - ``` - - -## AnimationItem.setSpeed - -setSpeed(speed: number): void +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    name

    +

    string

    +

    No

    +

    Name of the target animation. By default, the value is null.

    +
    + +- Example + + ``` + this.anim.destroy() + ``` + + +## AnimationItem.pause + +pause\(name?: string\): void + +Pauses an animation. When the **play** interface is called next time, the animation is played from the current frame. + +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    name

    +

    string

    +

    No

    +

    Name of the target animation. By default, the value is null.

    +
    + +- Example + + ``` + this.anim.pause() + ``` + + +## AnimationItem.togglePause + +togglePause\(name?: string\): void + +Pauses or plays an animation. This method is equivalent to the switching between **play** and **pause**. + +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    name

    +

    string

    +

    No

    +

    Name of the target animation. By default, the value is null.

    +
    + +- Example + + ``` + this.anim.togglePause() + ``` + + +## AnimationItem.stop + +stop\(name?: string\): void + +Stops an animation. When the **play** interface is called next time, the animation is played from the first frame. + +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    name

    +

    string

    +

    No

    +

    Name of the target animation. By default, the value is null.

    +
    + +- Example + + ``` + this.anim.stop() + ``` + + +## AnimationItem.setSpeed + +setSpeed\(speed: number\): void Sets the playback speed of an animation. -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | speed | number | Yes | Playback speed. The value is a floating-point number. If the value is greater than 0, the animation plays in forward direction. If the value is less than 0, the animation plays in reversed direction. If the value is 0, the animation is paused. If the value is **1.0** or **-1.0**, the animation plays at the normal speed. | - -- Example - - ``` - this.animateItem.setSpeed(5); - ``` - - -## AnimationItem.setDirection - -setDirection(direction: AnimationDirection): void +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    speed

    +

    number

    +

    Yes

    +

    Playback speed. The value is a floating-point number. If the value is greater than 0, the animation plays in forward direction. If the value is less than 0, the animation plays in reversed direction. If the value is 0, the animation is paused. If the value is 1.0 or -1.0, the animation plays at the normal speed.

    +
    + +- Example + + ``` + this.anim.setSpeed(5); + ``` + + +## AnimationItem.setDirection + +setDirection\(direction: AnimationDirection\): void Sets the playback direction of an animation. -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | direction | AnimationDirection | Yes | Direction in which the animation plays. **1**: forwards; **-1**: backwards. When set to play backwards, the animation plays from the current playback progress to the first frame. When this setting is combined with **loop** being set to **true**, the animation plays backwards continuously. When the value of **speed** is less than 0, the animation also plays backwards.
    **AnimationDirection**: 1 \| -1. | - -- Example - - ``` - this.animateItem.setDirection(-1) - ``` +- Parameters + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    direction

    +

    AnimationDirection

    +

    Yes

    +

    Direction in which the animation plays. 1: forwards; -1: backwards. When set to play backwards, the animation plays from the current playback progress to the first frame. When this setting is combined with loop being set to true, the animation plays backwards continuously. When the value of speed is less than 0, the animation also plays backwards.

    +

    AnimationDirection: 1 | -1.

    +
    -## AnimationItem.goToAndStop -goToAndStop(value: number, isFrame: boolean): void +- Example -Sets the animation to stop at the specified frame or time. + ``` + this.anim.setDirection(-1) + ``` -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | value | number | Yes | Frame ID (greater than or equal to 0) or time progress (ms) at which the animation will stop. | - | isFrame | boolean | No | Whether to set the animation to stop at the specified frame. The value **true** means to set the animation to stop at the specified frame, and **false** means to set the animation to stop at the specified time progress. The default value is **false**. | - | name | string | No | Name of the target animation. By default, the value is null. | -- Example - - ``` - // Set the animation to stop at the specified frame. - this.animateItem.goToAndStop(25, true) - // Set the animation to stop at the specified time progress. - this.animateItem.goToAndStop(300, false, this.animateName) - ``` +## AnimationItem.goToAndStop +goToAndStop\(value: number, isFrame: boolean\): void -## AnimationItem.goToAndPlay +Sets the animation to stop at the specified frame or time. -goToAndPlay(value: number, isFrame: boolean): void +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    value

    +

    number

    +

    Yes

    +

    Frame ID (greater than or equal to 0) or time progress (ms) at which the animation will stop.

    +

    isFrame

    +

    boolean

    +

    No

    +

    Whether to set the animation to stop at the specified frame. The value true means to set the animation to stop at the specified frame, and false means to set the animation to stop at the specified time progress. The default value is false.

    +

    name

    +

    string

    +

    No

    +

    Name of the target animation. By default, the value is null.

    +
    + + +- Example + + ``` + // Set the animation to stop at the specified frame. + this.anim.goToAndStop(25, true) + // Set the animation to stop at the specified time progress. + this.anim.goToAndStop(300, false, this.animateName) + ``` + + +## AnimationItem.goToAndPlay + +goToAndPlay\(value: number, isFrame: boolean\): void Sets the animation to start from the specified frame or time progress. -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | value | number | Yes | Frame ID (greater than or equal to 0) or time progress (ms) at which the animation will start. | - | isFrame | boolean | Yes | Whether to set the animation to start from the specified frame. The value **true** means to set the animation to start from the specified frame, and **false** means to set the animation to start from the specified time progress. The default value is **false**. | - | name | string | No | Name of the target animation. By default, the value is null. | - -- Example - - ``` - // Set the animation to stop at the specified frame. - this.animateItem.goToAndPlay(25, true) - // Set the animation to stop at the specified time progress. - this.animateItem.goToAndPlay(300, false, this.animateName) - ``` - - -## AnimationItem.playSegments - -playSegments(segments: AnimationSegment | AnimationSegment[], forceFlag: boolean): void +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    value

    +

    number

    +

    Yes

    +

    Frame ID (greater than or equal to 0) or time progress (ms) at which the animation will start.

    +

    isFrame

    +

    boolean

    +

    Yes

    +

    Whether to set the animation to start from the specified frame. The value true means to set the animation to start from the specified frame, and false means to set the animation to start from the specified time progress. The default value is false.

    +

    name

    +

    string

    +

    No

    +

    Name of the target animation. By default, the value is null.

    +
    + + +- Example + + ``` + // Set the animation to start from the specified frame. + this.anim.goToAndPlay(25, true) + // Set the animation to start from the specified time progress. + this.anim.goToAndPlay(300, false, this.animateName) + ``` + + +## AnimationItem.playSegments + +playSegments\(segments: AnimationSegment | AnimationSegment\[\], forceFlag: boolean\): void Sets the animation to play only the specified segment. -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | segments | AnimationSegment = [number, number] \| AnimationSegment[] | Yes | Segment or segment list.
    If all segments in the segment list are played, only the last segment is played in the next cycle. | - | forceFlag | boolean | Yes | Whether the settings take effect immediately. The value **true** means the settings take effect immediately, and **false** means the settings take effect until the current cycle of playback is completed. | +- Parameters + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    segments

    +

    AnimationSegment = [number, number] | AnimationSegment[]

    +

    Yes

    +

    Segment or segment list.

    +

    If all segments in the segment list are played, only the last segment is played in the next cycle.

    +

    forceFlag

    +

    boolean

    +

    Yes

    +

    Whether the settings take effect immediately. The value true means the settings take effect immediately, and false means the settings take effect until the current cycle of playback is completed.

    +
    + + +- Example + + ``` + // Set the animation to play the specified segment. + this.anim.playSegments([10, 20], false) + // Set the animation to play the specified segment list. + this.anim.playSegments([[0, 5], [20, 30]], true) + ``` + + +## AnimationItem.resetSegments + +resetSegments\(forceFlag: boolean\): void + +Resets the settings configured by the **playSegments** method to play all the frames. + +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    forceFlag

    +

    boolean

    +

    Yes

    +

    Whether the settings take effect immediately. The value true means the settings take effect immediately, and false means the settings take effect until the current cycle of playback is completed.

    +
    + + +- Example + + ``` + this.anim.resetSegments(true) + ``` + + +## AnimationItem.resize + +resize\(\): void + +Refreshes the animation layout. + +- Example + + ``` + this.anim.resize() + ``` + + +## AnimationItem.setSubframe + +setSubframe\(useSubFrame: boolean\): void + +Sets the precision of the **currentFrame** attribute to display floating-point numbers. + +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    useSubFrames

    +

    boolean

    +

    Yes

    +

    Whether the currentFrame attribute displays floating-point numbers. By default, the attribute displays floating-point numbers.

    +

    true: The currentFrame attribute displays floating-point numbers.

    +

    false: The currentFrame attribute displays an integer and does not display floating-point numbers.

    +
    -- Example - - ``` - // Set the animation to play the specified segment. - this.animateItem.playSegments([10, 20], false) - // Set the animation to play the specified segment list. - this.animateItem.playSegments([[0, 5], [20, 30]], true) - ``` +- Example -## AnimationItem.resetSegments + ``` + this.anim.setSubframe(false) + ``` -resetSegments(forceFlag: boolean): void -Resets the settings configured by the **playSegments** method to play all the frames. +## AnimationItem.getDuration -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | forceFlag | boolean | Yes | Whether the settings take effect immediately. The value **true** means the settings take effect immediately, and **false** means the settings take effect until the current cycle of playback is completed. | - -- Example - - ``` - this.animateItem.resetSegments(true) - ``` +getDuration\(inFrames?: boolean\): void +Obtains the duration \(irrelevant to the playback speed\) or number of frames for playing an animation sequence. The settings are related to the input parameter **initialSegment** of the **Lottie.loadAnimation** interface. -## AnimationItem.resize - -resize(): void - -Resizes the animation layout. - -- Example - - ``` - this.animateItem.resize() - ``` +- Parameters + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    inFrames

    +

    boolean

    +

    No

    +

    Whether to obtain the duration or number of frames. true: number of frames. false: duration, in ms. The default value is false.

    +
    -## AnimationItem.setSubframe -setSubframe(useSubFrame: boolean): void +- Example -Sets the precision of the **currentFrame** attribute to display floating-point numbers. + ``` + this.anim.setSubframe(true) + ``` -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | useSubFrames | boolean | Yes | Whether the **currentFrame** attribute displays floating-point numbers. By default, the attribute displays floating-point numbers.
    **true**: The **currentFrame** attribute displays floating-point numbers.
    **false**: The **currentFrame** attribute displays an integer and does not display floating-point numbers. | -- Example - - ``` - this.animateItem.setSubframe(false) - ``` - - -## AnimationItem.getDuration - -getDuration(inFrames?: boolean): void - -Obtains the duration (irrelevant to the playback speed) or number of frames for playing an animation sequence. The settings are related to the input parameter **initialSegment** of the **Lottie.loadAnimation** interface. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | inFrames | boolean | No | Whether to obtain the duration or number of frames. **true**: number of frames. **false**: duration, in ms. The default value is **false**. | - -- Example - - ``` - this.animateItem.getDuration(true) - ``` +## AnimationItem.addEventListener - -## AnimationItem.addEventListener - -addEventListener<T = any>(name: AnimationEventName, callback: AnimationEventCallback<T>): () => void +addEventListener\(name: AnimationEventName, callback: AnimationEventCallback\): \(\) =\> void Adds an event listener. After the event is complete, the specified callback function is triggered. This method returns the function object that can delete the event listener. -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | name | AnimationEventName | Yes | Animation event type. The available options are as follows:
    'enterFrame', 'loopComplete', 'complete', 'segmentStart', 'destroy', 'config_ready', 'data_ready', 'DOMLoaded', 'error', 'data_failed', 'loaded_images' | - | callback | AnimationEventCallback<T> | Yes | Custom callback. | - -- Example +- Parameters + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    name

    +

    AnimationEventName

    +

    Yes

    +

    Animation event type. The available options are as follows:

    +

    'enterFrame', 'loopComplete', 'complete', 'segmentStart', 'destroy', 'config_ready', 'data_ready', 'DOMLoaded', 'error', 'data_failed', 'loaded_images'

    +

    callback

    +

    AnimationEventCallback<T>

    +

    Yes

    +

    Custom callback.

    +
    + + +- Example + + ``` + private callbackItem: any = function() { + console.log("grunt loopComplete") + } + let delFunction = this.animateItem.addEventListener('loopComplete', this.callbackItem) - ``` - private callbackItem: any = function() { - console.log("grunt loopComplete") - } - let delFunction = this.animateItem.addEventListener('loopComplete', this.animateName) - - // Delete the event listener. - delFunction() - ``` - - -## AnimationItem.removeEventListener - -removeEventListener<T = any>(name: AnimationEventName, callback?: AnimationEventCallback<T>): void - -Removes an event listener. + // Delete the event listener. + delFunction() + ``` + + +## AnimationItem.removeEventListener + +removeEventListener\(name: AnimationEventName, callback?: AnimationEventCallback\): void + +Deletes an event listener. + +- Parameters + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    name

    +

    AnimationEventName

    +

    Yes

    +

    Animation event type. The available options are as follows:

    +

    'enterFrame', 'loopComplete', 'complete', 'segmentStart', 'destroy', 'config_ready', 'data_ready', 'DOMLoaded', 'error', 'data_failed', 'loaded_images'

    +

    callback

    +

    AnimationEventCallback<T>

    +

    Yes

    +

    Custom callback. By default, the value is null, meaning that all callbacks of the event will be removed.

    +
    + + +- Example + + ``` + this.animateItem.removeEventListener('loopComplete', this.callbackItem) + ``` + + +## AnimationItem.triggerEvent + +triggerEvent\(name: AnimationEventName, args: T\): void -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | name | AnimationEventName | Yes | Animation event type. The available options are as follows:
    'enterFrame', 'loopComplete', 'complete', 'segmentStart', 'destroy', 'config_ready', 'data_ready', 'DOMLoaded', 'error', 'data_failed', 'loaded_images' | - | callback | AnimationEventCallback<T> | Yes | Custom callback. By default, the value is null, meaning that all callbacks of the event will be removed. | +Directly triggers all configured callbacks of a specified event. -- Example +- Parameters + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    name

    +

    AnimationEventName

    +

    Yes

    +

    Animation event type.

    +

    +

    args

    +

    any

    +

    Yes

    +

    Custom callback parameters.

    +
    + + +- Example + + ``` + private triggerCallBack: any = function(item) { + console.log("trigger loopComplete, name:" + item.name) + } - ``` - this.animateItem.removeEventListener('loopComplete', this.animateName) - ``` - - -## AnimationItem.triggerEvent + this.animateItem.addEventListener('loopComplete', this.triggerCallBack) + this.animateItem.triggerEvent('loopComplete', this.animateItem) + this.animateItem.removeEventListener('loopComplete', this.triggerCallBack) + ``` -triggerEvent<T = any>(name: AnimationEventName, args: T): void -Directly triggers all configured callbacks of a specified event. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | name | AnimationEventName | Yes | Animation event type. | - | args | any | Yes | Custom callback parameters. | - -- Example - - ``` - private triggerCallBack: any = function(item) { - console.log("trigger loopComplete, name:" + item.name) - } - - this.animateItem.addEventListener('loopComplete', this.triggerCallBack) - this.animateItem.triggerEvent('loopComplete', this.animateItem) - this.animateItem.removeEventListener('loopComplete', this.triggerCallBack) - ``` diff --git a/en/application-dev/reference/arkui-ts/ts-components-canvas-path2d.md b/en/application-dev/reference/arkui-ts/ts-components-canvas-path2d.md index 1bf9a31ed4..d86cfb3078 100644 --- a/en/application-dev/reference/arkui-ts/ts-components-canvas-path2d.md +++ b/en/application-dev/reference/arkui-ts/ts-components-canvas-path2d.md @@ -1,453 +1,958 @@ -# Path2D +# Path2D +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. +**Path2D** allows you to describe a path through an existing path. This path can be drawn through the **stroke** API of **Canvas**. +## addPath -**Path2D** allows you to describe a path through an existing path. This path can be drawn through the **stroke** API of **Canvas**. - - -## addPath - -addPath(path: Object): void +addPath\(path: Object\): void Adds a path to this path. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | path | Object | Yes | null | Path to be added to this path. | - -- Example +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    path

    +

    Object

    +

    Yes

    +

    null

    +

    Path to be added to this path.

    +
    + +- Example + + ``` + @Entry + @Component + struct AddPath { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - ``` - @Entry - @Component - struct AddPath { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - private path2Da: Path2D = new Path2D("M250 150 L150 350 L350 350 Z") - private path2Db: Path2D = new Path2D() - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.path2Db.addPath(this.path2Da) - this.context.stroke(this.path2Db) - }) + private path2Da: Path2D = new Path2D("M250 150 L150 350 L350 350 Z") + private path2Db: Path2D = new Path2D() + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.addPath(this.path2Da) + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001211898520](figures/en-us_image_0000001211898520.png) + ![](figures/en-us_image_0000001192595216.png) -## closePath +## closePath -closePath(): void +closePath\(\): void -Moves the current point of the path back to the start point of the path, and draws a straight line between the current point and the start point. If the shape has already been closed or has only one point, this method does nothing. +Moves the current point of the path back to the start point of the path, and draws a straight line between the current point and the start point. If the shape is closed or has only one point, this method does not perform any action. -- Example +- Example + + ``` + @Entry + @Component + struct ClosePath { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() - ``` - @Entry - @Component - struct ClosePath { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private path2Db: Path2D = new Path2D() - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.path2Db.moveTo(200, 100) - this.path2Db.lineTo(300, 100) - this.path2Db.lineTo(200, 200) - this.path2Db.closePath() - this.context.stroke(this.path2Db) - }) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.moveTo(200, 100) + this.path2Db.lineTo(300, 100) + this.path2Db.lineTo(200, 200) + this.path2Db.closePath() + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212218482](figures/en-us_image_0000001212218482.png) + ![](figures/unnaming-(4).png) -## moveTo +## moveTo -moveTo(x: number, y: number): void +moveTo\(x: number, y: number\): void Moves the current coordinate point of the path to the target point, without drawing a line during the movement. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the target point. | - | y | number | Yes | 0 | Y-coordinate of the target point. | - -- Example +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the target point.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the target point.

    +
    + +- Example + + ``` + @Entry + @Component + struct MoveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() - ``` - @Entry - @Component - struct MoveTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private path2Db: Path2D = new Path2D() - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.path2Db.moveTo(50, 100) - this.path2Db.lineTo(250, 100) - this.path2Db.lineTo(150, 200) - this.path2Db.closePath() - this.context.stroke(this.path2Db) - }) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.moveTo(50, 100) + this.path2Db.lineTo(250, 100) + this.path2Db.lineTo(150, 200) + this.path2Db.closePath() + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257138389](figures/en-us_image_0000001257138389.png) + ![](figures/en-us_image_0000001237475113.png) -## lineTo +## lineTo -lineTo(x: number, y: number): void +lineTo\(x: number, y: number\): void Draws a straight line from the current point to the target point. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the target point. | - | y | number | Yes | 0 | Y-coordinate of the target point. | - -- Example +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the target point.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the target point.

    +
    + +- Example + + ``` + @Entry + @Component + struct LineTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() - ``` - @Entry - @Component - struct LineTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private path2Db: Path2D = new Path2D() - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.path2Db.moveTo(100, 100) - this.path2Db.lineTo(100, 200) - this.path2Db.lineTo(200, 200) - this.path2Db.lineTo(200, 100) - this.path2Db.closePath() - this.context.stroke(this.path2Db) - }) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.moveTo(100, 100) + this.path2Db.lineTo(100, 200) + this.path2Db.lineTo(200, 200) + this.path2Db.lineTo(200, 100) + this.path2Db.closePath() + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001256858435](figures/en-us_image_0000001256858435.png) + ![](figures/unnaming-(3).png) -## bezierCurveTo +## bezierCurveTo -bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void +bezierCurveTo\(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number\): void Draws a cubic bezier curve on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | cp1x | number | Yes | 0 | X-coordinate of the first parameter of the bezier curve. | - | cp1y | number | Yes | 0 | Y-coordinate of the first parameter of the bezier curve. | - | cp2x | number | Yes | 0 | X-coordinate of the second parameter of the bezier curve. | - | cp2y | number | Yes | 0 | Y-coordinate of the second parameter of the bezier curve. | - | x | number | Yes | 0 | X-coordinate of the end point on the bezier curve. | - | y | number | Yes | 0 | Y-coordinate of the end point on the bezier curve. | - -- Example +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    cp1x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the first parameter of the bezier curve.

    +

    cp1y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the first parameter of the bezier curve.

    +

    cp2x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the second parameter of the bezier curve.

    +

    cp2y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the second parameter of the bezier curve.

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the end point on the bezier curve.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the end point on the bezier curve.

    +
    + + +- Example + + ``` + @Entry + @Component + struct BezierCurveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() - ``` - @Entry - @Component - struct BezierCurveTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private path2Db: Path2D = new Path2D() - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.path2Db.moveTo(10, 10) - this.path2Db.bezierCurveTo(20, 100, 200, 100, 200, 20);this.context.stroke(this.path2Db) - }) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.moveTo(10, 10) + this.path2Db.bezierCurveTo(20, 100, 200, 100, 200, 20);this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257058445](figures/en-us_image_0000001257058445.png) + ![](figures/en-us_image_0000001192915158.png) -## quadraticCurveTo +## quadraticCurveTo -quadraticCurveTo(cpx: number, cpy: number, x: number ,y: number): void +quadraticCurveTo\(cpx: number, cpy: number, x: number ,y: number\): void Draws a quadratic curve on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | cpx | number | Yes | 0 | X-coordinate of the bezier curve parameter. | - | cpy | number | Yes | 0 | Y-coordinate of the bezier curve parameter. | - | x | number | Yes | 0 | X-coordinate of the end point on the bezier curve. | - | y | number | Yes | 0 | Y-coordinate of the end point on the bezier curve. | - -- Example +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    cpx

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the bezier curve parameter.

    +

    cpy

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the bezier curve parameter.

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the end point on the bezier curve.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the end point on the bezier curve.

    +
    + +- Example + + ``` + @Entry + @Component + struct QuadraticCurveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() - ``` - @Entry - @Component - struct QuadraticCurveTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private path2Db: Path2D = new Path2D() - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.path2Db.moveTo(10, 10) - this.path2Db.quadraticCurveTo(100, 100, 200, 20) - this.context.stroke(this.path2Db) - }) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.moveTo(10, 10) + this.path2Db.quadraticCurveTo(100, 100, 200, 20) + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212058512](figures/en-us_image_0000001212058512.png) + ![](figures/en-us_image_0000001237555151.png) -## arc +## arc -arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: number): void +arc\(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: number\): void Draws an arc on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the center point of the arc. | - | y | number | Yes | 0 | Y-coordinate of the center point of the arc. | - | radius | number | Yes | 0 | Radius of the arc. | - | startAngle | number | Yes | 0 | Start radian of the arc. | - | endAngle | number | Yes | 0 | End radian of the arc. | - | anticlockwise | boolean | No | false | Whether to draw the arc counterclockwise. | - -- Example +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the center point of the arc.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the center point of the arc.

    +

    radius

    +

    number

    +

    Yes

    +

    0

    +

    Radius of the arc.

    +

    startAngle

    +

    number

    +

    Yes

    +

    0

    +

    Start radian of the arc.

    +

    endAngle

    +

    number

    +

    Yes

    +

    0

    +

    End radian of the arc.

    +

    anticlockwise

    +

    boolean

    +

    No

    +

    false

    +

    Whether to draw the arc counterclockwise.

    +
    + +- Example + + ``` + @Entry + @Component + struct Arc { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() - ``` - @Entry - @Component - struct Arc { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private path2Db: Path2D = new Path2D() - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.path2Db.arc(100, 75, 50, 0, 6.28);this.context.stroke(this.path2Db) - }) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.arc(100, 75, 50, 0, 6.28);this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212378446](figures/en-us_image_0000001212378446.png) + ![](figures/en-us_image_0000001192595214.png) -## arcTo +## arcTo -arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void +arcTo\(x1: number, y1: number, x2: number, y2: number, radius: number\): void Draws an arc based on the radius and points on the arc. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x1 | number | Yes | 0 | X-coordinate of the first point on the arc. | - | y1 | number | Yes | 0 | Y-coordinate of the first point on the arc. | - | x2 | number | Yes | 0 | X-coordinate of the second point on the arc. | - | y2 | number | Yes | 0 | Y-coordinate of the second point on the arc. | - | radius | number | Yes | 0 | Radius of the arc. | - -- Example +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x1

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the first point on the arc.

    +

    y1

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the first point on the arc.

    +

    x2

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the second point on the arc.

    +

    y2

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the second point on the arc.

    +

    radius

    +

    number

    +

    Yes

    +

    0

    +

    Radius of the arc.

    +
    + +- Example + + ``` + @Entry + @Component + struct ArcTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() - ``` - @Entry - @Component - struct ArcTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private path2Db: Path2D = new Path2D() - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.path2Db.arcTo(150, 20, 150, 70, 50) - this.context.stroke(this.path2Db) - }) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.arcTo(150, 20, 150, 70, 50) + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212058510](figures/en-us_image_0000001212058510.png) + ![](figures/en-us_image_0000001192755172.png) -## ellipse +## ellipse -ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: number): void +ellipse\(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: number\): void Draws an ellipse in the specified rectangular region. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the ellipse center. | - | y | number | Yes | 0 | Y-coordinate of the ellipse center. | - | radiusX | number | Yes | 0 | Ellipse radius on the x-axis. | - | radiusY | number | Yes | 0 | Ellipse radius on the y-axis. | - | rotation | number | Yes | 0 | Rotation angle of the ellipse, in radians. | - | startAngle | number | Yes | 0 | Angle of the start point for drawing the ellipse, in radians. | - | endAngle | number | Yes | 0 | Angle of the end point for drawing the ellipse, in radians. | - | anticlockwise | number | No | 0 | Whether to draw the ellipse in the counterclockwise direction. The value **0** means to draw the ellipse in the clockwise direction, and **1** means to draw the ellipse in the counterclockwise direction. This parameter is optional. The default value is **0**. | - -- Example +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the ellipse center.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the ellipse center.

    +

    radiusX

    +

    number

    +

    Yes

    +

    0

    +

    Ellipse radius on the x-axis.

    +

    radiusY

    +

    number

    +

    Yes

    +

    0

    +

    Ellipse radius on the y-axis.

    +

    rotation

    +

    number

    +

    Yes

    +

    0

    +

    Rotation angle of the ellipse, in radians.

    +

    startAngle

    +

    number

    +

    Yes

    +

    0

    +

    Angle of the start point for drawing the ellipse, in radians.

    +

    endAngle

    +

    number

    +

    Yes

    +

    0

    +

    Angle of the end point for drawing the ellipse, in radians.

    +

    anticlockwise

    +

    number

    +

    No

    +

    0

    +

    Whether to draw the ellipse in the counterclockwise direction. The value 0 means to draw the ellipse in the clockwise direction, and 1 means to draw the ellipse in the counterclockwise direction. This parameter is optional. The default value is 0.

    +
    + +- Example + + ``` + @Entry + @Component + struct CanvasExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() - ``` - @Entry - @Component - struct CanvasExample { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private path2Db: Path2D = new Path2D() - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.path2Db.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI) - this.context.stroke(this.path2Db) - }) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI, true) + this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257138391](figures/en-us_image_0000001257138391.png) + ![](figures/en-us_image_0000001193075154.png) -## rect +## rect -rect(x: number, y: number, width: number, height: number): void +rect\(x: number, y: number, width: number, height: number\): void Creates a rectangle. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the upper left corner of the rectangle. | - | y | number | Yes | 0 | Y-coordinate of the upper left corner of the rectangle. | - | width | number | Yes | 0 | Width of the rectangle. | - | height | number | Yes | 0 | Height of the rectangle. | - -- Example +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the upper left corner of the rectangle.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the upper left corner of the rectangle.

    +

    width

    +

    number

    +

    Yes

    +

    0

    +

    Width of the rectangle.

    +

    height

    +

    number

    +

    Yes

    +

    0

    +

    Height of the rectangle.

    +
    + +- Example + + ``` + @Entry + @Component + struct CanvasExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private path2Db: Path2D = new Path2D() - ``` - @Entry - @Component - struct CanvasExample { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private path2Db: Path2D = new Path2D() - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.path2Db.rect(20, 20, 100, 100);this.context.stroke(this.path2Db) - }) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.path2Db.rect(20, 20, 100, 100);this.context.stroke(this.path2Db) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` + + ![](figures/en-us_image_0000001192755174.png) - ![en-us_image_0000001256978385](figures/en-us_image_0000001256978385.png) diff --git a/en/application-dev/reference/arkui-ts/ts-components-canvas.md b/en/application-dev/reference/arkui-ts/ts-components-canvas.md index c6dfbdb87c..c28d94e917 100644 --- a/en/application-dev/reference/arkui-ts/ts-components-canvas.md +++ b/en/application-dev/reference/arkui-ts/ts-components-canvas.md @@ -1,19 +1,19 @@ -# Canvas Components +# Canvas Components +- **[Canvas](ts-components-canvas-canvas.md)** +- **[CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md)** -- **[Canvas](ts-components-canvas-canvas.md)** +- **[OffscreenCanvasRenderingConxt2D](ts-offscreencanvasrenderingcontext2d.md)** -- **[CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md)** +- **[Lottie](ts-components-canvas-lottie.md)** -- **[OffscreenCanvasRenderingConxt2D](ts-offscreencanvasrenderingcontext2d.md)** +- **[Path2D](ts-components-canvas-path2d.md)** -- **[Lottie](ts-components-canvas-lottie.md)** +- **[CanvasGradient](ts-components-canvas-canvasgradient.md)** -- **[Path2D](ts-components-canvas-path2d.md)** +- **[ImageBitmap](ts-components-canvas-imagebitmap.md)** -- **[CanvasGradient](ts-components-canvas-canvasgradient.md)** +- **[ImageData](ts-components-canvas-imagedata.md)** -- **[ImageBitmap](ts-components-canvas-imagebitmap.md)** -- **[ImageData](ts-components-canvas-imagedata.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-components-container.md b/en/application-dev/reference/arkui-ts/ts-components-container.md index 8ec33a0040..3350d2b43e 100644 --- a/en/application-dev/reference/arkui-ts/ts-components-container.md +++ b/en/application-dev/reference/arkui-ts/ts-components-container.md @@ -1,47 +1,51 @@ -# Container Components +# Container Components +- **[AlphabetIndexer](ts-container-alphabet-indexer.md)** +- **[Badge](ts-container-badge.md)** -- **[AlphabetIndexer](ts-container-alphabet-indexer.md)** +- **[Column](ts-container-column.md)** -- **[Badge](ts-container-badge.md)** +- **[ColumnSplit](ts-container-columnsplit.md)** -- **[Column](ts-container-column.md)** +- **[Counter](ts-container-counter.md)** -- **[ColumnSplit](ts-container-columnsplit.md)** +- **[Flex](ts-container-flex.md)** -- **[Counter](ts-container-counter.md)** +- **[GridContainer](ts-container-gridcontainer.md)** -- **[Flex](ts-container-flex.md)** +- **[Grid](ts-container-grid.md)** -- **[GridContainer](ts-container-gridcontainer.md)** +- **[GridItem](ts-container-griditem.md)** -- **[Grid](ts-container-grid.md)** +- **[List](ts-container-list.md)** -- **[GridItem](ts-container-griditem.md)** +- **[ListItem](ts-container-listitem.md)** -- **[List](ts-container-list.md)** +- **[Navigator](ts-container-navigator.md)** -- **[ListItem](ts-container-listitem.md)** +- **[Navigation](ts-container-navigation.md)** -- **[Navigator](ts-container-navigator.md)** +- **[Panel](ts-container-panel.md)** -- **[Navigation](ts-basic-components-navigation.md)** +- **[Row](ts-container-row.md)** -- **[Panel](ts-container-panel.md)** +- **[RowSplit](ts-container-rowsplit.md)** -- **[Row](ts-container-row.md)** +- **[Scroll](ts-container-scroll.md)** -- **[RowSplit](ts-container-rowsplit.md)** +- **[ScrollBar](ts-container-scrollbar.md)** -- **[Scroll](ts-container-scroll.md)** +- **[Stack](ts-container-stack.md)** -- **[ScrollBar](ts-basic-components-scrollbar.md)** +- **[Swiper](ts-container-swiper.md)** -- **[Stack](ts-container-stack.md)** +- **[Tabs](ts-container-tabs.md)** -- **[Swiper](ts-container-swiper.md)** +- **[TabContent](ts-container-tabcontent.md)** + +- **[Stepper](ts-container-stepper.md)** + +- **[StepperItem](ts-container-stepperitem.md)** -- **[Tabs](ts-container-tabs.md)** -- **[TabContent](ts-container-tabcontent.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-components.md b/en/application-dev/reference/arkui-ts/ts-components.md index dc08067174..6dd3d6a512 100644 --- a/en/application-dev/reference/arkui-ts/ts-components.md +++ b/en/application-dev/reference/arkui-ts/ts-components.md @@ -1,15 +1,13 @@ -# Components +# Components +- **[Universal Components](ts-universal-components.md)** +- **[Basic Components](ts-basic-components.md)** -- **[Universal Components](ts-universal-components.md)** +- **[Container Components](ts-components-container.md)** -- **[Basic Components](ts-basic-components.md)** +- **[Drawing Components](ts-drawing-components.md)** -- **[Container Components](ts-components-container.md)** +- **[Canvas Components](ts-components-canvas.md)** -- **[Media Components](ts-media-components.md)** -- **[Drawing Components](ts-drawing-components.md)** - -- **[Canvas Components](ts-components-canvas.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-container-alphabet-indexer.md b/en/application-dev/reference/arkui-ts/ts-container-alphabet-indexer.md index 8af93f953f..4009d2f454 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-alphabet-indexer.md +++ b/en/application-dev/reference/arkui-ts/ts-container-alphabet-indexer.md @@ -1,72 +1,244 @@ -# AlphabetIndexer +# AlphabetIndexer +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component provides an alphabetic index bar. +## Applicable Devices -The **<AlphabetIndexer>** component provides an alphabetic index bar. + + + + + + + + + + + + + +

    Phone

    +

    Tablet

    +

    Smart TV

    +

    Wearable

    +

    Yes

    +

    Yes

    +

    No

    +

    No

    +
    - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None +## APIs -## APIs +AlphabetIndexer\(value: \{arrayValue : Array, selected : number\}\) -AlphabetIndexer(value: {arrayValue : Array<string>, selected : number}) +- Parameters -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | arrayValue | Array<string> | Yes | - | Array of strings to be displayed in the alphabetic index bar. | - | selected | number | Yes | - | ID of a selected item. | + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    arrayValue

    +

    Array<string>

    +

    Yes

    +

    -

    +

    Array of strings to be displayed in the alphabetic index bar.

    +

    selected

    +

    number

    +

    Yes

    +

    -

    +

    ID of a selected item.

    +
    -## Attributes +## Attributes - | Name | Type | Description | -| -------- | -------- | -------- | -| selectedColor | Color | Font color of the selected text. | -| popupColor | Color | Font color of the pop-up text. | -| selectedBackgroundColor | Color | Background color of the selected text. | -| popupBackground | Color | Background color of the pop-up text. | -| usingPopup | boolean | Whether to use pop-up text. | -| selectedFont | {
    size?: number,
    weight?: FontWeight,
    family?: string,
    style?: FontStyle
    } | Font style of the selected text. | -| popupFont | {
    size?: number,
    weight?: FontWeight,
    family?: string,
    style?: FontStyle
    } | Font style of the pop-up text. | -| font | {
    size?: number,
    weight?: FontWeight,
    family?: string,
    style?: FontStyle
    } | Default font style of the alphabetic index bar. | -| itemSize | Length | Size of an item in the alphabetic index bar. The item is a square, and the side length needs to be set. | -| alignStyle | IndexerAlign | Alignment style of the alphabetic index bar. Left alignment and right alignment are supported. The alignment style affects the position of the pop-up window. | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    selectedColor

    +

    Color

    +

    Font color of the selected text.

    +

    popupColor

    +

    Color

    +

    Font color of the pop-up text.

    +

    selectedBackgroundColor

    +

    Color

    +

    Background color of the selected text.

    +

    popupBackground

    +

    Color

    +

    Background color of the pop-up text.

    +

    usingPopup

    +

    boolean

    +

    Whether to use pop-up text.

    +

    selectedFont

    +

    {

    +

    size?: number,

    +

    weight?: FontWeight,

    +

    family?: string,

    +

    style?: FontStyle

    +

    }

    +

    Font style of the selected text.

    +

    popupFont

    +

    {

    +

    size?: number,

    +

    weight?: FontWeight,

    +

    family?: string,

    +

    style?: FontStyle

    +

    }

    +

    Font style of the pop-up text.

    +

    font

    +

    {

    +

    size?: number,

    +

    weight?: FontWeight,

    +

    family?: string,

    +

    style?: FontStyle

    +

    }

    +

    Default font style of the alphabetic index bar.

    +

    itemSize

    +

    Length

    +

    Size of an item in the alphabetic index bar. The item is a square, and the side length needs to be set.

    +

    alignStyle

    +

    IndexerAlign

    +

    Alignment style of the alphabetic index bar. Left alignment and right alignment are supported. The alignment style affects the position of the pop-up window.

    +
    -- IndexerAlign enums - | Name | Description | - | -------- | -------- | - | Left | The pop-up window is displayed on the right of the alphabetic indexer bar. | - | Right | The pop-up window is displayed on the left of the alphabetic indexer bar. | +- IndexerAlign enums + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Left

    +

    The pop-up window is displayed on the right of the alphabetic indexer bar.

    +

    Right

    +

    The pop-up window is displayed on the left of the alphabetic indexer bar.

    +
    -## Events - | Name | Description | -| -------- | -------- | -| onSelected(index: number) => void | Callback invoked when an item in the alphabetic indexer bar is selected. | -| onRequestPopupData(callback: (index: number) => Array<string>)8+ | Invoked when a request for displaying content in the index prompt window is sent when an item in the alphabetic indexer bar is selected.
    The return value is a string array corresponding to the indexes. The string array is displayed vertically in the pop-up window. It can display up to five strings at a time and allows scrolling. | -| onPopupSelected(callback: (index: number) => void)8+ | Invoked when an item in the index pop-up window is selected. | +## Events + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    onSelected(index: number) => void

    +

    Invoked when an item in the alphabetic indexer bar is selected.

    +

    onRequestPopupData(callback: (index: number) => Array<string>)8+

    +

    Invoked when a request for displaying content in the index prompt window is sent when an item in the alphabetic indexer bar is selected.

    +

    The return value is a string array corresponding to the indexes. The string array is displayed vertically in the pop-up window. It can display up to five strings at a time and allows scrolling.

    +

    onPopupSelected(callback: (index: number) => void)8+

    +

    Invoked when an item in the index prompt window is selected.

    +
    -## Example +## Example - ``` @Entry @Component -struct AlphabetIndexerSample { +struct AlphabetIndexerComponent { private value: string[] = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] build() { @@ -88,4 +260,5 @@ struct AlphabetIndexerSample { } ``` -![en-us_image_0000001212378392](figures/en-us_image_0000001212378392.gif) +![](figures/alphabetindexer.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-badge.md b/en/application-dev/reference/arkui-ts/ts-container-badge.md index 9ab237910a..ccb15c9539 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-badge.md +++ b/en/application-dev/reference/arkui-ts/ts-container-badge.md @@ -1,64 +1,233 @@ -# Badge +# Badge +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component presents event information on a component. +## Required Permissions -The **<Badge>** component presents event information on a component. +None +## Child Components -## Required Permissions +This component supports only one child component. -None +## APIs +Badge\(value: \{count: number, position?: BadgePosition, maxCount?: number, style?: BadgeStyle\}\) -## Child Components +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    count

    +

    number

    +

    Yes

    +

    -

    +

    Number of prompt messages.

    +

    position

    +

    BadgePosition

    +

    No

    +

    RightTop

    +

    Position to display the badge relative to the parent component.

    +

    maxCount

    +

    number

    +

    No

    +

    99

    +

    Maximum number of prompt messages. When the maximum number is reached, only maxCount+ is displayed.

    +

    style

    +

    BadgeStyle

    +

    No

    +

    -

    +

    Style of the <Badge> component, including the text color, text size, badge color, and badge size.

    +
    -This component supports only one child component. +Badge\(value: \{value: string, position?: BadgePosition, style?: BadgeStyle\}\) -## APIs +Creates a **** component based on the string. -Badge(value: {count: number, position?: BadgePosition, maxCount?: number, style?: BadgeStyle}) +- Parameters -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | count | number | Yes | - | Number of prompt messages. | - | position | BadgePosition | No | BadgePosition.RightTop | Position to display the badge relative to the parent component. | - | maxCount | number | No | 99 | Maximum number of prompt messages. When the maximum number is reached, only **maxCount+** is displayed. | - | style | BadgeStyle | No | - | Style of the **<Badge>** component, including the text color, text size, badge color, and badge size. | + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    value

    +

    string

    +

    Yes

    +

    -

    +

    String of the content to prompt.

    +

    position

    +

    BadgePosition

    +

    No

    +

    RightTop

    +

    Display position of the badge.

    +

    style

    +

    BadgeStyle

    +

    No

    +

    -

    +

    Style of the <Badge> component, including the text color, text size, badge color, and badge size.

    +
    -Badge(value: {value: string, position?: BadgePosition, style?: BadgeStyle}) -Creates a **<Badge>** component based on the string. +- BadgeStyle object -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | value | string | Yes | - | String of the content to prompt. | - | position | BadgePosition | No | BadgePosition.RightTop | Display position of the badge. | - | style | BadgeStyle | No | - | Style of the **<Badge>** component, including the text color, text size, badge color, and badge size. | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    color

    +

    Color

    +

    No

    +

    White

    +

    Text color.

    +

    fontSize

    +

    number | string

    +

    No

    +

    10

    +

    Text size.

    +

    badgeSize

    +

    number | string

    +

    Yes

    +

    -

    +

    Size of the badge.

    +

    badgeColor

    +

    Color

    +

    No

    +

    Red

    +

    Color of the badge.

    +
    -- BadgeStyle object - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | color | Color | No | Color.White | Text color. | - | fontSize | number \| string | No | 10 | Text size. | - | badgeSize | number \| string | Yes | - | Size of the badge. | - | badgeColor | Color | No | Color.Red | Color of the badge. | -- BadgePosition enums - | Name | Description | - | -------- | -------- | - | Right | The badge is vertically centered on the right of the parent component. | - | RightTop | The badge is displayed in the upper right corner of the parent component. | - | Left | The badge is vertically centered on the left of the parent component. | +- BadgePosition enums + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Right

    +

    The badge is vertically centered on the right of the parent component.

    +

    RightTop

    +

    The badge is displayed in the upper right corner of the parent component.

    +

    Left

    +

    The badge is vertically centered on the left of the parent component.

    +
    -## Example +## Example ``` @Entry @@ -104,4 +273,5 @@ struct BadgeExample { } ``` -![en-us_image_0000001212218470](figures/en-us_image_0000001212218470.gif) +![](figures/badge.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-column.md b/en/application-dev/reference/arkui-ts/ts-container-column.md index e0e60472e1..a1638e11f8 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-column.md +++ b/en/application-dev/reference/arkui-ts/ts-container-column.md @@ -1,11 +1,10 @@ # Column - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** +> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE** > This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -The **<Column>** component lays out child components vertically. +The **** component lays out child components vertically. ## Required Permissions @@ -15,7 +14,7 @@ None ## Child Components -This component can contain child components. +Supported ## APIs @@ -24,28 +23,28 @@ Column(value:{space?: Length}) - Parameters - | Name | Type | Mandatory | Default Value | Description | + | Name| Type| Mandatory| Default Value| Description| | -------- | -------- | -------- | -------- | -------- | - | space | Length | No | 0 | Space between any two adjacent child components in the vertical layout. | + | space | Length | No| 0 | Space between two adjacent child components in the vertical layout.| ## Attributes -| Name | Type | Default Value | Description | +| Name| Type| Default Value| Description| | -------- | -------- | -------- | -------- | -| alignItems | HorizontalAlign | HorizontalAlign.Center | Alignment mode of child components in the horizontal direction. | -| justifyContent8+ | [FlexAlign](ts-container-flex.md) | FlexAlign.Start | Alignment mode of child components in the vertical direction. | +| alignItems | HorizontalAlign | HorizontalAlign.Center | Alignment mode of the child components in the horizontal direction.| +| justifyContent8+ | [FlexAlign](ts-container-flex.md) | FlexAlign.Start | Alignment mode of the child components in the vertical direction.| - HorizontalAlign enums - | Name | Description | + | Name| Description| | -------- | -------- | - | Start | Aligned with the start edge in the same direction as the language in use. | - | Center | Center alignment. This is the default alignment mode. | - | End | Aligned with the end edge in the same direction as the language in use. | + | Start | Aligned with the start edge in the same direction as the language in use.| + | Center | Center aligned. This is the default alignment mode.| + | End | Aligned with the end edge in the same direction as the language in use.| -## Example +## Example ``` @Entry @@ -76,6 +75,7 @@ struct ColumnExample { Column().width('30%').height(30).backgroundColor(0xAFEEEE) Column().width('30%').height(30).backgroundColor(0x00FFFF) }.height('15%').border({ width: 1 }).justifyContent(FlexAlign.Center) + Text('justifyContent(End)').fontSize(9).fontColor(0xCCCCCC).width('90%') Column() { Column().width('30%').height(30).backgroundColor(0xAFEEEE) @@ -86,4 +86,4 @@ struct ColumnExample { } ``` -![](figures/column.png) +![zh-cn_image_0000001219982721](figures/Column.png) diff --git a/en/application-dev/reference/arkui-ts/ts-container-columnsplit.md b/en/application-dev/reference/arkui-ts/ts-container-columnsplit.md index 97e29299d7..362c327301 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-columnsplit.md +++ b/en/application-dev/reference/arkui-ts/ts-container-columnsplit.md @@ -1,41 +1,48 @@ -# ColumnSplit +# ColumnSplit +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** lays out child components vertically and inserts a horizontal divider between every two child components. - -The **<ColumnSplit>** lays out child components vertically and inserts a horizontal divider between every two child components. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components This component can contain child components. +## APIs -## APIs +ColumnSplit\(\) -ColumnSplit() +## Attributes + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    resizeable

    +

    boolean

    +

    Whether the divider can be dragged. The default value is false.

    +
    -## Attributes +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>Similar to ****, the divider of **** can be dragged to a position that just fully holds a component. - | Name | Type | Description | -| -------- | -------- | -------- | -| resizeable | boolean | Whether the divider can be dragged. The default value is **false**. | +## Example -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> Similar to **<RowSplit>**, the divider of **<ColumnSplit>** can be dragged to a position that just fully holds a component. - - -## Example - - ``` @Entry @Component @@ -57,4 +64,5 @@ struct ColumnSplitExample { } ``` -![en-us_image_0000001212378422](figures/en-us_image_0000001212378422.gif) +![](figures/columnsplit.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-counter.md b/en/application-dev/reference/arkui-ts/ts-container-counter.md index e9a959bdaf..5a4c49aa9a 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-counter.md +++ b/en/application-dev/reference/arkui-ts/ts-container-counter.md @@ -1,40 +1,47 @@ -# Counter +# Counter +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component provides an operation to increase or decrease the number. - -The **<Counter>** component provides an operation to increase or decrease the number. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components This component can contain child components. +## APIs -## APIs - -Counter() +Counter\(\) - -## Events +## Events Universal events and gestures are not supported. Only the events listed below are supported. - | Name | Description | -| -------- | -------- | -| onInc(event: () => void) | Event indicating that the number of monitored objects is increased. | -| onDec(event: () => void) | Event indicating that the number of monitored objects is decreased. | - - -## Example - + + + + + + + + + + + + +

    Name

    +

    Description

    +

    onInc(event: () => void)

    +

    Event indicating that the number of monitored objects is increased.

    +

    onDec(event: () => void)

    +

    Event indicating that the number of monitored objects is decreased.

    +
    + +## Example ``` @Entry @@ -58,4 +65,5 @@ struct CounterExample { } ``` -![en-us_image_0000001212378424](figures/en-us_image_0000001212378424.gif) +![](figures/counter.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-flex.md b/en/application-dev/reference/arkui-ts/ts-container-flex.md index f0392afc2f..e548366843 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-flex.md +++ b/en/application-dev/reference/arkui-ts/ts-container-flex.md @@ -1,66 +1,202 @@ -# Flex +# Flex +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component allows for an elastic layout. - -The **<Flex>** component allows for an elastic layout. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components This component can contain child components. - -## APIs - -Flex(options?: { direction?: FlexDirection, wrap?: FlexWrap, justifyContent?: FlexAlign, alignItems?: ItemAlign, alignContent?: FlexAlign }) - -Creates a standard **<Flex>** component. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | direction | FlexDirection | No | FlexDirection.Row | Direction in which child components are arranged in the **<Flex>** component, that is, the direction of the main axis. | - | wrap | FlexWrap | No | FlexWrap.NoWrap | Whether the **<Flex>** component has a single line or multiple lines. | - | justifyContent | FlexAlign | No | FlexAlign.Start | Alignment mode of the child components in the **<Flex>** component along the main axis. | - | alignItems | [ItemAlign](ts-appendix-enums.md#itemalign-enums) | No | ItemAlign.Stretch | Alignment mode of the child components in the **<Flex>** component along the cross axis. | - | alignContent | FlexAlign | No | FlexAlign.Start | Alignment mode of the child components in a multi-line **<Flex>** component along the cross axis. This parameter is valid only when **wrap** is set to **Wrap** or **WrapReverse**. | - -- FlexDirection enums - | Name | Description | - | -------- | -------- | - | Row | The child components are arranged in the same direction as the main axis runs along the rows. | - | RowReverse | The child components are arranged opposite to the **Row** direction. | - | Column | The child components are arranged in the same direction as the main axis runs down the columns. | - | ColumnReverse | The child components are arranged opposite to the **Column** direction. | - -- FlexWrap enums - | Name | Description | - | -------- | -------- | - | NoWrap | The child components in the **<Flex>** component are arranged in a single line, and they may overflow. | - | Wrap | The child components in the **<Flex>** component are arranged in multiple lines, and they may overflow. | - | WrapReverse | The child components in the **<Flex>** component are reversely arranged in multiple lines, and they may overflow. | - -- FlexAlign enums - | Name | Description | - | -------- | -------- | - | Start | The child components are aligned with the start edge of the main axis. The first component is aligned with the main-start, and subsequent components are aligned with the previous one. | - | Center | The child components are aligned in the center of the main axis. The space between the first component and the main-start is the same as that between the last component and the main-end. | - | End | The child components are aligned with the end edge of the main axis. The last component is aligned with the main-end, and other components are aligned with the next one. | - | SpaceBetween | The child components are evenly distributed along the main axis. The first component is aligned with the main-start, the last component is aligned with the main-end, and the remaining components are distributed so that the space between any two adjacent components is the same. | - | SpaceAround | The child components are evenly distributed along the main axis, with a half-size space on either end. The space between any two adjacent components is the same. The space between the first component and main-start, and that between the last component and cross-main are both half the size of the space between two adjacent components. | - | SpaceEvenly | The child components are equally distributed along the main axis. The space between the first component and main-start, the space between the last component and main-end, and the space between two adjacent components are the same. | - - -## Example - +## APIs + +Flex\(options?: \{ direction?: FlexDirection, wrap?: FlexWrap, justifyContent?: FlexAlign, alignItems?: ItemAlign, alignContent?: FlexAlign \}\) + +Creates a standard **** component. + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    direction

    +

    FlexDirection

    +

    No

    +

    Row

    +

    Direction in which child components are arranged in the <Flex> component, that is, the direction of the main axis.

    +

    wrap

    +

    FlexWrap

    +

    No

    +

    NoWrap

    +

    Whether the <Flex> component has a single line or multiple lines.

    +

    justifyContent

    +

    FlexAlign

    +

    No

    +

    Start

    +

    Alignment mode of the child components in the <Flex> component along the main axis.

    +

    alignItems

    +

    ItemAlign

    +

    No

    +

    Stretch

    +

    Alignment mode of the child components in the <Flex> component along the cross axis.

    +

    alignContent

    +

    FlexAlign

    +

    No

    +

    Start

    +

    Alignment mode of the child components in a multi-line <Flex> component along the cross axis. This parameter is valid only when wrap is set to Wrap or WrapReverse.

    +
    + +- FlexDirection enums + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Row

    +

    The child components are arranged in the same direction as the main axis runs along the rows.

    +

    RowReverse

    +

    The child components are arranged opposite to the Row direction.

    +

    Column

    +

    The child components are arranged in the same direction as the main axis runs down the columns.

    +

    ColumnReverse

    +

    The child components are arranged opposite to the Column direction.

    +
    + + +- FlexWrap enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    NoWrap

    +

    The child components in the <Flex> component are arranged in a single line, and they may overflow.

    +

    Wrap

    +

    The child components in the <Flex> component are arranged in multiple lines, and they may overflow.

    +

    WrapReverse

    +

    The child components in the <Flex> component are reversely arranged in multiple lines, and they may overflow.

    +
    + + +- FlexAlign enums + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Start

    +

    The child components are aligned with the start edge of the main axis. The first component is aligned with the main-start, and subsequent components are aligned with the previous one.

    +

    Center

    +

    The child components are aligned in the center of the main axis. The space between the first component and the main-start is the same as that between the last component and the main-end.

    +

    End

    +

    The child components are aligned with the end edge of the main axis. The last component is aligned with the main-end, and other components are aligned with the next one.

    +

    SpaceBetween

    +

    The child components are evenly distributed along the main axis. The first component is aligned with the main-start, the last component is aligned with the main-end, and the remaining components are distributed so that the space between any two adjacent components is the same.

    +

    SpaceAround

    +

    The child components are evenly distributed along the main axis, with a half-size space on either end. The space between any two adjacent components is the same. The space between the first component and main-start, and that between the last component and cross-main are both half the size of the space between two adjacent components.

    +

    SpaceEvenly

    +

    The child components are equally distributed along the main axis. The space between the first component and main-start, the space between the last component and main-end, and the space between two adjacent components are the same.

    +
    + + +## Example ``` // Example 01 @@ -123,8 +259,7 @@ struct FlexExample1 { } ``` -![en-us_image_0000001256978365](figures/en-us_image_0000001256978365.gif) - +![](figures/flex01.gif) ``` // Example 02 @@ -170,8 +305,7 @@ struct FlexExample2 { } ``` -![en-us_image_0000001211898500](figures/en-us_image_0000001211898500.png) - +![](figures/flex02.png) ``` // Example 03 @@ -220,8 +354,7 @@ struct FlexExample3 { } ``` -![en-us_image_0000001212218462](figures/en-us_image_0000001212218462.gif) - +![](figures/flex03.gif) ``` // Example 04 @@ -270,10 +403,9 @@ struct FlexExample4 { } ``` -![en-us_image_0000001257138371](figures/en-us_image_0000001257138371.jpg) - -![en-us_image_0000001212378426](figures/en-us_image_0000001212378426.gif) +![](figures/flex04.jpg) +![](figures/flex04-2.gif) ``` // Example 05 @@ -322,4 +454,5 @@ struct FlexExample5 { } ``` -![en-us_image_0000001256858413](figures/en-us_image_0000001256858413.gif) +![](figures/flex05.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-grid.md b/en/application-dev/reference/arkui-ts/ts-container-grid.md index 9dcde4d28f..6d142f9eec 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-grid.md +++ b/en/application-dev/reference/arkui-ts/ts-container-grid.md @@ -1,60 +1,92 @@ -# Grid +# Grid +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is a two-dimensional layout. The component is divided into rows and columns, to form cells. You can specify the cell where an item is located and combine different grids to form various layouts. - -The **<Grid>** component is a two-dimensional layout. The component is divided into rows and columns, to form cells. You can specify the cell where an item is located and combine different grids to form various layouts. - - -## Required Permissions +## Required Permissions None - -## Child Components - -This component contains the child component [](ts-container-griditem.md). - - -## APIs - -Grid() - - -## Attributes - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| columnsTemplate | string | '1fr' | Number of columns in the current grid layout. If this parameter is not set, one column is used by default. For example, '1fr 1fr 2fr' divides the component into three columns, with four equal parts. The first column occupies one part, the second column occupies one part, and the third column occupies two parts. | -| rowsTemplate | string | '1fr' | Number of rows in the current grid layout. If this parameter is not set, one row is used by default. For example, '1fr 1fr 2fr' divides the component into three rows. The width allowed by the parent component is divided into four equal parts. The first row occupies one part, the second row occupies one part, and the third row occupies two parts. | -| columnsGap | Length | 0 | Spacing between columns. | -| rowsGap | Length | 0 | Spacing between rows. | -| editMode8+ | boolean | false | Whether to enter editing mode. In editing mode, you can drag the **<[GridItem](ts-container-griditem.md)>** in the **<Gird>** component. | -| layoutDirection8+ | [LayoutDirection](ts-appendix-enums.md#layoutdirection-enums) | LayoutDirection.Row | Main axis direction of the layout. The options are as follows:- **LayoutDirection.Row**: Horizontal layout, where the child components are arranged in the same direction as the main axis runs along the rows.- **LayoutDirection.Column**: Vertical layout, where the child components are arranged in the same direction as the main axis runs down the columns. | -| maxCount8+ | number | 1 | Maximum number of rows that can be displayed. | -| minCount8+ | number | 1 | Minimum number of rows that can be displayed. | -| cellLength8+ | number | 0 | Fixed height per row. | -| multiSelectable8+ | boolean | false | Whether to enable mouse frame selection.
    - **false**: The mouse frame selection is disabled.
    - **true**: The mouse frame selection is disabled. | -| edgeEffection8+ | EdgeEffect | EdgeEffect.Spring | Edge effect. For details, see **EdgeEffect**. | - -- EdgeEffect enums - - | Name | Description | - | ------ | ------------------------------------------------------------ | - | Spring | Similar to the physical dynamic effect of a spring. After scrolling to the edge, you can continue to scroll for a distance based on the initial speed or by touching the knob of the scrollbar. After you release your hand, the knob is rebounded. | - | None | No effect after the scrollbar is moved to the edge. | - -## Events - - | Name | Description | -| -------- | -------- | -| onScrollIndex(first: number) => void | Triggered when the start item of the grid changes. | - - -## Example - +## Child Components + +This component contains the child component [](ts-container-griditem.md). + +## APIs + +Grid\(\) + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    columnsTemplate

    +

    string

    +

    '1fr'

    +

    Number of columns in the current grid layout. If this parameter is not set, one column is used by default. For example, '1fr 1fr 2fr' divides the component into three columns, with four equal parts. The first column occupies one part, the second column occupies one part, and the third column occupies two parts.

    +

    rowsTemplate

    +

    string

    +

    '1fr'

    +

    Number of rows in the current grid layout. If this parameter is not set, one row is used by default. For example, '1fr 1fr 2fr' divides the component into three rows. The width allowed by the parent component is divided into four equal parts. The first row occupies one part, the second row occupies one part, and the third row occupies two parts.

    +

    columnsGap

    +

    Length

    +

    0

    +

    Spacing between columns.

    +

    rowsGap

    +

    Length

    +

    0

    +

    Spacing between rows.

    +
    + +## Events + + + + + + + + + + +

    Name

    +

    Description

    +

    onScrollIndex(first: number) => void

    +

    Triggered when the start item of the grid changes.

    +
    + +## Example ``` @Entry @@ -115,5 +147,5 @@ struct GridExample { } ``` -![en-us_image_0000001212218434](figures/en-us_image_0000001212218434.gif) +![](figures/grid-3.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-container-gridcontainer.md b/en/application-dev/reference/arkui-ts/ts-container-gridcontainer.md index 5db6c9fc04..034b5719ea 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-gridcontainer.md +++ b/en/application-dev/reference/arkui-ts/ts-container-gridcontainer.md @@ -1,57 +1,131 @@ -# GridContainer +# GridContainer +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component lays out components vertically. It is used only in the grid layout. - -The **<GridContainer>** component lays out components vertically. It is used only in the grid layout. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components This component can contain child components. - -## APIs - -GridContainer(options?: { columns?: number | 'auto', sizeType?: SizeType, gutter?: Length, margin?: Length}) - -- Parameter - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | columns | number \| 'auto' | No | 'auto' | Total number of columns in the current layout. | - | sizeType | SizeType | No | SizeType.Auto | Device size type. | - | gutter | Length | No | - | Gutter of the grid layout. | - | margin | Length | No | - | Margin of the grid layout. | - -- SizeType enums - | Name | Description | - | -------- | -------- | - | XS | Device of the minimum size. | - | SM | Small-sized device. | - | MD | Medium-sized device. | - | LG | Large-sized device. | - | Auto | Auto. The size type is selected based on the device type. | - - -## Attributes - -Universal attributes and [attributes](ts-container-column.md#attributes) of the **<Column>** component are supported. - - -## Events +## APIs + +GridContainer\(options?: \{ columns?: number | 'auto', sizeType?: SizeType, gutter?: Length, margin?: Length\}\) + +- Parameter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    columns

    +

    number

    +

    No

    +

    'auto'

    +

    Total number of columns in the current layout.

    +

    sizeType

    +

    SizeType

    +

    No

    +

    Auto

    +

    Device size type.

    +

    gutter

    +

    Length

    +

    No

    +

    -

    +

    Gutter of the grid layout.

    +

    margin

    +

    Length

    +

    No

    +

    -

    +

    Margin of the grid layout.

    +
    + +- SizeType enums + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    XS

    +

    Device of the minimum size.

    +

    SM

    +

    Small-sized device.

    +

    MD

    +

    Medium-sized device.

    +

    LG

    +

    Large-sized device.

    +

    Auto

    +

    Auto. The size type is selected based on the device type.

    +
    + + +## Attributes + +Universal attributes and [attributes](ts-container-column.md#section358284262918) of the **** component are supported. + +## Events Universal events are supported. - -## Example - +## Example ``` @Entry @@ -122,4 +196,5 @@ struct GridContainerExample { } ``` -![en-us_image_0000001256858425](figures/en-us_image_0000001256858425.gif) +![](figures/grid.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-griditem.md b/en/application-dev/reference/arkui-ts/ts-container-griditem.md index e035bee25b..a839e1cb6b 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-griditem.md +++ b/en/application-dev/reference/arkui-ts/ts-container-griditem.md @@ -1,50 +1,85 @@ -# GridItem +# GridItem +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component provides a single item in a grid. - -The **<GridItem>** component provides a single item in a grid. - - -## Required Permissions +## Required Permissions None - -## Child Component +## Child Component This component can contain child components. +## APIs + +GridItem\(\) + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    rowStart

    +

    number

    +

    -

    +

    Start row number of the component.

    +

    rowEnd

    +

    number

    +

    -

    +

    End row number of the component.

    +

    columnStart

    +

    number

    +

    -

    +

    Start column number of the component.

    +

    columnEnd

    +

    number

    +

    -

    +

    End column number of the component.

    +

    forceRebuild

    +

    boolean

    +

    false

    +

    Whether to re-create this node when the component is being built.

    +
    + +## Example -## APIs - -GridItem() - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| rowStart | number | - | Start row number of the component. | -| rowEnd | number | - | End row number of the component. | -| columnStart | number | - | Start column number of the component. | -| columnEnd | number | - | End column number of the component. | -| forceRebuild | boolean | false | Whether to re-create this node when the component is being built. | -| selectable8+ | boolean | true | Whether the current **<GridItem>** is selectable by the mouse.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > This attribute takes effect only when mouse frame selection is enabled for the parent **<Grid>** container. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onSelect(callback: (isSelected: boolean) => any)8+ | Triggered when the selected state of the **<GridItem>** changes.
    **isSelected**: Returns **true** if the **<GridItem>** is selected by the mouse; returns **false** otherwise. | - - -## Example - - ``` @Entry @Component @@ -82,4 +117,5 @@ struct GridItemExample { } ``` -![en-us_image_0000001256858433](figures/en-us_image_0000001256858433.gif) +![](figures/griditem.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-list.md b/en/application-dev/reference/arkui-ts/ts-container-list.md index afd97f2548..fffebb7e50 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-list.md +++ b/en/application-dev/reference/arkui-ts/ts-container-list.md @@ -1,79 +1,263 @@ -# List +# List +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component provides a list container that presents a series of list items arranged in a column with the same width. It supports presentations of the same type of data in a multiple and coherent row style, for example, images or text. - -The **<List>** component provides a list container that presents a series of list items arranged in a column with the same width. It supports presentations of the same type of data in a multiple and coherent row style, for example, images or text. - - -## Required Permissions +## Required Permissions None +## Child Components -## Child Components +This component contains the child component [](ts-container-listitem.md). -This component contains the child component [](../reference/arkui-ts/ts-container-listitem.md). +## APIs +List\(value:\{space?: number, initialIndex?: number\}\) -## APIs +- Parameters -List(value:{space?: number, initialIndex?: number}) + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    space

    +

    number

    +

    No

    +

    0

    +

    Spacing between list items.

    +

    initialIndex

    +

    number

    +

    No

    +

    0

    +

    Item displayed at the beginning of the component when the current list is loaded for the first time, that is, the first item to be displayed. If the configured sequence number is greater than the sequence number of the last item, the setting does not take effect.

    +
    -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | space | number | No | 0 | Spacing between list items. | - | initialIndex | number | No | 0 | Item displayed at the beginning of the component when the current list is loaded for the first time, that is, the first item to be displayed. If the configured sequence number is greater than the sequence number of the last item, the setting does not take effect. | +## Attributes -## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    listDirection

    +

    Axis

    +

    Vertical

    +

    Direction in which the list items are arranged. For details, see Axis enums.

    +

    divider

    +

    {

    +

    strokeWidth: Length,

    +

    color?:Color,

    +

    startMargin?: Length,

    +

    endMargin?: Length

    +

    }

    +

    -

    +

    Style of the divider for the list items. By default, there is no divider.

    +

    strokeWidth: stroke width of the divider.

    +

    color: color of the divider.

    +

    startMargin: distance between the divider and the start of the list.

    +

    endMargin: distance between the divider and the end of the list.

    +

    editMode

    +

    boolean

    +

    false

    +

    Whether the <List> component is in editable mode.

    +

    edgeEffect

    +

    EdgeEffect

    +

    Spring

    +

    Sliding effect. For details, see EdgeEffect enums.

    +

    chainAnimation

    +

    boolean

    +

    false

    +

    Whether to display chained animations on this list when it slides or its top and bottom are dragged. The list items are separated with even space, and one item animation starts after the previous animation during basic sliding interactions. The chained animation effect is similar with spring physics.

    +
    • false: No chained animations are displayed.
    • true: Chained animations are displayed.
    +
    -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| listDirection | [Axis](ts-appendix-enums.md#axis-enums) | Vertical | Direction in which the list items are arranged. For details, see **Axis** enums. | -| divider | {
    strokeWidth: Length,
    color?:Color,
    startMargin?: Length,
    endMargin?: Length
    } | - | Style of the divider for the list items. By default, there is no divider.
    **strokeWidth**: stroke width of the divider.
    **color**: color of the divider.
    **startMargin**: distance between the divider and the start of the list.
    **endMargin**: distance between the divider and the end of the list. | -| editMode | boolean | false | Whether the **<List>** component is in editable mode. | -| edgeEffect | EdgeEffect | EdgeEffect.Spring | Sliding effect. For details, see EdgeEffect enums. | -| chainAnimation | boolean | false | Whether to display chained animations on this list when it slides or its top and bottom are dragged. The list items are separated with even space, and one item animation starts after the previous animation during basic sliding interactions. The chained animation effect is similar with spring physics.
    - **false**: No chained animations are displayed.
    - **true**: Chained animations are displayed. | -| multiSelectable8+ | boolean | false | Whether to enable mouse frame selection.
    - **false**: The mouse frame selection is disabled.
    - **true**: The mouse frame selection is disabled. | -| restoreId8+ | number | - | Migration ID of the component. During application migration, the status of the component is migrated to the component with the same migration ID on the peer end.
    For a **<List>** component, the status includes the item serial number displayed at the start position. | +- EdgeEffect enums -- EdgeEffect enums - | Name | Description | - | -------- | -------- | - | Spring | Similar to the physical dynamic effect of a spring. After scrolling to the edge, you can continue to scroll for a distance based on the initial speed or by touching the knob of the scrollbar. After you release your hand, the knob is rebounded. | - | None | No effect after the scroll bar is moved to the edge. | + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Spring

    +

    Similar to the physical dynamic effect of a spring. After scrolling to the edge, you can continue to scroll for a distance based on the initial speed or by touching the knob of the scrollbar. After you release your hand, the knob is rebounded.

    +

    None

    +

    No effect after the scroll bar is moved to the edge.

    +
    -## Events +## Events - | Name | Description | -| -------- | -------- | -| onItemDelete(index: number) => boolean | Triggered when a list item is deleted. | -| onScrollIndex(firstIndex: number, lastIndex: number) => void | Triggered when the start position and end position of the current list are changed. | + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    onItemDelete(index: number) => boolean

    +

    Triggered when a list item is deleted.

    +

    onScrollIndex(firstIndex: number, lastIndex: number) => void

    +

    Triggered when the start position and end position of the current list are changed.

    +

    onItemDragEnter(callback: (event: ItemDragInfo) => void)

    +

    Triggered when the list item that is bound to the drag event enters a valid drop target.

    +
    • itemIndex: original index of the list item that is being dragged.
    • insertIndex: index of the list item after it is dragged and inserted into the list.
    +
    NOTE:

    This event is valid only when the onDrop event is listened to.

    +
    +

    onItemDragMove(callback: (event: ItemDragInfo, itemIndex: number, insertIndex: number) => void)

    +

    +

    Triggered when the list item that is bound to the drag event enters a valid drop target.

    +
    • itemIndex: original index of the list item that is being dragged.
    • insertIndex: index of the list item after it is dragged and inserted into the list.
    +
    NOTE:

    This event is valid only when the onDrop event is listened to.

    +
    +

    onItemDragLeave(callback: (event: ItemDragInfo, itemIndex: number) => void)

    +

    +

    Triggered when the list item that is bound to the drag event leaves a valid drop target.

    +
    • itemIndex: original index of the list item that is being dragged.
    +
    NOTE:

    This event is valid only when the onDrop event is listened to.

    +
    +

    onItemDragStart(callback: (event: ItemDragInfo, itemIndex: number) => CustomBuilder)

    +

    +

    Triggered when the list item that is bound to the drag event is dragged for the first time.

    +
    • itemIndex: original index of the list item that is being dragged.
    • Return value: floating UI layout of the list item that is being dragged.
    +
    NOTE:

    This event is valid only when the onDrop event is listened to.

    +
    +

    onItemDrop(callback: (event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => void)

    +

    +

    Triggered when the list item that is bound to the drag event is dropped on a valid drop target.

    +
    • itemIndex: original index of the list item that is being dragged.
    • insertIndex: index of the list item after it is dragged and inserted into the list.
    • isSuccess: whether the insertion is successful after the list item is dropped.
    +
    NOTE:

    This event is valid only when the onDrop event is listened to.

    +
    +
    -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> To enable the editable mode for a list, the following conditions must be met: -> -> - **editMode** is set to **true**. -> -> - The list is bound to the **onItemDelete** event and the event returns **true** during event callback. -> -> - The **editable** attribute of **ListItem** is set to **true**. -> -> To enable dragging for a list item, the following conditions must be met: -> -> - **editMode** is set to **true**. -> -> - The list item is bound to the **onDragStart** event and the event returns a floating UI during event callback. +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>To enable the editable mode for a list, the following conditions must be met: +>- **editMode** is set to **true**. +>- The list is bound to the **onItemDelete** event and the event returns **true** during event callback. +>- The **editable** attribute of **ListItem** is set to **true**. +>To enable for a list item, the following conditions must be met: +>- **editMode** is set to **true**. +>- The list item is bound to the **onItemDragStart** event and the event returns a floating UI during event callback. +- ItemDragInfo attributes -## Example + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    x

    +

    number

    +

    X-coordinate of the item that is being dragged.

    +

    y

    +

    number

    +

    Y-coordinate of the item that is being dragged.

    +
    +## Example + ``` @Entry @Component @@ -93,7 +277,7 @@ struct ListExample { }.editable(true) }, item => item) } - .listDirection(Axis.Vertical) // Arrangement direction + .listDirection(Axis.Vertical) //Arrangement direction .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // Divider line .edgeEffect(EdgeEffect.None) // No effect when sliding to the edge .chainAnimation(false) // Chained animations are disabled. @@ -120,4 +304,123 @@ struct ListExample { } ``` -![en-us_image_0000001256978357](figures/en-us_image_0000001256978357.gif) +![](figures/list.gif) + +``` +@Entry +@Component +struct DragListExample { + @State number1: string[] = ['0', '1', '2'] + @State number2: string[] = ['one', 'two', 'three'] + @State text: string = '' + @State bool1: boolean = false + @State bool2: boolean = false + + @Builder pixelMapBuilder() { + Text('-1') + .width('100%').height(100).fontSize(16) + .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF) + } + + build() { + Column() { + List() { + ForEach(this.number1, (item) => { + ListItem() { + Text('' + item) + .width('100%').height(100).fontSize(16) + .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xF666FF) + } + }, item => item) + } + .editMode(true) + .width('90%').divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) + .onItemDelete((index: number) => { + console.info(this.Number1[index] + 'Delete') + this.Number1.splice(index, 1) + console.info(JSON.stringify(this.Number1)) + return true + }) + .onItemDragStart((event: ItemDragInfo, itemIndex: number) => { + this.bool1 = true + this.text = this.number1[itemIndex] + console.log("List1 onItemDragStart, itemIndex:" + itemIndex + ", ItemDragInfo:"+`${JSON.stringify(event)}`) + return this.pixelMapBuilder + }) + .onItemDragEnter((event: ItemDragInfo) => { + console.log("List1 onItemDragEnter") + }) + .onItemDragMove((event: ItemDragInfo, itemIndex: number, insertIndex: number) => { + console.log("List1 onItemDragMove, itemIndex:" + itemIndex + ", insertIndex:" + insertIndex) + }) + .onItemDragLeave((event: ItemDragInfo, itemIndex: number) => { + console.log("List1 onItemDragLeave, itemIndex:" + itemIndex) + }) + .onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => { + if (isSuccess) { + if (this.bool2) { + this.number2.splice(itemIndex, 1) + this.number1.splice(insertIndex, 0, this.text) + this.bool1 = false + this.bool2 = false + } else if (this.bool1) { + this.number1.splice(itemIndex, 1) + this.number1.splice(insertIndex, 0, this.text) + this.bool1 = false + this.bool2 = false + } + } + console.log("List1 onItemDrop, itemIndex:" + itemIndex + ", insertIndex:" + insertIndex + ", isSuccess:" + isSuccess) + }) + Divider().strokeWidth(5).color(0x2788D9).lineCap(LineCapStyle.Round).margin(20) + List() { + ForEach(this.Number2, (item) => { + ListItem() { + Text('' + item) + .width('100%').height(100).fontSize(16) + .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFF888) + } + }, item => item) + } + .edgeEffect(EdgeEffect.None) + .width('90%') + .editMode(true) + .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) + .onItemDragStart((event: ItemDragInfo, itemIndex: number) => { + this.bool2 = true + this.text = this.number2[itemIndex] + console.log("List2 onItemDragStart, itemIndex:" + itemIndex) + return this.pixelMapBuilder + }) + .onItemDragEnter((event: ItemDragInfo) => { + console.log("List2 onItemDragEnter") + }) + .onItemDragMove((event: ItemDragInfo, itemIndex: number, insertIndex: number) => { + console.log("List2 onItemDragMove, itemIndex:" + itemIndex + ", insertIndex:" + insertIndex) + }) + .onItemDragLeave((event: ItemDragInfo, itemIndex: number) => { + console.log("List2 onItemDragLeave, itemIndex:" + itemIndex) + }) + .onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => { + if (isSuccess) { + if (this.bool1) { + this.number1.splice(itemIndex, 1) + this.number2.splice(insertIndex, 0, this.text) + this.bool1 = false + this.bool2 = false + } else if (this.bool2) { + this.number2.splice(itemIndex, 1) + this.number2.splice(insertIndex, 0, this.text) + this.bool1 = false + this.bool2 = false + } + } + console.log("List2 onItemDrop, itemIndex:" + itemIndex + ", insertIndex:" + insertIndex + ", isSuccess:" + isSuccess) + }) + }.width('100%').height('100%').backgroundColor(0xE600000).padding({ top: 25 }) + } +} +``` + +![](figures/gif-4.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-listitem.md b/en/application-dev/reference/arkui-ts/ts-container-listitem.md index 0d25e6da92..e96b60c18f 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-listitem.md +++ b/en/application-dev/reference/arkui-ts/ts-container-listitem.md @@ -1,52 +1,80 @@ -# ListItem +# ListItem +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component displays specific items in the list. Its width occupies the **** component by default and must be used together with ****. - -The **<ListItem>** component displays specific items in the list. Its width occupies the **<List>** component by default and must be used together with **<List>**. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components This component can contain a single child component. - -## APIs - -ListItem() - - -## Attributes - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| sticky | Sticky | Sticky.None | Sticky effect of the list item. For details, see Sticky enums. | -| editable | boolean | false | Whether the list item is editable. A list item can be deleted in editing mode. | -| selectable8+ | boolean | true | Whether the current **<ListItem>** is selectable by the mouse.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > This attribute takes effect only when mouse frame selection is enabled for the parent **<List>** container. | - -- Sticky enums - | Name | Description | - | -------- | -------- | - | None | No sticky. | - | Normal | The list item is sticky. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onSelect(callback: (isSelected: boolean) => any)8+ | Triggered when the selected state of the **<ListItem>** changes.
    **isSelected**: Returns **true** if the **<ListItem>** is selected by the mouse; returns **false** otherwise. | - - -## Example - +## APIs + +ListItem\(\) + +## Attributes + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    sticky

    +

    Sticky

    +

    None

    +

    Sticky effect of the list item. For details, see Sticky enums.

    +

    editable

    +

    boolean

    +

    false

    +

    Whether the list item is editable. A list item can be deleted in editing mode.

    +
    + +- Sticky enums + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    None

    +

    No sticky.

    +

    Normal

    +

    The list item is sticky and disappears when you slide it.

    +
    + + +## Example ``` @Entry @@ -87,4 +115,5 @@ struct ListItemExample { } ``` -![en-us_image_0000001257138339](figures/en-us_image_0000001257138339.gif) +![](figures/listitem.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-navigation.md b/en/application-dev/reference/arkui-ts/ts-container-navigation.md new file mode 100644 index 0000000000..d0b68b8fbf --- /dev/null +++ b/en/application-dev/reference/arkui-ts/ts-container-navigation.md @@ -0,0 +1,418 @@ +# Navigation + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. + +The **** component typically functions as the root container of a page and displays the page title, toolbar, and menu through attribute settings. + +## Required Permissions + +None + +## Child Components + +This component can contain child components. + +## APIs + +Navigation\(\) + +Creates a component that can automatically display the navigation bar, title, and toolbar based on the attribute settings. + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    title

    +

    string | CustomBuilder

    +

    -

    +

    No title

    +

    subtitle

    +

    string

    +

    -

    +

    Subtitle of the page.

    +

    menus

    +

    Array<NavigationMenuItem> | CustomBuilder

    +

    -

    +

    Menu in the upper right corner of the page.

    +

    +

    titleMode

    +

    NavigationTitleMode

    +

    NavigationTitleMode.Free

    +

    Display mode of the page title bar.

    +

    toolBar

    +

    {

    +

    items:[

    +

    Object

    +

    ] }

    +

    | CustomBuilder

    +

    +

    -

    +

    Content of the toolbar.

    +

    items: all items on the toolbar.

    +

    hideToolBar

    +

    boolean

    +

    false

    +

    Whether the toolbar is shown or hidden.

    +

    true: The toolbar is hidden.

    +

    false: The toolbar is shown.

    +

    hideTitleBar

    +

    boolean

    +

    false

    +

    Whether the title bar is hidden.

    +

    hideBackButton

    +

    boolean

    +

    false

    +

    Whether the back key is hidden.

    +
    + +- NavigationMenuItem parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    value

    +

    string

    +

    Yes

    +

    -

    +

    Text of a single option on the menu bar.

    +

    icon

    +

    string

    +

    No

    +

    -

    +

    Icon path of a single option on the menu bar.

    +

    action

    +

    () => void

    +

    No

    +

    -

    +

    Callback invoked when the option is selected.

    +
    + + +- Object attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    value

    +

    string

    +

    Yes

    +

    -

    +

    Text of a single option on the toolbar.

    +

    icon

    +

    string

    +

    No

    +

    -

    +

    Icon path of a single option on the toolbar.

    +

    action

    +

    () => void

    +

    No

    +

    -

    +

    Callback invoked when the option is selected.

    +
    + +- NavigationTitleMode enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Free

    +

    When the content is a scrollable component, the title shrinks as the content scrolls up (the subtitle fades out with its size remaining unchanged) and restores to the original one as the content scrolls down.

    +

    Mini

    +

    The mode is fixed at subtitle mode (icon + main title and subtitle).

    +

    Full

    +

    The mode is fixed at main title mode (main title and subtitle).

    +
    + + >![](../../public_sys-resources/icon-note.gif) **NOTE:** + >Currently, only the scrollable component **** is supported. + + +## Events + + + + + + + + + + +

    Name

    +

    Description

    +

    onTitleModeChanged(callback: (titleMode: NavigationTitleMode) => void)

    +

    Triggered when titleMode is set to NavigationTitleMode.Free and the title bar mode changes as content scrolls.

    +
    + +## Example + +``` +/ Example 01 +@Entry +@Component +struct NavigationExample { + private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + @State hideBar: boolean = true + + @Builder NavigationTitle() { + Column() { + Text('title') + .width(80) + .height(60) + .fontColor(Color.Blue) + .fontSize(30) + } + .onClick(() => { + console.log("title") + }) + } + + @Builder NavigationMenus() { + Row() { + Image('images/add.png') + .width(25) + .height(25) + Image('comment/more.png') + .width(25) + .height(25) + .margin({ left: 30 }) + }.width(100) + } + + build() { + Column() { + Navigation() { + Search({ value: '', placeholder: "" }).width('85%').margin(26) + List({ space: 5, initialIndex: 0 }) { + ForEach(this.arr, (item) => { + ListItem() { + Text('' + item) + .width('90%') + .height(80) + .backgroundColor('#3366CC') + .borderRadius(15) + .fontSize(16) + .textAlign(TextAlign.Center) + }.editable(true) + }, item => item) + } + .listDirection(Axis.Vertical) + .height(300) + .margin({ top: 10, left: 18 }) + .width('100%') + + Button(this.hideBar ? "tool bar" : "hide bar") + .onClick(() => { + this.hideBar = !this.hideBar + }) + .margin({ left: 135, top: 60 }) + } + .title(this.NavigationTitle) + .subTitle('subtitle') + .menus(this.NavigationMenus) + .titleMode(NavigationTitleMode.Free) + .hideTitleBar(false) + .hideBackButton(false) + .onTitleModeChanged((titleModel: NavigationTitleMode) => { + console.log('titleMode') + }) + .toolBar({ items: [ + { value: 'app', icon: 'images/grid.svg', action: () => { + console.log("app") + } }, + { value: 'add', icon: 'images/add.svg', action: () => { + console.log("add") + } }, + { value: 'collect', icon: 'images/collect.svg', action: () => { + console.log("collect") + } }] }) + .hideToolBar(this.hideBar) + } + } +} +``` + +![](figures/66666.gif) + +``` +// Example 02 +@Entry +@Component +struct ToolbarBuilderExample { + @State currentIndex: number = 0 + @State Build: Array = [ + { + icon: $r('app.media.ic_public_add'), + icon_after: $r('app.media.ic_public_addcolor'), + text: 'add', + num: 0 + }, + { + icon: $r('app.media.ic_public_app'), + icon_after: $r('app.media.ic_public_appcolor'), + text: 'app', + num: 1 + }, + { + icon: $r('app.media.ic_public_collect'), + icon_after: $r('app.media.ic_public_collectcolor'), + text: 'collect', + num: 2 + } + ] + + @Builder NavigationToolbar() { + Row() { + ForEach(this.Build, item => { + Column() { + Image(this.currentIndex == item.num ? item.icon_after : item.icon) + .width(25) + .height(25) + Text(item.text) + .fontColor(this.currentIndex == item.num ? "#ff7500" : "#000000") + } + .onClick(() => { + this.currentIndex = item.num + }) + .margin({ left: 70 }) + }) + } + } + + build() { + Column() { + Navigation() { + Flex() { + } + } + .toolBar(this.NavigationToolbar) + } + } +} +``` + +![](figures/duande.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-navigator.md b/en/application-dev/reference/arkui-ts/ts-container-navigator.md index ef7f0b3310..a07cec59e7 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-navigator.md +++ b/en/application-dev/reference/arkui-ts/ts-container-navigator.md @@ -1,54 +1,128 @@ -# Navigator +# Navigator +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component provides redirection. - -The **<Navigator>** component provides redirection. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components This component can contain child components. +## APIs -## APIs - -Navigator(value?: {target: string, type?: NavigationType}) +Navigator\(value?: \{target: string, type?: NavigationType\}\) Creates a navigator. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | target | string | Yes | - | Path of the target page to be redirected to. | - | type | NavigationType | No | NavigationType.Push | Navigation type. | - -- NavigationType enums - | Name | Description | - | -------- | -------- | - | Push | Navigates to a specified page in the application. | - | Replace | Replaces the current page with another one in the application and destroys the current page. | - | Back | Returns to the previous page or a specified page. | +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    target

    +

    string

    +

    Yes

    +

    -

    +

    Path of the target page to be redirected to.

    +

    type

    +

    NavigationType

    +

    No

    +

    Push

    +

    Navigation type.

    +
    + +- NavigationType enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Push

    +

    Navigates to a specified page in the application.

    +

    Replace

    +

    Replaces the current page with another one in the application and destroys the current page.

    +

    Back

    +

    Returns to the previous page or a specified page.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Parameters

    +

    Default Value

    +

    Description

    +

    active

    +

    boolean

    +

    -

    +

    Whether the <Navigator> component is activated. If the component is activated, the corresponding navigation takes effect.

    +

    params

    +

    Object

    +

    undefined

    +

    Data that needs to be passed to the target page during redirection. You can use router.getParams() to obtain the data on the target page.

    +
    + +## Example - -## Attributes - - | Name | Parameters | Default Value | Description | -| -------- | -------- | -------- | -------- | -| active | boolean | - | Whether the **<Navigator>** component is activated. If the component is activated, the corresponding navigation takes effect. | -| params | Object | undefined | Data that needs to be passed to the target page during redirection. You can use **router.getParams()** to obtain the data on the target page. | - - -## Example - - ``` // Navigator Page @Entry @@ -74,7 +148,6 @@ struct NavigatorExample { } ``` - ``` // Detail Page import router from '@system.router' @@ -98,7 +171,6 @@ struct DetailExample { ``` - ``` // Back Page @Entry @@ -114,4 +186,5 @@ struct BackExample { } ``` -![en-us_image_0000001212058486](figures/en-us_image_0000001212058486.gif) +![](figures/navigator.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-panel.md b/en/application-dev/reference/arkui-ts/ts-container-panel.md index 85416243d1..5c32f0a4cb 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-panel.md +++ b/en/application-dev/reference/arkui-ts/ts-container-panel.md @@ -1,68 +1,196 @@ -# Panel +# Panel +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is a slidable panel that presents lightweight content with flexible sizes. It is a pop-up component. - -The **<Panel>** component is a slidable panel that presents lightweight content with flexible sizes. It is a pop-up component. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components This component can contain child components. - -## APIs - -Panel(value:{show:boolean}) - -- Parameter - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | show | boolean | Yes | - | Whether the panel is shown or hidden. | - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| type | PanelType | PanelType.Foldable | Type of the panel. | -| mode | PanelMode | - | Initial status of the panel. | -| dragBar | boolean | true | Whether to enable a drag bar. The value **true** means that the drag bar will be displayed, and **false** means the opposite. | -| fullHeight | Length | - | Panel height in the **PanelMode.Full** mode. | -| halfHeight | Length | - | Panel height in the **PanelMode.Half** mode. The default value is half of the screen height. | -| miniHeight | Length | - | Panel height in the **PanelMode.Mini** mode. | - -- PanelType enums - | Name | Description | - | -------- | -------- | - | Minibar | A minibar panel displays content in the minibar area or a large (fullscreen-like) area. | - | Foldable | A foldable panel displays permanent content in a large (fullscreen-like), medium-sized (halfscreen-like), or small area. | - | Temporary | A temporary panel displays content in a large (fullscreen-like) or medium-sized (halfscreen-like) area. | - -- PanelMode enums - | Name | Description | - | -------- | -------- | - | Mini | Displays a **minibar** or **foldable** panel in its minimum size. This attribute does not take effect for **temporary** panels. | - | Half | Displays a **foldable** or **temporary** panel in a medium-sized (halfscreen-like) area. This attribute does not take effect for **minibar** panels. | - | Full | Displays a panel in a large (fullscreen-like) area. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onChange(callback: (width: number, height: number, mode: PanelMode) => void) | Triggered when the status of the panel changes. The returned height value is the height of the content area. When the value of **dragbar** is **true**, the height of the panel is the dragbar height plus the height of the content area. | - - -## Example - +## APIs + +Panel\(value:\{show:boolean\}\) + +- Parameter + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    show

    +

    boolean

    +

    Yes

    +

    -

    +

    Whether the panel is shown or hidden.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    type

    +

    PanelType

    +

    Foldable

    +

    Type of the panel.

    +

    mode

    +

    PanelMode

    +

    -

    +

    Initial status of the panel.

    +

    dragBar

    +

    boolean

    +

    true

    +

    Whether to enable a drag bar. The value true means that the drag bar will be displayed, and false means the opposite.

    +

    fullHeight

    +

    Length

    +

    -

    +

    Panel height in the PanelMode.Full mode.

    +

    halfHeight

    +

    Length

    +

    -

    +

    Panel height in the PanelMode.Half mode. The default value is half of the screen height.

    +

    miniHeight

    +

    Length

    +

    -

    +

    Panel height in the PanelMode.Mini mode.

    +
    + +- PanelType enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Minibar

    +

    A minibar panel displays content in the minibar area or a large (fullscreen-like) area.

    +

    Foldable

    +

    A foldable panel displays permanent content in a large (fullscreen-like), medium-sized (halfscreen-like), or small area.

    +

    Temporary

    +

    A temporary panel displays content in a large (fullscreen-like) or medium-sized (halfscreen-like) area.

    +
    + + +- PanelMode enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Mini

    +

    Displays a minibar or foldable panel in its minimum size. This attribute does not take effect for temporary panels.

    +

    Half

    +

    Displays a foldable or temporary panel in a medium-sized (halfscreen-like) area. This attribute does not take effect for minibar panels.

    +

    Full

    +

    Displays a panel in a large (fullscreen-like) area.

    +
    + + +## Events + + + + + + + + + + +

    Name

    +

    Description

    +

    onChange(callback: (width: number, height: number, mode: PanelMode) => void)

    +

    Triggered when the status of the panel changes. The returned height value is the height of the content area. When the value of dragbar is true, the height of the panel is the dragbar height plus the height of the content area.

    +
    + +## Example ``` @Entry @@ -96,4 +224,5 @@ struct PanelExample { } ``` -![en-us_image_0000001256978381](figures/en-us_image_0000001256978381.gif) +![](figures/panel.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-rowsplit.md b/en/application-dev/reference/arkui-ts/ts-container-rowsplit.md index 1b034f866a..cae73207d9 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-rowsplit.md +++ b/en/application-dev/reference/arkui-ts/ts-container-rowsplit.md @@ -1,41 +1,48 @@ -# RowSplit +# RowSplit +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** lays out child components horizontally and inserts a vertical divider between every two child components. - -The **<RowSplit>** lays out child components horizontally and inserts a vertical divider between every two child components. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components This component can contain child components. +## APIs -## APIs +RowSplit\(\) -RowSplit() +## Attributes + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    resizeable

    +

    boolean

    +

    Whether the divider can be dragged. The default value is false.

    +
    -## Attributes +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>Similar to ****, the divider of **** can be dragged to a position that just fully holds a component. - | Name | Type | Description | -| -------- | -------- | -------- | -| resizeable | boolean | Whether the divider can be dragged. The default value is **false**. | +## Example -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> Similar to **<RowSplit>**, the divider of **<RowSplit>** can be dragged to a position that just fully holds a component. - - -## Example - - ``` @Entry @Component @@ -57,4 +64,5 @@ struct RowSplitExample { } ``` -![en-us_image_0000001212058482](figures/en-us_image_0000001212058482.gif) +![](figures/rowsplit.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-scroll.md b/en/application-dev/reference/arkui-ts/ts-container-scroll.md index 47880bae24..a52e655865 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-scroll.md +++ b/en/application-dev/reference/arkui-ts/ts-container-scroll.md @@ -1,143 +1,341 @@ -# Scroll +# Scroll +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component scrolls the content when the layout size of a component exceeds the viewport of its parent component. - -The **<Scroll>** component scrolls the content when the layout size of a component exceeds the viewport of its parent component. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components This component supports only one child component. - -## APIs - -Scroll(scroller?: Scroller) - - -## Attributes - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| scrollable | ScrollDirection | ScrollDirection.Vertical | Scroll method. | -| scrollBar | [BarState](ts-appendix-enums.md#barstate-enums) | Auto | Scroll bar status. | -| scrollBarColor | Color | - | Color of the scroll bar. | -| scrollBarWidth | Length | - | Width of the scrollbar. | - -- ScrollDirection - | Name | Description | - | -------- | -------- | - | Horizontal | Only horizontal scrolling is supported. | - | Vertical | Only vertical scrolling is supported. | - | None | Scrolling is disabled. | - - -## Scroller - -Controller of the scrollable container component. You can bind this component to the container component and use it to control the scrolling of the container component. Currently, this component can be bound to the **<List>** and **<Scroll>** components. - - -### Objects to Import - +## APIs + +Scroll\(scroller?: Scroller\) + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    scrollable

    +

    ScrollDirection

    +

    Vertical

    +

    Scroll method.

    +

    scrollBar

    +

    BarState

    +

    Auto

    +

    Scroll bar status.

    +

    scrollBarColor

    +

    Color

    +

    -

    +

    Color of the scroll bar.

    +

    scrollBarWidth

    +

    Length

    +

    -

    +

    Width of the scrollbar.

    +
    + +- ScrollDirection + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Horizontal

    +

    Only horizontal scrolling is supported.

    +

    Vertical

    +

    Only vertical scrolling is supported.

    +

    None

    +

    Scrolling is disabled.

    +
    + + +## Scroller + +Controller of the scrollable container component. You can bind this component to the container component and use it to control the scrolling of the container component. Currently, this component can be bound to the **** and **** components. + +### Creating an Object ``` scroller: Scroller = new Scroller() ``` +### scroller.scrollTo -### scroller.scrollTo - -scrollTo(value: { xOffset: number | string, yOffset: number | string, animation?: { duration: number, curve: Curve } }): void - +scrollTo\(value: \{ xOffset: number | string, yOffset: number | string, animation?: \{ duration: number, curve: Curve \} \}\): void Scrolls to the specified position. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | xOffset | Length | Yes | - | Horizontal scrolling offset. | - | yOffset | Length | Yes | - | Vertical scrolling offset. | - | animation | {
    duration: number,
    curve: Curve \|
    CubicBezier \|
    SpringCurve
    } | No | | Animation configuration, which includes the following:
    - **duration**: scrolling duration.
    - **curve**: scrolling curve. | - - -### scroller.scrollEdge - -scrollEdge(value: Edge): void - +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    xOffset

    +

    Length

    +

    Yes

    +

    -

    +

    Horizontal scrolling offset.

    +

    yOffset

    +

    Length

    +

    Yes

    +

    -

    +

    Vertical scrolling offset.

    +

    animation

    +

    {

    +

    duration: number,

    +

    curve: Curve | CubicBezier | SpringCurve

    +

    }

    +

    No

    +

    -

    +

    Animation configuration, which includes the following:

    +
    • duration: scrolling duration.
    • curve: scrolling curve.
    +
    + + +### scroller.scrollEdge + +scrollEdge\(value: Edge\): void Scrolls to the edge of the container. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | value | Edge | Yes | - | Edge position to scroll to. | - - -### scroller.scrollPage - -scrollPage(value: { next: boolean, direction?: Axis }): void +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    value

    +

    Edge

    +

    Yes

    +

    -

    +

    Edge position to scroll to.

    +
    + + +### scroller.scrollPage + +scrollPage\(value: \{ next: boolean \}\): void Scrolls to the next or previous page. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | next | boolean | Yes | - | Whether to turn to the next page. The value **true** means to scroll to the next page, and the value **false** means to scroll to the previous page. | - - -### scroller.currentOffset - -scroller.currentOffset(): Object - +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    next

    +

    boolean

    +

    Yes

    +

    -

    +

    Whether to turn to the next page. The value true means to turn to the next page, and the value false means to turn to the previous page.

    +
    + + +### scroller.currentOffset + +scroller.currentOffset\(\): Object Obtains the scrolling offset. +- Return values -- Return values - | Type | Description | - | -------- | -------- | - | {
    xOffset: number,
    yOffset: number
    } | **xOffset**: horizontal scrolling offset.
    **yOffset**: vertical scrolling offset. | - + + + + + + + + + +

    Type

    +

    Description

    +

    {

    +

    xOffset: number,

    +

    yOffset: number

    +

    }

    +

    xOffset: horizontal scrolling offset.

    +

    yOffset: vertical scrolling offset.

    +
    -### scroller.scrollToIndex -scroller.scrollToIndex(value: number): void +### scroller.scrollToIndex +scroller.scrollToIndex\(value: number\): void Scrolls to the specified index. - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> Only the **<List>** component is supported. - - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | value | number | Yes | - | Index of the item to be scrolled to in the list. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onScroll(xOffset: number, yOffset: number) => void | Invoked to return the horizontal and vertical offsets during scrolling when the specified scroll event occurs. | -| onScrollEdge(side: Edge) => void | Callback for the event of scrolling to the edge. | -| onScrollEnd() => void | Invoked when scrolling stops. | - - -## Example - +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>Only the **** component is supported. + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    value

    +

    number

    +

    Yes

    +

    -

    +

    Index of the item to be scrolled to in the list.

    +
    + + +## Events + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    onScroll(xOffset: number, yOffset: number) => void

    +

    Invoked to return the horizontal and vertical offsets during scrolling when the specified scroll event occurs.

    +

    onScrollEdge(side: Edge) => void

    +

    Invoked when an event of scrolling to the edge occurs.

    +

    onScrollEnd() => void

    +

    Invoked when scrolling stops.

    +
    + +## Example ``` @Entry @@ -190,4 +388,5 @@ struct ScrollExample { } ``` -![en-us_image_0000001256978363](figures/en-us_image_0000001256978363.gif) +![](figures/scroll.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-scrollbar.md b/en/application-dev/reference/arkui-ts/ts-container-scrollbar.md new file mode 100644 index 0000000000..26e9012f59 --- /dev/null +++ b/en/application-dev/reference/arkui-ts/ts-container-scrollbar.md @@ -0,0 +1,168 @@ +# ScrollBar + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. + +The **** is used together with the scrollable components, such as ****, ****, and ****. + +## Required Permissions + +None + +## Child Components + +This component can contain a single child component. + +## APIs + +ScrollBar\(value: ScrollBarOption\) + +- ScrollBarOption parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    scroller

    +

    Scroller

    +

    Yes

    +

    -

    +

    Scrollable component controller, which can be bound to scrollable components.

    +

    direction

    +

    ScrollBarDirection

    +

    No

    +

    ScrollBarDirection.Vertical

    +

    Scrollbar direction in which scrollable components scroll.

    +

    state

    +

    BarState

    +

    No

    +

    BarState.Auto

    +

    Scroll bar status.

    +
    + + >![](../../public_sys-resources/icon-note.gif) **NOTE:** + >The **<\ScrollBar>** component defines the behavior style of the scrollable area, and its subnodes define the behavior style of the scrollbar. + >This component is bound to a scrollable component through **scroller**, and can be used to scroll the scrollable component only when their directions are the same. The **<\ScrollBar>** component can be bound to only one scrollable component, and vice versa. + +- ScrollBarDirection enums + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Vertical

    +

    Vertical scrollbar.

    +

    Horizontal

    +

    Horizontal scrollbar.

    +
    + +- BarState enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    On

    +

    Always displayed.

    +

    Off

    +

    Hidden.

    +

    Auto

    +

    Displayed on demand (displayed when the user touches the screen and hidden after inactivity of 2s).

    +
    + + +## Example + +``` +@Entry +@Component +struct ScrollBarExample { + private scroller: Scroller = new Scroller() + private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + + build() { + Column() { + Stack({ alignContent: Alignment.End }) { + Scroll(this.scroller) { + Flex({ direction: FlexDirection.Column }) { + ForEach(this.arr, (item) => { + Row() { + Text(item.toString()) + .width('90%') + .height(100) + .backgroundColor('#3366CC') + .borderRadius(15) + .fontSize(16) + .textAlign(TextAlign.Center) + .margin({ top: 5 }) + } + }, item => item) + }.margin({ left: 52 }) + } + .scrollBar(BarState.Off) + .scrollable(ScrollDirection.Vertical) + ScrollBar({ scroller: this.scroller, direction: ScrollBarDirection.Vertical,state: BarState.Auto }) { + Text() + .width(30) + .height(100) + .borderRadius(10) + .backgroundColor('#C0C0C0') + }.width(30).backgroundColor('#ededed') + } + } + } +} +``` + +![](figures/f.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-container-stack.md b/en/application-dev/reference/arkui-ts/ts-container-stack.md index efb1e02766..acf2675f90 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-stack.md +++ b/en/application-dev/reference/arkui-ts/ts-container-stack.md @@ -1,35 +1,53 @@ -# Stack +# Stack +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component provides a stack container where child components are successively stacked and the latter one overwrites the previous one. - -The **<Stack>** component provides a stack container where child components are successively stacked and the latter one overwrites the previous one. - - -## Required Permissions +## Required Permissions None - -## Child Component - -The **<Stack>** component can contain child components. - - -## APIs - -Stack(value:{alignContent?: Alignment}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | alignContent | [Alignment](ts-appendix-enums.md#alignment-enums) | No | Center | Alignment of child components in the container. | - - -## Example - +## Child Component + +The **** component can contain child components. + +## APIs + +Stack\(value:\{alignContent?: Alignment\}\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    alignContent

    +

    Alignment

    +

    No

    +

    Center

    +

    Alignment of child components in the container.

    +
    + + +## Example ``` @Entry @@ -44,4 +62,5 @@ struct StackExample { } ``` -![en-us_image_0000001212378400](figures/en-us_image_0000001212378400.jpg) +![](figures/stack.jpg) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-stepper.md b/en/application-dev/reference/arkui-ts/ts-container-stepper.md new file mode 100644 index 0000000000..8c0d32d483 --- /dev/null +++ b/en/application-dev/reference/arkui-ts/ts-container-stepper.md @@ -0,0 +1,184 @@ +# Stepper + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. + +The **** component provides a step navigator. + +## Applicable Devices + + + + + + + + + + + + + + +

    Phone

    +

    Tablet

    +

    Smart TV

    +

    Wearable

    +

    Yes

    +

    Yes

    +

    No

    +

    No

    +
    + +## Required Permissions + +None + +## Child Components + +Only the child component [StepperItem](ts-container-stepperitem.md) is supported. + +## APIs + +Stepper\(value?: \{ index?: number \}\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    index

    +

    number

    +

    No

    +

    0

    +

    Index of the <StepperItem> child component that is currently displayed.

    +
    + + +## Attributes + +None + +## Events + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    onFinish(callback: () => void)

    +

    Triggered when the **nextLabel** of the last stepper item in the stepper is clicked.

    +

    onSkip(callback: () => void)

    +

    Triggered when the current stepper item is **ItemState.Skip** and the **nextLabel** is clicked.

    +

    onChange(callback: (prevIndex?: number, index?: number) => void)

    +

    Triggered when the text button on the left or right is clicked to switch between steps.

    +
    • **prevIndex**: index of the step page before the switching.
    • **index**: index of the step page after the switching, that is, index of the previous or next page.
    +
    + +## Example + +``` +@Entry +@Component +struct StepperExample { + @State currentIndex: number = 0 + @State firstState: ItemState = ItemState.Normal + @State secondState: ItemState = ItemState.Normal + + build() { + Stepper({ + index: this.currentIndex + }) { + StepperItem() { + Text('Page One') + .fontSize(35) + .fontColor(Color.Blue) + .width(200) + .lineHeight(50) + .margin({top:250}) + } + .nextLabel('') + .position({x: '35%', y: 0}) + StepperItem() { + Text('Page Two') + .fontSize(35) + .fontColor(Color.Blue) + .width(200) + .lineHeight(50) + .margin({top:250}) + .onClick(()=>{ + this.firstState = this.firstState === ItemState.Skip ? ItemState.Normal : ItemState.Skip + }) + } + .nextLabel('Next') + .prevLabel('Previous') + .status(this.firstState) + .position({x: '35%', y: 0}) + StepperItem() { + Text('Page Three') + .fontSize(35) + .fontColor(Color.Blue) + .width(200) + .lineHeight(50) + .margin({top:250}) + .onClick(()=>{ + this.secondState = this.secondState === ItemState.Waiting ? ItemState.Normal : ItemState.Waiting + }) + } + .position({x: '35%', y: 0}) + .status(this.secondState) + StepperItem() { + Text('Page four') + .fontSize(35) + .fontColor(Color.Blue) + .width(200) + .lineHeight(50) + .margin({top:250}) + } + .position({x: '35%', y: 0}) + .nextLabel('Finish') + } + .onFinish(() => { + console.log('onFinish') + }) + .onSkip(() => { + console.log('onSkip') + }) + .onChange((prevIndex: number, index: number) => { + this.currentIndex = index + }) + .align(Alignment.Center) + } +} +``` + +![](figures/en-us_image_0000001239788885.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-container-stepperitem.md b/en/application-dev/reference/arkui-ts/ts-container-stepperitem.md new file mode 100644 index 0000000000..e1c5f2bf87 --- /dev/null +++ b/en/application-dev/reference/arkui-ts/ts-container-stepperitem.md @@ -0,0 +1,123 @@ +# StepperItem + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. + +The **** component provides an element for the **** component. + +## Applicable Devices + + + + + + + + + + + + + + +

    Phone

    +

    Tablet

    +

    Smart TV

    +

    Wearable

    +

    Yes

    +

    Yes

    +

    No

    +

    No

    +
    + +## Required Permissions + +None + +## Child Components + +This component supports only one child component. + +## APIs + +StepperItem\(\) + +## Attributes + + + + + + + + + + + + + + + + +If the + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    prevLabel

    +

    string

    +

    -

    +

    When the stepper contains more than one page, the default value for all pages except the first page is **Back**.

    +

    nextLabel

    +

    string

    +

    -

    +

    When the stepper contains more than one page, the default value for the last page is **Start**, and the default value for other pages is **Next**.

    +

    status

    +

    ItemState

    +

    ItemState.Normal

    +

    Status of the stepper item.

    +
    + +- ItemState enums + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Normal

    +

    Normal state, in which the text button on the right is displayed properly and can be clicked to go to the next stepper item.

    +

    Disabled

    +

    Disabled state, in which the text button on the right is dimmed and cannot be clicked to go to the next stepper item.

    +

    Waiting

    +

    Waiting state, in which a waiting progress bar instead of the text button on the right is displayed. The progress bar cannot be clicked to go to the next stepper item.

    +

    Skip

    +

    Skipped state, in which the current step item is skipped and the next step item is performed.

    +
    + + +## Example + +See [Stepper](ts-container-stepper.md). diff --git a/en/application-dev/reference/arkui-ts/ts-container-swiper.md b/en/application-dev/reference/arkui-ts/ts-container-swiper.md index 34617b654d..fea72e9b71 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-swiper.md +++ b/en/application-dev/reference/arkui-ts/ts-container-swiper.md @@ -1,69 +1,200 @@ -# Swiper +# Swiper +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component provides a container that allows users to switch among child components by swiping operations. - -The **<Swiper>** component provides a container that allows users to switch among child components by swiping operations. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components This component can contain child components. - -## APIs - -Swiper(value:{controller?: SwiperController}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | controller | [SwiperController](#swipercontroller) | No | null | Controller bound to the component to control the page switching. | - - -## Attributes - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| index | number | 0 | Index of the child component currently displayed in the container. | -| autoPlay | boolean | false | Whether to enable automatic playback for child component switching. If this attribute is **true**, the indicator dots do not take effect. | -| interval | number | 3000 | Interval for automatic playback, in ms. | -| indicator | boolean | true | Whether to enable the navigation dots. | -| loop | boolean | true | Whether to enable loop playback. | -| duration | number | 400 | Duration of the animation for switching child components, in ms. | -| vertical | boolean | false | Whether vertical swiping is used. | -| itemSpace | Length | 0 | Space between child components. | -| cachedCount8+ | number | 1 | Number of child components to be cached. | -| disableSwipe8+ | boolean | false | Whether to disable the swipe feature. | -| curve8+ | [Curve](ts-animatorproperty.md) \| Curves | Curve.Ease | Animation curve. The ease-in/ease-out curve is used by default. For details about common curves, see [Curve enums](ts-animatorproperty.md). You can also create custom curves ([interpolation curve objects](ts-interpolation-calculation.md)) by using the API provided by the interpolation calculation module. | - - -### SwiperController - -Controller of the **<Swiper>** component. You can bind this object to the **<Swiper>** component and use it to control page switching. - - | Name | Description | -| -------- | -------- | -| showNext():void | Turns to the next page. | -| showPrevious():void | Turns to the previous page. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onChange( index: number) => void | Triggered when the index of the currently displayed component changes. | - - -## Example - +## APIs + +Swiper\(value:\{controller?: SwiperController\}\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    controller

    +

    SwiperController

    +

    No

    +

    null

    +

    Controller bound to the component to control the page switching.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    index

    +

    number

    +

    0

    +

    Index of the child component currently displayed in the container.

    +

    autoPlay

    +

    boolean

    +

    false

    +

    Whether to enable automatic playback for child component switching. If this attribute is true, the indicator dots do not take effect.

    +

    interval

    +

    number

    +

    3000

    +

    Interval for automatic playback, in ms.

    +

    indicator

    +

    boolean

    +

    true

    +

    Whether to enable the navigation dots.

    +

    loop

    +

    boolean

    +

    true

    +

    Whether to enable loop playback.

    +

    duration

    +

    number

    +

    400

    +

    Duration of the animation for switching child components, in ms.

    +

    vertical

    +

    boolean

    +

    false

    +

    Whether vertical swiping is used.

    +

    itemSpace

    +

    Length

    +

    0

    +

    Space between child components.

    +

    cachedCount8+

    +

    number

    +

    1

    +

    Number of child components to be cached.

    +

    disableSwipe8+

    +

    boolean

    +

    false

    +

    Whether to disable the swipe feature.

    +
    + +### SwiperController + +Controller of the **** component. You can bind this object to the **** component and use it to control page switching. + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    showNext():void;

    +

    Turns to the next page.

    +

    showPrevious():void;

    +

    Turns to the previous page.

    +
    + +## Events + + + + + + + + + + +

    Name

    +

    Description

    +

    onChange( index: number) => void

    +

    Triggered when the index of the currently displayed component changes.

    +
    + +## Example ``` class MyDataSource implements IDataSource { @@ -120,7 +251,6 @@ struct SwiperExample { .duration(1000) .vertical(false) // Horizontal swiping is enabled by default. .itemSpace(0) - .curve(Curve.Linear) // Animation curve .onChange((index: number) => { console.info(index.toString()) }) @@ -140,4 +270,5 @@ struct SwiperExample { } ``` -![en-us_image_0000001211898474](figures/en-us_image_0000001211898474.gif) +![](figures/swiper.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-container-tabcontent.md b/en/application-dev/reference/arkui-ts/ts-container-tabcontent.md index 7f3af8d922..0d18789c72 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-tabcontent.md +++ b/en/application-dev/reference/arkui-ts/ts-container-tabcontent.md @@ -1,44 +1,61 @@ -# TabContent +# TabContent +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used only in the **** component. It corresponds to the content view of a switched tab page. - -The **<TabContent>** component is used only in the **<Tabs>** component. It corresponds to the content view of a switched tab page. - - -## Required Permissions +## Required Permissions None - -## Child Component +## Child Component This component supports only one child component. +## APIs -## APIs +TabContent\(\) -TabContent() - - -## Attributes +## Attributes Touch target configuration is not supported. -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| tabBar | string \| {
    icon?: string,
    text?: string
    }
    \|[CustomBuilder](../../ui/ts-types.md) | - | Content displayed on the tab bar.
    **CustomBuilder**: builder, to which components can be passed (applicable to API version 8 and later versions).
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > If an icon uses an SVG image, the width and height attributes of the SVG image must be deleted. Otherwise, the icon size will be determined by the width and height attributes of the SVG image. | - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> - The **<TabContent>** component does not support setting of the common width attribute. By default, its width is the same as that of the parent **<Tabs>** component. -> -> - The **<TabContent>** component does not support setting of the common height attribute. Its height is determined by the height of the parent **<Tabs>** component and the **<TabBar>** component. - - -## Example - + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    tabBar

    +

    string | {

    +

    icon?: string,

    +

    text?: string

    +

    }

    +

    | CustomBuilder8+

    +

    -

    +

    Content displayed on the tab bar.

    +

    CustomBuilder: builder, which can be passed to components (applicable to API 8 or later versions).

    +
    NOTE:

    If an icon uses an SVG image, the width and height attributes of the SVG image must be deleted. Otherwise, the icon size will be determined by the width and height attributes of the SVG image.

    +
    +
    + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>- The **** component does not support setting of the common width attribute. By default, its width is the same as that of the parent **** component. +>- The **** component does not support setting of the common height attribute. Its height is determined by the height of the parent **** component and the **** component. + +## Example ``` @Entry @@ -48,15 +65,57 @@ struct TabContentExample { @State selectedFontColor: string = 'rgba(10, 30, 255, 1)' @State currentIndex: number = 0 private controller: TabsController = new TabsController() - @Builder TabBuilder(index: number) { + @Builder Tab1Builder() { + Column() { + Image(this.currentIndex === 0 ? '/resources/ic_public_contacts_filled_selected.png' : '/resources/ic_public_contacts_filled.png') + .width(24) + .height(24) + .opacity(this.currentIndex === 0 ? 1 : 0.4) + .objectFit(ImageFit.Contain) + Text("Tab1") + .fontColor(this.currentIndex === 0 ? this.selectedFontColor : this.fontColor) + .fontSize(10) + .margin({top: 2}) + } + } + + @Builder Tab2Builder() { + Column() { + Image(this.currentIndex === 1 ? '/resources/ic_public_contacts_filled_selected.png' : '/resources/ic_public_contacts_filled.png') + .width(24) + .height(24) + .opacity(this.currentIndex === 1 ? 1 : 0.4) + .objectFit(ImageFit.Contain) + Text("Tab2") + .fontColor(this.currentIndex === 1 ? this.selectedFontColor : this.fontColor) + .fontSize(10) + .margin({top: 2}) + } + } + + @Builder Tab3Builder() { + Column() { + Image(this.currentIndex === 3 ? '/resources/ic_public_contacts_filled_selected.png' : '/resources/ic_public_contacts_filled.png') + .width(24) + .height(24) + .opacity(this.currentIndex === 3 ? 1 : 0.4) + .objectFit(ImageFit.Contain) + Text("Tab3") + .fontColor(this.currentIndex === 3 ? this.selectedFontColor : this.fontColor) + .fontSize(10) + .margin({top: 2}) + } + } + + @Builder Tab4Builder() { Column() { - Image(this.currentIndex === index ? '/resources/ic_public_contacts_filled_selected.png' : '/resources/ic_public_contacts_filled.png') - .width(10) - .height(10) - .opacity(this.currentIndex === index ? 1 : 0.4) + Image(this.currentIndex === 4 ? '/resources/ic_public_contacts_filled_selected.png' : '/resources/ic_public_contacts_filled.png') + .width(24) + .height(24) + .opacity(this.currentIndex === 4 ? 1 : 0.4) .objectFit(ImageFit.Contain) - Text(`Tab${(index > 2 ? (index - 1) : index) + 1}`) - .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor) + Text("Tab4") + .fontColor(this.currentIndex === 4 ? this.selectedFontColor : this.fontColor) .fontSize(10) .margin({top: 2}) } @@ -75,36 +134,36 @@ struct TabContentExample { build() { Column() { - Tabs({ barPosition: BarPosition.End, controller: this.controller }) { + Tabs({ barPosition: BarPosition.End, index: 0, controller: this.controller }) { TabContent() { Flex({justifyContent: FlexAlign.Center})) { Text('Tab1').fontSize(32) } - }.tabBar(this.TabBuilder(0)) + }.tabBar(this.Tab1Builder) TabContent() { Flex({justifyContent: FlexAlign.Center})) { Text('Tab2').fontSize(32) } - }.tabBar(this.TabBuilder(1)) + }.tabBar(this.Tab2Builder) TabContent() { Flex({justifyContent: FlexAlign.Center})) { Text('Add').fontSize(32) } - }.tabBar(this.AddBuilder()) + }.tabBar(this.AddBuilder) TabContent() { Flex({justifyContent: FlexAlign.Center})) { Text('Tab3').fontSize(32) } - }.tabBar(this.TabBuilder(3)) + }.tabBar(this.Tab3Builder) TabContent() { Flex({justifyContent: FlexAlign.Center})) { Text('Tab4').fontSize(32) } - }.tabBar(this.TabBuilder(4)) + }.tabBar(this.Tab4Builder) } .vertical(false) .barWidth(300).barHeight(56) @@ -117,4 +176,4 @@ struct TabContentExample { } ``` -![en-us_image_0000001256978331](figures/en-us_image_0000001256978331.gif) +![](figures/en-us_image_0000001193075122.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-container-tabs.md b/en/application-dev/reference/arkui-ts/ts-container-tabs.md index 8e0fca0e9f..e6c394df30 100644 --- a/en/application-dev/reference/arkui-ts/ts-container-tabs.md +++ b/en/application-dev/reference/arkui-ts/ts-container-tabs.md @@ -1,79 +1,252 @@ -# Tabs - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -The **<Tabs>** component is a container component that allows users to switch between content views through tabs. Each tab page corresponds to a content view. - - -## Required Permissions +# Tabs + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. + +The **** component is a container component that allows users to switch between content views through tabs. Each tab page corresponds to a content view. + +## Applicable Devices + + + + + + + + + + + + + + +

    Phone

    +

    Tablet

    +

    Smart TV

    +

    Wearable

    +

    Yes

    +

    Yes

    +

    No

    +

    No

    +
    + +## Required Permissions None - -## Child Component - -The **<Tabs>** component can contain [TabContent](ts-container-tabcontent.md) child components. - - -## APIs - -Tabs(value: {barPosition?: BarPosition, index?: number, controller?: [TabsController](#tabscontroller)}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | barPosition | BarPosition | No | BarPosition.Start | Tab bar position for creating the **<Tabs>** container component. | - | index | number | No | 0 | Initial tab index. | - | controller | [TabsController](#tabscontroller) | No | - | Tab controller. | - -- BarPosition enums - | Name | Description | - | -------- | -------- | - | Start | If the **vertical** attribute is set to **true**, the tab is on the left of the container. If the **vertical** attribute is set to **false**, the tab is on the top of the container. | - | End | If the **vertical** attribute is set to **true**, the tab is on the right of the container. If the **vertical** attribute is set to **false**, the tab is at the bottom of the container. | - - -### TabsController +## Child Component + +The **** component can contain [TabContent](ts-container-tabcontent.md) child components. + +## APIs + +Tabs\(value: \{barPosition?: BarPosition, index?: number, controller?: [TabsController](#section104288910399)\}\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    barPosition

    +

    BarPosition

    +

    No

    +

    Start

    +

    Tab bar position for creating the <Tabs> container component.

    +

    index

    +

    number

    +

    No

    +

    0

    +

    Initial tab index.

    +

    controller

    +

    TabsController

    +

    No

    +
      

    Tab controller.

    +
    + +- BarPosition enums + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Start

    +

    If the vertical attribute is set to true, the tab is on the left of the container. If the vertical attribute is set to false, the tab is on the top of the container.

    +

    End

    +

    If the vertical attribute is set to true, the tab is on the right of the container. If the vertical attribute is set to false, the tab is at the bottom of the container.

    +
    + + +### TabsController Defines a tab controller, which is used to control switching of tabs. - | API | Description | -| -------- | -------- | -| changeIndex(value: number): void | Changes the index of a tab. The value starts from **0**. | - - -## Attributes + + + + + + + + + +

    API

    +

    Description

    +

    changeIndex(value: number): void

    +

    Changes the index of a tab. The value starts from 0.

    +
    + +## Attributes Touch target configuration is not supported. - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| vertical | boolean | false | Whether a tab is a vertical tab. | -| scrollable | boolean | true | Whether page switching can be performed by swiping left or right. | -| barMode | BarMode | - | Tab bar layout mode. | -| barWidth | number | - | Width of the tab bar. If this parameter is not set, the default value in the system theme is used. | -| barHeight | number | - | Height of the tab bar. If this parameter is not set, the default value in the system theme is used. | -| animationDuration | number | 200 | Animation duration of the tab content. | - -- BarMode enums - | Name | Description | - | -------- | -------- | - | Scrollable | The actual layout width of the tab bar is used. If the actual width exceeds the total length, the tab bar is scrollable. | - | Fixed | The widths of all tab bars are evenly allocated. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onChange(callback: (index: number) => void) | Event triggered when a tab is switched. | - - -## Example - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    vertical

    +

    boolean

    +

    false

    +

    Whether a tab is a vertical tab.

    +

    scrollable

    +

    boolean

    +

    true

    +

    Whether page switching can be performed by swiping left or right.

    +

    barMode

    +

    BarMode

    +

    -

    +

    Tab bar layout mode.

    +

    barWidth

    +

    number

    +

    -

    +

    Width of the tab bar. If this parameter is not set, the default value in the system theme is used.

    +

    barHeight

    +

    number

    +

    -

    +

    Height of the tab bar. If this parameter is not set, the default value in the system theme is used.

    +

    animationDuration

    +

    number

    +

    200

    +

    Animation duration of the tab content.

    +
    + +- BarMode enums + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Scrollable

    +

    The actual layout width of the tab bar is used. If the actual width exceeds the total length, the tab bar is scrollable.

    +

    Fixed

    +

    The widths of all tab bars are evenly allocated.

    +
    + + +## Events + + + + + + + + + + +

    Name

    +

    Description

    +

    onChange(callback: (index: number) => void)

    +

    Event triggered when a tab is switched.

    +
    + +## Example ``` @Entry @@ -83,7 +256,7 @@ struct TabsExample { build() { Column() { - Tabs({ barPosition: BarPosition.Start, controller: this.controller }) { + Tabs({ barPosition: BarPosition.Start, index: 1, controller: this.controller }) { TabContent() { Column().width('100%').height('100%').backgroundColor(Color.Pink) }.tabBar('pink') @@ -111,4 +284,5 @@ struct TabsExample { } ``` -![en-us_image_0000001212218430](figures/en-us_image_0000001212218430.gif) +![](figures/tabs.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-drawing-components-circle.md b/en/application-dev/reference/arkui-ts/ts-drawing-components-circle.md index f27d872010..787ebf3396 100644 --- a/en/application-dev/reference/arkui-ts/ts-drawing-components-circle.md +++ b/en/application-dev/reference/arkui-ts/ts-drawing-components-circle.md @@ -1,50 +1,134 @@ -# Circle +# Circle +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used to draw a circle. - -The **<Circle>** component is used to draw a circle. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None +## APIs + +Circle\(options?: \{width: Length, height: Length\}\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    options

    +

    Object

    +

    No

    +

    -

    +

    For details, see the options parameters.

    +
    + +- options parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    width

    +

    Length

    +

    Yes

    +

    -

    +

    Width.

    +

    height

    +

    Length

    +

    Yes

    +

    -

    +

    Height.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    width

    +

    Length

    +

    0

    +

    No

    +

    Width of the rectangle where the circle is located.

    +

    height

    +

    Length

    +

    0

    +

    No

    +

    Height of the rectangle where the circle is located.

    +
    + +## Example -## APIs - -Circle(options?: {width: Length, height: Length}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | options | Object | No | - | For details, see the **options** parameters. | - -- options parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | width | Length | Yes | - | Width. | - | height | Length | Yes | - | Height. | - - -## Attributes - - | Name | Type | Default Value | Mandatory | Description | -| -------- | -------- | -------- | -------- | -------- | -| width | Length | 0 | No | Width of the rectangle where the circle is located. | -| height | Length | 0 | No | Height of the rectangle where the circle is located. | - - -## Example - - ``` @Entry @Component @@ -60,4 +144,5 @@ struct CircleExample { } ``` -![en-us_image_0000001256978353](figures/en-us_image_0000001256978353.png) +![](figures/circle.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-drawing-components-ellipse.md b/en/application-dev/reference/arkui-ts/ts-drawing-components-ellipse.md index 8c12c8fc6b..d36939e06b 100644 --- a/en/application-dev/reference/arkui-ts/ts-drawing-components-ellipse.md +++ b/en/application-dev/reference/arkui-ts/ts-drawing-components-ellipse.md @@ -1,50 +1,134 @@ -# Ellipse +# Ellipse +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used to draw an ellipse. - -The **<Ellipse>** component is used to draw an ellipse. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None +## APIs + +ellipse\(options?: \{width: Lenght, height: Length\}\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    options

    +

    Object

    +

    No

    +

    -

    +

    For details, see the options parameters.

    +
    + +- options parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    width

    +

    Length

    +

    Yes

    +

    -

    +

    Width.

    +

    height

    +

    Length

    +

    Yes

    +

    -

    +

    Height.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    width

    +

    Length

    +

    0

    +

    No

    +

    Width of the rectangle where the ellipse is located.

    +

    height

    +

    Length

    +

    0

    +

    No

    +

    Height of the rectangle where the ellipse is located.

    +
    + +## Example -## APIs - -ellipse(options?: {width: Length, height: Length}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | options | Object | No | - | For details, see the **options** parameters. | - -- options parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | width | Length | Yes | - | Width. | - | height | Length | Yes | - | Height. | - - -## Attributes - - | Name | Type | Default Value | Mandatory | Description | -| -------- | -------- | -------- | -------- | -------- | -| width | Length | 0 | No | Width of the rectangle where the ellipse is located. | -| height | Length | 0 | No | Height of the rectangle where the ellipse is located. | - - -## Example - - ``` @Entry @Component @@ -60,4 +144,5 @@ struct EllipseExample { } ``` -![en-us_image_0000001212058488](figures/en-us_image_0000001212058488.png) +![](figures/ellipse.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-drawing-components-line.md b/en/application-dev/reference/arkui-ts/ts-drawing-components-line.md index 0221bc3737..00cb053663 100644 --- a/en/application-dev/reference/arkui-ts/ts-drawing-components-line.md +++ b/en/application-dev/reference/arkui-ts/ts-drawing-components-line.md @@ -1,52 +1,156 @@ -# Line +# Line +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used to draw a straight line. - -The **<Line>** component is used to draw a straight line. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None +## APIs + +Line\(options?: \{width: Lenght, height: Length\}\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    options

    +

    Object

    +

    No

    +

    -

    +

    For details, see the options parameters.

    +
    + +- options parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    width

    +

    Length

    +

    Yes

    +

    -

    +

    Width.

    +

    height

    +

    Length

    +

    Yes

    +

    -

    +

    Height.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    width

    +

    Length

    +

    0

    +

    No

    +

    Width of the rectangle where the straight line is located.

    +

    height

    +

    Length

    +

    0

    +

    No

    +

    Height of the rectangle where the straight line is located.

    +

    startPoint

    +

    Point

    +

    [0, 0]

    +

    Yes

    +

    Coordinate (relative coordinate) of the start point of the straight line.

    +

    endPoint

    +

    Point

    +

    [0, 0]

    +

    Yes

    +

    Coordinate (relative coordinate) of the end point of the straight line.

    +
    + +## Example -## APIs - -Line(options?: {width: Length, height: Length}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | options | Object | No | - | For details, see the **options** parameters. | - -- options parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | width | Length | Yes | - | Width. | - | height | Length | Yes | - | Height. | - - -## Attributes - - | Name | Type | Default Value | Mandatory | Description | -| -------- | -------- | -------- | -------- | -------- | -| width | Length | 0 | No | Width of the rectangle where the straight line is located. | -| height | Length | 0 | No | Height of the rectangle where the straight line is located. | -| startPoint | Point | [0, 0] | Yes | Coordinate (relative coordinate) of the start point of the straight line. | -| endPoint | Point | [0, 0] | Yes | Coordinate (relative coordinate) of the end point of the straight line. | - - -## Example - - ``` @Entry @Component @@ -60,4 +164,5 @@ struct LineExample { } ``` -![en-us_image_0000001256858387](figures/en-us_image_0000001256858387.jpg) +![](figures/line.jpg) + diff --git a/en/application-dev/reference/arkui-ts/ts-drawing-components-path.md b/en/application-dev/reference/arkui-ts/ts-drawing-components-path.md index 2308779763..3642fd8e76 100644 --- a/en/application-dev/reference/arkui-ts/ts-drawing-components-path.md +++ b/en/application-dev/reference/arkui-ts/ts-drawing-components-path.md @@ -1,62 +1,86 @@ -# Path +# Path +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used to draw a path. - -The **<Path>** component is used to draw a path. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None - -## Attributes - - | Name | Type | Default Value | Mandatory | Description | -| -------- | -------- | -------- | -------- | -------- | -| width | Length | 0 | No | Width of the rectangle where the path is located. | -| height | Length | 0 | No | Height of the rectangle where the path is located. | -| commands | string | '' | Yes | Command string for drawing the path. | - +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    width

    +

    Length

    +

    0

    +

    No

    +

    Width of the rectangle where the path is located.

    +

    height

    +

    Length

    +

    0

    +

    No

    +

    Height of the rectangle where the path is located.

    +

    commands

    +

    string

    +

    ''

    +

    Yes

    +

    Command string for drawing the path.

    +
    The supported commands are as follows: +- M = moveto +- L = lineto +- H = horizontal lineto +- V = vertical lineto +- C = curveto +- S = smooth curveto +- Q = quadratic Belzier curve +- T = smooth quadratic Belzier curveto +- A = elliptical Arc +- Z = closepath -- M = moveto - -- L = lineto - -- H = horizontal lineto - -- V = vertical lineto +For example, the command **M0 20 L50 50 L50 100 Z** defines a path that starts from \(0, 20\), reaches \(50, 50\) and then \(50, 100\), and ends at \(0, 20\). -- C = curveto +## Example -- S = smooth curveto - -- Q = quadratic Bezier curve - -- T = smooth quadratic Bezier curveto - -- A = elliptical Arc - -- Z = closepath - - -For example, the command **M0 20 L50 50 L50 100 Z** defines a path that starts from (0, 20), reaches (50, 50) and then (50, 100), and ends at (0, 20). - - -## Example - - ``` @Entry @Component @@ -88,4 +112,5 @@ struct PathExample { } ``` -![en-us_image_0000001212058492](figures/en-us_image_0000001212058492.png) +![](figures/path.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-drawing-components-polygon.md b/en/application-dev/reference/arkui-ts/ts-drawing-components-polygon.md index a3a4678f85..c1eec93f59 100644 --- a/en/application-dev/reference/arkui-ts/ts-drawing-components-polygon.md +++ b/en/application-dev/reference/arkui-ts/ts-drawing-components-polygon.md @@ -1,51 +1,145 @@ -# Polygon +# Polygon +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used to draw a polygon. - -The **<Polygon>** component is used to draw a polygon. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None +## APIs + +Polygon\(value:\{options?: \{width: Lenght, height: Length\}\}\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    options

    +

    Object

    +

    No

    +

    -

    +

    For details, see the options parameters.

    +
    + +- options parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    width

    +

    Length

    +

    Yes

    +

    -

    +

    Width.

    +

    height

    +

    Length

    +

    Yes

    +

    -

    +

    Height.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    width

    +

    Length

    +

    0

    +

    No

    +

    Width of the rectangle where the polygon is located.

    +

    height

    +

    Length

    +

    0

    +

    No

    +

    Height of the rectangle where the polygon is located.

    +

    points

    +

    Array<Point>

    +

    -

    +

    Yes

    +

    Vertex coordinates of the polygon.

    +
    + +## Example -## APIs - -Polygon(value:{options?: {width: Length, height: Length}}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | options | Object | No | - | For details, see the **options** parameters. | - -- options parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | width | Length | Yes | - | Width. | - | height | Length | Yes | - | Height. | - - -## Attributes - - | Name | Type | Default Value | Mandatory | Description | -| -------- | -------- | -------- | -------- | -------- | -| width | Length | 0 | No | Width of the rectangle where the polygon is located. | -| height | Length | 0 | No | Height of the rectangle where the polygon is located. | -| points | Array<Point> | - | Yes | Vertex coordinates of the polygon. | - - -## Example - - ``` @Entry @Component @@ -65,4 +159,5 @@ struct PolygonExample { } ``` -![en-us_image_0000001212218458](figures/en-us_image_0000001212218458.gif) +![](figures/polygon.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-drawing-components-polyline.md b/en/application-dev/reference/arkui-ts/ts-drawing-components-polyline.md index ddffe533de..d09da452bc 100644 --- a/en/application-dev/reference/arkui-ts/ts-drawing-components-polyline.md +++ b/en/application-dev/reference/arkui-ts/ts-drawing-components-polyline.md @@ -1,51 +1,145 @@ -# Polyline +# Polyline +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used to draw a polyline. - -The **<Polyline>** component is used to draw a polyline. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None +## APIs + +Polyline\(options?: \{width: Lenght, height: Length\}\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    options

    +

    Object

    +

    No

    +

    -

    +

    For details, see the options parameters.

    +
    + +- options parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    width

    +

    Length

    +

    Yes

    +

    -

    +

    Width.

    +

    height

    +

    Length

    +

    Yes

    +

    -

    +

    Height.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    width

    +

    Length

    +

    0

    +

    No

    +

    Width of the rectangle where the polyline is located.

    +

    height

    +

    Length

    +

    0

    +

    No

    +

    Height of the rectangle where the polyline is located.

    +

    points

    +

    Array<Point>

    +

    -

    +

    Yes

    +

    List of coordinates that the polyline passes through.

    +
    + +## Example -## APIs - -Polyline(options?: {width: Length, height: Length}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | options | Object | No | - | For details, see the **options** parameters. | - -- options parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | width | Length | Yes | - | Width. | - | height | Length | Yes | - | Height. | - - -## Attributes - - | Name | Type | Default Value | Mandatory | Description | -| -------- | -------- | -------- | -------- | -------- | -| width | Length | 0 | No | Width of the rectangle where the polyline is located. | -| height | Length | 0 | No | Height of the rectangle where the polyline is located. | -| points | Array<Point> | - | Yes | List of coordinates that the polyline passes through. | - - -## Example - - ``` @Entry @Component @@ -63,4 +157,5 @@ struct PolylineExample { } ``` -![en-us_image_0000001212218432](figures/en-us_image_0000001212218432.gif) +![](figures/polyline.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-drawing-components-rect.md b/en/application-dev/reference/arkui-ts/ts-drawing-components-rect.md index 561cd243b2..7a85738af0 100644 --- a/en/application-dev/reference/arkui-ts/ts-drawing-components-rect.md +++ b/en/application-dev/reference/arkui-ts/ts-drawing-components-rect.md @@ -1,56 +1,200 @@ -# Rect +# Rect +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is used to draw a rectangle. - -The **<Rect>** component is used to draw a rectangle. - - -## Required Permissions +## Required Permissions None - -## Child Components +## Child Components None +## APIs + +Rect\(value:\{options?: \{width: Length,height: Length,radius?: Length | Array\} | \{width: Length,height: Length,radiusWidth?: Length,radiusHeight?: Length\}\}\) + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    options

    +

    Object

    +

    No

    +

    -

    +

    For details, see the options parameters.

    +
    + +- options parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    width

    +

    Length

    +

    Yes

    +

    -

    +

    Width.

    +

    height

    +

    Length

    +

    Yes

    +

    -

    +

    Height.

    +

    radius

    +

    Length | Array<Length>

    +

    No

    +

    0

    +

    Radius of a rounded corner. You can set the radius of four rounded corners.

    +

    radiusWidth

    +

    Length

    +

    No

    +

    0

    +

    Width of the rounded corner.

    +

    radiusHeight

    +

    Length

    +

    No

    +

    0

    +

    Height of the rounded corner.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    width

    +

    Length

    +

    0

    +

    No

    +

    Width.

    +

    height

    +

    Length

    +

    0

    +

    No

    +

    Height.

    +

    radiusWidth

    +

    Length

    +

    0

    +

    No

    +

    Width of a rounded corner. The width and height are the same when only the width is set.

    +

    radiusHeight

    +

    Length

    +

    0

    +

    No

    +

    Height of the rounded corner. The width and height are the same only when the height is set.

    +

    radius

    +

    Length | Array<Length>

    +

    0

    +

    No

    +

    Size of the rounded corner.

    +
    + +## Example -## APIs - -Rect(value:{options?: {width: Length,height: Length,radius?: Length | Array<Length>} | {width: Length,height: Length,radiusWidth?: Length,radiusHeight?: Length}}) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | options | Object | No | - | For details, see the **options** parameters. | - -- options parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | width | Length | Yes | - | Width. | - | height | Length | Yes | - | Height. | - | radius | Length \| Array<Length> | No | 0 | Radius of a rounded corner. You can set the radius of four rounded corners. | - | radiusWidth | Length | No | 0 | Width of the rounded corner. | - | radiusHeight | Length | No | 0 | Height of the rounded corner. | - - -## Attributes - - | Name | Type | Default Value | Mandatory | Description | -| -------- | -------- | -------- | -------- | -------- | -| width | Length | 0 | No | Width. | -| height | Length | 0 | No | Height. | -| radiusWidth | Length | 0 | No | Width of a rounded corner. The width and height are the same when only the width is set. | -| radiusHeight | Length | 0 | No | Height of the rounded corner. The width and height are the same only when the height is set. | -| radius | Length \| Array<Length> | 0 | No | Size of the rounded corner. | - - -## Example - - ``` @Entry @Component @@ -73,4 +217,5 @@ struct RectExample { } ``` -![en-us_image_0000001212218454](figures/en-us_image_0000001212218454.png) +![](figures/rect.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-drawing-components-shape.md b/en/application-dev/reference/arkui-ts/ts-drawing-components-shape.md index 41a23559e4..18ac993b30 100644 --- a/en/application-dev/reference/arkui-ts/ts-drawing-components-shape.md +++ b/en/application-dev/reference/arkui-ts/ts-drawing-components-shape.md @@ -1,66 +1,230 @@ -# Shape +# Shape +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +The **** component is the parent component of the drawing components. The attributes described in this topic are universal attributes supported by all the drawing components. +1. The drawing components use **** as the parent component to implement the effect similar to SVG. -The **<Shape>** component is the parent component of the drawing components. The attributes described in this topic are universal attributes supported by all the drawing components. +2. The **** component is used independently to draw a specific shape. - -1. The drawing components use **<Shape>** as the parent component to implement the effect similar to SVG. - - -2. The **<Shape>** component is used independently to draw a specific shape. - - -## Required Permissions +## Required Permissions None +## Child Components -## Child Components +The **** component can contain child components. -The **<Shape>** component can contain child components. +## APIs +Shape\(value:\{target?: PixelMap\}\) -## APIs +- Parameters -Shape(value:{target?: PixelMap}) + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    target

    +

    PixelMap

    +

    No

    +

    null

    +

    Shape to draw. You can draw a shape in the specified PixelMap object. If no object is specified, the shape is drawn in the current drawing target.

    +
    -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | target | PixelMap | No | null | Shape to draw. You can draw a shape in the specified **PixelMap** object. If no object is specified, the shape is drawn in the current drawing target. | +## Attributes -## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    viewPort

    +

    {

    +

    x: Length,

    +

    y: Length,

    +

    width: Length,

    +

    height: Length

    +

    }

    +

    -

    +

    Yes

    +

    View port of the shape.

    +

    fill

    +

    Color

    +

    Black

    +

    No

    +

    Fill color.

    +

    stroke

    +

    Color

    +

    -

    +

    No

    +

    Stroke color.

    +

    strokeDashArray

    +

    Array<Length>

    +

    []

    +

    No

    +

    Stroke dash.

    +

    strokeDashOffset

    +

    Length

    +

    0

    +

    No

    +

    Offset of the start point for drawing the stroke.

    +

    strokeLineCap

    +

    LineCapStyle

    +

    Butt

    +

    No

    +

    Cap style of the stroke.

    +

    strokeLineJoin

    +

    LineJoinStyle

    +

    Miter

    +

    No

    +

    Join style of the stroke.

    +

    strokeMiterLimit

    +

    number

    +

    4

    +

    No

    +

    Limit value when the sharp angle is drawn as a miter.

    +

    strokeOpacity

    +

    number

    +

    1

    +

    No

    +

    Stroke opacity.

    +

    strokeWidth

    +

    Length

    +

    1

    +

    No

    +

    Stroke width.

    +

    antiAlias

    +

    boolean

    +

    true

    +

    No

    +

    Whether anti-aliasing is enabled.

    +
    - | Name | Type | Default Value | Mandatory | Description | -| -------- | -------- | -------- | -------- | -------- | -| viewPort | {
    x: Length,
    y: Length,
    width: Length,
    height: Length
    } | - | Yes | View port of the shape. | -| fill | Color | Black | No | Fill color. | -| stroke | Color | - | No | Stroke color. | -| strokeDashArray | Array<Length> | [] | No | Stroke dash. | -| strokeDashOffset | Length | 0 | No | Offset of the start point for drawing the stroke. | -| strokeLineCap | LineCapStyle | LineCapStyle.Butt | No | Cap style of the stroke. | -| strokeLineJoin | LineJoinStyle | LineJoinStyle.Miter | No | Join style of the stroke. | -| strokeMiterLimit | number | 4 | No | Limit value when the sharp angle is drawn as a miter. | -| strokeOpacity | number | 1 | No | Stroke opacity. | -| strokeWidth | Length | 1 | No | Stroke width. | -| antiAlias | boolean | true | No | Whether anti-aliasing is enabled. | +- LineJoinStyle enums -- LineJoinStyle enums - | Name | Description | - | -------- | -------- | - | Bevel | Bevel is used to connect paths. | - | Miter | Miter is used to connect paths. | - | Round | Round is used to connect paths. | + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Bevel

    +

    Bevel is used to connect paths.

    +

    Miter

    +

    Miter is used to connect paths.

    +

    Round

    +

    Round is used to connect paths.

    +
    -## Example +## Example - ``` @Entry @Component @@ -123,4 +287,5 @@ struct ShapeExample { } ``` -![en-us_image_0000001257058393](figures/en-us_image_0000001257058393.png) +![](figures/2-01.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-drawing-components.md b/en/application-dev/reference/arkui-ts/ts-drawing-components.md index 853d7b3d98..1f1eeac321 100644 --- a/en/application-dev/reference/arkui-ts/ts-drawing-components.md +++ b/en/application-dev/reference/arkui-ts/ts-drawing-components.md @@ -1,19 +1,19 @@ -# Drawing Components +# Drawing Components +- **[Circle](ts-drawing-components-circle.md)** +- **[Ellipse](ts-drawing-components-ellipse.md)** -- **[Circle](ts-drawing-components-circle.md)** +- **[Line](ts-drawing-components-line.md)** -- **[Ellipse](ts-drawing-components-ellipse.md)** +- **[Polyline](ts-drawing-components-polyline.md)** -- **[Line](ts-drawing-components-line.md)** +- **[Polygon](ts-drawing-components-polygon.md)** -- **[Polyline](ts-drawing-components-polyline.md)** +- **[Path](ts-drawing-components-path.md)** -- **[Polygon](ts-drawing-components-polygon.md)** +- **[Rect](ts-drawing-components-rect.md)** -- **[Path](ts-drawing-components-path.md)** +- **[Shape](ts-drawing-components-shape.md)** -- **[Rect](ts-drawing-components-rect.md)** -- **[Shape](ts-drawing-components-shape.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-explicit-animation.md b/en/application-dev/reference/arkui-ts/ts-explicit-animation.md index aa9f4e4009..af5ab03d55 100644 --- a/en/application-dev/reference/arkui-ts/ts-explicit-animation.md +++ b/en/application-dev/reference/arkui-ts/ts-explicit-animation.md @@ -1,35 +1,116 @@ -# Explicit Animation +# Explicit Animation +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. + + + + + + + + + +

    Name

    +

    Description

    +

    animateTo(value: AnimationOption, event: ()=> void) : void

    +

    Provides a transition animation when the status changes due to the closure code.

    +

    event specifies the closure function that displays the dynamic effect. The system automatically inserts the transition animation if the status changes in the closure function.

    +
    - | Name | Description | -| -------- | -------- | -| animateTo(value: [AnimationOption](#animationoption-object), event: ()=> void) : void | Provides a transition animation when the status changes due to the closure code.
    **event** specifies the closure function that displays the dynamic effect. The system automatically inserts the transition animation if the status changes in the closure function. | +## AnimationOption Object +- Attributes -## AnimationOption Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    duration

    +

    number

    +

    1000

    +

    Animation duration, in ms.

    +

    tempo

    +

    number

    +

    1.0

    +

    Animation playback speed. A larger value indicates faster animation playback, and a smaller value indicates slower animation playback. The value 0 means that there is no animation.

    +

    curve

    +

    Curve | Curves

    +

    Linear

    +

    Animation curve.

    +

    delay

    +

    number

    +

    0

    +

    Delay of animation playback, in ms. By default, the playback is not delayed.

    +

    iterations

    +

    number

    +

    1

    +

    Number of times that the animation is played. By default, the animation is played once. The value -1 indicates that the animation is played for an unlimited number of times.

    +

    playMode

    +

    PlayMode

    +

    Normal

    +

    Animation playback mode. By default, the animation is played from the beginning after the playback is complete.

    +
    -- Attributes - | Name | Type | Default Value | Description | - | -------- | -------- | -------- | -------- | - | duration | number | 1000 | Animation duration, in ms. | - | tempo | number | 1.0 | Animation playback speed. A larger value indicates faster animation playback, and a smaller value indicates slower animation playback. The value **0** means that there is no animation. | - | curve | Curve \| Curves | Linear | Animation curve. | - | delay | number | 0 | Delay of animation playback, in ms. By default, the playback is not delayed. | - | iterations | number | 1 | Number of times that the animation is played. By default, the animation is played once. The value **-1** indicates that the animation is played for an unlimited number of times. | - | playMode | PlayMode | Normal | Animation playback mode. By default, the animation is played from the beginning after the playback is complete. | +- APIs -- APIs - | Name | Description | - | -------- | -------- | - | onFinish() => void | Callback invoked when the animation playback is complete. | + + + + + + + + + +

    Name

    +

    Description

    +

    onFinish() => void

    +

    Callback invoked when the animation playback is complete.

    +
    -## Example - +## Example ``` @Entry @@ -84,4 +165,5 @@ struct AnimateToExample { } ``` -![en-us_image_0000001256978345](figures/en-us_image_0000001256978345.gif) +![](figures/animateto.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-gesture-processing.md b/en/application-dev/reference/arkui-ts/ts-gesture-processing.md index e40e024a5d..cd8880a63e 100644 --- a/en/application-dev/reference/arkui-ts/ts-gesture-processing.md +++ b/en/application-dev/reference/arkui-ts/ts-gesture-processing.md @@ -1,9 +1,9 @@ -# Gesture Processing +# Gesture Processing +- **[Gesture Binding Methods](ts-gesture-settings.md)** +- **[Basic Gestures](ts-basic-gestures.md)** -- **[Combined Gestures](ts-combined-gestures.md)** +- **[Combined Gestures](ts-combined-gestures.md)** -- **[Gesture Binding Methods](ts-gesture-settings.md)** -- **[Basic Gestures](ts-basic-gestures.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-gesture-settings.md b/en/application-dev/reference/arkui-ts/ts-gesture-settings.md index c467540f76..40503a4845 100644 --- a/en/application-dev/reference/arkui-ts/ts-gesture-settings.md +++ b/en/application-dev/reference/arkui-ts/ts-gesture-settings.md @@ -1,64 +1,190 @@ -# Gesture Binding Methods +# Gesture Binding Methods +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>The APIs of this module are supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This method is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## Binding Gesture Recognition - - -Use the following attributes to bind gesture recognition to a component. When a gesture is recognized, the event callback is invoked to notify the component. - - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| gesture | gesture: GestureType,
    mask?: GestureMask | gesture: -,
    mask: GestureMask.Normal | Gesture to recognize.
    **gesture** specifies the type of the gesture to bind, and **mask** specifies the event response setting. | -| priorityGesture | gesture: GestureType,
    mask?: GestureMask | gesture: -,
    mask: GestureMask.Normal | Gesture to preferentially recognize.
    **gesture** specifies the type of the gesture to bind, and **mask** specifies the event response setting.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > - By default, the child component takes precedence over the parent component in gesture recognition. When **priorityGesture** is configured for the parent component, the parent component takes precedence over the child component in gesture recognition. | -| parallelGesture | gesture: GestureType,
    mask?: GestureMask | gesture: -,
    mask: GestureMask.Normal | Gesture that can be triggered together with the child component gesture.
    **gesture** specifies the type of the gesture to bind, and **mask** specifies the event response setting.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > - The gesture event is not a bubbling event. When **parallelGesture** is set for the parent component, gesture events that are the same for the parent component and child components can be triggered, thereby implementing a bubbling effect. | - - -- GestureMask enums - | Name | Description | - | -------- | -------- | - | Normal | The gestures of child components are not masked and are recognized based on the default gesture recognition sequence. | - | IgnoreInternal | The gestures of child components are masked. Only the gestures of the current component are recognized.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > However, the built-in gestures of the child components are not masked. For example, when the child component is a **<List>** component, the built-in sliding gestures can still be triggered. | - - -- Gesture types - | Name | Description | - | -------- | -------- | - | TapGesture | Tap gesture, which can be a single-tap or multi-tap gesture. | - | LongPressGesture | Long press gesture. | - | PanGesture | Pan gesture. | - | PinchGesture | Pinch gesture. | - | RotationGesture | Rotation gesture. | - | GestureGroup | A group of gestures. Continuous recognition, parallel recognition, and exclusive recognition are supported. | - - -## Gesture Response Event - -The component uses the **gesture** method to bind the gesture object and uses the events provided in this object to respond to the gesture operation. For example, the **onAction** event of the **TapGesture** object can be used to respond to a click event. For details about the event definition, see the section of each gesture object. - -- TapGesture events - | Name | Description | - | -------- | -------- | - | onAction((event?: GestureEvent) => void) | Callback invoked when a tap gesture is recognized. | - -- GestureEvent attributes - | Name | Type | Description | - | -------- | -------- | -------- | - | timestamp | number | Timestamp of the event. | - | target8+ | EventTarget | Object that triggers the gesture event. | - - -## Example - +## Binding Gesture Recognition + +You can use the following attributes to bind gesture recognition to a component. When a gesture is recognized, the event callback is invoked to notify the component. + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    gesture

    +

    gesture: GestureType,

    +

    mask?: GestureMask

    +

    gesture: -,

    +

    mask: GestureMask.Normal

    +

    Gesture to recognize.

    +

    gesture specifies the type of the gesture to bind, and mask specifies the event response setting.

    +

    priorityGesture

    +

    gesture: GestureType,

    +

    mask?: GestureMask

    +

    gesture: -,

    +

    mask: GestureMask.Normal

    +

    Gesture to preferentially recognize.

    +

    gesture specifies the type of the gesture to bind, and mask specifies the event response setting.

    +
    NOTE:
    • By default, the child component takes precedence over the parent component in gesture recognition. When priorityGesture is configured for the parent component, the parent component takes precedence over the child component in gesture recognition.
    +
    +

    parallelGesture

    +

    gesture: GestureType,

    +

    mask?: GestureMask

    +

    gesture: -,

    +

    mask: GestureMask.Normal

    +

    Gesture that can be triggered together with the child component gesture.

    +

    gesture specifies the type of the gesture to bind, and mask specifies the event response setting.

    +
    NOTE:
    • The gesture event is not a bubbling event. When parallelGesture is set for the parent component, gesture events that are the same for the parent component and child components can be triggered, thereby implementing a bubbling effect.
    +
    +
    + +- GestureMask enums + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Normal

    +

    The gestures of child components are not masked and are recognized based on the default gesture recognition sequence.

    +

    IgnoreInternal

    +

    The gestures of child components are masked. Only the gestures of the current component are recognized.

    +
    NOTE:

    However, the built-in gestures of the child components are not masked. For example, when the child component is a <List> component, the built-in sliding gestures can still be triggered.

    +
    +
    + + +- Gesture types + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    TapGesture

    +

    Tap gesture, which can be a single-tap or multi-tap gesture.

    +

    LongPressGesture

    +

    Long press gesture.

    +

    PanGesture

    +

    Pan gesture.

    +

    PinchGesture

    +

    Pinch gesture.

    +

    RotationGesture

    +

    Rotation gesture.

    +

    GestureGroup

    +

    A group of gestures. Continuous recognition, parallel recognition, and exclusive recognition are supported.

    +
    + + +## Gesture Response Event + +The component uses the **gesture** method to bind the gesture object and uses the events provided in this object to respond to the gesture operation. For example, the **onAction** event of the **TapGesture** object can be used to respond to a click event. For details about the event definition, see the section of each gesture object. + +- TapGesture events + + + + + + + + + + +

    Name

    +

    Description

    +

    onAction((event?: GestureEvent) => void)

    +

    Callback invoked when a tap gesture is recognized.

    +
    + + +- GestureEvent attributes + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    timestamp

    +

    number

    +

    Timestamp of the event.

    +

    target8+

    +

    EventTarget

    +

    Object that triggers the gesture event.

    +
    + + +## Example ``` @Entry @@ -80,9 +206,9 @@ struct GestureSettingsExample { .priorityGesture( TapGesture() .onAction((event: GestureEvent) => { - this.value = 'priorityGesture onAction' + '\ncomponent globalPos:(' - + event.target.area.globalPos.x + ',' + event.target.area.globalPos.y + ')\nwidth:' - + event.target.area.width + '\nheight:' + event.target.area.height +this.value = 'priorityGesture onAction' + '\ncomponent globalPos: (' + + event.target.area.globalPos.x + ',' + event.target.area.globalPos.y + ')\nwidth:' + + event.target.area.width + '\nheight:' + event.target.area.height }), GestureMask.IgnoreInternal ) }.padding(60) @@ -90,4 +216,5 @@ struct GestureSettingsExample { } ``` -![en-us_image_0000001256858411](figures/en-us_image_0000001256858411.gif) +![](figures/en-us_image_0000001237475107.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-global-ui-methods.md b/en/application-dev/reference/arkui-ts/ts-global-ui-methods.md index a05ce685b9..7bcfd801bf 100644 --- a/en/application-dev/reference/arkui-ts/ts-global-ui-methods.md +++ b/en/application-dev/reference/arkui-ts/ts-global-ui-methods.md @@ -1,9 +1,13 @@ -# Global UI Methods +# Global UI Methods +- **[Alert Dialog Box](ts-methods-alert-dialog-box.md)** +- **[Custom Dialog box](ts-methods-custom-dialog-box.md)** -- **[Image Cache](ts-methods-image-cache.md)** +- **[Image Cache](ts-methods-image-cache.md)** + +- **[Media Query](ts-methods-media-query.md)** + +- **[List Selection Dialog Box](ts-methods-custom-actionsheet.md)** -- **[Media Query](ts-methods-media-query.md)** -- **[Pop-up Window](ts-methods-popup-window.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-interpolation-calculation.md b/en/application-dev/reference/arkui-ts/ts-interpolation-calculation.md index 11443bfc54..c4e369acb6 100644 --- a/en/application-dev/reference/arkui-ts/ts-interpolation-calculation.md +++ b/en/application-dev/reference/arkui-ts/ts-interpolation-calculation.md @@ -1,101 +1,237 @@ -# Interpolation Calculation +# Interpolation Calculation +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +## Modules to Import - -## Modules to Import - - ``` import curves from '@ohos.curves' ``` - -## Required Permissions +## Required Permissions None +## curves.init -## curves.init - -init(curve?: Curve): Object - +init\(curve?: Curve\): Object Implements initialization for the interpolation curve, which is used to create an interpolation curve object based on the input parameter. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | curve | Curve | No | Linear | Curve object. | - -- Return values - Curve object. - - -## curves.steps - -steps(count: number, end: boolean): Object - +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    curve

    +

    Curve

    +

    No

    +

    Linear

    +

    Curve object.

    +
    + +- Return values + + Curve object. + + +## curves.steps + +steps\(count: number, end: boolean\): Object Constructs a step curve object. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | count | number | Yes | - | Number of steps. Must be a positive integer. | - | end | boolean | No | true | Step change at the start or end point of each interval. Defaults to **true**, indicating that the step change occurs at the end point. | - -- Return values - Curve object. - - -## curves.cubicBezier - -cubicBezier(x1: number, y1: number, x2: number, y2: number): Object - +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    count

    +

    number

    +

    Yes

    +

    -

    +

    Number of steps. Must be a positive integer.

    +

    end

    +

    boolean

    +

    No

    +

    true

    +

    Step change at the start or end point of each interval. Defaults to true, indicating that the step change occurs at the end point.

    +
    + +- Return values + + Curve object. + + +## curves.cubicBezier + +cubicBezier\(x1: number, y1: number, x2: number, y2: number\): Object Constructs a third-order Bezier curve object. The curve value must be between 0 and 1. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | x1 | number | Yes | Horizontal coordinate of the first point on the Bezier curve. | - | y1 | number | Yes | Vertical coordinate of the first point on the Bezier curve. | - | x2 | number | Yes | Horizontal coordinate of the second point on the Bezier curve. | - | y2 | number | Yes | Vertical coordinate of the second point on the Bezier curve. | - -- Return values - Curve object. - - -## curves.spring - -spring(velocity: number, mass: number, stiffness: number, damping: number): Object - +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    x1

    +

    number

    +

    Yes

    +

    Horizontal coordinate of the first point on the Bezier curve.

    +

    y1

    +

    number

    +

    Yes

    +

    Vertical coordinate of the first point on the Bezier curve.

    +

    x2

    +

    number

    +

    Yes

    +

    Horizontal coordinate of the second point on the Bezier curve.

    +

    y2

    +

    number

    +

    Yes

    +

    Vertical coordinate of the second point on the Bezier curve.

    +
    + +- Return values + + Curve object. + + +## curves.spring + +spring\(velocity: number, mass: number, stiffness: number, damping: number\): Object Constructs a spring curve object. +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    velocity

    +

    number

    +

    Yes

    +

    Initial velocity.

    +

    mass

    +

    number

    +

    Yes

    +

    Mass.

    +

    stiffness

    +

    number

    +

    Yes

    +

    Stiffness.

    +

    damping

    +

    number

    +

    Yes

    +

    Damping.

    +
    + +- Return values + + Curve object. + + +## Example -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | velocity | number | Yes | Initial velocity. | - | mass | number | Yes | Mass. | - | stiffness | number | Yes | Stiffness. | - | damping | number | Yes | Damping. | - -- Return values - Curve object. - - -## Example - - ``` import Curves from '@ohos.curves' let curve1 = Curves.init() // Create a default linear interpolation curve. @@ -104,25 +240,36 @@ let curve3 = Curves.spring(100, 1, 228, 30) // Create a spring interpolation cur let curve3 = Curves.cubicBezier(0.1, 0.0, 0.1, 1.0) // Create a third-order Bezier curve. ``` +Curve objects can be created only by the preceding APIs. - Curve objects can be created only by the preceding APIs. - | API | Description | -| -------- | -------- | -| interpolate(time: number): number | Calculation function of the interpolation curve. Passing a normalized time parameter to this function returns the current interpolation.
    **time**: indicates the current normalized time. The value ranges from 0 to 1.
    The curve interpolation corresponding to the normalized time point is returned. | + + + + + + + + + +

    API

    +

    Description

    +

    interpolate(time: number): number

    +

    Calculation function of the interpolation curve. Passing a normalized time parameter to this function returns the current interpolation.

    +

    time: indicates the current normalized time. The value ranges from 0 to 1.

    +

    The curve interpolation corresponding to the normalized time point is returned.

    +
    +- Example -- Example - - ``` - import Curves from '@ohos.curves' - let curve = Curves.init(Curve.EaseIn) // Create an interpolation curve which is slow and then fast by default. - let value: number = curve.interpolate(0.5) // Calculate the interpolation for half of the time. - ``` + ``` + import Curves from '@ohos.curves' + let curve = Curves.init(Curve.EaseIn) // Create an interpolation curve which is slow and then fast by default. + let value: number = curve.interpolate(0.5) // Calculate the interpolation for half of the time. + ``` -## Example +## Example - ``` import Curves from '@ohos.curves' @Entry @@ -148,4 +295,5 @@ struct ImageComponent { } ``` -![en-us_image_0000001212058456](figures/en-us_image_0000001212058456.gif) +![](figures/5.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-matrix-transformation.md b/en/application-dev/reference/arkui-ts/ts-matrix-transformation.md index 0b441459e0..77a42705ad 100644 --- a/en/application-dev/reference/arkui-ts/ts-matrix-transformation.md +++ b/en/application-dev/reference/arkui-ts/ts-matrix-transformation.md @@ -1,377 +1,860 @@ -# Matrix Transformation +# Matrix Transformation +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Modules to Import - +## Modules to Import ``` import matrix4 from '@ohos.matrix4' ``` - -## Required Permissions +## Required Permissions None +## matrix4.init -## matrix4.init - -init(array: Array<number>): Object - +init\(array: Array\): Object Matrix constructor, which is used to create a 4x4 matrix by using the input parameter. Column-major order is used. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | array | Array<number> | Yes | [1, 0, 0, 0,
    0, 1, 0, 0,
    0, 0, 1, 0,
    0, 0, 0, 1] | A number array whose length is 16 (4 x 4). For details, see the parameter description. | - -- Return values - | Type | Description | - | -------- | -------- | - | Object | 4x4 matrix object created based on the input parameter. | - -- Parameter description - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | m00 | number | Yes | Scaling value of the x-axis. Defaults to **1** for the unit matrix. | - | m01 | number | Yes | The second value, which is affected by the rotation of the x, y, and z axes. | - | m02 | number | Yes | The third value, which is affected by the rotation of the x, y, and z axes. | - | m03 | number | Yes | Meaningless. | - | m10 | number | Yes | The fifth value, which is affected by the rotation of the x, y, and z axes. | - | m11 | number | Yes | Scaling value of the y-axis. Defaults to **1** for the unit matrix. | - | m12 | number | Yes | The seventh value, which is affected by the rotation of the x, y, and z axes. | - | m13 | number | Yes | Meaningless. | - | m20 | number | Yes | The ninth value, which is affected by the rotation of the x, y, and z axes. | - | m21 | number | Yes | The tenth value, which is affected by the rotation of the x, y, and z axes. | - | m22 | number | Yes | Scaling value of the z-axis. Defaults to **1** for the unit matrix. | - | m23 | number | Yes | Meaningless. | - | m30 | number | Yes | Translation value of the x-axis, in px. Defaults to **0** for the unit matrix. | - | m31 | number | Yes | Translation value of the y-axis, in px. Defaults to **0** for the unit matrix. | - | m32 | number | Yes | Translation value of the z-axis, in px. Defaults to **0** for the unit matrix. | - | m33 | number | Yes | Valid in homogeneous coordinates, presenting the perspective projection effect. | - -- Example - - ``` - import Matrix4 from '@ohos.matrix4' - // Create a 4x4 matrix. - let matrix = Matrix4.init([1.0, 0.0, 0.0, 0.0, - 0.0, 1.0, 0.0, 0.0, - 0.0, 0.0, 1.0, 0.0, - 0.0, 0.0, 0.0, 1.0]) - ``` - - -## matrix4.identity - -identity(): Object - +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    array

    +

    Array<number>

    +

    Yes

    +

    [1, 0, 0, 0,

    +

    0, 1, 0, 0,

    +

    0, 0, 1, 0,

    +

    0, 0, 0, 1]

    +

    A number array whose length is 16 (4 x 4). For details, see the parameter description.

    +
    + +- Return values + + + + + + + + + + +

    Type

    +

    Description

    +

    Object

    +

    4x4 matrix object created based on the input parameter.

    +
    + +- Parameter description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    m00

    +

    number

    +

    Yes

    +

    Scaling value of the x-axis. Defaults to 1 for the unit matrix.

    +

    m01

    +

    number

    +

    Yes

    +

    The second value, which is affected by the rotation of the x, y, and z axes.

    +

    m02

    +

    number

    +

    Yes

    +

    The third value, which is affected by the rotation of the x, y, and z axes.

    +

    m03

    +

    number

    +

    Yes

    +

    Meaningless.

    +

    m10

    +

    number

    +

    Yes

    +

    The fifth value, which is affected by the rotation of the x, y, and z axes.

    +

    m11

    +

    number

    +

    Yes

    +

    Scaling value of the y-axis. Defaults to 1 for the unit matrix.

    +

    m12

    +

    number

    +

    Yes

    +

    The seventh value, which is affected by the rotation of the x, y, and z axes.

    +

    m13

    +

    number

    +

    Yes

    +

    Meaningless.

    +

    m20

    +

    number

    +

    Yes

    +

    The ninth value, which is affected by the rotation of the x, y, and z axes.

    +

    m21

    +

    number

    +

    Yes

    +

    The tenth value, which is affected by the rotation of the x, y, and z axes.

    +

    m22

    +

    number

    +

    Yes

    +

    Scaling value of the z-axis. Defaults to 1 for the unit matrix.

    +

    m23

    +

    number

    +

    Yes

    +

    Meaningless.

    +

    m30

    +

    number

    +

    Yes

    +

    Translation value of the x-axis, in px. Defaults to 0 for the unit matrix.

    +

    m31

    +

    number

    +

    Yes

    +

    Translation value of the y-axis, in px. Defaults to 0 for the unit matrix.

    +

    m32

    +

    number

    +

    Yes

    +

    Translation value of the z-axis, in px. Defaults to 0 for the unit matrix.

    +

    m33

    +

    number

    +

    Yes

    +

    Valid in homogeneous coordinates, presenting the perspective projection effect.

    +
    + +- Example + + ``` + import Matrix4 from '@ohos.matrix4' + // Create a 4x4 matrix. + let matrix = Matrix4.init([1.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, 1.0]) + ``` + + +## matrix4.identity + +identity\(\): Object Matrix initialization function. Can return a unit matrix object. +- Return values -- Return values - | Type | Description | - | -------- | -------- | - | Object | Unit matrix object. | + + + + + + + + + +

    Type

    +

    Description

    +

    Object

    +

    Unit matrix object.

    +
    -- Example - - ``` - // The effect of matrix 1 is the same as that of matrix 2. - import Matrix4 from '@ohos.matrix4' - let matrix = Matrix4.init([1.0, 0.0, 0.0, 0.0, - 0.0, 1.0, 0.0, 0.0, - 0.0, 0.0, 1.0, 0.0, - 0.0, 0.0, 0.0, 1.0]) - let matrix2 = Matrix4.identity() - ``` +- Example + ``` + // The effect of matrix 1 is the same as that of matrix 2. + import Matrix4 from '@ohos.matrix4' + let matrix = Matrix4.init([1.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, 1.0]) + let matrix2 = Matrix4.identity() + ``` -## matrix4.copy -copy(): Object +## matrix4.copy +copy\(\): Object Matrix copy function, which is used to copy the current matrix object. - -- Return values - | Type | Description | - | -------- | -------- | - | Object | Copy object of the current matrix. | - -- Example - - ``` - import Matrix4 from '@ohos.matrix4' - @Entry - @Component - struct Test { - private matrix1 = Matrix4.identity().translate({x:100}) - private matrix2 = this.matrix1.copy().scale({x:2}) - build() { - Column() { - Image($r("app.media.bg1")) - .width("40%") - .height(100) - .transform(this.matrix1) - Image($r("app.media.bg2")) - .width("40%") - .height(100) - .margin({top:50}) - .transform(this.matrix2) +- Return values + + + + + + + + + + +

    Type

    +

    Description

    +

    Object

    +

    Copy object of the current matrix.

    +
    + +- Example + + ``` + import Matrix4 from '@ohos.matrix4' + @Entry + @Component + struct Test { + private matrix1 = Matrix4.identity().translate({x:100}) + private matrix2 = this.matrix1.copy().scale({x:2}) + build() { + Column() { + Image($r("app.media.bg1")) + .width("40%") + .height(100) + .transform(this.matrix1) + Image($r("app.media.bg2")) + .width("40%") + .height(100) + .margin({top:50}) + .transform(this.matrix2) + } } } - } - ``` + ``` - ![en-us_image_0000001256858419](figures/en-us_image_0000001256858419.png) + ![](figures/s1.png) -## Matrix4 +## Matrix4 +### combine -### combine - -combine(matrix: Matrix4): Object - +combine\(matrix: Matrix4\): Object Matrix overlay function, which is used to overlay the effects of two matrices to generate a new matrix object. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | matrix | Matrix4 | Yes | - | Matrix object to be overlaid. | - -- Return values - | Type | Description | - | -------- | -------- | - | Object | Object after matrix overlay. | - -- Example - - ``` - import Matrix4 from '@ohos.matrix4' - @Entry - @Component - struct Test { - private matrix1 = Matrix4.identity().translate({x:200}).copy() - private matrix2 = Matrix4.identity().scale({x:2}).copy() - build() { - Column() { - // Translate the x-axis by 100 pixels and then scale it up or down by 2x. - Image($r("app.media.bg1")).transform(this.matrix1.combine(this.matrix2)) - .width("40%") - .height(100) - .margin({top:50}) +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    matrix

    +

    Matrix4

    +

    Yes

    +

    -

    +

    Matrix object to be overlaid.

    +
    + +- Return values + + + + + + + + + + +

    Type

    +

    Description

    +

    Object

    +

    Object after matrix overlay.

    +
    + +- Example + + ``` + import Matrix4 from '@ohos.matrix4' + @Entry + @Component + struct Test { + private matrix1 = Matrix4.identity().translate({x:200}).copy() + private matrix2 = Matrix4.identity().scale({x:2}).copy() + build() { + Column() { + // Translate the x-axis by 100 pixels and then scale it up or down by 2x. + Image($r("app.media.bg1")).transform(this.matrix1.combine(this.matrix2)) + .width("40%") + .height(100) + .margin({top:50}) + } } } - } - ``` + ``` - ![en-us_image_0000001212378428](figures/en-us_image_0000001212378428.png) + ![](figures/q1.png) -### invert - -invert(): Object +### invert +invert\(\): Object Matrix inverse function. Can return an inverse matrix of the current matrix object, that is, get an opposite effect. +- Return values -- Return values - | Type | Description | - | -------- | -------- | - | Object | Inverse matrix object of the current matrix. | + + + + + + + + + +

    Type

    +

    Description

    +

    Object

    +

    Inverse matrix object of the current matrix.

    +
    -- Example - - ``` - import Matrix4 from '@ohos.matrix4' - // The effect of matrix 1 (width scaled up by 2x) is opposite to that of matrix 2 (width scaled down by 2x). - let matrix1 = Matrix4.identity().scale({x:2}) - let matrix2 = matrix1.invert() - ``` +- Example + ``` + import Matrix4 from '@ohos.matrix4' + // The effect of matrix 1 (width scaled up by 2x) is opposite to that of matrix 2 (width scaled down by 2x). + let matrix1 = Matrix4.identity().scale({x:2}) + let matrix2 = matrix1.invert() + ``` -### translate -translate({x?: number, y?: number, z?: number}): Object +### translate +translate\(\{x?: number, y?: number, z?: number\}\): Object Matrix translation function, which is used to add the translation effect to the x, y, and z axes of the current matrix. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | No | 0 | Translation distance of the x-axis, in px. | - | y | number | No | 0 | Translation distance of the y-axis, in px. | - | z | number | No | 0 | Translation distance of the z-axis, in px. | - - -- Return values - | Type | Description | - | -------- | -------- | - | Object | Matrix object after the translation effect is added. | - -- Example - - ``` - import Matrix4 from '@ohos.matrix4' - @Entry - @Component - struct Test { - private matrix1 = Matrix4.identity().translate({x:100, y:200, z:30}) - build() { - Column() { - Image($r("app.media.bg1")).transform(this.matrix1) - .width("40%") - .height(100) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    No

    +

    0

    +

    Translation distance of the x-axis, in px.

    +

    y

    +

    number

    +

    No

    +

    0

    +

    Translation distance of the y-axis, in px.

    +

    z

    +

    number

    +

    No

    +

    0

    +

    Translation distance of the z-axis, in px.

    +
    + + +- Return values + + + + + + + + + + +

    Type

    +

    Description

    +

    Object

    +

    Matrix object after the translation effect is added.

    +
    + +- Example + + ``` + import Matrix4 from '@ohos.matrix4' + @Entry + @Component + struct Test { + private matrix1 = Matrix4.identity().translate({x:100, y:200, z:30}) + build() { + Column() { + Image($r("app.media.bg1")).transform(this.matrix1) + .width("40%") + .height(100) + } } } - } - ``` - - ![en-us_image_0000001212058494](figures/en-us_image_0000001212058494.png) + ``` + ![](figures/s3.png) -### scale -scale({x?: number, y?: number, z?: number, centerX?: number, centerY?: number}): Object +### scale +scale\(\{x?: number, y?: number, z?: number, centerX?: number, centerY?: number\}\): Object Matrix scaling function, which is used to add the scaling effect to the x, y, and z axes of the current matrix. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | No | 1 | Scaling multiple of the x-axis. | - | y | number | No | 1 | Scaling multiple of the y-axis. | - | z | number | No | 1 | Scaling multiple of the z-axis. | - | centerX | number | No | 0 | X coordinate of the center point. | - | centerY | number | No | 0 | Y coordinate of the center point. | - - -- Return values - | Type | Description | - | -------- | -------- | - | Object | Matrix object after the scaling effect is added. | - -- Example - - ``` - import Matrix4 from '@ohos.matrix4' - @Entry - @Component - struct Test { - private matrix1 = Matrix4.identity().scale({x:2, y:3, z:4, centerX:50, centerY:50}) - build() { - Column() { - Image($r("app.media.bg1")).transform(this.matrix1) - .width("40%") - .height(100) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    No

    +

    1

    +

    Scaling multiple of the x-axis.

    +

    y

    +

    number

    +

    No

    +

    1

    +

    Scaling multiple of the y-axis.

    +

    z

    +

    number

    +

    No

    +

    1

    +

    Scaling multiple of the z-axis.

    +

    centerX

    +

    number

    +

    No

    +

    0

    +

    X coordinate of the center point.

    +

    centerY

    +

    number

    +

    No

    +

    0

    +

    Y coordinate of the center point.

    +
    + + +- Return values + + + + + + + + + + +

    Type

    +

    Description

    +

    Object

    +

    Matrix object after the scaling effect is added.

    +
    + +- Example + + ``` + import Matrix4 from '@ohos.matrix4' + @Entry + @Component + struct Test { + private matrix1 = Matrix4.identity().scale({x:2, y:3, z:4, centerX:50, centerY:50}) + build() { + Column() { + Image($r("app.media.bg1")).transform(this.matrix1) + .width("40%") + .height(100) + } } } - } - ``` - - ![en-us_image_0000001256978367](figures/en-us_image_0000001256978367.png) + ``` + ![](figures/s4-(1).png) -### rotate -rotate({x?: number, y?: number, z?: number, angle?: number, centerX?: Length, centerY?: Length}): Object +### rotate +rotate\(\{x?: number, y?: number, z?: number, angle?: number, centerX?: Length, centerY?: Length\}\): Object Matrix rotation function, which is used to add the rotation effect to the x, y, and z axes of the current matrix. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | No | 1 | X coordinate of the rotation axis vector. | - | y | number | No | 1 | Y coordinate of the rotation axis vector. | - | z | number | No | 1 | Z coordinate of the rotation axis vector. | - | angle | number | No | 0 | Rotation angle. | - | centerX | number | No | 0 | X coordinate of the center point. | - | centerY | number | No | 0 | Y coordinate of the center point. | - - -- Return values - | Type | Description | - | -------- | -------- | - | Object | Matrix object after the rotation effect is added. | - -- Example - - ``` - import Matrix4 from '@ohos.matrix4' - @Entry - @Component - struct Test { - private matrix1 = Matrix4.identity().rotate({x:1, y:1, z:2, angle:30}) - build() { - Column() { - Image($r("app.media.bg1")).transform(this.matrix1) - .width("40%") - .height(100) - }.width("100%").margin({top:50}) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    No

    +

    1

    +

    X coordinate of the rotation axis vector.

    +

    y

    +

    number

    +

    No

    +

    1

    +

    Y coordinate of the rotation axis vector.

    +

    z

    +

    number

    +

    No

    +

    1

    +

    Z coordinate of the rotation axis vector.

    +

    angle

    +

    number

    +

    No

    +

    0

    +

    Rotation angle.

    +

    centerX

    +

    number

    +

    No

    +

    0

    +

    X coordinate of the center point.

    +

    centerY

    +

    number

    +

    No

    +

    0

    +

    Y coordinate of the center point.

    +
    + + +- Return values + + + + + + + + + + +

    Type

    +

    Description

    +

    Object

    +

    Matrix object after the rotation effect is added.

    +
    + +- Example + + ``` + import Matrix4 from '@ohos.matrix4' + @Entry + @Component + struct Test { + private matrix1 = Matrix4.identity().rotate({x:1, y:1, z:2, angle:30}) + build() { + Column() { + Image($r("app.media.bg1")).transform(this.matrix1) + .width("40%") + .height(100) + }.width("100%").margin({top:50}) + } } - } - ``` - - ![en-us_image_0000001211898504](figures/en-us_image_0000001211898504.png) + ``` + ![](figures/1.png) -### transformPoint -transformPoint(point: Point): Point +### transformPoint +transformPoint\(point: Point\): Point Matrix point transformation function, which is used to apply the current transformation effect to a coordinate point. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | point | Point | Yes | - | Point to be transformed. | - - -- Return values - | Type | Description | - | -------- | -------- | - | Point | Point object after matrix transformation | - -- Example - - ``` - import Matrix4 from '@ohos.matrix4' - import prompt from '@system.prompt' - - @Entry - @Component - struct Test { - private matrix1 = Matrix4.identity().transformPoint([100, 10]) - build() { - Column() { - Button("get Point") - .onClick(() => { - prompt.showToast({message:JSON.stringify(this.matrix1),duration:2000}) - }).backgroundColor(0x2788D9) - }.width("100%").padding(50) +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    point

    +

    Point

    +

    Yes

    +

    -

    +

    Point to be transformed.

    +
    + + +- Return values + + + + + + + + + + +

    Type

    +

    Description

    +

    Point

    +

    Point object after matrix transformation

    +
    + +- Example + + ``` + import Matrix4 from '@ohos.matrix4' + import prompt from '@system.prompt' + + @Entry + @Component + struct Test { + private matrix1 = Matrix4.identity().transformPoint([100, 10]) + build() { + Column() { + Button("get Point") + .onClick(() => { + prompt.showToast({message:JSON.stringify(this.matrix1),duration:2000}) + }).backgroundColor(0x2788D9) + }.width("100%").padding(50) + } } - } - ``` + ``` + + ![](figures/222.gif) + - ![en-us_image_0000001212218464](figures/en-us_image_0000001212218464.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-media-components-video.md b/en/application-dev/reference/arkui-ts/ts-media-components-video.md deleted file mode 100644 index c00ac70de9..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-media-components-video.md +++ /dev/null @@ -1,174 +0,0 @@ -# Video - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -The **<Video>** component provides a video player. - - -## Child Components - -The **<Video>** component does not support any child component. - - -## APIs - -Video(value: VideoOption) - -- VideoOption attributes - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | src | string | No | - | Path of the video source. | - | currentProgressRate | number \| PlaybackSpeed8+ | No | 1.0 \| PlaybackSpeed.Speed_Forward_1_00_X | Video playback speed.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > The value of the number type can only be **0.75**, **1.0**, **1.25**, **1.75**, or **2.0**.

    >  | - | previewUri | string \| PixelMap8+ \|[Resource](../../ui/ts-types.md) | No | - | Path of the preview image. | - | controller | [VideoController](#videocontroller) | No | - | Controller. | - - -- PlaybackSpeed8+ - | Name | Description | - | -------- | -------- | - | Speed_Forward_0_75_X | 0.75x playback speed. | - | Speed_Forward_1_00_X | 1x playback speed. | - | Speed_Forward_1_25_X | 1.25x playback speed. | - | Speed_Forward_1_75_X | 1.75x playback speed. | - | Speed_Forward_2_00_X | 2x playback speed. | - - -## Attributes - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| muted | boolean | false | Whether the video is muted. | -| autoPlay | boolean | false | Whether the video is automatically played. | -| controls | boolean | true | Whether the video playback control bar is displayed. | -| objectFit | [ImageFit](ts-basic-components-image.md) | Cover | Video display mode. | -| loop | boolean | false | Whether a single video is played cyclically. | - - -## Events - - | Name | Description | -| -------- | -------- | -| onStart() => void | Triggered when the video is played. | -| onPause() => void | Triggered when the video playback is paused. | -| onFinish() => void | Triggered when the video playback is finished. | -| onError() => void | Triggered when the video playback fails. | -| onPrepared(event?: { duration: number }) => void | Triggered when video preparation is complete. The video duration (in seconds) is obtained from **duration**. | -| onSeeking(event?: { time: number }) => void | Triggered to report the time (in seconds) when the progress bar is being dragged. | -| onSeeked(event?: { time: number }) => void | Triggered to report the playback time (in seconds) when the user finishes dragging the progress bar. | -| onUpdate(event?: { time: number }) => void | Triggered once per 250 ms when the playback progress changes. The unit of the current playback time is second. | - - -### VideoController - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> A **VideoController** object can control one or more videos. - - | Name | Description | -| -------- | -------- | -| start() : void | Starts playback. | -| pause() : void | Pauses playback. | -| stop() : void | Stops playback. | -| setCurrentTime(value: number) | Sets the video playback position. | -| setCurrentTime(value: number, seekMode: SeekMode)8+ | Sets the video playback position with the specified seek mode. | - -- SeekMode8+ - | Name | Description | - | -------- | -------- | - | PreviousKeyframe | Seeks to the nearest previous keyframe. | - | NextKeyframe | Seeks to the nearest next keyframe. | - | ClosestKeyframe | Seeks to the nearest keyframe. | - | Accurate | Seeks to a specific frame, regardless of whether the frame is a keyframe. | - - -## Example - - -``` -@Entry -@Component -struct VideoCreateComponent { - @State srcs: string = "/resources/video/video1.mp4"; - @State previewUris: string = "/resources/image/media.JPG"; - @State currentProgressRates: number = 1; - @State autoPlays: boolean = false; - @State controlsss: boolean = true; - myVideoController: VideoController = new VideoController(); - @State startStaus: boolean = true; - build() { - Column() { - Video({ - src: this.srcs, - previewUri: this.previewUris, - currentProgressRate: this.currentProgressRates, - controller: this.myVideoController - }).width(700).height(500) - .autoPlay(this.autoPlays) - .controls(this.controlsss) - .onStart(() => { - console.error('onStart'); - }) - .onPause(() => { - console.error('onPause'); - }) - .onFinish(() => { - console.error('onFinish'); - }) - .onError(() => { - console.error('onFinish'); - }) - .onPrepared((e) => { - console.error('onPrepared is ' + e.duration); - }) - .onSeeking((e) => { - console.error('onSeeking is ' + e.time); - }) - .onSeeked((e) => { - console.error('onSeekedis ' + e.time); - }) - .onUpdate((e) => { - console.error('onUpdateis ' + e.time); - }) - Row() { - Button("src").onClick(() => { - if (this.srcs == "/resources/video/video1.mp4") { - this.srcs = "/resources/video/video2.mp4"; - } else { - this.srcs = "/resources/video/video1.mp4"; - } - }); - Button("previewUri").onClick(() => { - if (this.previewUris == "/resources/image/media.JPG") { - this.previewUris = "/resources/image/sinlin.png"; - } else { - this.previewUris = "/resources/image/media.JPG"; - } - }); - Button("controlsss").onClick(() => { - this.controlsss = !this.controlsss; - }); - } - - Row() { - Button("start").onClick(() => { - this.myVideoController.start(); - }); - Button("pause").onClick(() => { - this.myVideoController.pause(); - }); - Button("stop").onClick(() => { - this.myVideoController.stop(); - }); - } - - Row() { - Button("setCurrentTime").onClick(() => { - this.myVideoController.setCurrentTime(9, SeekMode.Accurate); - }); - } - } - } -} -``` diff --git a/en/application-dev/reference/arkui-ts/ts-media-components.md b/en/application-dev/reference/arkui-ts/ts-media-components.md deleted file mode 100644 index 51006bbc82..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-media-components.md +++ /dev/null @@ -1,5 +0,0 @@ -# Media Components - - - -- **[Video](ts-media-components-video.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-methods-action-sheet.md b/en/application-dev/reference/arkui-ts/ts-methods-action-sheet.md index 8140b6010e..cce4ea2419 100644 --- a/en/application-dev/reference/arkui-ts/ts-methods-action-sheet.md +++ b/en/application-dev/reference/arkui-ts/ts-methods-action-sheet.md @@ -1,48 +1,190 @@ -# Action Sheet +# List Selection Dialog Box +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. +List pop-up window. - -An action sheet is a dialog box that displays actions a user can take. - - -## Required Permissions +## Required Permissions None - -## ActionSheet.show - -show(options: { paramObject1}) - -Defines and shows the action sheet. - -- paramObject1 parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | title | string \|[Resource](../../ui/ts-types.md#resource) | No | None | Title of the dialog box. | - | message | string \|[Resource](../../ui/ts-types.md#resource) | | | Content of the dialog box. | - | autoCancel | boolean | No | true | Whether to close the dialog box when the overlay is clicked. | - | confirm | {
    value: string \|[Resource](../../ui/ts-types.md#resource),
    action: () => void
    } | number | string | Text content of the confirm button and callback upon button clicking.
    **value**: button text.
    **action**: callback upon button clicking. | - | cancel | () => void | No | - | Callback invoked when the dialog box is closed after the overlay is clicked. | - | alignment | DialogAlignment | No | DialogAlignment.Default | Alignment mode of the dialog box in the vertical direction. | - | offset | {
    dx: Length\|[Resource](../../ui/ts-types.md#resource)
    dy: Length\|[Resource](../../ui/ts-types.md#resource)
    } | No | - | Offset of the dialog box relative to the alignment position. | - | sheets | Array<SheetInfo> | Yes | - | Options in the dialog box. Each option supports the image, text, and callback. | - -- SheetInfo parameters - | | | | | | - | -------- | -------- | -------- | -------- | -------- | - | Name | Type | Mandatory | Default Value | Description | - | title | string | Yes | - | Sheet text. | - | icon | string | No | None | Sheet icon. | - | action | ()=>void | Yes | - | Callback when the sheet is selected. | - - -## Example - - +## ActionSheet.show + +show\(options: \{ [paramObject1](#table816913216616)\}\) + +Defines and shows the list popup window. + +- paramObject1 parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    title

    +

    string

    +

    No

    +

    None

    +

    Title of the dialog box.

    +

    message

    +

    string

    +

    Yes

    +

    -

    +

    Content of the dialog box.

    +

    autoCancel

    +

    boolean

    +

    No

    +

    true

    +

    Whether to close the dialog box when the overlay is clicked.

    +

    confirm

    +

    {

    +

    value: string,

    +

    action: () => void

    +

    }

    +

    No

    +

    -

    +

    Text content of the confirm button and callback upon button clicking.

    +

    value: button text.

    +

    action: callback upon button clicking.

    +

    cancel

    +

    () => void

    +

    No

    +

    -

    +

    Callback invoked when the dialog box is closed after the overlay is clicked.

    +

    alignment

    +

    DialogAlignment

    +

    No

    +

    DialogAlignment.Default

    +

    Alignment mode of the dialog box in the vertical direction.

    +

    offset

    +

    {

    +

    dx: Length,

    +

    dy: Length

    +

    }

    +

    No

    +

    {

    +

    dx: 0,

    +

    dy: 0

    +

    }

    +

    Offset of the dialog box relative to the alignment position.

    +

    sheets

    +

    Array<SheetInfo>

    +

    Yes

    +

    -

    +

    Options in the dialog box. Each option supports the image, text, and callback.

    +
    + +- SheetInfo parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    title

    +

    string

    +

    Yes

    +

    -

    +

    Sheet text.

    +

    icon

    +

    string

    +

    No

    +

    None

    +

    Sheet icon.

    +

    action

    +

    ()=>void

    +

    Yes

    +

    -

    +

    Callback when the sheet is selected.

    +
    + + +## Example ``` @Entry @@ -89,6 +231,5 @@ struct ActionSheetExapmle { } ``` - -![en-us_image_0000001212058508](figures/en-us_image_0000001212058508.gif) +![](figures/en-us_image_0000001201475612.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-methods-alert-dialog-box.md b/en/application-dev/reference/arkui-ts/ts-methods-alert-dialog-box.md index fd9f05f595..b5ce18d87c 100644 --- a/en/application-dev/reference/arkui-ts/ts-methods-alert-dialog-box.md +++ b/en/application-dev/reference/arkui-ts/ts-methods-alert-dialog-box.md @@ -1,48 +1,284 @@ -# Alert Dialog Box - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This method is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +# Alert Dialog Box +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This method is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. You can set the text content and response callback for an alert dialog box. +## Attributes -## Attributes + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    show

    +

    options: { paramObject1| paramObject2}

    +

    -

    +

    Defines and displays the <AlertDialog> component.

    +
    - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| show | options: { paramObject1\| paramObject2} | - | Defines and displays the **<AlertDialog>** component. | +- paramObject1 parameters -- paramObject1 parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | title | string \|[Resource](../../ui/ts-types.md#resource) | | | Title of a dialog box. | - | message | string \|[Resource](../../ui/ts-types.md#resource) | | | Content of the dialog box. | - | autoCancel | boolean | No | true | Whether to close the dialog box when the overlay is clicked. | - | confirm | {
    value: string \|[Resource](../../ui/ts-types.md#resource),
    fontColor?: Color\|number \|string \|[Resource](../../ui/ts-types.md#resource),
    backgroundColor?:Color \|number\|string\|[Resource](../../ui/ts-types.md#resource),
    action: () => void
    }
    | | | Text content, text color, background color, and click callback of the confirm button. | - | cancel | () => void | No | - | Callback invoked when the dialog box is closed after the overlay is clicked. | - | alignment | DialogAlignment | No | DialogAlignment.Default | Alignment mode of the dialog box in the vertical direction. | - | offset | {
    dx: Length \|[Resource](../../ui/ts-types.md#resource),
    dy: Length  \|[Resource](../../ui/ts-types.md#resource)
    } | | | Offset of the dialog box relative to the alignment position. | - | gridCount | number | No | - | Number of grid columns occupied by the width of the dialog box. | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    title

    +

    string | Resource

    +

    No

    +

    -

    +

    Title of a dialog box.

    +

    message

    +

    string | Resource

    +

    Yes

    +

    -

    +

    Content of the dialog box.

    +

    autoCancel

    +

    boolean

    +

    No

    +

    true

    +

    Whether to close the dialog box when the overlay is clicked.

    +

    confirm

    +

    {

    +

    value: string | Resource,

    +

    fontColor?: Color | number | string | Resource,

    +

    backgroundColor?: Color | number | string | Resource,

    +

    action: () => void

    +

    }

    +

    No

    +

    -

    +

    Text content, text color, background color, and click callback of the confirm button.

    +

    cancel

    +

    () => void

    +

    No

    +

    -

    +

    Callback invoked when the dialog box is closed after the overlay is clicked.

    +

    alignment

    +

    DialogAlignment

    +

    No

    +

    DialogAlignment.Default

    +

    Alignment mode of the dialog box in the vertical direction.

    +

    offset

    +

    {

    +

    dx: Length | Resource,

    +

    dy: Length | Resource

    +

    }

    +

    No

    +

    -

    +

    Offset of the dialog box relative to the alignment position.

    +

    gridCount

    +

    number

    +

    No

    +

    -

    +

    Number of grid columns occupied by the width of the dialog box.

    +
    -- paramObject2 parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | title | string \|[Resource](../../ui/ts-types.md#resource) | No | - | Title of a dialog box. | - | message | string \|[Resource](../../ui/ts-types.md#resource) | Yes | - | Content of the dialog box. | - | autoCancel | boolean | No | true | Whether to close the dialog box when the overlay is clicked. | - | primaryButton | {
    value: string \|[Resource](../../ui/ts-types.md#resource),
    fontColor?: Color\|number \|string \|[Resource](../../ui/ts-types.md#resource),
    backgroundColor?:Color \|number\|string\|[Resource](../../ui/ts-types.md#resource),
    action: () => void
    }
    | | | Text content, text color, background color, and click callback of the primary button. | - | secondaryButton | {
    value: string \|[Resource](../../ui/ts-types.md#resource),
    fontColor?: Color\|number \|string \|[Resource](../../ui/ts-types.md#resource),
    backgroundColor?:Color \|number\|string\|[Resource](../../ui/ts-types.md#resource),
    action: () => void
    }
    | | | Text content, text color, background color, and click callback of the secondary button. | - | cancel | () => void | No | - | Callback invoked when the dialog box is closed after the overlay is clicked. | - | alignment | DialogAlignment | No | DialogAlignment.Default | Alignment mode of the dialog box in the vertical direction. | - | offset | {
    dx: Length \|[Resource](../../ui/ts-types.md#resource),
    dy: Length  \|[Resource](../../ui/ts-types.md#resource)
    } | | | Offset of the dialog box relative to the alignment position. | - | gridCount | number | No | - | Number of grid columns occupied by the width of the dialog box. | +- paramObject2 parameters -## Example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    title

    +

    string | Resource

    +

    No

    +

    -

    +

    Title of a dialog box.

    +

    message

    +

    string | Resource

    +

    Yes

    +

    -

    +

    Content of the dialog box.

    +

    autoCancel

    +

    boolean

    +

    No

    +

    true

    +

    Whether to close the dialog box when the overlay is clicked.

    +

    primaryButton

    +

    {

    +

    value: string | Resource,

    +

    fontColor?: Color | number | string | Resource,

    +

    backgroundColor?: Color | number | string | Resource,

    +

    action: () => void;

    +

    }

    +

    No

    +

    -

    +

    Text content, text color, background color, and click callback of the primary button.

    +

    secondaryButton

    +

    +

    {

    +

    value: string | Resource,

    +

    fontColor?: Color | number | string | Resource,

    +

    backgroundColor?: Color | number | string | Resource,

    +

    action: () => void;

    +

    }

    +

    No

    +

    -

    +

    Text content, text color, background color, and click callback of the secondary button.

    +

    cancel

    +

    () => void

    +

    No

    +

    -

    +

    Callback invoked when the dialog box is closed after the overlay is clicked.

    +

    alignment

    +

    DialogAlignment

    +

    No

    +

    DialogAlignment.Default

    +

    Alignment mode of the dialog box in the vertical direction.

    +

    offset

    +

    {

    +

    dx: Length | Resource,

    +

    dy: Length | Resource

    +

    }

    +

    No

    +

    -

    +

    Offset of the dialog box relative to the alignment position.

    +

    gridCount

    +

    number

    +

    No

    +

    -

    +

    Number of grid columns occupied by the width of the dialog box.

    +
    +## Example + ``` @Entry @Component @@ -97,4 +333,5 @@ struct AlertDialogExample { } ``` -![en-us_image_0000001256978387](figures/en-us_image_0000001256978387.gif) +![](figures/alertdialog.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md b/en/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md index 85d09336c4..67e355e76b 100644 --- a/en/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md +++ b/en/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md @@ -1,71 +1,151 @@ -# Custom Dialog Box - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This method is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -The **CustomDialogController** class is used to display a custom dialog box. - - -## APIs - -CustomDialogController(value:{builder: CustomDialog, cancel?: () => void, autoCancel?: boolean}) - - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | builder | [CustomDialog](../../ui/ ts-component-based-customdialog.md) | Yes | - | Constructor of the custom dialog box content. | - | cancel | () => void | No | - | Callback invoked when the dialog box is closed after the overlay exits. | - | autoCancel | boolean | No | true | Whether to allow users to click the overlay to exit. | - | alignment | DialogAlignment | No | DialogAlignment.Default | Alignment mode of the dialog box in the vertical direction. | - | offset | {
    dx: Length \|[Resource](../../ui/ts-types.md#resource),
    dy: Length  \|[Resource](../../ui/ts-types.md#resource)
    } | | | Offset of the dialog box relative to the alignment position. | - | customStyle | boolean | No | false | Whether the style of the dialog box is customized. | - -- DialogAlignment enums - | Name | Description | - | -------- | -------- | - | Top | Aligns vertically to the top. | - | Center | Aligns vertically to the middle. | - | Bottom | Aligns vertically to the bottom. | - | Default | Default alignment. | - | TopStart8+ | Top left alignment. | - | TopEnd8+ | Top right alignment. | - | CenterStart8+ | Center left alignment. | - | CenterEnd8+ | Center right alignment. | - | BottomStart8+ | Bottom left alignment. | - | BottomEnd8+ | Bottom right alignment. | - - -### CustomDialogController - - -### Objects to Import - +# Custom Dialog box + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This method is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. + +The **CustomDialogController** class is used to display a custom dialog box. + +## APIs + +CustomDialogController\(value:\{builder: CustomDialog, cancel?: \(\) =\> void, autoCancel?: boolean\}\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    builder

    +

    CustomDialog

    +

    Yes

    +

    -

    +

    Constructor of the custom dialog box content.

    +

    cancel

    +

    () => void

    +

    No

    +

    -

    +

    Callback invoked when the dialog box is closed after the overlay exits.

    +

    autoCancel

    +

    boolean

    +

    No

    +

    true

    +

    Whether to allow users to click the overlay to exit.

    +

    alignment

    +

    DialogAlignment

    +

    No

    +

    DialogAlignment.Default

    +

    Alignment mode of the dialog box in the vertical direction.

    +

    offset

    +

    {

    +

    dx: Length | Resource,

    +

    dy: Length | Resource

    +

    }

    +

    No

    +

    -

    +

    Offset of the dialog box relative to the alignment position.

    +

    customStyle

    +

    boolean

    +

    No

    +

    false

    +

    Whether the style of the dialog box is customized.

    +
    + +- DialogAlignment enums + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Top

    +

    Aligns vertically to the top.

    +

    Center

    +

    Aligns vertically to the middle.

    +

    Bottom

    +

    Aligns vertically to the bottom.

    +

    Default

    +

    Default alignment.

    +
    + + +### CustomDialogController + +Creates an object. ``` dialogController : CustomDialogController = new CustomDialogController(value:{builder: CustomDialog, cancel?: () => void, autoCancel?: boolean}) ``` - -### dialogController.open - -open(): void - +open\(\) Opens the content of the custom dialog box. If the content has been displayed, this API does not take effect. - -### dialogController.close - -close(): void +close\(\) Closes the custom dialog box. If the dialog box is closed, the setting does not take effect. - -## Example - +## Example ``` @CustomDialog @@ -125,4 +205,5 @@ struct CustomDialogUser { } ``` -![en-us_image_0000001212058470](figures/en-us_image_0000001212058470.gif) +![](figures/customdialog.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-methods-image-cache.md b/en/application-dev/reference/arkui-ts/ts-methods-image-cache.md index a76ad367d5..3075ad6671 100644 --- a/en/application-dev/reference/arkui-ts/ts-methods-image-cache.md +++ b/en/application-dev/reference/arkui-ts/ts-methods-image-cache.md @@ -1,104 +1,161 @@ -# Image Cache +# Image Cache +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This method is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This method is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +## Modules to Import - -## Modules to Import - - ``` import app from '@system.app' ``` - -## Required Permissions +## Required Permissions None - -## app.setImageCacheCount - -setImageCacheCount(value: number): void - - Sets the maximum number of decoded images that can be cached in the memory to speed up the loading of images from the same sources. If the input parameter is not set, the default value **0** is used, indicating that images are not cached. The built-in Least Recently Used (LRU) policy is used for caching. After new images are loaded, if the upper limit of the cache is exceeded, the images that have not been updated for the longest time will be replaced. You are advised to set the input parameter based on the application memory requirements. If the number of images is too large, the memory usage may be too high. -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | value | number | Yes | Number of decoded images that are cached in the memory. | - -- Example - - ``` - // app.ets - import app from '@system.app'; - - export default { - onCreate() { - app.setImageCacheCount(100) // Set the maximum number of decoded images that can be cached in the memory to 100. - console.info('Application onCreate') - }, - onDestroy() { - console.info('Application onDestroy') - }, - } - ``` - - -## app.setImageRawDataCacheSize - -setImageRawDataCacheSize(value: number): void - -Sets the maximum size (in bytes) of the image data cached in the memory before decoding to speed up the loading of images from the same sources. If the input parameter is not set, the default value **0** is used, indicating that images are not cached. The LRU policy is used for caching. After new images are loaded, if the upper limit of the cache is exceeded, the images that have not been updated for the longest time will be replaced. You are advised to set the input parameter based on the application memory requirements. If the image cache is too large, the memory usage may be too high. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | value | number | Yes | Size of the image data cached before decoding, in bytes. | - -- Example +## app.setImageCacheCount + +setImageCacheCount\(value: number\): void + +Sets the maximum number of decoded images that can be cached in the memory to speed up the loading of images from the same sources. If the input parameter is not set, the default value **0** is used, indicating that images are not cached. The built-in Least Recently Used \(LRU\) policy is used for caching. After new images are loaded, if the upper limit of the cache is exceeded, the images that have not been updated for the longest time will be replaced. You are advised to set the input parameter based on the application memory requirements. If the number of images is too large, the memory usage may be too high. + +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    value

    +

    number

    +

    Yes

    +

    Number of decoded images that are cached in the memory.

    +
    + +- Example + + ``` + // app.ets + import app from '@system.app'; + export default { + onCreate() { + app.setImageCacheCount(100) // Set the maximum number of decoded images that can be cached in the memory to 100. + console.info('Application onCreate') + }, + onDestroy() { + console.info('Application onDestroy') + }, + } + ``` + + +## app.setImageRawDataCacheSize + +setImageRawDataCacheSize\(value: number\): void + +Sets the maximum size \(in bytes\) of the image data cached in the memory before decoding to speed up the loading of images from the same sources. If the input parameter is not set, the default value **0** is used, indicating that images are not cached. The LRU policy is used for caching. After new images are loaded, if the upper limit of the cache is exceeded, the images that have not been updated for the longest time will be replaced. You are advised to set the input parameter based on the application memory requirements. If the image cache is too large, the memory usage may be too high. + +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    value

    +

    number

    +

    Yes

    +

    Size of the image data cached before decoding, in bytes.

    +
    + +- Example + + ``` + // app.ets + import app from '@system.app'; - ``` - // app.ets - import app from '@system.app'; - - export default { - onCreate() { - app.setImageRawDataCacheSize(104,857,600) // Set the upper limit of the memory for caching image data before decoding to 100 MB. - console.info('Application onCreate') - }, - onDestroy() { - console.info('Application onDestroy') - }, - } - ``` - - -## app.setImageFileCacheSize - -setImageFileCacheSize(value: number): void - -Sets the maximum size of the image file cache (in bytes) to speed up the loading of images from the same sources, especially online image sources and thumbnails. If the input parameter is not set, the default value 100 MB is used. The LRU policy is used for caching. After new images are loaded, if the upper limit of the cache is exceeded, the images that have not been updated for the longest time will be replaced. You are advised to set the input parameter based on the application memory requirements. If the image cache is too large, the disk usage may be too high. - -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | value | number | Yes | Size of the image file cache, in bytes. | - -- Example + export default { + onCreate() { + app.setImageRawDataCacheSize(104,857,600) // Set the upper limit of the memory for caching image data before decoding to 100 MB. + console.info('Application onCreate') + }, + onDestroy() { + console.info('Application onDestroy') + }, + } + ``` + + +## app.setImageFileCacheSize + +setImageFileCacheSize\(value: number\): void + +Sets the maximum size of the image file cache \(in bytes\) to speed up the loading of images from the same sources, especially online image sources and thumbnails. If the input parameter is not set, the default value 100 MB is used. The LRU policy is used for caching. After new images are loaded, if the upper limit of the cache is exceeded, the images that have not been updated for the longest time will be replaced. You are advised to set the input parameter based on the application memory requirements. If the image cache is too large, the disk usage may be too high. + +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    value

    +

    number

    +

    Yes

    +

    Size of the image file cache, in bytes.

    +
    + +- Example + + ``` + // app.ets + import app from '@system.app'; - ``` - // app.ets - import app from '@system.app'; - - export default { - onCreate() { - app.setImageFileCacheSize(209,715,200) // Set the upper limit of the image file cache to 200 MB. - console.info('Application onCreate') - }, - onDestroy() { - console.info('Application onDestroy') - }, - } - ``` + export default { + onCreate() { + app.setImageFileCacheSize(209,715,200) // Set the upper limit of the image file cache to 200 MB. + console.info('Application onCreate') + }, + onDestroy() { + console.info('Application onDestroy') + }, + } + ``` + + diff --git a/en/application-dev/reference/arkui-ts/ts-methods-media-query.md b/en/application-dev/reference/arkui-ts/ts-methods-media-query.md index 1f7e1e91bc..8437e78f0b 100644 --- a/en/application-dev/reference/arkui-ts/ts-methods-media-query.md +++ b/en/application-dev/reference/arkui-ts/ts-methods-media-query.md @@ -1,115 +1,261 @@ -# Media Query +# Media Query +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This method is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This method is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Modules to Import - +## Modules to Import ``` import mediaquery from '@ohos.mediaquery' ``` - -## Required Permissions +## Required Permissions None +## mediaquery.matchMediaSync -## mediaquery.matchMediaSync - -matchMediaSync(condition: string): MediaQueryListener +matchMediaSync\(condition: string\): MediaQueryListener Sets the media query criteria and returns the corresponding listening handle. -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | condition | string | Yes | Matching condition of a media event. | - -- Return values - | Type | Description | - | -------- | -------- | - | MediaQueryListener | Listening handle to a media event, which is used to register or unregister the listening callback. | - -- Example - - ``` - listener = mediaquery.matchMediaSync('(orientation: landscape)'); // Listen to landscape events. - ``` - - -## MediaQueryListener +- Parameters + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    condition

    +

    string

    +

    Yes

    +

    Matching condition of a media event. For details about the condition string format, see Media Query.

    +
    + +- Return values + + + + + + + + + + +

    Type

    +

    Description

    +

    MediaQueryListener

    +

    Listening handle to a media event, which is used to register or unregister the listening callback.

    +
    + +- Example + + ``` + listener = mediaquery.matchMediaSync('(orientation: landscape)'); // Listen to landscape events. + ``` + + +## MediaQueryListener Media query handle, including the first query result when the handle is applied for. - -### Attributes - - | Name | Type | Readable | Writable | Description | -| -------- | -------- | -------- | -------- | -------- | -| matches | boolean | Yes | No | Whether the match condition is met. | -| media | string | Yes | No | Matching condition of a media event. | - - -### on - -on(type: 'change', callback: Callback<MediaQueryResult>): void +### Attributes + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Readable

    +

    Writable

    +

    Description

    +

    matches

    +

    boolean

    +

    Yes

    +

    No

    +

    Whether the match condition is met.

    +

    media

    +

    string

    +

    Yes

    +

    No

    +

    Matching condition of a media event.

    +
    + +### on + +on\(type: 'change', callback: Callback\): void Registers a callback with the corresponding query condition by using the handle. This callback is triggered when the media attributes change. -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | type | string | Yes | Must enter the string **change**. | - | callback | Callback<MediaQueryResult> | Yes | Callback registered with media query. | - -- Example - For details, see the [off example](#off). - - -### off - -off(type: 'change', callback?: Callback<MediaQueryResult>): void - - Unregisters a callback with the corresponding query condition by using the handle, so that no callback is triggered when the media attributes change. -- Parameters - | Name | Type | Mandatory | Description | - | -------- | -------- | -------- | -------- | - | type | boolean | Yes | Must enter the string **change**. | - | callback | Callback<MediaQueryResult> | No | Callback to be unregistered. If the default value is used, all callbacks of the handle are unregistered. | - -- Example - - ``` - listener = mediaquery.matchMediaSync('(orientation: landscape)'); // Listens to landscape events. - onPortrait(mediaQueryResult) { - if (mediaQueryResult.matches) { - // do something here - } else { - // do something here - } - } - listener.on('change', onPortrait) // Register a callback. - listener.off('change', onPortrait) // Unregister a callback. - ``` - - -## MediaQueryResult - - -### Attributes - - | Name | Type | Readable | Writable | Description | -| -------- | -------- | -------- | -------- | -------- | -| matches | boolean | Yes | No | Whether the match condition is met. | -| media | string | Yes | No | Matching condition of a media event. | - - -### Example - +- Parameters + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    type

    +

    string

    +

    Yes

    +

    Must enter the string change.

    +

    callback

    +

    Callback<MediaQueryResult>

    +

    Yes

    +

    Callback registered with media query.

    +
    + +- Example + + For details, see the [off example](#li16426122219256). + + +### off + +off\(type: 'change', callback?: Callback\): void + +Unregisters a callback with the corresponding query condition by using the handle, so that no callback is triggered when the media attributes change. + +- Parameters + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Description

    +

    type

    +

    boolean

    +

    Yes

    +

    Must enter the string change.

    +

    callback

    +

    Callback<MediaQueryResult>

    +

    No

    +

    Callback to be unregistered. If the default value is used, all callbacks of the handle are unregistered.

    +
    + +- Example + + ``` + listener = mediaquery.matchMediaSync('(orientation: landscape)'); // Listens to landscape events. + onPortrait(mediaQueryResult) { + if (mediaQueryResult.matches) { + // do something here + } else { + // do something here + } + } + listener.on('change', onPortrait) // Register a callback. + listener.off('change', onPortrait) // Unregister a callback. + ``` + + +## MediaQueryResult + +### Attributes + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Readable

    +

    Writable

    +

    Description

    +

    matches

    +

    boolean

    +

    Yes

    +

    No

    +

    Whether the match condition is met.

    +

    media

    +

    string

    +

    Yes

    +

    No

    +

    Matching condition of a media event.

    +
    + +### Example ``` import mediaquery from '@ohos.mediaquery' @@ -147,4 +293,5 @@ struct MediaQueryExample { } ``` -![en-us_image_0000001257138369](figures/en-us_image_0000001257138369.gif) +![](figures/mediaquery.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-methods-popup-window.md b/en/application-dev/reference/arkui-ts/ts-methods-popup-window.md deleted file mode 100644 index d73efbd8c8..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-methods-popup-window.md +++ /dev/null @@ -1,9 +0,0 @@ -# Pop-up Window - - - -- **[Alert Dialog Box](ts-methods-alert-dialog-box.md)** - -- **[Action Sheet](ts-methods-action-sheet.md)** - -- **[Custom Dialog Box](ts-methods-custom-dialog-box.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-motion-path-animation.md b/en/application-dev/reference/arkui-ts/ts-motion-path-animation.md index ec0b7d8d9b..56719de12b 100644 --- a/en/application-dev/reference/arkui-ts/ts-motion-path-animation.md +++ b/en/application-dev/reference/arkui-ts/ts-motion-path-animation.md @@ -1,23 +1,51 @@ -# Motion Path Animation - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +# Motion Path Animation +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. The attributes described in this topic are used to set the motion path of the component in a translation animation. +## Attributes -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| motionPath | {
    path: string,
    from?: number,
    to?: number,
    rotatable?: boolean
    }
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > In a path, **start** and **end** can be used to replace the start point and end point. Example:

    > 'Mstart.x start.y L50 50 Lend.x end.y Z' | {
    "",
    0.0,
    1.0,
    false
    } | Motion path of the component. The input parameters are described as follows:
    - **path**: motion path of the translation animation. The **svg** path string is used.
    - **from**: start point of the motion path. The default value is **0.0**.
    - **to**: end point of the motion path. The default value is **1.0**.
    - **rotatable**: whether to rotate along the path. | + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    motionPath

    +

    {

    +

    path: string,

    +

    from?: number,

    +

    to?: number,

    +

    rotatable?: boolean

    +

    }

    +
    NOTE:

    In a path, start and end can be used to replace the start point and end point. Example:

    +

    'Mstart.x start.y L50 50 Lend.x end.y Z'

    +
    +

    {

    +

    "",

    +

    0.0,

    +

    1.0,

    +

    false

    +

    }

    +

    Motion path of the component. The input parameters are described as follows:

    +
    • path: motion path of the translation animation. The svg path string is used.
    • from: start point of the motion path. The default value is 0.0.
    • to: end point of the motion path. The default value is 1.0.
    • rotatable: whether to rotate along the path.
    +
    +## Example -## Example - - ``` @Entry @Component @@ -40,4 +68,5 @@ struct MotionPathExample { } ``` -![en-us_image_0000001212378420](figures/en-us_image_0000001212378420.gif) +![](figures/motion.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-offscreencanvasrenderingcontext2d.md b/en/application-dev/reference/arkui-ts/ts-offscreencanvasrenderingcontext2d.md index 1e133ff688..440b12f304 100644 --- a/en/application-dev/reference/arkui-ts/ts-offscreencanvasrenderingcontext2d.md +++ b/en/application-dev/reference/arkui-ts/ts-offscreencanvasrenderingcontext2d.md @@ -1,54 +1,260 @@ -# OffscreenCanvasRenderingConxt2D - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> The APIs of this module are supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -Use **OffscreenCanvasRenderingContext2D** to draw rectangles, images, and text offscreen onto a canvas. Drawing offscreen onto a canvas is a process where content to draw onto the canvas is first drawn in the buffer, and then converted into a picture, and finally the picture is drawn on the canvas. This process increases the drawing efficiency. - - -## APIs - -OffscreenCanvasRenderingContext2D(width: number, height: number, setting: RenderingContextSettings) - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | width | number | Yes | - | Width of the offscreen canvas. | - | height | number | Yes | - | Height of the offscreen canvas. | - | setting | [RenderingContextSettings](ts-canvasrenderingcontext2d.md#renderingcontextsettings) | Yes | - | See RenderingContextSettings. | - - -## Attributes - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| [fillStyle](#fillstyle) | <color> \| [CanvasGradient](ts-components-canvas-canvasgradient.md) \| [CanvasPattern](#canvaspattern) | - | Style used to fill an area.
    - When the type is **<color>**, this attribute indicates the fill color.
    - When the type is **CanvasGradient**, this attribute indicates a gradient object, which is created using the [createLinearGradient](#createlineargradient) method.
    - When the type is **CanvasPattern**, this attribute indicates a pattern, which is created using the [createPattern](#createpattern) method. | -| [lineWidth](#linewidth) | number | - | Line width. | -| [strokeStyle](#strokestyle) | <color> \| [CanvasGradient](ts-components-canvas-canvasgradient.md) \| [CanvasPattern](#canvaspattern) | - | Stroke style.
    - When the type is **<color>**, this attribute indicates the stroke color.
    - When the type is **CanvasGradient**, this attribute indicates a gradient object, which is created using the [createLinearGradient](#createlineargradient) method.
    - When the type is **CanvasPattern**, this attribute indicates a pattern, which is created using the [createPattern](#createpattern) method. | -| [lineCap](#linecap) | string | 'butt' | Style of the line endpoints. The options are as follows:
    - **'butt'**: The endpoints of the line are squared off.
    - **'round'**: The endpoints of the line are rounded.
    - **'square'**: The endpoints of the line are squared off by adding a box with an equal width and half the height of the line's thickness. | -| [lineJoin](#linejoin) | string | 'miter' | Style of the shape used to join line segments. The options are as follows:
    - **'round'**: The shape used to join line segments is a rounded corner with the radius equal to the line width.
    - **'bevel'**: The shape used to join line segments is a beveled corner. The rectangular corner of each line is independent.
    - **'miter'**: The shape used to join line segments is a mitered corner. The corner is formed by extending the outside edges of the lines until they meet. You can adjust the effect of this attribute using **miterLimit**. | -| [miterLimit](#miterlimit) | number | 10 | Maximum miter length. The miter length is the distance between the inner corner and the outer corner where two lines meet. | -| [font](#font) | string | 'normal normal 14px sans-serif' | Font style.
    Syntax: ctx.font='font-size font-family'
    - (Optional) **font-size**: font size and row height. The unit can only be px.
    - (Optional) **font-family**: font family.
    Syntax: ctx.font='font-style font-weight font-size font-family'
    - (Optional) **font-style**: specifies the font style. Available values are **'normal'** and **'italic'**.
    - (Optional) **font-weight**: font weight. Available values are as follows: **'normal'**, **'bold'**, **'bolder'**, **'lighter'**, **100**, **200**, **300**, **400**, **500**, **600**, **700**, **800**, **900**
    - (Optional) **font-size**: font size and row height. The unit can only be px.
    - (Optional) **font-family**: font family. Available values are **'sans-serif'**, **'serif'**, and **'monospace'**. | -| [textAlign](#textalign) | string | 'left' | Text alignment mode. Available values are as follows:
    - **'left'**: The text is left-aligned.
    - **'right'**: The text is right-aligned.
    - **'center'**: The text is center-aligned.
    - **'start'**: The text is aligned with the start bound.
    - **'end'**: The text is aligned with the end bound.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > In the **ltr** layout mode, the value **start** equals **left**. In the **rtl** layout mode, the value **start** equals **right**. | -| [textBaseline](#textbaseline) | string | 'alphabetic' | Horizontal alignment mode of text. Available values are as follows:
    - **'alphabetic'**: The text baseline is the normal alphabetic baseline.
    - **'top'**: The text baseline is on the top of the text bounding box.
    - **'hanging'**: The text baseline is a hanging baseline over the text.
    - **'middle'**: The text baseline is in the middle of the text bounding box.
    - **'ideographic'**: The text baseline is the ideographic baseline. If a character exceeds the alphabetic baseline, the ideographic baseline is located at the bottom of the excess character.
    - **'bottom'**: The text baseline is at the bottom of the text bounding box. Its difference from the ideographic baseline is that the ideographic baseline does not consider letters in the next line. | -| [globalAlpha](#globalalpha) | number | - | Opacity. **0.0**: completely transparent; **1.0**: completely opaque. | -| [lineDashOffset](#linedashoffset) | number | 0.0 | Offset of the dashed line. The precision is float. | -| [globalCompositeOperation](#globalcompositeoperation) | string | 'source-over' | Composition operation type. Available values are as follows: **'source-over'**, **'source-atop'**, **'source-in'**, **'source-out'**, **'destination-over'**, **'destination-atop'**, **'destination-in'**, **'destination-out'**, **'lighter'**, **'copy'**, and **'xor'**. | -| [shadowBlur](#shadowblur) | number | 0.0 | Blur level during shadow drawing. A larger value indicates a more blurred effect. The precision is float. | -| [shadowColor](#shadowcolor) | <color> | - | Shadow color. | -| [shadowOffsetX](#shadowoffsetx) | number | - | X-axis shadow offset relative to the original object. | -| [shadowOffsetY](#shadowoffsety) | number | - | Y-axis shadow offset relative to the original object. | -| [imageSmoothingEnabled](#imagesmoothingenabled) | boolean | true | Whether to adjust the image smoothness during image drawing. The value **true** means to enable this feature, and **false** means the opposite. | -| imageSmoothingQuality | string | 'low' | Image smoothness. The value can be **'low'**, **'medium'**, or **'high'**. | - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> The value of the **<color>** type can be in 'rgb(255, 255, 255)', 'rgba(255, 255, 255, 1.0)', or '\#FFFFFF' format. - - -### fillStyle - +# OffscreenCanvasRenderingConxt2D + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. + +Use **OffscreenCanvasRenderingContext2D** to draw rectangles, images, and text offscreen onto a canvas. Drawing offscreen onto a canvas is a process where content to draw onto the canvas is first drawn in the buffer, and then converted into a picture, and finally the picture is drawn on the canvas. This process increases the drawing efficiency. + +## APIs + +OffscreenCanvasRenderingContext2D\(width: number, height: number, setting: RenderingContextSettings\) + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    width

    +

    number

    +

    Yes

    +

    -

    +

    Width of the offscreen canvas.

    +

    height

    +

    number

    +

    Yes

    +

    -

    +

    Height of the offscreen canvas.

    +

    setting

    +

    RenderingContextSettings

    +

    Yes

    +

    -

    +

    For details, see APIs of RenderingContextSettings.

    +
    + + +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    fillStyle

    +

    <color> | CanvasGradient | CanvasPattern

    +

    -

    +

    Style to fill an area.

    +
    • When the type is <color>, this parameter indicates the color of the filling area.
    • When the type is CanvasGradient, this parameter indicates a gradient object, which is created using the createLinearGradient method.
    • When the type is CanvasPattern, use the createPattern method to create a pattern.
    +

    lineWidth

    +

    number

    +

    -

    +

    Line width.

    +

    strokeStyle

    +

    <color> | CanvasGradient | CanvasPattern

    +

    -

    +

    Stroke style.

    +
    • When the type is <color>, this parameter indicates the stroke color.
    • When the type is CanvasGradient, this parameter indicates a gradient object, which is created using the createLinearGradient method.
    • When the type is CanvasPattern, use the createPattern method to create a pattern.
    +

    lineCap

    +

    string

    +

    'butt'

    +

    Style of the specified line endpoint. The options are as follows:

    +
    • 'butt': The endpoints of the line are squared off.
    • 'round': The endpoints of the line are rounded.
    • 'square': The endpoints of the line are squared off, and each endpoint has added a rectangle whose length is the same as the line thickness and whose width is half of the line thickness.
    +

    lineJoin

    +

    string

    +

    'miter'

    +

    Style of the intersection point between line segments. The options are as follows:

    +
    • 'round': The intersection is a sector, whose radius at the rounded corner is equal to the line width.
    • 'bevel': The intersection is a triangle. The rectangular corner of each line is independent.
    • 'miter': The intersection has a miter corner by extending the outside edges of the lines until they meet. You can view the effect of this attribute in miterLimit.
    +

    miterLimit

    +

    number

    +

    10

    +

    Maximum miter length. The miter length is the distance between the inner corner and the outer corner where two lines meet.

    +

    font

    +

    string

    +

    'normal normal 14px sans-serif'

    +

    Font style.

    +

    Syntax: ctx.font='font-size font-family'

    +
    • (Optional) font-size: font size and row height. The unit can only be pixels.
    • (Optional) font-family: font family.
    +

    Syntax: ctx.font='font-style font-weight font-size font-family'

    +
    • (Optional) font-style: specifies the font style. Available values are 'normal' and 'italic'.
    • (Optional) font-weight: font weight. Available values are as follows: 'normal', 'bold', 'bolder', 'lighter', 100, 200, 300, 400, 500, 600, 700, 800, 900
    • (Optional) font-size: font size and row height. The unit can only be pixels.
    • (Optional) font-family: font family. Available values are 'sans-serif', 'serif', and 'monospace'.
    +

    textAlign

    +

    string

    +

    'left'

    +

    Text alignment mode. Available values are as follows:

    +
    • 'left': The text is left-aligned.
    • 'right': The text is right-aligned.
    • 'center': The text is center-aligned.
    • 'start': The text is aligned with the start bound.
    • 'end': The text is aligned with the end bound.
    +
    NOTE:

    In the ltr layout mode, the value start equals left. In the rtl layout mode, the value start equals right.

    +
    +

    textBaseline

    +

    string

    +

    'alphabetic'

    +

    Horizontal alignment mode of text. Available values are as follows:

    +
    • 'alphabetic': The text baseline is the normal alphabetic baseline.
    • 'top': The text baseline is on the top of the text bounding box.
    • 'hanging': The text baseline is a hanging baseline over the text.
    • 'middle': The text baseline is in the middle of the text bounding box.
    • 'ideographic': The text baseline is the ideographic baseline. If a character exceeds the alphabetic baseline, the ideographic baseline is located at the bottom of the excess character.
    • 'bottom': The text baseline is at the bottom of the text bounding box. Its difference from the ideographic baseline is that the ideographic baseline does not consider letters in the next line.
    +

    globalAlpha

    +

    number

    +

    -

    +

    Opacity. 0.0: completely transparent; 1.0: completely opaque.

    +

    lineDashOffset

    +

    number

    +

    0.0

    +

    Offset of the dashed line. The precision is float.

    +

    globalCompositeOperation

    +

    string

    +

    'source-over'

    +

    Composition operation type. Available values are as follows: 'source-over', 'source-atop', 'source-in', 'source-out', 'destination-over', 'destination-atop', 'destination-in', 'destination-out', 'lighter', 'copy', and 'xor'.

    +

    shadowBlur

    +

    number

    +

    0.0

    +

    Blur level during shadow drawing. A larger value indicates a more blurred effect. The precision is float.

    +

    shadowColor

    +

    <color>

    +

    -

    +

    Shadow color.

    +

    shadowOffsetX

    +

    number

    +

    -

    +

    X-axis shadow offset relative to the original object.

    +

    shadowOffsetY

    +

    number

    +

    -

    +

    Y-axis shadow offset relative to the original object.

    +

    imageSmoothingEnabled

    +

    boolean

    +

    true

    +

    Whether to adjust the image smoothness during image drawing. The value true means to enable this feature, and false means the opposite.

    +

    imageSmoothingQuality

    +

    string

    +

    'low'

    +

    Image smoothness. The value can be 'low', 'medium', or 'high'.

    +
    + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>The value of the **** type can be in 'rgb\(255, 255, 255\)', 'rgba\(255, 255, 255, 1.0\)', or '\#FFFFFF' format. + +### fillStyle ``` @Entry @@ -77,11 +283,9 @@ struct FillStyleExample { } ``` -![en-us_image_0000001211898510](figures/en-us_image_0000001211898510.png) - - -### lineWidth +![](figures/en-us_image_0000001237555173.png) +### lineWidth ``` @Entry @@ -110,11 +314,9 @@ struct LineWidthExample { } ``` -![en-us_image_0000001257058439](figures/en-us_image_0000001257058439.png) - - -### strokeStyle +![](figures/en-us_image_0000001192755194.png) +### strokeStyle ``` @Entry @@ -144,12 +346,9 @@ struct StrokeStyleExample { } ``` +![](figures/en-us_image_0000001237355135.png) -![en-us_image_0000001257058429](figures/en-us_image_0000001257058429.png) - - -### lineCap - +### lineCap ``` @Entry @@ -182,11 +381,9 @@ struct LineCapExample { } ``` -![en-us_image_0000001256858427](figures/en-us_image_0000001256858427.png) - - -### lineJoin +![](figures/en-us_image_0000001192595232.png) +### lineJoin ``` @Entry @@ -220,11 +417,9 @@ struct LineJoinExample { } ``` -![en-us_image_0000001256858429](figures/en-us_image_0000001256858429.png) - - -### miterLimit +![](figures/en-us_image_0000001237715141.png) +### miterLimit ``` @Entry @@ -258,11 +453,9 @@ struct MiterLimit { } ``` -![en-us_image_0000001212218472](figures/en-us_image_0000001212218472.png) - - -### font +![](figures/en-us_image_0000001193075178.png) +### font ``` @Entry @@ -291,11 +484,9 @@ struct Font { } ``` -![en-us_image_0000001211898508](figures/en-us_image_0000001211898508.png) - - -### textAlign +![](figures/en-us_image_0000001193075164.png) +### textAlign ``` @Entry @@ -339,11 +530,9 @@ struct CanvasExample { } ``` -![en-us_image_0000001257138377](figures/en-us_image_0000001257138377.png) - - -### textBaseline +![](figures/en-us_image_0000001192595234.png) +### textBaseline ``` @Entry @@ -387,11 +576,9 @@ struct TextBaseline { } ``` -![en-us_image_0000001256978375](figures/en-us_image_0000001256978375.png) - - -### globalAlpha +![](figures/en-us_image_0000001193075180.png) +### globalAlpha ``` @Entry @@ -423,11 +610,9 @@ struct GlobalAlpha { } ``` -![en-us_image_0000001211898506](figures/en-us_image_0000001211898506.png) - - -### lineDashOffset +![](figures/en-us_image_0000001237715165.png) +### lineDashOffset ``` @Entry @@ -457,25 +642,74 @@ struct LineDashOffset { } ``` -![en-us_image_0000001212058506](figures/en-us_image_0000001212058506.png) - - -### globalCompositeOperation - - | Name | Description | -| -------- | -------- | -| source-over | Displays the new drawing above the existing drawing. This attribute is used by default. | -| source-atop | Displays the new drawing on the top of the existing drawing. | -| source-in | Displays the new drawing inside the existing drawing. | -| source-out | Displays the part of the new drawing that is outside of the existing drawing. | -| destination-over | Displays the existing drawing above the new drawing. | -| destination-atop | Displays the existing drawing on the top of the new drawing. | -| destination-in | Displays the existing drawing inside the new drawing. | -| destination-out | Displays the part of the existing drawing that is outside of the new drawing. | -| lighter | Displays both the new drawing and the existing drawing. | -| copy | Displays the new drawing and neglects the existing drawing. | -| xor | Combines the new drawing and existing drawing using the XOR operation. | - +![](figures/en-us_image_0000001237555181.png) + +### globalCompositeOperation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    source-over

    +

    Displays the new drawing above the existing drawing. This attribute is used by default.

    +

    source-atop

    +

    Displays the new drawing on the top of the existing drawing.

    +

    source-in

    +

    Displays the new drawing inside the existing drawing.

    +

    source-out

    +

    Displays the part of the new drawing that is outside of the existing drawing.

    +

    destination-over

    +

    Displays the existing drawing above the new drawing.

    +

    destination-atop

    +

    Displays the existing drawing above the new drawing.

    +

    destination-in

    +

    Displays the existing drawing inside the new drawing.

    +

    destination-out

    +

    Displays the part of the existing drawing that is outside of the new drawing.

    +

    lighter

    +

    Displays both the new drawing and the existing drawing.

    +

    copy

    +

    Displays the new drawing and neglects the existing drawing.

    +

    xor

    +

    Combines the new drawing and existing drawing using the XOR operation.

    +
    ``` @Entry @@ -512,11 +746,9 @@ struct GlobalCompositeOperation { } ``` -![en-us_image_0000001212218474](figures/en-us_image_0000001212218474.png) - - -### shadowBlur +![](figures/en-us_image_0000001237355137.png) +### shadowBlur ``` @Entry @@ -547,11 +779,9 @@ struct ShadowBlur { } ``` -![en-us_image_0000001211898514](figures/en-us_image_0000001211898514.png) - - -### shadowColor +![](figures/en-us_image_0000001192755182.png) +### shadowColor ``` @Entry @@ -583,11 +813,9 @@ struct ShadowColor { } ``` -![en-us_image_0000001212058502](figures/en-us_image_0000001212058502.png) - - -### shadowOffsetX +![](figures/en-us_image_0000001237555155.png) +### shadowOffsetX ``` @Entry @@ -619,11 +847,9 @@ struct ShadowOffsetX { } ``` -![en-us_image_0000001257138379](figures/en-us_image_0000001257138379.png) - - -### shadowOffsetY +![](figures/en-us_image_0000001193075168.png) +### shadowOffsetY ``` @Entry @@ -655,11 +881,9 @@ struct ShadowOffsetY { } ``` -![en-us_image_0000001257058427](figures/en-us_image_0000001257058427.png) - - -### imageSmoothingEnabled +![](figures/en-us_image_0000001237475139.png) +### imageSmoothingEnabled ``` @Entry @@ -689,1472 +913,2991 @@ struct ImageSmoothingEnabled { } ``` -![en-us_image_0000001257138385](figures/en-us_image_0000001257138385.png) - +![](figures/en-us_image_0000001237355121.png) -## Methods +## Methods +### fillRect -### fillRect - -fillRect(x: number, y: number, w: number, h: number): void +fillRect\(x: number, y: number, w: number, h: number\): void Fills a rectangle on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the upper left corner of the rectangle. | - | y | number | Yes | 0 | Y-coordinate of the upper left corner of the rectangle. | - | width | number | Yes | 0 | Width of the rectangle. | - | height | number | Yes | 0 | Height of the rectangle. | - -- Example - - ``` - @Entry - @Component - struct FillRect { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.fillRect(0,30,100,100) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) - } - .width('100%') - .height('100%') +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the upper left corner of the rectangle.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the upper left corner of the rectangle.

    +

    width

    +

    number

    +

    Yes

    +

    0

    +

    Width of the rectangle.

    +

    height

    +

    number

    +

    Yes

    +

    0

    +

    Height of the rectangle.

    +
    + +- Example + + ``` + @Entry + @Component + struct FillRect { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.fillRect(0,30,100,100) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } } - } - ``` - - ![en-us_image_0000001257138375](figures/en-us_image_0000001257138375.png) - - -### strokeRect - -strokeRect(x: number, y: number, w: number, h: number): void - -Draws an outlined rectangle on the canvas. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the upper left corner of the rectangle. | - | y | number | Yes | 0 | Y-coordinate of the upper left corner of the rectangle. | - | width | number | Yes | 0 | Width of the rectangle. | - | height | number | Yes | 0 | Height of the rectangle. | - -- Example - - ``` - @Entry - @Component - struct StrokeRect { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.strokeRect(30, 30, 200, 150) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) + ``` + + ![](figures/en-us_image_0000001237475123.png) + + +### strokeRect + +strokeRect\(x: number, y: number, w: number, h: number\): void + +Draws a rectangle stroke on the canvas. + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the upper left corner of the rectangle stroke.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the upper left corner of the rectangle stroke.

    +

    width

    +

    number

    +

    Yes

    +

    0

    +

    Width of the rectangle.

    +

    height

    +

    number

    +

    Yes

    +

    0

    +

    Height of the rectangle.

    +
    + + +- Example + + ``` + @Entry + @Component + struct StrokeRect { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.strokeRect(30, 30, 200, 150) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212378436](figures/en-us_image_0000001212378436.png) + ![](figures/en-us_image_0000001192755180.png) -### clearRect +### clearRect -clearRect(x: number, y: number, w: number, h: number): void +clearRect\(x: number, y: number, w: number, h: number\): void Clears the content in a rectangle on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the upper left corner of the rectangle. | - | y | number | Yes | 0 | Y-coordinate of the upper left corner of the rectangle. | - | width | number | Yes | 0 | Width of the rectangle. | - | height | number | Yes | 0 | Height of the rectangle. | - -- Example - - ``` - @Entry - @Component - struct ClearRect { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.fillStyle = 'rgb(0,0,255)' - this.offContext.fillRect(0,0,500,500) - this.offContext.clearRect(20,20,150,100) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the upper left corner of the rectangle.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the upper left corner of the rectangle.

    +

    width

    +

    number

    +

    Yes

    +

    0

    +

    Width of the rectangle.

    +

    height

    +

    number

    +

    Yes

    +

    0

    +

    Height of the rectangle.

    +
    + + +- Example + + ``` + @Entry + @Component + struct ClearRect { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.fillStyle = 'rgb(0,0,255)' + this.offContext.fillRect(0,0,500,500) + this.offContext.clearRect(20,20,150,100) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212058500](figures/en-us_image_0000001212058500.png) + ![](figures/11111-5.png) -### fillText +### fillText -fillText(text: string, x: number, y: number): void +fillText\(text: string, x: number, y: number\): void Draws filled text on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | text | string | Yes | "" | Text to draw. | - | x | number | Yes | 0 | X-coordinate of the lower left corner of the text. | - | y | number | Yes | 0 | Y-coordinate of the lower left corner of the text. | - -- Example - - ``` - @Entry - @Component - struct FillText { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.font = '30px sans-serif' - this.offContext.fillText("Hello World!", 20, 100) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Parameters

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    text

    +

    string

    +

    Yes

    +

    ""

    +

    Text to draw.

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the lower left corner of the text.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the lower left corner of the text.

    +
    + + +- Example + + ``` + @Entry + @Component + struct FillText { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.font = '30px sans-serif' + this.offContext.fillText("Hello World!", 20, 100) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257058437](figures/en-us_image_0000001257058437.png) + ![](figures/en-us_image_0000001237555165.png) -### strokeText +### strokeText -strokeText(text: string, x: number, y: number): void +strokeText\(text: string, x: number, y: number\): void Draws a text stroke on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | text | string | Yes | "" | Text to draw. | - | x | number | Yes | 0 | X-coordinate of the lower left corner of the text. | - | y | number | Yes | 0 | Y-coordinate of the lower left corner of the text. | - -- Example - - ``` - @Entry - @Component - struct StrokeText { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.font = '55px sans-serif' - this.offContext.strokeText("Hello World!", 20, 60) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    text

    +

    string

    +

    Yes

    +

    ""

    +

    Text to draw.

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the lower left corner of the text.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the lower left corner of the text.

    +
    + + +- Example + + ``` + @Entry + @Component + struct StrokeText { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.font = '55px sans-serif' + this.offContext.strokeText("Hello World!", 20, 60) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` - - ![en-us_image_0000001212218466](figures/en-us_image_0000001212218466.png) - - -### measureText - -measureText(text: string): TextMetrics - -Returns a **TextMetrics** object used to obtain the width of specified text. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | text | string | Yes | "" | Text to be measured. | - -- Return value - | Type | Description | - | -------- | -------- | - | [ERROR:Invalid link:en-us_topic_0000001212218420.xml#en-us_topic_0000001192595178_xref4588645104013,link:#en-us_topic_0000001192595178_li0376175812415](#en-us_topic_0000001192595178_li0376175812415) | **TextMetrics** object. | - -- **TextMetrics** attributes - | Name | Type | Description | - | -------- | -------- | -------- | - | width | number | Width of the text. | - -- Example - - ``` - @Entry - @Component - struct MeasureText { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.font = '50px sans-serif' - this.offContext.fillText("Hello World!", 20, 100) - this.offContext.fillText("width:" + this.context.measureText("Hello World!").width, 20, 200) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) + ``` + + ![](figures/en-us_image_0000001237715149.png) + + +### measureText + +measureText\(text: string\): TextMetrics + +Returns a **TextMetrics** object used to obtain the width of specified text. + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    text

    +

    string

    +

    Yes

    +

    ""

    +

    Text to be measured.

    +
    + +- Return values + + + + + + + + + + +

    Type

    +

    Description

    +

    TextMetrics

    +

    TextMetrics object.

    +
    + +- **TextMetrics** attributes + + + + + + + + + + + + +

    Attribute

    +

    Type

    +

    Description

    +

    width

    +

    number

    +

    Width of the text string.

    +
    + + +- Example + + ``` + @Entry + @Component + struct MeasureText { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.font = '50px sans-serif' + this.offContext.fillText("Hello World!", 20, 100) + this.offContext.fillText("width:" + this.context.measureText("Hello World!").width, 20, 200) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001256858431](figures/en-us_image_0000001256858431.png) + ![](figures/en-us_image_0000001193075172.png) -### stroke +### stroke -stroke(path?: Path2D): void +stroke\(path?: Path2D\): void Strokes a path. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | path | [Path2D](ts-components-canvas-path2d.md) | No | null | A **Path2D** path to draw. | - -- Example - - ``` - @Entry - @Component - struct Stroke { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.moveTo(25, 25) - this.offContext.lineTo(25, 105) - this.offContext.strokeStyle = 'rgb(0,0,255)' - this.offContext.stroke() - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    path

    +

    Path2D

    +

    No

    +

    null

    +

    A Path2D path to draw.

    +
    + + +- Example + + ``` + @Entry + @Component + struct CanvasExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.moveTo(25, 25) + this.offContext.lineTo(25, 105) + this.offContext.strokeStyle = 'rgb(0,0,255)' + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257138373](figures/en-us_image_0000001257138373.png) + ![](figures/en-us_image_0000001192595220.png) -### beginPath +### beginPath -beginPath(): void +beginPath\(\): void Creates a drawing path. -- Example - - ``` - @Entry - @Component - struct BeginPath { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.beginPath() - this.offContext.lineWidth = 6 - this.offContext.strokeStyle = '#0000ff' - this.offContext.moveTo(15, 80) - this.offContext.lineTo(280, 160) - this.offContext.stroke() - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Example + + ``` + @Entry + @Component + struct BeginPath { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.lineWidth = 6 + this.offContext.strokeStyle = '#0000ff' + this.offContext.moveTo(15, 80) + this.offContext.lineTo(280, 160) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212378440](figures/en-us_image_0000001212378440.png) + ![](figures/en-us_image_0000001237555163.png) -### moveTo +### moveTo -moveTo(x: number, y: number): void +moveTo\(x: number, y: number\): void Moves a drawing path to a target position on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the target position. | - | y | number | Yes | 0 | Y-coordinate of the target position. | - -- Example - - ``` - @Entry - @Component - struct MoveTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.beginPath() - this.offContext.moveTo(10, 10) - this.offContext.lineTo(280, 160) - this.offContext.stroke() - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the target position.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the target position.

    +
    + + +- Example + + ``` + @Entry + @Component + struct MoveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.moveTo(10, 10) + this.offContext.lineTo(280, 160) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212058498](figures/en-us_image_0000001212058498.png) + ![](figures/en-us_image_0000001192595228.png) -### lineTo +### lineTo -lineTo(x: number, y: number): void +lineTo\(x: number, y: number\): void Connects the current point to a target position using a straight line. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the target position. | - | y | number | Yes | 0 | Y-coordinate of the target position. | - -- Example - - ``` - @Entry - @Component - struct LineTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.beginPath() - this.offContext.moveTo(10, 10) - this.offContext.lineTo(280, 160) - this.offContext.stroke() - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the target position.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the target position.

    +
    + + +- Example + + ``` + @Entry + @Component + struct LineTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.moveTo(10, 10) + this.offContext.lineTo(280, 160) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257058435](figures/en-us_image_0000001257058435.png) + ![](figures/en-us_image_0000001237715151.png) -### closePath +### closePath -closePath(): void +closePath\(\): void Draws a closed path. -- Example - - ``` - @Entry - @Component - struct ClosePath { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.beginPath() - this.offContext.moveTo(30, 30) - this.offContext.lineTo(110, 30) - this.offContext.lineTo(70, 90) - this.offContext.closePath() - this.offContext.stroke() - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Example + + ``` + @Entry + @Component + struct ClosePath { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.moveTo(30, 30) + this.offContext.lineTo(110, 30) + this.offContext.lineTo(70, 90) + this.offContext.closePath() + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257058431](figures/en-us_image_0000001257058431.png) + ![](figures/en-us_image_0000001192595224.png) -### createPattern +### createPattern -createPattern(image: ImageBitmap, repetition: string): CanvasPattern +createPattern\(image: ImageBitmap, repetition: string\): CanvasPattern Creates a pattern for image filling based on a specified source image and repetition mode. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | image | [ERROR:Invalid link:en-us_topic_0000001212218420.xml#en-us_topic_0000001192595178_xref1892917323814,link:en-us_topic_0000001192915114.xml](en-us_topic_0000001192915114.xml) | Yes | null | Source image. For details, see [ERROR:Invalid link:en-us_topic_0000001212218420.xml#xref13437192515430,link:en-us_topic_0000001192915114.xml](en-us_topic_0000001192915114.xml). | - | repetition | string | Yes | "" | Repetition mode. The value can be **'repeat'**, **'repeat-x'**, **'repeat-y'**, or **'no-repeat'**. | - -- Example - - ``` - @Entry - @Component - struct CreatePattern { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg") - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - var pattern = this.offContext.createPattern(this.img, 'repeat') - this.offContext.fillStyle = pattern - this.offContext.fillRect(0, 0, 200, 200) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    image

    +

    ImageBitmap

    +

    Yes

    +

    null

    +

    Source image. For details, see ImageBitmap.

    +

    repetition

    +

    string

    +

    Yes

    +

    ""

    +

    Repetition mode. The value can be 'repeat', 'repeat-x', 'repeat-y', or 'no-repeat'.

    +
    + +- Example + + ``` + @Entry + @Component + struct CreatePattern { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg") + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var pattern = this.offContext.createPattern(this.img, 'repeat') + this.offContext.fillStyle = pattern + this.offContext.fillRect(0, 0, 200, 200) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257138387](figures/en-us_image_0000001257138387.png) + ![](figures/en-us_image_0000001237475133.png) -### bezierCurveTo +### bezierCurveTo -bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void +bezierCurveTo\(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number\): void Draws a cubic bezier curve on the canvas. -- Name - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | cp1x | number | Yes | 0 | X-coordinate of the first parameter of the bezier curve. | - | cp1y | number | Yes | 0 | Y-coordinate of the first parameter of the bezier curve. | - | cp2x | number | Yes | 0 | X-coordinate of the second parameter of the bezier curve. | - | cp2y | number | Yes | 0 | Y-coordinate of the second parameter of the bezier curve. | - | x | number | Yes | 0 | X-coordinate of the end point on the bezier curve. | - | y | number | Yes | 0 | Y-coordinate of the end point on the bezier curve. | - -- Example - - ``` - @Entry - @Component - struct BezierCurveTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.beginPath() - this.offContext.moveTo(10, 10) - this.offContext.bezierCurveTo(20, 100, 200, 100, 200, 20) - this.offContext.stroke() - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    cp1x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the first parameter of the bezier curve.

    +

    cp1y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the first parameter of the bezier curve.

    +

    cp2x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the second parameter of the bezier curve.

    +

    cp2y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the second parameter of the bezier curve.

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the end point on the bezier curve.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the end point on the bezier curve.

    +
    + + +- Example + + ``` + @Entry + @Component + struct BezierCurveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.moveTo(10, 10) + this.offContext.bezierCurveTo(20, 100, 200, 100, 200, 20) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212378442](figures/en-us_image_0000001212378442.png) + ![](figures/en-us_image_0000001237715153.png) -### quadraticCurveTo +### quadraticCurveTo -quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void +quadraticCurveTo\(cpx: number, cpy: number, x: number, y: number\): void Draws a quadratic curve on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | cpx | number | Yes | 0 | X-coordinate of the bezier curve parameter. | - | cpy | number | Yes | 0 | Y-coordinate of the bezier curve parameter. | - | x | number | Yes | 0 | X-coordinate of the end point on the bezier curve. | - | y | number | Yes | 0 | Y-coordinate of the end point on the bezier curve. | - -- Example - - ``` - @Entry - @Component - struct QuadraticCurveTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.beginPath(); - this.offContext.moveTo(20, 20); - this.offContext.quadraticCurveTo(100, 100, 200, 20); - this.offContext.stroke(); - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    cpx

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the bezier curve parameter.

    +

    cpy

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the bezier curve parameter.

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the end point on the bezier curve.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the end point on the bezier curve.

    +
    + + +- Example + + ``` + @Entry + @Component + struct QuadraticCurveTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath(); + this.offContext.moveTo(20, 20); + this.offContext.quadraticCurveTo(100, 100, 200, 20); + this.offContext.stroke(); + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001256978383](figures/en-us_image_0000001256978383.png) + ![](figures/en-us_image_0000001192915184.png) -### arc +### arc -arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void +arc\(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean\): void Draws an arc on the canvas. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the center point of the arc. | - | y | number | Yes | 0 | Y-coordinate of the center point of the arc. | - | radius | number | Yes | 0 | Radius of the arc. | - | startAngle | number | Yes | 0 | Start radian of the arc. | - | endAngle | number | Yes | 0 | End radian of the arc. | - | anticlockwise | boolean | No | false | Whether to draw the arc counterclockwise. | - -- Example - - ``` - @Entry - @Component - struct Arc { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.beginPath() - this.offContext.arc(100, 75, 50, 0, 6.28) - this.offContext.stroke() - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the center point of the arc.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the center point of the arc.

    +

    radius

    +

    number

    +

    Yes

    +

    0

    +

    Radius of the arc.

    +

    startAngle

    +

    number

    +

    Yes

    +

    0

    +

    Start radian of the arc.

    +

    endAngle

    +

    number

    +

    Yes

    +

    0

    +

    End radian of the arc.

    +

    anticlockwise

    +

    boolean

    +

    No

    +

    false

    +

    Whether to draw the arc counterclockwise.

    +
    + +- Example + + ``` + @Entry + @Component + struct Arc { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.arc(100, 75, 50, 0, 6.28) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001212378430](figures/en-us_image_0000001212378430.png) + ![](figures/en-us_image_0000001192595226.png) -### arcTo +### arcTo -arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void +arcTo\(x1: number, y1: number, x2: number, y2: number, radius: number\): void Draws an arc based on the radius and points on the arc. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x1 | number | Yes | 0 | X-coordinate of the first point on the arc. | - | y1 | number | Yes | 0 | Y-coordinate of the first point on the arc. | - | x2 | number | Yes | 0 | X-coordinate of the second point on the arc. | - | y2 | number | Yes | 0 | Y-coordinate of the second point on the arc. | - | radius | number | Yes | 0 | Radius of the arc. | - -- Example - - ``` - @Entry - @Component - struct ArcTo { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.moveTo(100, 20); - this.offContext.arcTo(150, 20, 150, 70, 50); - this.offContext.stroke(); - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x1

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the first point on the arc.

    +

    y1

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the first point on the arc.

    +

    x2

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the second point on the arc.

    +

    y2

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the second point on the arc.

    +

    radius

    +

    number

    +

    Yes

    +

    0

    +

    Radius of the arc.

    +
    + + +- Example + + ``` + @Entry + @Component + struct ArcTo { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.moveTo(100, 20); + this.offContext.arcTo(150, 20, 150, 70, 50); + this.offContext.stroke(); + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257138383](figures/en-us_image_0000001257138383.png) + ![](figures/en-us_image_0000001237555167.png) -### ellipse +### ellipse -ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void +ellipse\(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean\): void Draws an ellipse in the specified rectangular region. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the ellipse center. | - | y | number | Yes | 0 | Y-coordinate of the ellipse center. | - | radiusX | number | Yes | 0 | Ellipse radius on the x-axis. | - | radiusY | number | Yes | 0 | Ellipse radius on the y-axis. | - | rotation | number | Yes | 0 | Rotation angle of the ellipse, in radians. | - | startAngle | number | Yes | 0 | Angle of the start point for drawing the ellipse, in radians. | - | endAngle | number | Yes | 0 | Angle of the end point for drawing the ellipse, in radians. | - | anticlockwise | boolean | No | false | Whether to draw the ellipse in the counterclockwise direction. | - -- Example - - - ``` - @Entry - @Component - struct CanvasExample { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.beginPath() - this.offContext.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI) - this.offContext.stroke() - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the ellipse center.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the ellipse center.

    +

    radiusX

    +

    number

    +

    Yes

    +

    0

    +

    Ellipse radius on the x-axis.

    +

    radiusY

    +

    number

    +

    Yes

    +

    0

    +

    Ellipse radius on the y-axis.

    +

    rotation

    +

    number

    +

    Yes

    +

    0

    +

    Rotation angle of the ellipse, in radians.

    +

    startAngle

    +

    number

    +

    Yes

    +

    0

    +

    Angle of the start point for drawing the ellipse, in radians.

    +

    endAngle

    +

    number

    +

    Yes

    +

    0

    +

    Angle of the end point for drawing the ellipse, in radians.

    +

    anticlockwise

    +

    boolean

    +

    No

    +

    false

    +

    Whether to draw the ellipse in the counterclockwise direction. The value 0 means to draw the ellipse in the clockwise direction, and 1 means to draw the ellipse in the counterclockwise direction. This parameter is optional. The default value is 0.

    +
    + + +- Example + + ``` + @Entry + @Component + struct CanvasExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.beginPath() + this.offContext.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI, true) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001256858423](figures/en-us_image_0000001256858423.png) + ![](figures/en-us_image_0000001237355131.png) -### rect +### rect -rect(x: number, y: number, width: number, height: number): void +rect\(x: number, y: number, width: number, height: number\): void Creates a rectangle. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-coordinate of the upper left corner of the rectangle. | - | y | number | Yes | 0 | Y-coordinate of the upper left corner of the rectangle. | - | width | number | Yes | 0 | Width of the rectangle. | - | height | number | Yes | 0 | Height of the rectangle. | - -- Example - - ``` - @Entry - @Component - struct CanvasExample { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20) - this.offContext.stroke() - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the upper left corner of the rectangle.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the upper left corner of the rectangle.

    +

    width

    +

    number

    +

    Yes

    +

    0

    +

    Width of the rectangle.

    +

    height

    +

    number

    +

    Yes

    +

    0

    +

    Height of the rectangle.

    +
    + + +- Example + + ``` + @Entry + @Component + struct CanvasExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20) + this.offContext.stroke() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257138381](figures/en-us_image_0000001257138381.png) + ![](figures/en-us_image_0000001237715155.png) -### fill +### fill -fill(): void +fill\(\): void Fills the area inside a closed path. -- Example - - ``` - @Entry - @Component - struct Fill { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20) - this.offContext.fill() - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Example + + ``` + @Entry + @Component + struct Fill { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20) + this.offContext.fill() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001256858421](figures/en-us_image_0000001256858421.png) + ![](figures/en-us_image_0000001193075166.png) -### clip +### clip -clip(): void +clip\(\): void Sets the current path to a clipping path. -- Example - - ``` - @Entry - @Component - struct Clip { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.rect(0, 0, 200, 200) - this.offContext.stroke() - this.offContext.clip() - this.offContext.fillStyle = "rgb(255,0,0)" - this.offContext.fillRect(0, 0, 150, 150) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Example + + ``` + @Entry + @Component + struct Clip { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.rect(0, 0, 200, 200) + this.offContext.stroke() + this.offContext.clip() + this.offContext.fillStyle = "rgb(255,0,0)" + this.offContext.fillRect(0, 0, 150, 150) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001257058441](figures/en-us_image_0000001257058441.png) + ![](figures/en-us_image_0000001192595238.png) -### rotate +### rotate -rotate(rotate: number): void +rotate\(rotate: number\): void Rotates a canvas clockwise around its coordinate axes. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | rotate | number | Yes | 0 | Clockwise rotation angle. You can use **Math.PI / 180** to convert the angle to a radian. | - -- Example - - ``` - @Entry - @Component - struct Rotate { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.rotate(45 * Math.PI / 180) // Rotate the rectangle 45 degrees - this.offContext.fillRect(70, 20, 50, 50) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    rotate

    +

    number

    +

    Yes

    +

    0

    +

    Clockwise rotation angle. You can use Math.PI / 180 to convert the angle to a radian.

    +
    + + +- Example + + ``` + @Entry + @Component + struct Rotate { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.rotate(45 * Math.PI / 180) // Rotate the rectangle 45 degrees + this.offContext.fillRect(70, 20, 50, 50) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` - - ![en-us_image_0000001212218478](figures/en-us_image_0000001212218478.png) - - -### scale - -scale(x: number, y: number): void - -Scales a canvas based on scale factors. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | Horizontal scale factor. | - | y | number | Yes | 0 | Vertical scale factor. | - -- Example - - ``` - @Entry - @Component - struct Scale { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.strokeRect(10, 10, 25, 25) - this.offContext.scale(2, 2) // Scale to 200% - this.offContext.strokeRect(10, 10, 25, 25) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) + ``` + + ![](figures/en-us_image_0000001237355133.png) + + +### scale + +scale\(x: number, y: number\): void + +Scales a canvas based on scaling factors. + +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    Horizontal scale factor.

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Vertical scale factor.

    +
    + + +- Example + + ``` + @Entry + @Component + struct Scale { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.strokeRect(10, 10, 25, 25) + this.offContext.scale(2, 2) // Scale to 200% + this.offContext.strokeRect(10, 10, 25, 25) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001211898516](figures/en-us_image_0000001211898516.png) + ![](figures/en-us_image_0000001192755178.png) -### transform +### transform -transform(scaleX: number, skewX: number, skewY: number, scaleY: number, translateX: number, translateY: number): void +transform\(scaleX: number, skewX: number, skewY: number, scaleY: number, translateX: number, translateY: number\): void Defines a transformation matrix. To transform a graph, you only need to set parameters of the matrix. The coordinates of the graph are multiplied by the matrix values to obtain new coordinates of the transformed graph. You can use the matrix to implement multiple transform effects. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> The following formulas calculate coordinates of the transformed graph. **x** and **y** represent coordinates before transformation, and **x'** and **y'** represent coordinates after transformation. -> -> - x' = scaleX \* x + skewY \* y + translateX -> -> - y' = skewX \* x + scaleY \* y + translateY - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | scaleX | number | Yes | 0 | X-axis scale. | - | skewX | number | Yes | 0 | X-axis skew. | - | skewY | number | Yes | 0 | Y-axis skew. | - | scaleY | number | Yes | 0 | Y-axis scale. | - | translateX | number | Yes | 0 | X-axis translation. | - | translateY | number | Yes | 0 | Y-axis translation. | - -- Example - - ``` - @Entry - @Component - struct Transform { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.fillStyle = 'rgb(0,0,0)' - this.offContext.fillRect(0, 0, 100, 100) - this.offContext.transform(1, 0.5, -0.5, 1, 10, 10) - this.offContext.fillStyle = 'rgb(255,0,0)' - this.offContext.fillRect(0, 0, 100, 100) - this.offContext.transform(1, 0.5, -0.5, 1, 10, 10) - this.offContext.fillStyle = 'rgb(0,0,255)' - this.offContext.fillRect(0, 0, 100, 100) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>The following formulas calculate coordinates of the transformed graph. **x** and **y** represent coordinates before transformation, and **x'** and **y'** represent coordinates after transformation. +>- x' = scaleX \* x + skewY \* y + translateX +>- y' = skewX \* x + scaleY \* y + translateY + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    scaleX

    +

    number

    +

    Yes

    +

    0

    +

    X-axis scale.

    +

    skewX

    +

    number

    +

    Yes

    +

    0

    +

    X-axis skew.

    +

    skewY

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis skew.

    +

    scaleY

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis scale.

    +

    translateX

    +

    number

    +

    Yes

    +

    0

    +

    X-axis translation.

    +

    translateY

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis translation.

    +
    + +- Example + + ``` + @Entry + @Component + struct Transform { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.fillStyle = 'rgb(0,0,0)' + this.offContext.fillRect(0, 0, 100, 100) + this.offContext.transform(1, 0.5, -0.5, 1, 10, 10) + this.offContext.fillStyle = 'rgb(255,0,0)' + this.offContext.fillRect(0, 0, 100, 100) + this.offContext.transform(1, 0.5, -0.5, 1, 10, 10) + this.offContext.fillStyle = 'rgb(0,0,255)' + this.offContext.fillRect(0, 0, 100, 100) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` - - ![en-us_image_0000001212378438](figures/en-us_image_0000001212378438.png) - - -### setTransform - -setTransform(scaleX: number, skewX: number, skewY: number, scale: number, translateX: number, translateY: number): void - -Resets the existing transformation matrix and creates a new transformation matrix by using the same parameters as the **transform()** function. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | scaleX | number | Yes | 0 | X-axis scale. | - | skewX | number | Yes | 0 | X-axis skew. | - | skewY | number | Yes | 0 | Y-axis skew. | - | scaleY | number | Yes | 0 | Y-axis scale. | - | translateX | number | Yes | 0 | X-axis translation. | - | translateY | number | Yes | 0 | Y-axis translation. | - -- Example - - ``` - @Entry - @Component - struct SetTransform { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.fillStyle = 'rgb(255,0,0)' - this.offContext.fillRect(0, 0, 100, 100) - this.offContext.setTransform(1,0.5, -0.5, 1, 10, 10) - this.offContext.fillStyle = 'rgb(0,0,255)' - this.offContext.fillRect(0, 0, 100, 100) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) + ``` + + ![](figures/en-us_image_0000001192595230.png) + + +### setTransform + +setTransform\(scaleX: number, skewX: number, skewY: number, scale: number, translateX: number, translateY: number\): void + +Resets the existing transformation matrix and creates a new transformation matrix by using the same parameters as the **transform\(\)** function. + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    scaleX

    +

    number

    +

    Yes

    +

    0

    +

    X-axis scale.

    +

    skewX

    +

    number

    +

    Yes

    +

    0

    +

    X-axis skew.

    +

    skewY

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis skew.

    +

    scaleY

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis scale.

    +

    translateX

    +

    number

    +

    Yes

    +

    0

    +

    X-axis translation.

    +

    translateY

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis translation.

    +
    + +- Example + + ``` + @Entry + @Component + struct SetTransform { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.fillStyle = 'rgb(255,0,0)' + this.offContext.fillRect(0, 0, 100, 100) + this.offContext.setTransform(1,0.5, -0.5, 1, 10, 10) + this.offContext.fillStyle = 'rgb(0,0,255)' + this.offContext.fillRect(0, 0, 100, 100) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` - ![en-us_image_0000001211898518](figures/en-us_image_0000001211898518.png) + ![](figures/en-us_image_0000001237715159.png) -### translate +### translate -translate(x: number, y: number): void +translate\(x: number, y: number\): void Moves the origin of the coordinate system. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | number | Yes | 0 | X-axis translation. | - | y | number | Yes | 0 | Y-axis translation. | - -- Example - - ``` - @Entry - @Component - struct Translate { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.fillRect(10, 10, 50, 50) - this.offContext.translate(70, 70) - this.offContext.fillRect(10, 10, 50, 50) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) - } - .width('100%') - .height('100%') - } - } - ``` - - ![en-us_image_0000001256978373](figures/en-us_image_0000001256978373.png) - - -### drawImage - -drawImage(image: ImageBitmap, dx: number, dy: number): void - -drawImage(image: ImageBitmap, dx: number, dy: number, dWidth: number, dHeight: number): void - -drawImage(image: ImageBitmap, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number):void - -Draws an image. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | image | [ERROR:Invalid link:en-us_topic_0000001212218420.xml#en-us_topic_0000001192595178_xref2365443135017,link:en-us_topic_0000001192915114.xml](en-us_topic_0000001192915114.xml) | Yes | null | Image resource. For details, see [ERROR:Invalid link:en-us_topic_0000001212218420.xml#xref10476113612499,link:en-us_topic_0000001192915114.xml](en-us_topic_0000001192915114.xml). | - | sx | number | No | 0 | X-coordinate of the upper left corner of the rectangle used to crop the source image. | - | sy | number | No | 0 | Y-coordinate of the upper left corner of the rectangle used to crop the source image. | - | sWidth | number | No | 0 | Target width to crop the source image. | - | sHeight | number | No | 0 | Target height to crop the source image. | - | dx | number | Yes | 0 | X-coordinate of the upper left corner of the drawing area on the canvas. | - | dy | number | Yes | 0 | Y-coordinate of the upper left corner of the drawing area on the canvas. | - | dWidth | number | No | 0 | Width of the drawing area. | - | dHeight | number | No | 0 | Height of the drawing area. | - - -- Example - - ``` - @Entry - @Component - struct Index { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg") - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    number

    +

    Yes

    +

    0

    +

    X-axis translation

    +

    y

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis translation.

    +
    + +- Example + + ``` + @Entry + @Component + struct Translate { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.fillRect(10, 10, 50, 50) + this.offContext.translate(70, 70) + this.offContext.fillRect(10, 10, 50, 50) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } .width('100%') .height('100%') - .backgroundColor('#ffff00') - .onReady(() => { - this.offContext.drawImage( this.img,0,0,400,200) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) } - .width('100%') - .height('100%') } - } - ``` - - ![en-us_image_0000001256978377](figures/en-us_image_0000001256978377.png) - - -### createImageData - -createImageData(width: number, height: number): Object + ``` -Creates an **ImageData** object based on the specified width and height. For details, see [ImageData](../reference/arkui-ts/ts-components-canvas-imagebitmap.md). + ![](figures/en-us_image_0000001237475137.png) -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | width | number | Yes | 0 | Width of the **ImageData** object. | - | height | number | Yes | 0 | Height of the **ImageData** object. | +### drawImage -### createImageData +drawImage\(image: ImageBitmap, dx: number, dy: number\): void -createImageData(imageData: ImageData): Object +drawImage\(image: ImageBitmap, dx: number, dy: number, dWidth: number, dHeight: number\): void -Creates an **ImageData** object by copying an existing **ImageData** object. For details, see [ImageData](../reference/arkui-ts/ts-components-canvas-imagebitmap.md). +drawImage\(image: ImageBitmap, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number\):void -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | imagedata | [ImageData](../reference/arkui-ts/ts-components-canvas-imagebitmap.md) | Yes | null | **ImageData** object to copy. | - - -### getImageData - -getImageData(sx: number, sy: number, sw: number, sh: number): Object - -Creates an [ImageData](../reference/arkui-ts/ts-components-canvas-imagebitmap.md) object with pixels in the specified area on the canvas. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | sx | number | Yes | 0 | X-coordinate of the upper left corner of the output area. | - | sy | number | Yes | 0 | Y-coordinate of the upper left corner of the output area. | - | sw | number | Yes | 0 | Width of the output area. | - | sh | number | Yes | 0 | Height of the output area. | - - -### putImageData - -putImageData(imageData: Object, dx: number, dy: number, dirtyX?: number, dirtyY?: number, dirtyWidth?: number, dirtyHeight?: number): void - -Puts the [ImageData](../reference/arkui-ts/ts-components-canvas-imagebitmap.md) onto a rectangular area on the canvas. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | imagedata | Object | Yes | null | **ImageData** object with pixels to put onto the canvas. | - | dx | number | Yes | 0 | X-axis offset of the rectangular area on the canvas. | - | dy | number | Yes | 0 | Y-axis offset of the rectangular area on the canvas. | - | dirtyX | number | No | 0 | X-axis offset of the upper left corner of the rectangular area relative to that of the source image. | - | dirtyY | number | No | 0 | Y-axis offset of the upper left corner of the rectangular area relative to that of the source image. | - | dirtyWidth | number | No | Width of the **ImageData** object | Width of the rectangular area to crop the source image. | - | dirtyHeight | number | No | Height of the **ImageData** object | Height of the rectangular area to crop the source image. | +Draws an image. -- Example - - ``` - @Entry - @Component - struct PutImageData { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    image

    +

    ImageBitmap

    +

    Yes

    +

    null

    +

    Image resource. For details, see ImageBitmap.

    +

    sx

    +

    number

    +

    No

    +

    0

    +

    X-coordinate of the upper left corner of the rectangle used to crop the source image.

    +

    sy

    +

    number

    +

    No

    +

    0

    +

    Y-coordinate of the upper left corner of the rectangle used to crop the source image.

    +

    sWidth

    +

    number

    +

    No

    +

    0

    +

    Target width to crop the source image.

    +

    sHeight

    +

    number

    +

    No

    +

    0

    +

    Target height to crop the source image.

    +

    dx

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the upper left corner of the drawing area on the canvas.

    +

    dy

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the upper left corner of the drawing area on the canvas.

    +

    dWidth

    +

    number

    +

    No

    +

    0

    +

    Width of the drawing area.

    +

    dHeight

    +

    number

    +

    No

    +

    0

    +

    Height of the drawing area.

    +
    + + +- Example + + ``` + @Entry + @Component + struct Index { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg") + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) .width('100%') .height('100%') .backgroundColor('#ffff00') - .onReady(() =>{ - var imageData = this.offContext.createImageData(100, 100) - for (var i = 0; i < imageData.data.length; i += 4) { - imageData.data[i + 0] = 255 - imageData.data[i + 1] = 0 - imageData.data[i + 2] = 255 - imageData.data[i + 3] = 255 - } - this.offContext.putImageData(imageData, 10, 10) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) + .onReady(() => { + this.offContext.drawImage( this.img,0,0,400,200) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` + + ![](figures/en-us_image_0000001192915180.png) + + +### createImageData + +createImageData\(width: number, height: number\): Object + +Creates an **ImageData** object based on the specified width and height. For details, see [ImageData](ts-components-canvas-imagedata.md). + +- Parameters + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default

    +

    Description

    +

    width

    +

    number

    +

    Yes

    +

    0

    +

    Width of the ImageData object.

    +

    height

    +

    number

    +

    Yes

    +

    0

    +

    Height of the ImageData object.

    +
    + + +### createImageData + +createImageData\(imageData: ImageData\): Object + +Creates an **ImageData** object by copying an existing **ImageData** object. For details, see [ImageData](ts-components-canvas-imagedata.md). + +- Parameters + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default

    +

    Description

    +

    imagedata

    +

    ImageData

    +

    Yes

    +

    null

    +

    ImageData object to copy.

    +
    + + +### getImageData + +getImageData\(sx: number, sy: number, sw: number, sh: number\): Object + +Creates an [ImageData](ts-components-canvas-imagedata.md) object with pixels in the specified area on the canvas. + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    sx

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the upper left corner of the output area.

    +

    sy

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the upper left corner of the output area.

    +

    sw

    +

    number

    +

    Yes

    +

    0

    +

    Width of the output area.

    +

    sh

    +

    number

    +

    Yes

    +

    0

    +

    Height of the output area.

    +
    + + +### putImageData + +putImageData\(imageData: Object, dx: number, dy: number, dirtyX?: number, dirtyY?: number, dirtyWidth?: number, dirtyHeight?: number\): void + +Puts the [ImageData](ts-components-canvas-imagedata.md) onto a rectangular area on the canvas. + +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    imagedata

    +

    Object

    +

    Yes

    +

    null

    +

    ImageData object with pixels to put onto the canvas.

    +

    dx

    +

    number

    +

    Yes

    +

    0

    +

    X-axis offset of the rectangular area on the canvas.

    +

    dy

    +

    number

    +

    Yes

    +

    0

    +

    Y-axis offset of the rectangular area on the canvas.

    +

    dirtyX

    +

    number

    +

    No

    +

    0

    +

    X-axis offset of the upper left corner of the rectangular area relative to that of the source image.

    +

    dirtyY

    +

    number

    +

    No

    +

    0

    +

    Y-axis offset of the upper left corner of the rectangular area relative to that of the source image.

    +

    dirtyWidth

    +

    number

    +

    No

    +

    Width of the ImageData object

    +

    Width of the rectangular area to crop the source image.

    +

    dirtyHeight

    +

    number

    +

    No

    +

    Height of the ImageData object

    +

    Height of the rectangular area to crop the source image.

    +
    + +- Example + + ``` + @Entry + @Component + struct PutImageData { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var imageData = this.offContext.createImageData(100, 100) + for (var i = 0; i < imageData.data.length; i += 4) { + imageData.data[i + 0] = 255 + imageData.data[i + 1] = 0 + imageData.data[i + 2] = 255 + imageData.data[i + 3] = 255 + } + this.offContext.putImageData(imageData, 10, 10) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') + } + } + ``` - ![en-us_image_0000001212058496](figures/en-us_image_0000001212058496.png) + ![](figures/en-us_image_0000001193075170.png) -### restore +### restore -restore(): void +restore\(\): void Restores the saved drawing context. -- Example - - ``` - @Entry - @Component - struct CanvasExample { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.restore() - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Example + + ``` + @Entry + @Component + struct CanvasExample { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.restore() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` -### save +### save -save(): void +save\(\): void Saves the current drawing context. -- Example - - ``` - @Entry - @Component - struct CanvasExample { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - this.offContext.save() - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Example + + ``` + @Entry + @Component + struct Restore { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + this.offContext.save() + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` -### createLinearGradient +### createLinearGradient -createLinearGradient(x0: number, y0: number, x1: number, y1: number): void +createLinearGradient\(x0: number, y0: number, x1: number, y1: number\): void Creates a linear gradient. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x0 | number | Yes | 0 | X-coordinate of the start point. | - | y0 | number | Yes | 0 | Y-coordinate of the start point. | - | x1 | number | Yes | 0 | X-coordinate of the end point. | - | y1 | number | Yes | 0 | Y-coordinate of the end point. | - -- Example - - ``` - @Entry - @Component - struct CreateLinearGradient { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - var grad = this.offContext.createLinearGradient(50,0, 300,100) - this.grad.addColorStop(0.0, 'red') - this.grad.addColorStop(0.5, 'white') - this.grad.addColorStop(1.0, 'green') - this.offContext.fillStyle = grad - this.offContext.fillRect(0, 0, 500, 500) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x0

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the start point.

    +

    y0

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the start point.

    +

    x1

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the end point.

    +

    y1

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the end point.

    +
    + +- Example + + ``` + @Entry + @Component + struct CreateLinearGradient { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var grad = this.offContext.createLinearGradient(50,0, 300,100) + gra.addColorStop(0.0, 'red') + gra.addColorStop(0.5, 'white') + gra.addColorStop(1.0, 'green') + this.offContext.fillStyle = grad + this.offContext.fillRect(0, 0, 500, 500) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` - - ![en-us_image_0000001212378434](figures/en-us_image_0000001212378434.png) + ``` + +![](figures/en-us_image_0000001192915162.png) -### createRadialGradient +### createRadialGradient -createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): void +createRadialGradient\(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number\): void Creates a linear gradient. -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x0 | number | Yes | 0 | X-coordinate of the center of the start circle. | - | y0 | number | Yes | 0 | Y-coordinate of the center of the start circle. | - | r0 | number | Yes | 0 | Radius of the start circle, which must be a non-negative finite number. | - | x1 | number | Yes | 0 | X-coordinate of the center of the end circle. | - | y1 | number | Yes | 0 | Y-coordinate of the center of the end circle. | - | r1 | number | Yes | 0 | Radius of the end circle, which must be a non-negative finite number. | - -- Example - - ``` - @Entry - @Component - struct CreateRadialGradient { - private settings: RenderingContextSettings = new RenderingContextSettings(true) - private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) - - private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Canvas(this.context) - .width('100%') - .height('100%') - .backgroundColor('#ffff00') - .onReady(() =>{ - var grad = this.offContext.createRadialGradient(200,200,50, 200,200,200) - this.grad.addColorStop(0.0, 'red') - this.grad.addColorStop(0.5, 'white') - this.grad.addColorStop(1.0, 'green') - this.offContext.fillStyle = grad - this.offContext.fillRect(0, 0, 500, 500) - var image = this.offContext.transferToImageBitmap() - this.context.transferFromImageBitmap(image) - }) +- Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x0

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the center of the start circle.

    +

    y0

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the center of the start circle.

    +

    r0

    +

    number

    +

    Yes

    +

    0

    +

    Radius of the start circle, which must be a non-negative finite number.

    +

    x1

    +

    number

    +

    Yes

    +

    0

    +

    X-coordinate of the center of the end circle.

    +

    y1

    +

    number

    +

    Yes

    +

    0

    +

    Y-coordinate of the center of the end circle.

    +

    r1

    +

    number

    +

    Yes

    +

    0

    +

    Radius of the end circle, which must be a non-negative finite number.

    +
    + +- Example + + ``` + @Entry + @Component + struct CreateRadialGradient { + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings) + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Canvas(this.context) + .width('100%') + .height('100%') + .backgroundColor('#ffff00') + .onReady(() =>{ + var grad = this.offContext.createRadialGradient(200,200,50, 200,200,200) + gra.addColorStop(0.0, 'red') + gra.addColorStop(0.5, 'white') + gra.addColorStop(1.0, 'green') + this.offContext.fillStyle = grad + this.offContext.fillRect(0, 0, 500, 500) + var image = this.offContext.transferToImageBitmap() + this.context.transferFromImageBitmap(image) + }) + } + .width('100%') + .height('100%') } - .width('100%') - .height('100%') } - } - ``` + ``` + +![](figures/en-us_image_0000001237555179.png) - ![en-us_image_0000001212218480](figures/en-us_image_0000001212218480.png) +## CanvasPattern -## CanvasPattern +Defines an object created by using the [createPattern](#section660873113512) method. -Defines an object created by using the [createPattern](#createpattern) method. diff --git a/en/application-dev/reference/arkui-ts/ts-page-transition-animation.md b/en/application-dev/reference/arkui-ts/ts-page-transition-animation.md index 8d3972d2b6..b1b9c60825 100644 --- a/en/application-dev/reference/arkui-ts/ts-page-transition-animation.md +++ b/en/application-dev/reference/arkui-ts/ts-page-transition-animation.md @@ -1,70 +1,257 @@ -# Page Transition - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -Customize the page transition animations by configuring the page entrance and exit components in the global **pageTransition** method. - - - | Name | Parameter | Description | -| -------- | -------- | -------- | -| PageTransitionEnter | Object | Page entrance component, which is used to customize the entrance effect of the current page. For details, see animation parameters. | -| PageTransitionExit | Object | Page exit component, which is used to customize the exit effect of the current page. For details, see animation parameters. | - - -- Animation parameters - | Name | Type | Default Value | Mandatory | Description | - | -------- | -------- | -------- | -------- | -------- | - | type | RouteType | - | No | If this parameter is not set, the reverse playback effect as pop switches to push is used. | - | duration | number | 1000 | No | Animation duration, in ms. | - | curve | Curve \| Curves | Linear | No | Animation curve. For details about the valid values, see **Curve enums**. | - | delay | number | 0 | No | Animation delay, in ms. Delayed animation is disabled by default. | - - -- RouteType enums - | Name | Description | - | -------- | -------- | - | Pop | When page A jumps to page B, page A is Exit+Push, and page B is Enter+Push. | - | Push | When page B returns to page A, page A is Enter+Pop, and page B is Exit+Pop. | - - -## Attributes - -The **PageTransitionEnter** and **PageTransitionExit** components support the following attributes: - - | Name | Type | Default Value | Mandatory | Description | -| -------- | -------- | -------- | -------- | -------- | -| slide | SlideEffect | SlideEffect.Right | No | Slide effect during page transition. For details about the valid values, see the description of [ERROR:Invalid link:en-us_topic_0000001257138309.xml#xref2991922111212,link:#li81331342185820](#li81331342185820). | -| translate | {
    x? : number,
    y? : number,
    z? : number
    } | - | No | Translation effect during page transition, which is the value of the start point of entrance and the end point of exit. When this parameter is set together with **slide**, the latter takes effect by default. | -| scale | {
    x? : number,
    y? : number,
    z? : number,
    centerX? : number,
    centerY? : number
    } | - | No | Scaling effect during page transition, which is the value of the start point of entrance and the end point of exit. | -| opacity | number | 1 | No | Opacity, which is the opacity value of the start point of entrance or the end point of exit. | - -- SlideEffect enums - | Name | Description | - | -------- | -------- | - | Left | When set to Enter, slides in from the left. When set to Exit, slides out to the left. | - | Right | When set to Enter, slides in from the right. When set to Exit, slides out to the right. | - | Top | When set to Enter, slides in from the top. When set to Exit, slides out to the top. | - | Bottom | When set to Enter, slides in from the bottom. When set to Exit, slides out to the bottom. | - - -## Events +# Page Transition + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. + +Customize the page transition animations by configuring the page entrance and exit components in the global **pageTransition** method. + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    PageTransitionEnter

    +

    Object

    +

    Page entrance component, which is used to customize the entrance effect of the current page. For details, see animation parameters.

    +

    PageTransitionExit

    +

    Object

    +

    Page exit component, which is used to customize the exit effect of the current page. For details, see animation parameters.

    +
    + +- Animation parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    type

    +

    RouteType

    +

    -

    +

    No

    +

    If this parameter is not set, the reverse playback effect as pop switches to push is used.

    +

    duration

    +

    number

    +

    1000

    +

    No

    +

    Animation duration, in ms.

    +

    curve

    +

    Curve | Curves

    +

    Linear

    +

    No

    +

    Animation curve. For details about the valid values, see the description of Curve.

    +

    delay

    +

    number

    +

    0

    +

    No

    +

    Animation delay, in ms. Delayed animation is disabled by default.

    +
    + + +- RouteType enums + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Pop

    +

    When page A jumps to page B, page A is Exit+Push, and page B is Enter+Push.

    +

    Push

    +

    When page B returns to page A, page A is Enter+Pop, and page B is Exit+Pop.

    +
    + + +## Attributes + +The **PageTransitionEnter** and **PageTransitionExit** components support the following attributes: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    slide

    +

    SlideEffect

    +

    Right

    +

    No

    +

    Slide effect during page transition. For details about the valid values, see the description of SlideEffect.

    +

    translate

    +

    {

    +

    x? : number,

    +

    y? : number,

    +

    z? : number

    +

    }

    +

    -

    +

    No

    +

    Translation effect during page transition, which is the value of the start point of entrance and the end point of exit. When this parameter is set together with slide, the latter takes effect by default.

    +

    scale

    +

    {

    +

    x? : number,

    +

    y? : number,

    +

    z? : number,

    +

    centerX? : number,

    +

    centerY? : number

    +

    }

    +

    -

    +

    No

    +

    Scaling effect during page transition, which is the value of the start point of entrance and the end point of exit.

    +

    opacity

    +

    number

    +

    1

    +

    No

    +

    Opacity, which is the opacity value of the start point of entrance or the end point of exit.

    +
    + +- SlideEffect enums + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Left

    +

    When set to Enter, slides in from the left. When set to Exit, slides out to the left.

    +

    Right

    +

    When set to Enter, slides in from the right. When set to Exit, slides out to the right.

    +

    Top

    +

    When set to Enter, slides in from the top. When set to Exit, slides out to the top.

    +

    Bottom

    +

    When set to Enter, slides in from the bottom. When set to Exit, slides out to the bottom.

    +
    + + +## Events The PageTransitionEnter and PageTransitionExit components support the following events: - | Event | Description | -| -------- | -------- | -| onEnter(type: RouteType, progress: number) => void | The callback input parameter is the normalized progress of the current entrance animation. The value range is 0–1. | -| onExit(type: RouteType, progress: number) => void | The callback input parameter is the normalized progress of the current exit animation. The value range is 0–1. | - - -## Example + + + + + + + + + + + + +

    Event

    +

    Description

    +

    onEnter(type: RouteType, progress: number) => void

    +

    The callback input parameter is the normalized progress of the current entrance animation. The value range is 0–1.

    +

    onExit(type: RouteType, progress: number) => void

    +

    The callback input parameter is the normalized progress of the current exit animation. The value range is 0–1.

    +
    + +## Example Customization method 1: The entrance animation of the current page is configured as fade-in, and the exit animation is configured as zoom-out. - ``` // index.ets @Entry @@ -99,7 +286,6 @@ struct PageTransitionExample1 { } ``` - ``` // page1.ets @Entry @@ -131,11 +317,10 @@ struct AExample { } ``` -![en-us_image_0000001256978335](figures/en-us_image_0000001256978335.gif) +![](figures/pagetransition1.gif) Customization method 2: The entrance animation of the current page is configured to slide in from the left, and the exit animation is configured to zoom out with opacity change. - ``` // index.ets @Entry @@ -167,7 +352,6 @@ struct PageTransitionExample { } ``` - ``` // page1.ets @Entry @@ -199,4 +383,5 @@ struct PageTransitionExample1 { } ``` -![en-us_image_0000001212058460](figures/en-us_image_0000001212058460.gif) +![](figures/pagetransition2.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-transition-animation-component.md b/en/application-dev/reference/arkui-ts/ts-transition-animation-component.md index 7524c4fa4c..f6fc3dd221 100644 --- a/en/application-dev/reference/arkui-ts/ts-transition-animation-component.md +++ b/en/application-dev/reference/arkui-ts/ts-transition-animation-component.md @@ -1,41 +1,160 @@ -# Component Transition +# Component Transition +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +Configure the component transition animations for when a component is inserted or deleted, which improves user experience. This feature takes effect only when **animateTo** is used. The animation duration, curve, and delay are the same as those configured in **animateTo**. +## Attributes -Configure the component transition animations for when a component is inserted or deleted, which improves user experience. This feature takes effect only when **animateTo** is used. The animation duration, curve, and delay are the same as those configured in **animateTo**. + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    transition

    +

    Object

    +

    -

    +

    All parameters are optional. For details, see the description of Transition parameters.

    +
    +- Transition parameters -## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    type

    +

    TransitionType

    +

    All

    +

    No

    +

    Transition type, which includes component addition and deletion by default.

    +
    NOTE:

    If type is not specified, insertion and deletion use the same transition type.

    +
    +

    opacity

    +

    number

    +

    1

    +

    No

    +

    Opacity effect during component transition, which is the value of the start point of insertion and the end point of deletion.

    +

    translate

    +

    {

    +

    x? : number,

    +

    y? : number,

    +

    z? : number

    +

    }

    +

    -

    +

    No

    +

    Translation effect during component transition, which is the value of the start point of insertion and the end point of deletion.

    +

    scale

    +

    {

    +

    x? : number,

    +

    y? : number,

    +

    z? : number,

    +

    centerX? : number,

    +

    centerY? : number

    +

    }

    +

    -

    +

    No

    +

    Scaling effect during component transition, which is the value of the start point of insertion and the end point of deletion.

    +

    rotate

    +

    {

    +

    x?: number,

    +

    y?: number,

    +

    z?: number,

    +

    angle?: Angle,

    +

    centerX?: Length,

    +

    centerY?: Length

    +

    }

    +

    -

    +

    No

    +

    Rotation effect during component transition, which is the value of the start point of insertion and the end point of deletion.

    +
    - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| transition | Object | - | All parameters are optional. For details, see **transition** parameters. | -- transition parameters - | Name | Type | Default Value | Mandatory | Description | - | -------- | -------- | -------- | -------- | -------- | - | type | TransitionType | TransitionType.All | No | Transition type, which includes component addition and deletion by default.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > If **type** is not specified, insertion and deletion use the same transition type. | - | opacity | number | 1 | No | Opacity effect during component transition, which is the value of the start point of insertion and the end point of deletion. | - | translate | {
    x? : number,
    y? : number,
    z? : number
    } | - | No | Translation effect during component transition, which is the value of the start point of insertion and the end point of deletion. | - | scale | {
    x? : number,
    y? : number,
    z? : number,
    centerX? : number,
    centerY? : number
    } | - | No | Scaling effect during component transition, which is the value of the start point of insertion and the end point of deletion. | - | rotate | {
    x?: number,
    y?: number,
    z?: number,
    angle?: Angle,
    centerX?: Length,
    centerY?: Length
    } | - | No | Rotation effect during component transition, which is the value of the start point of insertion and the end point of deletion. | +- TransitionType enums -- TransitionType enums - | Name | Description | - | -------- | -------- | - | All | The transition takes effect in all scenarios. | - | Insert | The transition takes effect when a component is inserted. | - | Delete | The transition takes effect when a component is deleted. | + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    All

    +

    The transition takes effect in all scenarios.

    +

    Insert

    +

    The transition takes effect when a component is inserted.

    +

    Delete

    +

    The transition takes effect when a component is deleted.

    +
    -## Example +## Example The following example shows how to use a button to control the appearance and disappearance of another button, and how to configure the required transition animations. - ``` @Entry @Component @@ -67,4 +186,5 @@ struct TransitionExample { } ``` -![en-us_image_0000001211898498](figures/en-us_image_0000001211898498.gif) +![](figures/transition.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-transition-animation-shared-elements.md b/en/application-dev/reference/arkui-ts/ts-transition-animation-shared-elements.md index 41bb952be7..a73b337b47 100644 --- a/en/application-dev/reference/arkui-ts/ts-transition-animation-shared-elements.md +++ b/en/application-dev/reference/arkui-ts/ts-transition-animation-shared-elements.md @@ -1,32 +1,92 @@ -# Transition of Shared Elements - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This animationis supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +# Transition of Shared Elements +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This animation is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. Shared element transition can be used for transition between pages, for example, transition from an image on the current page to the next page. - -## Type - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| sharedTransition | id: string,
    options?: Object | - | If the same ID is configured for a component on the two pages, this shared component is transited. If this parameter is set to an empty string, no shared elements are transited. | - -- options parameters - | Name | Type | Default Value | Mandatory | Description | - | -------- | -------- | -------- | -------- | -------- | - | duration | number | 1000 | No | Animation duration, in ms. The default duration is 1000 ms. | - | curve | Curve \| Curves | Linear | No | The default curve is linear. For details about the valid values, see **Curve enums**. | - | delay | number | 0 | No | Delay of animation playback, in ms. By default, the playback is not delayed. | - - -## Example +## Type + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    sharedTransition

    +

    id: string,

    +

    options?: Object

    +

    -

    +

    If the same ID is configured for a component on the two pages, this shared component is transited. If this parameter is set to an empty string, no shared elements are transited.

    +
    + +- options parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Mandatory

    +

    Description

    +

    duration

    +

    number

    +

    1000

    +

    No

    +

    Animation duration, in ms. The default duration is 1000 ms.

    +

    curve

    +

    Curve | Curves

    +

    Linear

    +

    No

    +

    The default curve is linear. For details about the valid values, see Curve enums.

    +

    delay

    +

    number

    +

    0

    +

    No

    +

    Delay of animation playback, in ms. By default, the playback is not delayed.

    +
    + + +## Example The example shows the transition of a shared element from a page and page B. - ``` @Entry @Component @@ -55,7 +115,6 @@ struct SharedTransitionExample { } ``` - ``` // PageB @Entry @@ -69,4 +128,5 @@ struct BExample { } ``` -![en-us_image_0000001211898494](figures/en-us_image_0000001211898494.gif) +![](figures/sharedtransition.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-transition-animation.md b/en/application-dev/reference/arkui-ts/ts-transition-animation.md index 5fd0655ea2..590b23e37a 100644 --- a/en/application-dev/reference/arkui-ts/ts-transition-animation.md +++ b/en/application-dev/reference/arkui-ts/ts-transition-animation.md @@ -1,9 +1,9 @@ -# Transition Animation +# Transition Animation +- **[Page Transition](ts-page-transition-animation.md)** +- **[Component Transition](ts-transition-animation-component.md)** -- **[Page Transition](ts-page-transition-animation.md)** +- **[Transition of Shared Elements](ts-transition-animation-shared-elements.md)** -- **[Component Transition](ts-transition-animation-component.md)** -- **[Transition of Shared Elements](ts-transition-animation-shared-elements.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-background.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-background.md index 41959f374b..38ccc9ff58 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-background.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-background.md @@ -1,39 +1,106 @@ -# Background - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +# Background +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. The attributes in this topic are used to set the background color of a component. - -## Required Permissions +## Required Permissions None - -## Attributes - - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| backgroundColor | Color | - | Background color of a component. | -| backgroundImage | src: string,
    repeat?: [ImageRepeat](ts-appendix-enums.md#imagerepeat-enums) | - | **src**: image address, which can be the address of an Internet or a local image. (SVG images are not supported.)
    **repeat**: whether the background image is repeatedly used. By default, the background image is not repeatedly used. | -| backgroundImageSize | {
    width?: Length,
    height?: Length
    } \| ImageSize | Auto | Width and height of the background image. When the input is a **{width: Length, height: Length}** object, if only one attribute is set, the other attribute is the set value multiplied by the original aspect ratio of the image. By default, the original image aspect ratio remains unchanged. | -| backgroundImagePosition | {
    x?: Length,
    y?: Length
    } \| [Alignment](ts-appendix-enums.md#alignment-enums) | {
    x: 0,
    y: 0
    } | Position of the background image in the component. | - - -- ImageSize enums - | Name | Description | - | -------- | -------- | - | Cover | Default value. The image is scaled with its aspect ratio retained for both sides to be greater than or equal to the display boundaries. | - | Contain | The image is scaled with its aspect ratio retained for the content to be completely displayed within the display boundaries. | - | Auto | The original image aspect ratio is retained. | - - -## Example - +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    backgroundColor

    +

    Color

    +

    -

    +

    Background color of a component.

    +

    backgroundImage

    +

    src: string,

    +

    repeat?: ImageRepeat

    +

    -

    +

    src: image address, which can be the address of an Internet or a local image. (SVG images are not supported.)

    +

    repeat: whether the background image is repeatedly used. By default, the background image is not repeatedly used.

    +

    backgroundImageSize

    +

    {

    +

    width?: Length,

    +

    height?: Length

    +

    } | ImageSize

    +

    Auto

    +

    Width and height of the background image. When the input is a {width: Length, height: Length} object, if only one attribute is set, the other attribute is the set value multiplied by the original aspect ratio of the image. By default, the original image aspect ratio remains unchanged.

    +

    backgroundImagePosition

    +

    {

    +

    x?: Length,

    +

    y?: Length

    +

    } | Alignment

    +

    {

    +

    x: 0,

    +

    y: 0

    +

    }

    +

    Position of the background image in the component.

    +
    + +- ImageSize enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Cover

    +

    Default value. The image is scaled with its aspect ratio retained for both sides to be greater than or equal to the display boundaries.

    +

    Contain

    +

    The image is scaled with its aspect ratio retained for the content to be completely displayed within the display boundaries.

    +

    Auto

    +

    The original image aspect ratio is retained.

    +
    + + +## Example ``` @Entry @@ -99,4 +166,5 @@ struct BackgroundExample { } ``` -![en-us_image_0000001211898502](figures/en-us_image_0000001211898502.png) +![](figures/back.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-border.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-border.md index 84561f7671..e26571ee07 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-border.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-border.md @@ -1,41 +1,110 @@ -# Border +# Border Configuration +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +This section describes the settings of border styles. - -The attributes described in this topic are used to set border styles. - - -## Required Permissions +## Required Permissions None +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    border

    +

    {

    +

    width?: Length,

    +

    color?: Color,

    +

    radius?: Length,

    +

    style?: BorderStyle

    +

    }

    +

    -

    +

    Sets a unified border style.

    +

    borderStyle

    +

    BorderStyle

    +

    Solid

    +

    Sets the border style of an element.

    +

    borderWidth

    +

    Length

    +

    0

    +

    Sets the border width of an element.

    +

    borderColor

    +

    Color

    +

    -

    +

    Sets the border color of an element.

    +

    borderRadius

    +

    Length

    +

    0

    +

    Sets the border radius of an element.

    +
    + +- BorderStyle enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Dotted

    +

    Dotted border. The radius of a dot is half of borderWidth.

    +

    Dashed

    +

    Dashed border.

    +

    Solid

    +

    Solid border.

    +
    + + +## Example -## Attributes - - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| border | {
    width?: Length,
    color?: Color,
    radius?: Length,
    style?: BorderStyle
    } | - | Sets a unified border style. | -| borderStyle | BorderStyle | BorderStyle.Solid | Sets the border style of an element. | -| borderWidth | Length | 0 | Sets the border width of an element. | -| borderColor | Color | - | Sets the border color of an element. | -| borderRadius | Length | 0 | Sets the border radius of an element. | - - -- BorderStyle enums - | Name | Description | - | -------- | -------- | - | Dotted | Dotted border. The radius of a dot is half of **borderWidth**. | - | Dashed | Dashed border. | - | Solid | Solid border. | - - -## Example - - ``` @Entry @Component @@ -55,4 +124,5 @@ struct BorderExample { } ``` -![en-us_image_0000001211898466](figures/en-us_image_0000001211898466.gif) +![](figures/border.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-click.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-click.md deleted file mode 100644 index 1679db7314..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-click.md +++ /dev/null @@ -1,52 +0,0 @@ -# Click Control - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions - -None - - -## Attributes - - - | **Name** | **Type** | **Default Value** | **Description** | -| -------- | -------- | -------- | -------- | -| touchable | boolean | true | Whether the current component is touchable. | - - -## Example - - -``` -@Entry -@Component -struct TouchAbleExample { - @State text1: string = '' - @State text2: string = '' - - build() { - Stack() { - Rect() - .fill(Color.Gray).width(150).height(150) - .onClick(() => { - console.info(this.text1 = 'Rect Clicked') - }) - .overlay(this.text1, { align: Alignment.Bottom, offset: { x: 0, y: 20 } }) - Ellipse() - .fill(Color.Pink).width(150).height(80) - .touchable(false) // When the Ellipse area is touched, the message "Ellipse Clicked" is not displayed. - .onClick(() => { - console.info(this.text2 = 'Ellipse Clicked') - }) - .overlay(this.text2, { align: Alignment.Bottom, offset: { x: 0, y: 20 } }) - }.margin(100) - } -} -``` - - -![en-us_image_0000001257138351](figures/en-us_image_0000001257138351.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-component-id.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-component-id.md deleted file mode 100644 index 8fe2385490..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-component-id.md +++ /dev/null @@ -1,104 +0,0 @@ -# Component ID - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions - -None - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| id | string | '' | Unique ID of the component. The uniqueness is ensured by the user. | - - -## APIs - - -### getInspectorByKey - -getInspectorByKey(id: string): string - -Obtains all attributes of the component with the specified ID, excluding the information about child components. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | id | string | Yes | - | ID of the component whose attributes are to be obtained. | - -- Return value - | Type | Description | - | -------- | -------- | - | string | JSON string of the component attribute list. | - - -### sendEventByKey - -sendEventByKey(id: string, action: number, params: string): boolean - -Sends an event to the component with the specified ID. - -- Parameters - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | id | string | Yes | - | ID of the component for which the event is to be sent. | - | action | number | Yes | - | Type of the event to be sent. The options are as follows:
    - Click event: 10.
    - LongClick: 11. | - | params | string | Yes | - | Event parameters. If there is no parameter, pass an empty string **""**. | - -- Return value - | Type | Description | - | -------- | -------- | - | boolean | Returns **false** if the component with the specified ID cannot be found; returns **true** otherwise. | - - -## Example - - -``` -@Entry -@Component -struct IdExample { - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Button() { - Text('click') - .fontSize(25) - .fontWeight(FontWeight.Bold) - } - .type(ButtonType.Capsule) - .margin({ - top: 20 - }).onClick(() => { - console.info(getInspectorByKey("click")) - console.info(getInspectorTree()) - setTimeout(() => { - sendEventByKey("longclick", 11, "") - }, 2000) - }).id('click') - - Button() { - Text('longclick') - .fontSize(25) - .fontWeight(FontWeight.Bold) - } - .type(ButtonType.Capsule) - .margin({ - top: 20 - }) - .backgroundColor('#0D9FFB') - .gesture( - LongPressGesture().onActionEnd(() => { - console.info('long clicked') - })) - .id('longclick') - } - .width('100%') - .height('100%') - } -} -``` diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-enable.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-enable.md index 1c2ccdfc08..9d6b124978 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-enable.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-enable.md @@ -1,26 +1,39 @@ -# Enable/Disable +# Enable/Disable +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None +## Attributes + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    enabled

    +

    boolean

    +

    true

    +

    The value true means that the component is available and can respond to operations such as clicking. The value false means that the component does not respond to operations such as clicking.

    +
    + +## Example -## Attributes - - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| enabled | boolean | true | The value **true** means that the component is available and can respond to operations such as clicking. The value **false** means that the component does not respond to operations such as clicking. | - - -## Example - - ``` @Entry @Component @@ -37,4 +50,5 @@ struct EnabledExample { } ``` -![en-us_image_0000001212218428](figures/en-us_image_0000001212218428.gif) +![](figures/enabled.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-flex-layout.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-flex-layout.md index eaa92f882d..6423acb807 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-flex-layout.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-flex-layout.md @@ -1,30 +1,66 @@ -# Flex Layout +# Flex Layout +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>- This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +>- This attribute is valid only when the parent component is a **Flex** component. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> - This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> -> - This attribute is valid only when the parent component is a **Flex** component. - - -## Required Permissions +## Required Permissions None - -## Attributes - - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| flexBasis | 'auto' \| Length | 'auto' | Base dimension of a component in the main axis of the **Flex** layout. | -| flexGrow | number | 0 | Percentage of the **Flex** layout's remaining space that is allocated to the component. | -| flexShrink | number | 1 | Percentage of the **Flex** layout's shrink size that is allocated to the component. | -| alignSelf | [ItemAlign](ts-appendix-enums.md#itemalign-enums) | Auto | Alignment mode, which overwrites the default **alignItems** configuration in the **Flex** layout. | - - -## Example - +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    flexBasis

    +

    'auto' | Length

    +

    'auto'

    +

    Base dimension of a component in the main axis of the Flex layout.

    +

    flexGrow

    +

    number

    +

    0

    +

    Percentage of the Flex layout's remaining space that is allocated to the component.

    +

    flexShrink

    +

    number

    +

    1

    +

    Percentage of the Flex layout's shrink size that is allocated to the component.

    +

    alignSelf

    +

    ItemAlign

    +

    Auto

    +

    Alighment mode, which overwrites the default alignItems configuration in the Flex layout.

    +
    + +## Example ``` @Entry @@ -58,7 +94,7 @@ struct FlexExample { Text('flexShrink').fontSize(9).fontColor(0xCCCCCC).width('90%') // flexShrink() specifies the percentage of the shrink size allocated to the component. - // The ratio of text1 is 0, and the default values of other parameters are 1. If the components cannot be completely displayed, the last two components are shrunk proportionally. The first component is not shrunk. + // The ratio of text1 is 0, and the default values of other parameters are 1. If the components cannot be completely displayed, the last two components are shrunk proportionally. The first componented is not shrunk. Flex({ direction: FlexDirection.Row }) { Text('flexShrink(0)') .flexShrink(0).width('50%').height(100).lineHeight(70) @@ -86,4 +122,5 @@ struct FlexExample { } ``` -![en-us_image_0000001212378394](figures/en-us_image_0000001212378394.png) +![](figures/flex.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-focus.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-focus.md deleted file mode 100644 index 9f3e2481f9..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-focus.md +++ /dev/null @@ -1,78 +0,0 @@ -# Focus Control - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions - -None - - -## Attributes - - | **Name** | **Type** | **Default Value** | **Description** | -| -------- | -------- | -------- | -------- | -| focusable | boolean | false | Whether the current component is focusable. | - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> The following components support focus control: **<Button>**, **<Text>**, **<Image>**, **<List>**, and **<Grid>**. - - -## Example - - -``` -@Entry -@Component -struct FocusableExample { - @State textOne: string = '' - @State textTwo: string = '' - @State textThree: string = 'The third button cannot be focused' - @State oneButtonColor: string = '#FF0000' - @State twoButtonColor: string = '#FFC0CB' - @State threeButtonColor: string = '#87CEFA' - - build() { - Column({ space:20 }){ - Button(this.textOne) - .backgroundColor(this.oneButtonColor) - .width(300).height(70).fontColor(Color.Black) - .focusable(true) - .onFocus(() => { - this.textOne = 'First Button onFocus' - this.oneButtonColor = '#AFEEEE' - }) - .onBlur(() => { - this.textOne = 'First Button onBlur' - this.oneButtonColor = '#FFC0CB' - }) - Button(this.textTwo) - .backgroundColor(this.twoButtonColor) - .width(300).height(70).fontColor(Color.Black) - .focusable(true) - .onFocus(() => { - this.textTwo = 'Second Button onFocus' - this.twoButtonColor = '#AFEEEE' - }) - .onBlur(() => { - this.textTwo = 'Second Button onBlur' - this.twoButtonColor = '#FFC0CB' - }) - Button(this.textThree) - .backgroundColor(this.threeButtonColor) - .width(300).height(70).fontColor(Color.Black) - .focusable(false) - .onFocus(() => { - this.textThree = 'Third Button onFocus' - this.threeButtonColor = '#AFEEEE' - }) - .onBlur(() => { - this.textThree = 'Third Button onBlur' - this.threeButtonColor = '#FFC0CB' - }) - }.width('100%').margin({ top:20 }) - } -} -``` diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-gradient-color.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-gradient-color.md index dace1744af..754e983d7e 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-gradient-color.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-gradient-color.md @@ -1,43 +1,145 @@ -# Gradient Color +# Gradient Color +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## Attributes - - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| linearGradient | {
    angle?: [Angle](../../ui/ts-types.md),
    direction?:GradientDirection,
    colors: Array<[ColorStop](../../ui/ts-types.md)>
    repeating?: boolean
    } | - | Linear gradient.
    **angle**: angle of the linear gradient.
    **direction**: direction of the linear gradient.
    **colors**: description of the gradient colors.
    **repeating**: whether the colors are repeated. | -| sweepGradient | {
    center: Point,
    start?: angle,
    end?: angle,
    colors: Array<[ColorStop](../../ui/ts-types.md)>
    repeating?: boolean
    } | - | Angle gradient.
    **center**: center point of the angle gradient.
    **start**: start point of the angle gradient.
    **end**: end point of the angle gradient.
    **colors**: description of the gradient colors.
    **repeating**: whether the colors are repeated. | -| radialGradient | {
    center: Point,
    radius: Length,
    colors: Array<[ColorStop](../../ui/ts-types.md)>
    repeating: boolean
    } | - | Radial gradient.
    **center**: center point of the radial gradient.
    **radius**: radius of the radial gradient.
    **colors**: description of the gradient colors.
    **repeating**: whether the colors are repeated. | - - -- GradientDirection enums - **GradientDirection** is used to describe the gradient direction. - - | Name | Description | - | -------- | -------- | - | Left | The gradient direction is from right to left. | - | Top | The gradient direction is from bottom to top. | - | Right | The gradient direction is from left to right. | - | Bottom | The gradient direction is from top to bottom. | - | LeftTop | The gradient direction is upper left. | - | LeftBottom | The gradient direction is lower left. | - | RightTop | The gradient direction is upper right. | - | RightBottom | The gradient direction is lower right. | - | None | No gradient. | - - -## Example - +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    linearGradient

    +

    {

    +

    angle?: Angle,

    +

    direction?:GradientDirection,

    +

    colors: Array<ColorStop>

    +

    repeating?: boolean

    +

    }

    +

    -

    +

    Linear gradient.

    +

    angle: angle of the linear gradient.

    +

    direction: direction of the linear gradient.

    +

    colors: description of the gradient colors.

    +

    repeating: whether the colors are repeated.

    +

    sweepGradient

    +

    {

    +

    center: Point,

    +

    start?: angle,

    +

    end?: angle,

    +

    colors: Array<ColorStop>

    +

    repeating?: boolean

    +

    }

    +

    -

    +

    Angle gradient.

    +

    center: center point of the angle gradient.

    +

    start: start point of the angle gradient.

    +

    end: end point of the angle gradient.

    +

    colors: description of the gradient colors.

    +

    repeating: whether the colors are repeated.

    +

    radialGradient

    +

    {

    +

    center: Point,

    +

    radius: Length,

    +

    colors: Array<ColorStop>

    +

    repeating: boolean

    +

    }

    +

    -

    +

    Radial gradient.

    +

    center: center point of the radial gradient.

    +

    radius: radius of the radial gradient.

    +

    colors: description of the gradient colors.

    +

    repeating: whether the colors are repeated.

    +
    + +- GradientDirection enums + + **GradientDirection** is used to describe the gradient direction. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Left

    +

    The gradient direction is from right to left.

    +

    Top

    +

    The gradient direction is from bottom to top.

    +

    Right

    +

    The gradient direction is from left to right.

    +

    Bottom

    +

    The gradient direction is from top to bottom.

    +

    LeftTop

    +

    The gradient direction is upper left.

    +

    LeftBottom

    +

    The gradient direction is lower left.

    +

    RightTop

    +

    The gradient direction is upper right.

    +

    RightBottom

    +

    The gradient direction is lower right.

    +

    None

    +

    No gradient.

    +
    + + +## Example ``` @Entry @@ -80,4 +182,5 @@ struct ColorGradientExample { } ``` -![en-us_image_0000001212218484](figures/en-us_image_0000001212218484.png) +![](figures/colorgradient.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-grid.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-grid.md index c62278b652..941a38b140 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-grid.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-grid.md @@ -1,29 +1,71 @@ -# Grid +# Grid +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>- This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +>- The column width and column gap in the grid layout are determined by the nearest parent component **GridContainer**. The component tree that uses grid attributes must contain one **GridContainer** or more. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> - This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> -> - The column width and column gap in the grid layout are determined by the nearest parent component **GridContainer**. The component tree that uses grid attributes must contain one **GridContainer** or more. - - -## Required Permissions +## Required Permissions None - -## Attributes - - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| useSizeType | {
    xs?: number \| { span: number, offset: number },
    sm?: number \| { span: number, offset: number },
    md?: number \| { span: number, offset: number },
    lg?: number \| { span: number, offset: number }
    } | - | Number of occupied columns and offset columns for a specific device width type. **span** indicates the number of occupied columns, and **offset** indicates the number of offset columns.
    If the value is of the number type, only the number of columns can be set. If the value is in the format of {"span": 1, "offset": 0}, both the number of occupied columns and the number of offset columns need to be set.
    - **xs** indicates that the device width type is **SizeType.XS**.
    - **sm** indicates that the device width type is **SizeType.SM**.
    - **md** indicates that the device width type is **SizeType.MD**.
    - **lg** indicates that the device width type is **SizeType.LG**. | -| gridSpan | number | 1 | Default number of occupied columns, that is, the number of occupied columns when **span** in **useSizeType** is not set.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > If the **span** attribute is set, the component width is determined by the grid layout. | -| gridOffset | number | 0 | Default number of offset columns, that is, the number of offset columns in the start direction of the parent component (which is also the nth column that the component is in) when **offset** in **useSizeType** is not set.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > 1. After this attribute is set, the horizontal layout of the current component does not follow the original layout of the parent component. Instead, it offsets along the start direction of the parent component.

    > 2. Offset = (Column width + Gap) x Number of columns

    > 3. After this attribute is set, sibling components will be arranged relatively to this component, as in the relative layout. | - - -## Example - +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    useSizeType

    +

    {

    +

    xs?: number | { span: number, offset: number },

    +

    sm?: number | { span: number, offset: number },

    +

    md?: number | { span: number, offset: number },

    +

    lg?: number | { span: number, offset: number }

    +

    }

    +

    -

    +

    Number of occupied columns and offset columns for a specific device width type. span indicates the number of occupied columns, and offset indicates the number of offset columns.

    +

    If the value is of the number type, only the number of columns can be set. If the value is in the format of {"span": 1, "offset": 0}, both the number of occupied columns and the number of offset columns need to be set.

    +
    • xs indicates that the device width type is SizeType.XS.
    • sm indicates that the device width type is SizeType.SM.
    +
    • md indicates that the device width type is SizeType.MD.
    • lg indicates that the device width type is SizeType.LG.
    +

    gridSpan

    +

    number

    +

    1

    +

    Default number of occupied columns, that is, the number of occupied columns when span in useSizeType is not set.

    +
    NOTE:

    If the span attribute is set, the component width is determined by the grid layout.

    +
    +

    gridOffset

    +

    number

    +

    0

    +

    Default number of offset columns, that is, the number of offset columns in the start direction of the parent component (which is also the nth column that the component is in) when offset in useSizeType is not set.

    +
    NOTE:

    1. After this attribute is set, the horizontal layout of the current component does not follow the original layout of the parent component. Instead, it offsets along the start direction of the parent component.

    +

    2. Offset = (Column width + Gap) x Number of columns

    +

    3. After this attribute is set, sibling components will be arranged relatively to this component, as in the relative layout.

    +
    +
    + +## Example ``` @Entry @@ -68,11 +110,12 @@ struct GridContainerExample1 { } ``` - **Figure1** Device width type SM - ![en-us_image_0000001256858405](figures/en-us_image_0000001256858405.png) +**Figure 1** Device width type SM +![](figures/device-width-type-sm.png "device-width-type-sm") + +**Figure 2** Device width type MD +![](figures/device-width-type-md.png "device-width-type-md") - **Figure2** Device width type MD - ![en-us_image_0000001257058415](figures/en-us_image_0000001257058415.png) +**Figure 3** Device width type LG +![](figures/device-width-type-lg.png "device-width-type-lg") - **Figure3** Device width type LG - ![en-us_image_0000001212378416](figures/en-us_image_0000001212378416.png) diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-hover-effect.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-hover-effect.md deleted file mode 100644 index 6e47ced759..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-hover-effect.md +++ /dev/null @@ -1,69 +0,0 @@ -# Hover Effect - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions - -None - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| hoverEffect | HoverEffect | HoverEffect.Auto | Hover effect of the component in hover state. | - -- HoverEffect enums - | Name | Description | - | -------- | -------- | - | Auto | Default hover effect. | - | Scale | Scale effect. | - | Board | Fade-in and fade-out effect. | - | None | No effect. | - - -## Example - - -``` -@Entry -@Component -struct HoverExample { - @State isHoverVal: boolean = false - - build() { - Column({ space: 5 }) { - Column({ space: 5 }) { - Text('Scale').fontSize(20).fontColor(Color.Gray).width('90%').position({ x: 0, y: 80 }) - Column() - .width('80%').height(200).backgroundColor(Color.Gray) - .position({ x: 40, y: 120 }) - .hoverEffect(HoverEffect.Scale) - .onHover((isHover: boolean) => { - console.info('Scale' + isHover) - this.isHoverVal = isHover - }) - - Text('Board').fontSize(20).fontColor(Color.Gray).width('90%').position({ x: 0, y: 380 }) - Column() - .width('80%').height(200).backgroundColor(Color.Gray) - .hoverEffect(HoverEffect.Board) - .position({ x: 40, y: 420 }) - .onHover((isHover: boolean) => { - console.info('HoverEffect.Board') - this.isHoverVal = isHover - }) - } - .hoverEffect(HoverEffect.None) - .width('100%').height('100%').border({ width: 1 }) - .onHover((isHover: boolean) => { - console.info('HoverEffect.None') - this.isHoverVal = isHover - }) - } - } -} -``` diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-image-effect.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-image-effect.md index 25e98c6ea8..a5e0d3e0ad 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-image-effect.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-image-effect.md @@ -1,35 +1,133 @@ -# Image Effect Configuration +# Image Effect Configuration +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## Attributes - - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| blur | number | - | Adds the content blurring for the current component. The input parameter is the blur radius. The larger the radius is, the more blurred the content is. If the value is **0**, the content is not blurred. | -| backdropBlur | number | - | Adds the background blur effect for the current component. The input parameter is the blur radius. The larger the radius is, the more blurred the background is. If the value is **0**, the background is not blurred. | -| shadow | {
    radius: number,
    color?: Color,
    offsetX?: number,
    offsetY?: number
    } | - | Adds the shadow effect to the current component. The input parameters are the fuzzy radius (mandatory), shadow color (optional; gray by default), X-axis offset (optional and 0 by default), and Y-axis offset (optional; 0 by default). The offset unit is px. | -| grayscale | number | 0.0 | The value indicates the grayscale conversion ratio. If the input value is **1.0**, the image is converted into a grayscale image. If the input value is **0.0**, the image does not change. If the input value is between **0.0** and **1.0**, the effect changes in linear mode. The unit is percentage. The unit is percentage. | -| brightness | number | 1.0 | Adds a brightness to the current component. The input parameter is a brightness ratio. The value **1** indicates no effects. The value **0** indicates the complete darkness. If the value is less than **1**, the brightness decreases. If the value is greater than **1**, the brightness increases. A larger value indicates a higher brightness. | -| saturate | number | 1.0 | Adds the saturation effect to the current component. The saturation is the ratio of the chromatic component to the achromatic component (gray) in a color. When the input value is **1**, the source image is displayed. When the input value is greater than **1**, a higher percentage of the chromatic component indicates a higher saturation. When the input value is less than **1**, a higher percentage of the achromatic component indicates a lower saturation. The unit is percentage. | -| contrast | number | 1.0 | Adds the contrast effect to the current component. The input parameter is a contrast value. If the value is **1**, the source image is displayed. If the value is greater than **1**, a larger value indicates a higher contrast and a clearer image. If the value is less than **1**, a smaller value indicates a lower contrast is. If the value is **0**, the image becomes all gray. The unit is percentage. | -| invert | number | 0 | Inverts the input image. The input parameter is an image inversion ratio. The value **1** indicates complete inversion. The value **0** indicates that the image does not change. The unit is percentage. | -| colorBlend 8+ | Color | - | Adds the color blend effect to the current component. The input parameter is the blended color. | -| sepia | number | 0 | Converts the image color to sepia. The input parameter is an image inversion ratio. The value **1** indicates the image is completely sepia. The value **0** indicates that the image does not change. The unit is percentage. | -| hueRotate | Angle | 0deg | Adds the hue rotation effect to the current component. The input parameter is a rotation angle. If the input value is **0deg**, the image does not change (because the default rotation angle is **0deg**). The input parameter does not have the maximum value. If the value exceeds **360deg**, the image is rotated one ore more circles. | - - -## Example - +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    blur

    +

    number

    +

    -

    +

    Adds the content blurring for the current component. The input parameter is the blur radius. The larger the radius is, the more blurred the content is. If the value is 0, the content is not blurred.

    +

    backdropBlur

    +

    number

    +

    -

    +

    Adds the background blur effect for the current component. The input parameter is the blur radius. The larger the radius is, the more blurred the background is. If the value is 0, the background is not blurred.

    +

    shadow

    +

    {

    +

    radius: number,

    +

    color?: Color,

    +

    offsetX?: number,

    +

    offsetY?: number

    +

    }

    +

    -

    +

    Adds the shadow effect to the current component. The input parameters are the fuzzy radius (mandatory), shadow color (optional; gray by default), X-axis offset (optional and 0 by default), and Y-axis offset (optional; 0 by default). The offset unit is px.

    +

    grayscale

    +

    number

    +

    0.0

    +

    The value indicates the grayscale conversion ratio. If the input value is 1.0, the image is converted into a grayscale image. If the input value is 0.0, the image does not change. If the input value is between 0.0 and 1.0, the effect changes in linear mode. The unit is percentage. The unit is percentage.

    +

    brightness

    +

    number

    +

    1.0

    +

    Adds a brightness to the current component. The input parameter is a brightness ratio. The value 1 indicates no effects. The value 0 indicates the complete darkness. If the value is less than 1, the brightness decreases. If the value is greater than 1, the brightness increases. A larger value indicates a higher brightness.

    +

    saturate

    +

    number

    +

    1.0

    +

    Adds the saturation effect to the current component. The saturation is the ratio of the chromatic component to the achromatic component (gray) in a color. When the input value is 1, the source image is displayed. When the input value is greater than 1, a higher percentage of the chromatic component indicates a higher saturation. When the input value is less than 1, a higher percentage of the achromatic component indicates a lower saturation. The unit is percentage.

    +

    contrast

    +

    number

    +

    1.0

    +

    Adds the contrast effect to the current component. The input parameter is a contrast value. If the value is 1, the source image is displayed. If the value is greater than 1, a larger value indicates a higher contrast and a clearer image. If the value is less than 1, a smaller value indicates a lower contrast is. If the value is 0, the image becomes all gray. The unit is percentage.

    +

    invert

    +

    number

    +

    0

    +

    Inverts the input image. The input parameter is an image inversion ratio. The value 1 indicates complete inversion. The value 0 indicates that the image does not change. The unit is percentage.

    +

    colorBlend 8+

    +

    Color

    +

    -

    +

    Adds the color blend effect to the current component. The input parameter is the blended color.

    +

    sepia

    +

    number

    +

    0

    +

    Converts the image color to sepia. The input parameter is an image inversion ratio. The value 1 indicates the image is completely sepia. The value 0 indicates that the image does not change. The unit is percentage.

    +

    hueRotate

    +

    Angle

    +

    0deg

    +

    Adds the hue rotation effect to the current component. The input parameter is a rotation angle. If the input value is 0deg, the image does not change (because the default rotation angle is 0deg). The input parameter does not have the maximum value. If the value exceeds 360deg, the image is rotated one ore more circles.

    +
    + +## Example ``` @Entry @@ -74,4 +172,5 @@ Column({space: 10}) { } ``` -![en-us_image_0000001212218448](figures/en-us_image_0000001212218448.png) +![](figures/2222.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-layout-constraints.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-layout-constraints.md index 7b599ad411..cb9ef84f00 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-layout-constraints.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-layout-constraints.md @@ -1,26 +1,49 @@ -# Layout Constraints +# Layout Constraints +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## Attributes - - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| aspectRatio | number | - | Specifies an aspect ratio for the current component. | -| displayPriority | number | - | Sets a display priority for the current component in the layout container. When the space of the parent container is insufficient, the component with a lower priority is hidden.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > This parameter is valid only for the Row/Column/Flex (single-row) container component. | - - -## Example - +## Attributes + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    aspectRatio

    +

    number

    +

    -

    +

    Specifies an aspect ratio for the current component.

    +

    displayPriority

    +

    number

    +

    -

    +

    Sets a display priority for the current component in the layout container. When the space of the parent container is insufficient, the component with a lower priority is hidden.

    +
    NOTE:

    This parameter is valid only for the Row/Column/Flex (single-row) container component.

    +
    +
    + +## Example ``` @Entry @@ -70,12 +93,11 @@ struct AspectRatioExample { } ``` - **Figure1** Portrait display - ![en-us_image_0000001256978379](figures/en-us_image_0000001256978379.gif) - - **Figure2** Landscape display - ![en-us_image_0000001212218476](figures/en-us_image_0000001212218476.gif) +**Figure 1** Portrait display +![](figures/portrait-display.gif "portrait-display") +**Figure 2** Landscape display +![](figures/landscape-display.gif "landscape-display") ``` class ContainerInfo { @@ -128,4 +150,5 @@ struct DisplayPriorityExample { ``` -![en-us_image_0000001212058504](figures/en-us_image_0000001212058504.gif) +![](figures/displaypriorityexample.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-location.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-location.md index f5154e37c8..a3617a1067 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-location.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-location.md @@ -1,37 +1,117 @@ -# Location +# Location +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## Attributes - - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| align | [Alignment](ts-appendix-enums.md#alignment-enums) | Center | Alignment of the component content. This attribute is valid only when the values of **width** and **height** are greater than the size of the component content. | -| direction | Direction | Auto | Horizontal layout of the component. For details about the options, see **Direction** enums. | -| position | {
    x: Length,
    y: Length
    } | - | Offset of the component anchor point relative to the top start edge of the parent component. The offset is expressed using absolute values. When laying out components, this attribute does not affect the layout of the parent component. It only adjusts the component position during drawing. | -| markAnchor | {
    x: Length,
    y: Length
    } | {
    x: 0,
    y: 0
    } | Anchor point of the component for positioning. The top start edge of the component is used as the reference point for offset. | -| offset | {
    x: Length,
    y: Length
    } | {
    x: 0,
    y: 0
    } | Coordinate offset of the relative layout. This attribute does not affect the layout of the parent component. It only adjusts the component position during drawing. | - - -- Direction enums - | Name | Description | - | -------- | -------- | - | Ltr | Components are arranged from left to right. | - | Rtl | Components are arranged from right to left. | - | Auto | The default layout direction is used. | - - -## Example - +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    align

    +

    Alignment

    +

    Center

    +

    Alignment of the component content. This attribute is valid only when the values of width and height are greater than the size of the component content.

    +

    direction

    +

    Direction

    +

    Auto

    +

    Horizontal layout of the component. For details about the options, see Direction enums.

    +

    position

    +

    {

    +

    x: Length,

    +

    y: Length

    +

    }

    +

    -

    +

    Offset of the component anchor point relative to the top start edge of the parent component. The offset is expressed using absolute values. When laying out components, this attribute does not affect the layout of the parent component. It only adjusts the component position during drawing.

    +

    markAnchor

    +

    {

    +

    x: Length,

    +

    y: Length

    +

    }

    +

    {

    +

    x: 0,

    +

    y: 0

    +

    }

    +

    Anchor point of the component for positioning. The top start edge of the component is used as the reference point for offset.

    +

    offset

    +

    {

    +

    x: Length,

    +

    y: Length

    +

    }

    +

    {

    +

    x: 0,

    +

    y: 0

    +

    }

    +

    Coordinate offset of the relative layout. This attribute does not affect the layout of the parent component. It only adjusts the component position during drawing.

    +
    + +- Direction enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Ltr

    +

    Components are arranged from left to right.

    +

    Rtl

    +

    Components are arranged from right to left.

    +

    Auto

    +

    The default layout direction is used.

    +
    + + +## Example ``` @Entry @@ -64,8 +144,7 @@ struct PositionExample { } ``` -![en-us_image_0000001212218456](figures/en-us_image_0000001212218456.gif) - +![](figures/position.gif) ``` @Entry @@ -118,4 +197,5 @@ struct PositionExample2 { } ``` -![en-us_image_0000001256858409](figures/en-us_image_0000001256858409.gif) +![](figures/position2.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-opacity.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-opacity.md index c786ef89d6..1103e964b2 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-opacity.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-opacity.md @@ -1,29 +1,41 @@ -# Opacity - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +# Opacity +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. The attributes described in this topic are used to set the opacity of a component. - -## Required Permissions +## Required Permissions None +## Attributes + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    opacity

    +

    number

    +

    1

    +

    Opacity of a component. The value ranges from 0 to 1. The value 1 means opaque, and 0 means completely transparent.

    +
    + +## Example -## Attributes - - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| opacity | number | 1 | Opacity of a component. The value ranges from **0** to **1**. The value **1** means opaque, and **0** means completely transparent. | - - -## Example - - ``` @Entry @Component @@ -43,4 +55,5 @@ struct OpacityExample { } ``` -![en-us_image_0000001256858385](figures/en-us_image_0000001256858385.gif) +![](figures/opacity.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-overlay.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-overlay.md index f07ffeb31d..005b5faf00 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-overlay.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-overlay.md @@ -1,25 +1,45 @@ -# Overlay +# Overlay +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None +## Attributes -## Attributes - - -| Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| overlay | title: string,
    options: {
    align?: [Alignment](ts-appendix-enums.md#alignment-enums),
    offset?: {x: number, y: number}
    } | {
    align: Alignment.Center,
    offset: {0, 0}
    } | Mask added to the component. The mask has the same layout as the component. | - - -## Example + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    overlay

    +

    title: string,

    +

    options: {

    +

    align?: Alignment,

    +

    offset?: {x: number, y: number}

    +

    }

    +

    {

    +

    align: Alignment.Center,

    +

    offset: {0, 0}

    +

    }

    +

    Mask added to the component. The mask has the same layout as the component.

    +
    +## Example ``` @Entry @@ -41,4 +61,5 @@ struct OverlayExample { } ``` -![en-us_image_0000001212058472](figures/en-us_image_0000001212058472.png) +![](figures/en-us_image_0000001194911566.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-polymorphic-style.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-polymorphic-style.md deleted file mode 100644 index 0baadc21f6..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-polymorphic-style.md +++ /dev/null @@ -1,126 +0,0 @@ -# Polymorphic Style - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -You can set state-specific styles for components. - - -## Required Permissions - -None - - -## Attributes - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| stateStyle | StateStyles | - | Sets the styles of a component for different states. | - -- StateStyles8+ - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | normal | ()=>void | No | - | Style of the component when stateless. | - | pressed | ()=>void | No | - | Style of the component in the pressed state. | - | disabled | ()=>void | No | - | Style of the component in disabled state. | - - -## Example - - -``` -@Entry -@Component -struct StyleExample { - @State isEnable: boolean = true - - @Styles pressedStyles() { - .backgroundColor("#ED6F21") - .borderRadius(10) - .borderStyle(BorderStyle.Dashed) - .borderWidth(2) - .borderColor("#33000000") - .width(120) - .height(30) - .opacity(1) - } - - @Styles disabledStyles() { - .backgroundColor("#E5E5E5") - .borderRadius(10) - .borderStyle(BorderStyle.Solid) - .borderWidth(2) - .borderColor("#2a4c1919") - .width(90) - .height(25) - .opacity(1) - } - - @Styles normalStyles() { - .backgroundColor("#0A59F7") - .borderRadius(10) - .borderStyle(BorderStyle.Solid) - .borderWidth(2) - .borderColor("#33000000") - .width(100) - .height(25) - .opacity(1) - } - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center }) { - Text("normal") - .fontSize(14) - .fontColor(Color.White) - .opacity(0.5) - .stateStyles({ - normal: this.normalStyles, - }) - .margin({ bottom: 20 }) - .textAlign(TextAlign.Center) - Text("pressed") - .backgroundColor("#0A59F7") - .borderRadius(20) - .borderStyle(BorderStyle.Dotted) - .borderWidth(2) - .borderColor(Color.Red) - .width(100) - .height(25) - .opacity(1) - .fontSize(14) - .fontColor(Color.White) - .stateStyles({ - pressed: this.pressedStyles, - }) - .margin({ bottom: 20 }) - .textAlign(TextAlign.Center) - Text(this.isEnable == true ? "effective" : "disabled") - .backgroundColor("#0A59F7") - .borderRadius(20) - .borderStyle(BorderStyle.Solid) - .borderWidth(2) - .borderColor(Color.Gray) - .width(100) - .height(25) - .opacity(1) - .fontSize(14) - .fontColor(Color.White) - .enabled(this.isEnable) - .stateStyles({ - disabled: this.disabledStyles, - }) - .textAlign(TextAlign.Center) - Text("control disabled") - .onClick(() => { - this.isEnable = !this.isEnable - console.log(`${this.isEnable}`) - }) - } - .width(350).height(300) - } -} -``` - -![en-us_image_0000001211898512](figures/en-us_image_0000001211898512.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-popup.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-popup.md index e3e1aa2400..e0ec8e6def 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-popup.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-popup.md @@ -1,58 +1,272 @@ -# Popup Control +# Popup Control +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None +## Attributes -## Attributes + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    bindPopup

    +

    show: boolean,

    +

    popup: PopupOption | CustomPopupOption

    +

    -

    +

    Settings of the popup bound to a component.

    +

    show: whether to display the popup message on the creation page by default. The default value is false.

    +

    popup: parameters of the current popup window.

    +
    +- PopupOption APIs - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| bindPopup | show: boolean,
    popup: PopupOption \| CustomPopupOption | - | Settings of the popup bound to a component.
    **show**: whether to display the popup on the creation page by default. The default value is **false**.
    **popup**: parameters of the current popup. | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    message

    +

    string

    +

    Yes

    +

    -

    +

    Content of the popup message.

    +

    placementOnTop

    +

    boolean

    +

    No

    +

    false

    +

    Whether to display the popup message above the component. The default value is false.

    +

    primaryButton

    +

    {

    +

    value: string,

    +

    action: () => void

    +

    }

    +

    No

    +

    -

    +

    The first button.

    +

    value: text of the primary button in the popup.

    +

    action: callback function for tapping the primary button.

    +

    secondaryButton

    +

    {

    +

    value: string,

    +

    action: () => void

    +

    }

    +

    No

    +

    -

    +

    Second button.

    +

    value: text of the secondary button in the popup.

    +

    action: callback function for tapping the secondary button.

    +

    onStateChange

    +

    (isVisible: boolean) => void

    +

    No

    +

    -

    +

    Callback for the popup status change event. The parameter isVisible indicates the visibility of the popup.

    +
    +- CustomPopupOption APIs8+ -- PopupOption attributes - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | message | string | Yes | - | Content of the popup message. | - | placementOnTop | boolean | No | false | Whether to display the popup above the component. The default value is **false**. | - | primaryButton | {
    value: string,
    action: () => void
    } | No | - | First button.
    **value**: text of the primary button in the popup.
    **action**: callback function for clicking the primary button. | - | secondaryButton | {
    value: string,
    action: () => void
    } | No | - | Second button.
    **value**: text of the secondary button in the popup.
    **action**: callback function for clicking the secondary button. | - | onStateChange | (isVisible: boolean) => void | No | - | Callback for the popup status change event. The parameter **isVisible** indicates the visibility of the popup. | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    builder

    +

    () => any

    +

    Yes

    +

    -

    +

    Builder of the tooltip content.

    +

    placement

    +

    Placement

    +

    No

    +

    Placement.Bottom

    +

    Preferred position of the tooltip component. If the set position is insufficient for holding the component, it will be automatically adjusted.

    +

    maskColor

    +

    Color

    +

    No

    +

    -

    +

    Color of the tooltip mask.

    +

    popupColor

    +

    Color

    +

    No

    +

    -

    +

    Color of the tooltip.

    +

    enableArrow

    +

    boolean

    +

    No

    +

    true

    +

    Whether to display arrows. Arrows are displayed only for tooltips in the up and down directions.

    +

    autoCancel

    +

    boolean

    +

    No

    +

    true

    +

    Whether to automatically close the tooltip when an operation is performed on the page.

    +

    onStateChange

    +

    (isVisible: boolean) => void

    +

    No

    +

    -

    +

    Callback for the popup status change event. The parameter isVisible indicates the visibility of the popup.

    +
    -- CustomPopupOption8+ - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | builder | () => any | Yes | - | Builder of the tooltip content. | - | placement | Placement | No | Placement.Bottom | Preferred position of the tooltip component. If the set position is insufficient for holding the component, it will be automatically adjusted. | - | maskColor | [Color](../../ui/ts-types.md) | No | - | Color of the tooltip mask. | - | popupColor | [Color](../../ui/ts-types.md) | No | - | Color of the tooltip. | - | enableArrow | boolean | No | true | Whether to display arrows. Arrows are displayed only for tooltips in the up and down directions. | - | autoCancel | boolean | No | true | Whether to automatically close the tooltip when an operation is performed on the page. | - | onStateChange | (isVisible: boolean) => void | No | - | Callback for the popup status change event. The parameter **isVisible** indicates the visibility of the popup. | +- Placement enums8+ -- Placement8+ enums - | Name | Description | - | -------- | -------- | - | Left | The tooltip is on the left of the component. | - | Right | The tooltip is on the right of the component. | - | Top | The tooltip is on the top of the component. | - | Bottom | The tooltip is at the bottom of the component. | - | TopLeft | The tooltip is in the upper left corner of the component. | - | TopRight | The tooltip is in the upper right corner of the component. | - | BottomLeft | The tooltip is in the lower left corner of the component. | - | BottomRight | The tooltip is in the lower right corner of the component. | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Left

    +

    The tooltip is on the left of the component.

    +

    Right

    +

    The tooltip is on the right of the component.

    +

    Top

    +

    The tooltip is on the top of the component.

    +

    Bottom

    +

    The tooltip is at the bottom of the component.

    +

    TopLeft

    +

    The tooltip is in the upper left corner of the component.

    +

    TopRight

    +

    The tooltip is in the upper right corner of the component.

    +

    BottomLeft

    +

    The tooltip is in the lower left corner of the component.

    +

    BottomRight

    +

    The tooltip is in the lower right corner of the component.

    +
    -## Example - +## Example ``` @Entry @@ -129,4 +343,5 @@ struct PopupExample { } ``` -![en-us_image_0000001212058458](figures/en-us_image_0000001212058458.gif) +![](figures/popup.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-response-region.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-response-region.md new file mode 100644 index 0000000000..cf71d324e4 --- /dev/null +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-response-region.md @@ -0,0 +1,133 @@ +# Touch Target + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. + +You can set the touch target for components that support universal click events, touch events, and gestures. + +## Required Permissions + +None + +## Attributes + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    responseRegion

    +

    Array<Rectangle> | Rectangle

    +

    {

    +

    x: 0,

    +

    y:0,

    +

    width:'100%',

    +

    height:'100%'

    +

    }

    +

    Indicates one or more touch targets, including their location and size.

    +
    NOTE:

    The percentage is measured relative to the component itself.

    +

    x and y can be set to a positive or negative percentage value. For example, when x is set to '100%', the touch target is offset from the right edge of the component by the component's width. When x is set to '-100%', the touch target is offset from the left edge of the component by the component's width. When y is set to '100%', the touch target is offset from the bottom edge of the component by the component's height. When y is set to '-100%', the touch target is offset from the top edge of the component by the component's height.

    +

    width and height can only be set to positive percentage values. For example, when width is set to '100%', the width of the touch target is equal to that of the component; when height is set to '100%', the height of the touch target is equal to that of the component.

    +
    +
    + +- Rectangle object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Mandatory

    +

    Default Value

    +

    Description

    +

    x

    +

    Length

    +

    No

    +

    0vp

    +

    X coordinate of the touch point relative to the left edge of the component.

    +

    y

    +

    Length

    +

    No

    +

    0vp

    +

    Y coordinate of the touch point relative to the left edge of the component.

    +

    width

    +

    Length

    +

    No

    +

    100%

    +

    Width of the touch target.

    +

    height

    +

    Length

    +

    No

    +

    100%

    +

    Height of the touch target.

    +
    + + >![](../../public_sys-resources/icon-note.gif) **NOTE:** + >When both **x** and **y** are set to positive values, the entire touch target offsets towards the lower right corner of the component. How much the touch target offsets is subject to the set values. + + +## Example + +``` +@Entry +@Component +struct ResponseRegionExample { + build() { + Column() { + Toggle({ type: ToggleType.Checkbox, isOn: true }) + .selectedColor(0x39a2db) + .backgroundColor(0xAFEEEE) + .responseRegion({ x: 1.0, y: 1.0, width: 400, height: 400 }) + .onChange((isOn: boolean) => { + console.info('Component status:' + isOn) + }) + }.width('100%').margin({ top: 5 }) + } +} +``` + +![](figures/gif1.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-sharp-clipping.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-sharp-clipping.md index eef44b85ca..0fb7dd4f88 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-sharp-clipping.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-sharp-clipping.md @@ -1,27 +1,48 @@ -# Shape Clipping +# Shape Clipping +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None +## Attributes + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    clip

    +

    Shape | boolean

    +

    false

    +

    Specifies a clip mode. The value Shape indicates that the current component is cropped based on the specified shape. The value boolean specifies whether to clip the component based on the edge outline.

    +

    mask

    +

    Shape

    +

    -

    +

    Adds a mask of the specified shape to the current component.

    +
    + +## Example -## Attributes - - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| clip | Shape \| boolean | false | Specifies a clip mode. The value **Shape** indicates that the current component is cropped based on the specified shape. The value **boolean** specifies whether to clip the component based on the edge outline. | -| mask | Shape | - | Adds a mask of the specified shape to the current component. | - - -## Example - - ``` @Entry @Component @@ -57,4 +78,5 @@ struct ClipAndMaskExample { } ``` -![en-us_image_0000001212218452](figures/en-us_image_0000001212218452.png) +![](figures/clip.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-size.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-size.md index f35376f944..dbac35d7ac 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-size.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-size.md @@ -1,30 +1,120 @@ -# Size +# Size +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None +## Attributes -## Attributes - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    width

    +

    Length

    +

    -

    +

    Width of a component. By default, the width required to fully hold the component content is used.

    +

    height

    +

    Length

    +

    -

    +

    Height of the component. By default, the height required to fully hold the component content is used.

    +

    size

    +

    {

    +

    width?: Length,

    +

    height?: Length

    +

    }

    +

    -

    +

    Height and width of the component.

    +

    padding

    +

    {

    +

    top?: Length,

    +

    right?: Length,

    +

    bottom?: Length,

    +

    left?: Length

    +

    } | Length

    +

    0

    +

    Padding of the component.

    +

    When the parameter is of the Length type, the four paddings take effect.

    +

    margin

    +

    {

    +

    top?: Length,

    +

    right?: Length,

    +

    bottom?: Length,

    +

    left?: Length

    +

    }

    +

    | Length

    +

    0

    +

    Margin of the component.

    +

    When the parameter is of the Length type, the four margins take effect.

    +

    constraintSize

    +

    {

    +

    minWidth?: Length,

    +

    maxWidth?: Length,

    +

    minHeight?: Length,

    +

    maxHeight?: Lenght

    +

    }

    +

    {

    +

    minWidth: 0,

    +

    maxWidth: Infinity,

    +

    minHeight: 0,

    +

    maxHeight: Infinity

    +

    }

    +

    Constraint size of the component, which is used to limit the size range during component layout.

    +

    layoutWeight

    +

    number

    +

    0

    +

    Weight of the component during layout. When the container size is determined, the layout of the component and sibling components is allocated based on the weight along the main axis. The component size setting is ignored.

    +
    NOTE:

    This attribute is valid only for the Row, Column, and Flex layouts.

    +
    +
    - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| width | Length | - | Width of a component. By default, the width required to fully hold the component content is used. | -| height | Length | - | Height of the component. By default, the height required to fully hold the component content is used. | -| size | {
    width?: Length,
    height?: Length
    } | - | Height and width of the component. | -| padding | {
    top?: Length,
    right?: Length,
    bottom?: Length,
    left?: Length
    } \| Length | 0 | Padding of the component.
    When the parameter is of the **Length** type, the four paddings take effect. | -| margin | {
    top?: Length,
    right?: Length,
    bottom?: Length,
    left?: Length
    }
    \| Length | 0 | Margin of the component. 
    When the parameter is of the **Length** type, the four margins take effect. | -| constraintSize | {
    minWidth?: Length,
    maxWidth?: Length,
    minHeight?: Length,
    maxHeight?: Length
    } | {
    minWidth: 0,
    maxWidth: Infinity,
    minHeight: 0,
    maxHeight: Infinity
    } | Constraint size of the component, which is used to limit the size range during component layout. | -| layoutWeight | number | 0 | Weight of the component during layout. When the container size is determined, the layout of the component and sibling components is allocated based on the weight along the main axis. The component size setting is ignored.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > This attribute is valid only for the **Row**, **Column**, and **Flex** layouts. | - - -## Example +## Example ``` @Entry @@ -47,7 +137,7 @@ struct SizeExample { Text('layoutWeight(1)') .size({ width: '30%', height: 110 }).backgroundColor(0xFFEFD5).textAlign(TextAlign.Center) .layoutWeight(1) - // Weight 0 + // Weight 0 Text('layoutWeight(2)') .size({ width: '30%', height: 110 }).backgroundColor(0xF5DEB3).textAlign(TextAlign.Center) .layoutWeight(2) @@ -56,7 +146,9 @@ struct SizeExample { .size({ width: '30%', height: 110 }).backgroundColor(0xD2B48C).textAlign(TextAlign.Center) }.size({ width: '90%', height: 140 }).backgroundColor(0xAFEEEE) }.width('100%').margin({ top: 5 }) - }} + } +} ``` -![en-us_image_0000001257138367](figures/en-us_image_0000001257138367.gif) +![](figures/size.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-text-style.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-text-style.md index 8cfa736c14..d793202b28 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-text-style.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-text-style.md @@ -1,51 +1,144 @@ -# Text Style - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +# Text Style +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. The attributes described in this topic are used to set the text style for a component that contains text. - -## Required Permissions +## Required Permissions None +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    fontColor

    +

    Color

    +

    -

    +

    Text color.

    +

    fontSize

    +

    Length

    +

    -

    +

    Text size. If the value is of the number type, the unit fp is used.

    +

    fontStyle

    +

    FontStyle

    +

    Normal

    +

    Font style of the text.

    +

    fontWeight

    +

    number | FontWeight

    +

    Normal

    +

    Font weight. For the number type, the value ranges from 100 to 900, at an interval of 100. The default value is 400. A larger value indicates a larger font weight.

    +

    For details on the common enumerated values, see FontWeight enums.

    +

    fontFamily

    +

    string

    +

    -

    +

    Font family of the text. Use commas (,) to separate multiple fonts. The priority the fonts is the sequence in which they are placed. An example value is Arial, sans-serif.

    +
    + +- FontStyle enums + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Normal

    +

    Standard font style.

    +

    Italic

    +

    Italic font style.

    +
    + + +- FontWeight enums + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Lighter

    +

    The font weight is lighter.

    +

    Normal

    +

    The font weight is normal.

    +

    Regular

    +

    The font weight is regular.

    +

    Medium

    +

    The font weight is medium.

    +

    Bold

    +

    The font weight is bold.

    +

    Bolder

    +

    The font weight is bolder.

    +
    + + +## Example -## Attributes - - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| fontColor | Color | - | Text color. | -| fontSize | Length | - | Text size. If the value is of the number type, the unit fp is used. | -| fontStyle | FontStyle | FontStyle.Normal | Font style of the text. | -| fontWeight | number \| FontWeight | FontWeight.Normal | Font weight. For the number type, the value ranges from 100 to 900, at an interval of 100. The default value is **400**. A larger value indicates a larger font weight.
    For common values of the **FontWeight** type, see **FontWeight** enums. | -| fontFamily | string | - | Font family of the text. Use commas (,) to separate multiple fonts. The priority the fonts is the sequence in which they are placed. An example value is **Arial, sans-serif**. | - - -- FontStyle enums - | Name | Description | - | -------- | -------- | - | Normal | Standard font style. | - | Italic | Italic font style. | - - -- FontWeight enums - | Name | Description | - | -------- | -------- | - | Lighter | The font weight is lighter. | - | Normal | The font weight is normal. | - | Regular | The font weight is regular. | - | Medium | The font weight is medium. | - | Bold | The font weight is bold. | - | Bolder | The font weight is bolder. | - - -## Example - - ``` @Entry @Component @@ -89,4 +182,5 @@ struct TextStyleExample { } ``` -![en-us_image_0000001256978333](figures/en-us_image_0000001256978333.png) +![](figures/textstyle.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-touch-target.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-touch-target.md deleted file mode 100644 index 62fd9db2dd..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-touch-target.md +++ /dev/null @@ -1,57 +0,0 @@ -# Touch Target - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -You can set the touch target for components that support universal click events, touch events, and gestures. - - -## Required Permissions - -None - - -## Attributes - - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| responseRegion | Array<Rectangle> \| Rectangle | {
    x: 0,
    y: 0,
    width: '100%',
    height: '100%'
    } | One or more touch targets, including their location and size.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > The percentage is measured relative to the component itself.

    > **x** and **y** can be set to a positive or negative percentage value. For example, when **x** is set to **'100%'**, the touch target is offset from the right edge of the component by the component's width. When **x** is set to **'-100%'**, the touch target is offset from the left edge of the component by the component's width. When **y** is set to **'100%'**, the touch target is offset from the bottom edge of the component by the component's height. When **y** is set to **'-100%'**, the touch target is offset from the top edge of the component by the component's height.

    > **width** and **height** can only be set to positive percentage values. When **width** is set to **'100%'**, the width of the touch target is equal to that of the component; when **height** is set to **'100%'**, the height of the touch target is equal to that of the component. | - - -- Rectangle attributes - | Name | Type | Mandatory | Default Value | Description | - | -------- | -------- | -------- | -------- | -------- | - | x | Length | No | 0vp | X coordinate of the touch point relative to the left edge of the component. | - | y | Length | No | 0vp | Y coordinate of the touch point relative to the left edge of the component. | - | width | Length | No | 100% | Width of the touch target. | - | height | Length | No | 100% | Height of the touch target. | - - > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** - > When both **x** and **y** are set to positive values, the entire touch target offsets towards the lower right corner of the component. How much the touch target offsets is subject to the set values. - - -## Example - - -``` -@Entry -@Component -struct ResponseRegionExample { - build() { - Column() { - Toggle({ type: ToggleType.Checkbox, isOn: true }) - .selectedColor(0x39a2db) - .backgroundColor(0xAFEEEE) - .responseRegion({ x: 1.0, y: 1.0, width: 400, height: 400 }) - .onChange((isOn: boolean) => { - console.info('Component status:' + isOn) - }) - }.width('100%').margin({ top: 5 }) - } -} -``` - -![en-us_image_0000001212218468](figures/en-us_image_0000001212218468.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-touchable.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-touchable.md new file mode 100644 index 0000000000..b657f8645c --- /dev/null +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-touchable.md @@ -0,0 +1,65 @@ +# Click Control + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. + +## Required Permissions + +None + +## Attributes + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    touchable

    +

    boolean

    +

    true

    +

    Whether the current component is touchable.

    +
    + +## Example + +``` +@Entry +@Component +struct TouchAbleExample { + @State text1: string = '' + @State text2: string = '' + + build() { + Stack() { + Rect() + .fill(Color.Gray).width(150).height(150) + .onClick(() => { + console.info(this.text1 = 'Rect Clicked') + }) + .overlay(this.text1, { align: Alignment.Bottom, offset: { x: 0, y: 20 } }) + Ellipse() + .fill(Color.Pink).width(150).height(80) + .touchable(false) // When the Ellipse area is touched, the message "Ellipse Clicked" is not displayed. + .onClick(() => { + console.info(this.text2 = 'Ellipse Clicked') + }) + .overlay(this.text2, { align: Alignment.Bottom, offset: { x: 0, y: 20 } }) + }.margin(100) + } +} +``` + +![](figures/gif2.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-transformation.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-transformation.md index 9872e09c8e..10ced26c5d 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-transformation.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-transformation.md @@ -1,29 +1,100 @@ -# Transformation +# Transformation +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None +## Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    rotate

    +

    {

    +

    x?: number,

    +

    y?: number,

    +

    z?: number,

    +

    angle?: Angle,

    +

    centerX?: Length,

    +

    centerY?: Length

    +

    }

    +

    {

    +

    x: 0,

    +

    y: 0,

    +

    z: 0,

    +

    angle: 0,

    +

    centerX: '50%',

    +

    centerY: '50%'

    +

    }

    +

    The vector (x, y, z) specifies a rotation axis. A positive angle indicates a clockwise rotation, and a negative angle indicates a counterclockwise rotation. The default value is 0. centerX and centerY are used to set the rotation center point.

    +

    translate

    +

    {

    +

    x?: Length,

    +

    y?: Length,

    +

    z? : Length

    +

    }

    +

    {

    +

    x: 0,

    +

    y: 0,

    +

    z: 0

    +

    }

    +

    Translation distance along the x-, y-, and z-axis. The translation direction is determined by the positive and negative values. The default value is 0.

    +

    scale

    +

    {

    +

    x?: number,

    +

    y?: number,

    +

    z?: number,

    +

    centerX?: Length,

    +

    centerY?: Length

    +

    }

    +

    {

    +

    x: 1,

    +

    y: 1,

    +

    z: 1,

    +

    centerX:'50%',

    +

    centerY:'50%'

    +

    }

    +

    Scale ratio of the x-, y-, and z-axis. The default value is 1. centerX and centerY are used to set the scale center point.

    +

    transform

    +

    matrix: Matrix4

    +

    -

    +

    Transformation matrix of the component.

    +
    + +## Example -## Attributes - - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| rotate | {
    x?: number,
    y?: number,
    z?: number,
    angle?: Angle,
    centerX?: Length,
    centerY?: Length
    } | {
    x: 0,
    y: 0,
    z: 0,
    angle: 0,
    centerX: '50%',
    centerY: '50%'
    } | The vector (x, y, z) specifies a rotation axis. A positive angle indicates a clockwise rotation, and a negative angle indicates a counterclockwise rotation. The default value is **0**. **centerX** and **centerY** are used to set the rotation center point. | -| translate | {
    x?: Length,
    y?: Length,
    z? : Length
    } | {
    x: 0,
    y: 0,
    z: 0
    } | Translation distance along the x-, y-, and z-axis. The translation direction is determined by the positive and negative values. The default value is **0**. | -| scale | {
    x?: number,
    y?: number,
    z?: number,
    centerX?: Length,
    centerY?: Length
    } | {
    x: 1,
    y: 1,
    z: 1,
    centerX:'50%',
    centerY:'50%'
    } | Scale ratio of the x-, y-, and z-axis. The default value is **1**. **centerX** and **centerY** are used to set the scale center point. | -| transform | matrix: Matrix4 | - | Transformation matrix of the component. | - - -## Example - - ``` import Matrix4 from '@ohos.matrix4' @@ -63,4 +134,5 @@ struct TransformExample { } ``` -![en-us_image_0000001257058401](figures/en-us_image_0000001257058401.png) +![](figures/1111.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-visibility.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-visibility.md index 0754cd8cc2..0d1e059339 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-visibility.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-visibility.md @@ -1,34 +1,67 @@ -# Visibility +# Visibility +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None +## Attributes + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    visibility

    +

    Visibility

    +

    Visible

    +

    Whether the component is shown or hidden.

    +
    + +- Visibility enums + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Hidden

    +

    The component is hidden, and a placeholder is used for it in the layout.

    +

    Visible

    +

    The component is shown.

    +

    None

    +

    The component is hidden. It is not involved in the layout, and no placeholder is used for it.

    +
    + + +## Example -## Attributes - - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| visibility | Visibility | Visibility.Visible | Whether the component is shown or hidden. | - - -- Visibility enums - | Name | Description | - | -------- | -------- | - | Hidden | The component is hidden, and a placeholder is used for it in the layout. | - | Visible | The component is shown. | - | None | The component is hidden. It is not involved in the layout, and no placeholder is used for it. | - - -## Example - - ``` @Entry @Component @@ -52,4 +85,5 @@ struct VisibilityExample { } ``` -![en-us_image_0000001257058421](figures/en-us_image_0000001257058421.gif) +![](figures/visibility.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes-z-order.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes-z-order.md index 75c12a927c..91770cb64e 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes-z-order.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes-z-order.md @@ -1,26 +1,39 @@ -# Z-order Control +# Z-order Control +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This attribute is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None +## Attributes + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Default Value

    +

    Description

    +

    zIndex

    +

    number

    +

    0

    +

    Hierarchy of sibling components in a container. A larger z-order value indicates a higher display level.

    +
    + +## Example -## Attributes - - - | Name | Type | Default Value | Description | -| -------- | -------- | -------- | -------- | -| zIndex | number | 0 | Hierarchy of sibling components in a container. A larger z-order value indicates a higher display level. | - - -## Example - - ``` @Entry @Component @@ -44,4 +57,5 @@ struct ZIndexExample { } ``` -![en-us_image_0000001257058443](figures/en-us_image_0000001257058443.png) +![](figures/zindex.png) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-attributes.md b/en/application-dev/reference/arkui-ts/ts-universal-attributes.md index b565b5df7a..2ca2f7ebdb 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-attributes.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-attributes.md @@ -1,53 +1,45 @@ -# Universal Attributes +# Universal Attributes +- **[Size](ts-universal-attributes-size.md)** +- **[Location](ts-universal-attributes-location.md)** -- **[Size](ts-universal-attributes-size.md)** +- **[Layout Constraints](ts-universal-attributes-layout-constraints.md)** -- **[Location](ts-universal-attributes-location.md)** +- **[Flex Layout](ts-universal-attributes-flex-layout.md)** -- **[Layout Constraints](ts-universal-attributes-layout-constraints.md)** +- **[Border Configuration](ts-universal-attributes-border.md)** -- **[Flex Layout](ts-universal-attributes-flex-layout.md)** +- **[Background](ts-universal-attributes-background.md)** -- **[Border](ts-universal-attributes-border.md)** +- **[Opacity](ts-universal-attributes-opacity.md)** -- **[Background](ts-universal-attributes-background.md)** +- **[Visibility](ts-universal-attributes-visibility.md)** -- **[Opacity](ts-universal-attributes-opacity.md)** +- **[Enable/Disable](ts-universal-attributes-enable.md)** -- **[Visibility](ts-universal-attributes-visibility.md)** +- **[Overlay](ts-universal-attributes-overlay.md)** -- **[Enable/Disable](ts-universal-attributes-enable.md)** +- **[Z-order Control](ts-universal-attributes-z-order.md)** -- **[Overlay](ts-universal-attributes-overlay.md)** +- **[Transformation](ts-universal-attributes-transformation.md)** -- **[Z-order Control](ts-universal-attributes-z-order.md)** +- **[Image Effect Configuration](ts-universal-attributes-image-effect.md)** -- **[Transformation](ts-universal-attributes-transformation.md)** +- **[Shape Clipping](ts-universal-attributes-sharp-clipping.md)** -- **[Image Effect Configuration](ts-universal-attributes-image-effect.md)** +- **[Text Style](ts-universal-attributes-text-style.md)** -- **[Shape Clipping](ts-universal-attributes-sharp-clipping.md)** +- **[Grid](ts-universal-attributes-grid.md)** -- **[Text Style](ts-universal-attributes-text-style.md)** +- **[Gradient Color](ts-universal-attributes-gradient-color.md)** -- **[Grid](ts-universal-attributes-grid.md)** +- **[Popup Control](ts-universal-attributes-popup.md)** -- **[Gradient Color](ts-universal-attributes-gradient-color.md)** +- **[Menu Control](ts-universal-attributes-menu.md)** -- **[Popup Control](ts-universal-attributes-popup.md)** +- **[Click Control](ts-universal-attributes-touchable.md)** -- **[Menu Control](ts-universal-attributes-menu.md)** +- **[Touch Target](ts-universal-attributes-response-region.md)** -- **[Click Control](ts-universal-attributes-click.md)** -- **[Focus Control](ts-universal-attributes-focus.md)** - -- **[Hover Effect](ts-universal-attributes-hover-effect.md)** - -- **[Component ID](ts-universal-attributes-component-id.md)** - -- **[Touch Target](ts-universal-attributes-touch-target.md)** - -- **[Polymorphic Style](ts-universal-attributes-polymorphic-style.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-universal-component-area-change-event.md b/en/application-dev/reference/arkui-ts/ts-universal-component-area-change-event.md deleted file mode 100644 index 200f994c81..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-universal-component-area-change-event.md +++ /dev/null @@ -1,48 +0,0 @@ -# Component Area Change Event - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions - -None - - -## Events - - | Name | Bubble Supported | Description | -| -------- | -------- | -------- | -| onAreaChange(event: (oldValue: Area, newValue: Area) => void) | No | Triggered when the component area changes. For details about the **Area** type, see **Area** attributes. | - - -## Example - - -``` -@Entry -@Component -struct AreaExample { - @State value: string = 'Text' - @State size: string = '' - - build() { - Column() { - Text(this.value) - .backgroundColor(Color.Green).margin(30).fontSize(20) - .onClick(() => { - this.value = this.value + 'Text' - }) - .onAreaChange((oldValue: Area, newValue: Area) => { - console.info(`Ace: on area change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`) - this.size = JSON.stringify(newValue) - }) - Text('new area is: \n' + this.size).margin({ right: 30, left: 30 }) - } - .width('100%').height('100%').margin({ top: 30 }) - } -} -``` - -![en-us_image_0000001257058403](figures/en-us_image_0000001257058403.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-universal-components.md b/en/application-dev/reference/arkui-ts/ts-universal-components.md index 35d2a841f2..3a70c3c421 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-components.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-components.md @@ -1,9 +1,9 @@ -# Universal Components +# Universal Components +- **[Universal Events](ts-universal-events.md)** +- **[Universal Attributes](ts-universal-attributes.md)** -- **[Universal Events](ts-universal-events.md)** +- **[Gesture Processing](ts-gesture-processing.md)** -- **[Universal Attributes](ts-universal-attributes.md)** -- **[Gesture Processing](ts-gesture-processing.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-universal-events-click.md b/en/application-dev/reference/arkui-ts/ts-universal-events-click.md index 0cf31dce96..8ac56eb6bb 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-events-click.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-events-click.md @@ -1,36 +1,182 @@ -# Click Event +# Click Event +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This event is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This method is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## Events - - | Name | Bubble Supported | Description | -| -------- | -------- | -------- | -| onClick(callback: (event?: ClickEvent) => void) | No | Called when a click event occurs. For details about the event parameters, see [ClickEvent](#clickevent). | - - -### ClickEvent - - | Name | Type | Description | -| -------- | -------- | -------- | -| screenX | number | X coordinate of the click relative to the left edge of the screen. | -| screenY | number | Y coordinate of the click relative to the upper edge of the screen. | -| x | number | X coordinate of the click relative to the left edge of the component being clicked. | -| y | number | Y coordinate of the click relative to the upper edge of the component being clicked. | -| target8+ | EventTarget | Target element that is clicked. | -| timestamp | number | Timestamp of the event. | - - -## Example - +## Events + + + + + + + + + + + + +

    Name

    +

    Bubble Supported

    +

    Description

    +

    onClick(callback: (event?: ClickEvent) => void)

    +

    No

    +

    Called when a click event occurs. For details about the event parameters, see ClickEvent object.

    +
    + +- ClickEvent object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    screenX

    +

    number

    +

    X coordinate of the click relative to the left edge of the screen.

    +

    screenY

    +

    number

    +

    Y coordinate of the click relative to the upper edge of the screen.

    +

    x

    +

    number

    +

    X coordinate of the click relative to the left edge of the component being clicked.

    +

    y

    +

    number

    +

    Y coordinate of the click relative to the upper edge of the component being clicked.

    +

    target8+

    +

    EventTarget

    +

    Object of the element that is clicked.

    +

    timestamp

    +

    number

    +

    Timestamp of the event.

    +
    + +- EventTarget object8+ + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    area

    +

    Area

    +

    Area information of the target element.

    +
    + +- Area attributes8+ + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    width

    +

    Length

    +

    Width of the target element.

    +

    height

    +

    Length

    +

    Height of the target element.

    +

    pos

    +

    Position

    +

    Position of the upper left corner of the target element relative to that of the parent element.

    +

    globalPos

    +

    Position

    +

    Position of the upper left corner of the target element relative to that of the page.

    +
    + +- Position attributes8+ + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    x

    +

    Length

    +

    X-coordinate.

    +

    y

    +

    Length

    +

    Y-coordinate.

    +
    + + +## Example ``` @Entry @@ -43,9 +189,9 @@ struct ClickExample { Button('Click').backgroundColor(0x2788D9).width(100).height(40) .onClick((event: ClickEvent) => { console.info(this.text = 'Click Point:' + '\n screenX:' + event.screenX + '\n screenY:' + event.screenY - + '\n x:' + event.x + '\n y:' + event.y + '\ntarget:' + '\n component globalPos:(' - + event.target.area.globalPos.x + ',' + event.target.area.globalPos.y + ')\n width:' - + event.target.area.width + '\n height:' + event.target.area.height) + + '\n x :' + event.x + '\n y:' + event.y + '\ntarget:' + '\n component globalPos:(' ++ event.target.area.globalPos.x + ',' + event.target.area.globalPos.y + ')\n width:' + + event.target.area.width + '\n height:' + event.target.area.height) }) Text(this.text).padding(15) }.height(350).width('100%').padding(10) @@ -53,5 +199,5 @@ struct ClickExample { } ``` +![](figures/en-us_image_0000001237355087.gif) -![en-us_image_0000001256858383](figures/en-us_image_0000001256858383.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-universal-events-component-area-change.md b/en/application-dev/reference/arkui-ts/ts-universal-events-component-area-change.md new file mode 100644 index 0000000000..4b79a9ccdd --- /dev/null +++ b/en/application-dev/reference/arkui-ts/ts-universal-events-component-area-change.md @@ -0,0 +1,59 @@ +# Component Area Change Event + +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This event is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. + +## Required Permissions + +None + +## Events + + + + + + + + + + + + +

    Name

    +

    Bubble Supported

    +

    Description

    +

    onAreaChange(event: (oldValue: Area, newValue: Area) => void)

    +

    No

    +

    Triggered when the component area changes. For details about the Area type, see the description of the Area object.

    +
    + +## Example + +``` +@Entry +@Component +struct AreaExample { + @State value: string = 'Text' + @State size: string = '' + + build() { + Column() { + Text(this.value) + .backgroundColor(Color.Green).margin(30).fontSize(20) + .onClick(() => { + this.value = this.value + 'Text' + }) + .onAreaChange((oldValue: Area, newValue: Area) => { + console.info(`Ace: on area change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`) + this.size = JSON.stringify(newValue) + }) + Text('new area is: \n' + this.size).margin({ right: 30, left: 30 }) + } + .width('100%').height('100%').margin({ top: 30 }) + } +} +``` + +![](figures/gif4.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-events-drag-drop.md b/en/application-dev/reference/arkui-ts/ts-universal-events-drag-drop.md deleted file mode 100644 index b8725c95e2..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-universal-events-drag-drop.md +++ /dev/null @@ -1,147 +0,0 @@ -# Drag/Drop Event - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -| Name | Bubble Supported | Description | -| -------- | -------- | -------- | -| onDragStart(callback: (event: [DragEvent](#DragEvent), extraParams?: string) =>\|[Custom Builder](../../ui/ts-types.md)) | No | Triggered when the component bound to the event is dragged for the first time.
    -**event**: information about the drag event, including the coordinates of the item that is being dragged.
    -**extraParams**: additional information about the drag event. For details, see extraParam.
    Return value: object being dragged, which is used for prompts displayed when the object is dragged.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > - A drag event can be triggered by a 150 ms long press.

    > - If the duration of a long-press gesture is set to less than or equal to 150 ms, the callback for the long-press gesture takes precedence. Otherwise, the callback for the drag event takes precedence. | -| onDragEnter(callback: (event: [DragEvent](#DragEvent), extraParams?: string) => void) | No | Triggered when the dragged item enters a valid drop target.
    -**event**: information about the drag event, including the coordinates of the item that is being dragged.
    -**extraParams**: additional information about the drag event. For details, see extraParam.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > This event is valid only when the **onDrop** event is listened to. | -| onDragMove(callback: (event: [DragEvent](#DragEvent), extraParams?: string) => void) | No | Triggered when the dragged item moves in a valid drop target.
    -**event**: information about the drag event, including the coordinates of the item that is being dragged.
    -**extraParams**: additional information about the drag event. For details, see extraParam.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > This event is valid only when the **onDrop** event is listened to. | -| onDragLeave(callback: (event: [DragEvent](#DragEvent), extraParams?: string) => void) | No | Triggered when the dragged item leaves a valid drop target.
    -**event**: information about the drag event, including the coordinates of the item that is being dragged.
    -**extraParams**: additional information about the drag event. For details, see extraParam.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > This event is valid only when the **onDrop** event is listened to. | -| onDrop(callback: (event:[DragEvent](#DragEvent), extraParams?: string) => void) | No | Triggered when the dragged item is dropped on a valid drop target.
    -**event**: information about the drag event, including the coordinates of the item that is being dragged.
    -**extraParams**: additional information about the drag event. For details, see extraParam. | - - -- extraParam - Returns additional information required for dragging an item. - - **extraParam** is a string converted from a JSON object. You can obtain the following attributes using the JSON object converted from **Json.parse**. - | Name | Type | Description | - | -------- | -------- | -------- | - | selectedIndex | number | Index of the dragged item in the parent container. The value of **selectedindex** starts from **0**.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > This attribute is valid only in the **ListItem** component. | - | insertIndex | number | Index of the element into which the dragged item is dropped in the **List** component. The value of **insertIndex** starts from **0**.
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:**
    > This attribute is valid only in the drag event of the **List** component. | - - -### DragEvent - -- APIs - | Name | Return Value Type | Description | - | -------- | -------- | -------- | - | getX() | number | X-coordinate of the item that is being dragged, in vp. | - | getY() | number | Y-coordinate of the item that is being dragged, in vp. | - - -## Example - - -``` -@Entry -@Component -struct DragExample { - @State numbers: string[] = ['one', 'two', 'three', 'four', 'five', 'six'] - @State text: string = '' - @State bool: boolean = false - @State bool1: boolean = false - @State size: string = '' - @State appleVisible: Visibility = Visibility.Visible - @State orangeVisible: Visibility = Visibility.Visible - @State bananaVisible: Visibility = Visibility.Visible - @State select: number = 0 - @State currentIndex: number = 0 - - @Builder pixelMapBuilder() { - Column() { - Text(this.text) - .width('50%').height(60).fontSize(16).borderRadius(10) - .textAlign(TextAlign.Center).backgroundColor(Color.Yellow) - } - } - - build() { - Column() { - Text('There are three Text elements here') - .fontSize(12).fontColor(0xCCCCCC).width('90%') - .textAlign(TextAlign.Start).margin(5) - Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.SpaceAround }) { - Text('apple').width('25%').height(35).fontSize(16) - .textAlign(TextAlign.Center).backgroundColor(0xAFEEEE) - .visibility(this.appleVisible) - .onDragStart(() => { - this.bool = true - this.text = 'apple' - this.appleVisible = Visibility.Hidden - return this.pixelMapBuilder - }) - Text('orange').width('25%').height(35).fontSize(16) - .textAlign(TextAlign.Center).backgroundColor(0xAFEEEE) - .visibility(this.orangeVisible) - .onDragStart(() => { - this.bool = true - this.text = 'orange' - this.orangeVisible = Visibility.Hidden - return this.pixelMapBuilder - }) - Text('banana').width('25%').height(35).fontSize(16) - .textAlign(TextAlign.Center).backgroundColor(0xAFEEEE) - .visibility(this.bananaVisible) - .onDragStart((event: DragEvent, extraParams: string) => { - console.log('Text onDragStarts, ' + extraParams) - this.bool = true - this.text = 'banana' - this.bananaVisible = Visibility.Hidden - return this.pixelMapBuilder - }) - }.border({ width: 1 }).width('90%').padding({ top: 10, bottom: 10 }).margin(10) - - Text('This is a List element').fontSize(12) - .fontColor(0xCCCCCC).width('90%') - .textAlign(TextAlign.Start).margin(15) - List({ space: 20, initialIndex: 0 }) { - ForEach(this.numbers, (item) => { - ListItem() { - Text('' + item) - .width('100%').height(80).fontSize(16).borderRadius(10) - .textAlign(TextAlign.Center).backgroundColor(0xAFEEEE) - } - .onDragStart((event: DragEvent, extraParams: string) => { - console.log('ListItem onDragStarts, ' + extraParams) - var jsonString = JSON.parse(extraParams) - this.bool1 = true - this.text = this.numbers[jsonString.selectedIndex] - this.select = jsonString.selectedIndex - return this.pixelMapBuilder - }) - }, item => item) - } - .editMode(true) - .height('50%').width('90%').border({ width: 1 }) - .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) - .onDragEnter((event: DragEvent, extraParams: string) => { - console.log('List onDragEnter, ' + extraParams) - }) - .onDragMove((event: DragEvent, extraParams: string) => { - console.log('List onDragMove, ' + extraParams) - }) - .onDragLeave((event: DragEvent, extraParams: string) => { - console.log('List onDragLeave, ' + extraParams) - }) - .onDrop((event: DragEvent, extraParams: string) => { - var jsonString = JSON.parse(extraParams) - if (this.bool) { - this.numbers.splice(jsonString.insertIndex, 0, this.text) - this.bool = false - } else if (this.bool1) { - this.numbers.splice(jsonString.selectedIndex, 1) - this.numbers.splice(jsonString.insertIndex, 0, this.text) - this.bool = false - this.bool1 = false - } - }) - }.width('100%').height('100%').padding({ top: 20 }).margin({ top: 20 }) - } -} -``` - -![en-us_image_0000001212218450](figures/en-us_image_0000001212218450.gif) diff --git a/en/application-dev/reference/arkui-ts/ts-universal-events-key.md b/en/application-dev/reference/arkui-ts/ts-universal-events-key.md index 38e1218012..0cbdd5984b 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-events-key.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-events-key.md @@ -1,67 +1,226 @@ -# Key Event +# Key Event +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This event is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This method is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## Events - -| Name | Bubble Supported | Description | -| -------- | -------- | -------- | -| onKeyEvent(event: (event?: KeyEvent) => void) | Yes | Called when a key event occurs. For details about the event parameters, see [KeyEvent Object](#KeyEvent Object). | - - -### KeyEvent Object - -- Attributes - | Name | Type | Description | - | -------- | -------- | -------- | - | type | KeyType | Type of a key. | - | keyCode | number | Key code. | - | keyText | string | Key value. | - | keySource | KeySource | Type of the input device that triggers the key event. | - | deviceId | number | ID of the input device that triggers the key event. | - | metaKey | number | State of the metakey when the key is pressed. The value **1** means the pressed state, and **0** means the unpressed state. | - | timestamp | number | Timestamp when the key is pressed. | - -- APIs - | Name | Description | - | -------- | -------- | - | stopPropagation(): void | Stops the event from bubbling upwards or downwards. | - -- KeyType enums - | Name | Description | - | -------- | -------- | - | Down | The key is pressed. | - | Up | The key is released. | - - -- KeySource enums - | Name | Description | - | -------- | -------- | - | Unknown | Unknown input device. | - | Keyboard | The input device is a keyboard. | - -- Common KeyCode description - | Value | Behavior | Physical Button | - | -------- | -------- | -------- | - | 19 | Upward | Up button. | - | 20 | Downward | Down button. | - | 21 | Leftward | Left button. | - | 22 | Rightward | Right button. | - | 23 | OK | **OK** key on a remote control. | - | 66 | OK | **Enter** key on a keyboard. | - | 160 | OK | **Enter** button on the numeric keypad. | - - -## Example - +## Events + + + + + + + + + + + + +

    Name

    +

    Bubble Supported

    +

    Description

    +

    onKeyEvent(event: (event?: KeyEvent) => void)

    +

    Yes

    +

    Called when a key event occurs. For details about the event parameters, see KeyEvent Object.

    +
    + +## KeyEvent Object + +- Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    type

    +

    KeyType

    +

    Type of a key.

    +

    keyCode

    +

    number

    +

    Key code.

    +

    keyText

    +

    string

    +

    Key value.

    +

    keySource

    +

    KeySource

    +

    Type of the input device that triggers the key event.

    +

    deviceId

    +

    number

    +

    ID of the input device that triggers the key event.

    +

    metaKey

    +

    number

    +

    State of the metakey when the key is pressed. The value 1 means the pressed state, and 0 means the unpressed state.

    +

    timestamp

    +

    number

    +

    Timestamp when the key is pressed.

    +
    + + +- APIs + + + + + + + + + + +

    Name

    +

    Description

    +

    stopPropagation(): void

    +

    Stops the event from bubbling upwards or downwards.

    +
    + +- KeyType enums + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Down

    +

    The key is pressed.

    +

    Up

    +

    The key is released.

    +
    + + +- KeySource enums + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Unknown

    +

    Unknown input device.

    +

    Keyboard

    +

    The input device is a keyboard.

    +
    + +- Common KeyCode description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Value

    +

    Behavior

    +

    Physical Button

    +

    19

    +

    Upward

    +

    Up button.

    +

    20

    +

    Downward

    +

    Down button.

    +

    21

    +

    Leftward

    +

    Left button.

    +

    22

    +

    Rightward

    +

    Right button.

    +

    23

    +

    OK

    +

    OK key on a remote control.

    +

    66

    +

    OK

    +

    Enter key on a keyboard.

    +

    160

    +

    OK

    +

    Enter button on the numeric keypad.

    +
    + + +## Example ``` @Entry @@ -88,4 +247,5 @@ struct KeyEventExample { } ``` -![en-us_image_0000001257058433](figures/en-us_image_0000001257058433.gif) +![](figures/keyevent.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-events-show-hide.md b/en/application-dev/reference/arkui-ts/ts-universal-events-show-hide.md index 52a9918375..f2daec1a85 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-events-show-hide.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-events-show-hide.md @@ -1,25 +1,41 @@ -# Show/Hide Event +# Show/Hide Event +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This event is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This method is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None +## Events -## Events - - | Name | Bubble Supported | Description | -| -------- | -------- | -------- | -| onAppear(callback: () => void) | No | Called when the component is displayed. | -| onDisappear(callback: () => void) | No | Called when the component disappears. | - - -## Example + + + + + + + + + + + + + + + +

    Name

    +

    Bubble Supported

    +

    Description

    +

    onAppear(callback: () => void)

    +

    No

    +

    Called when the component is displayed.

    +

    onDisappear(callback: () => void)

    +

    No

    +

    Called when the component disappears.

    +
    +## Example ``` import prompt from '@system.prompt' @@ -53,4 +69,5 @@ struct AppearExample { } ``` -![en-us_image_0000001211898468](figures/en-us_image_0000001211898468.gif) +![](figures/appear.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-events-touch.md b/en/application-dev/reference/arkui-ts/ts-universal-events-touch.md index b6945b816e..5059fd0c0a 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-events-touch.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-events-touch.md @@ -1,61 +1,194 @@ -# Touch Event +# Touch +>![](../../public_sys-resources/icon-note.gif) **NOTE:** +>This event is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This method is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions +## Required Permissions None - -## Events - -| Name | Pop-up | Description | -| -------- | -------- | -------- | -| onTouch(callback: (event?: TouchEvent) => void) | Yes | Invoked when a touch action is triggered. For details about the event parameters, see [TouchEvent](#touchevent). | - - -### TouchEvent - -- Attributes - | Name | Type | Description | - | -------- | -------- | -------- | - | type | TouchType | Type of a touch event. | - | touches | Array<TouchObject> | All finger information. | - | changedTouches | Array<TouchObject> | Finger information changed. | - | timestamp | number | Timestamp of the event. | - | target8+ | EventTarget | Target of the event. | - -- APIs - | API | Description | - | -------- | -------- | - | stopPropagation(): void | Pop-up of the stop event. | - - -- TouchObject - | Name | Type | Description | - | -------- | -------- | -------- | - | type | TouchType | Type of a touch event. | - | id | number | Unique identifier of a finger. | - | screenX | number | X coordinate of the touch point relative to the left edge of the screen. | - | screenY | number | Y coordinate of the touch point relative to the upper edge of the device screen. | - | x | number | X coordinate of the touch point relative to the left edge of the element to touch. | - | y | number | Y coordinate of the touch point relative to the upper edge of the element to touch. | - - -- TouchType - | Name | Description | - | -------- | -------- | - | Down | Trigger a touch event when a finger is pressed. | - | Up | Trigger a touch event when a finger is lifted. | - | Move | Trigger a touch event when a finger moves on the screen in pressed state. | - | Cancel | Trigger an event when a touch event is canceled. | - - -## Example - +## Events + + + + + + + + + + + + +

    Name

    +

    Pop-up

    +

    Description

    +

    onTouch(callback: (event?: TouchEvent) => void)

    +

    Yes

    +

    Invoked when a touch action is triggered. For details about the event parameters, see TouchEvent.

    +
    + +## TouchEvent + +- Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    type

    +

    TouchType

    +

    Type of a touch event.

    +

    touches

    +

    Array<TouchObject>

    +

    All finger information.

    +

    changedTouches

    +

    Array<TouchObject>

    +

    Finger information changed.

    +

    timestamp

    +

    number

    +

    Timestamp of the event.

    +

    target8+

    +

    EventTarget

    +

    Target of the event.

    +
    + + +- APIs + + + + + + + + + + +

    API

    +

    Description

    +

    stopPropagation(): void

    +

    Pop-up of the stop event.

    +
    + + +- TouchObject + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Type

    +

    Description

    +

    type

    +

    TouchType

    +

    Type of a touch event.

    +

    id

    +

    number

    +

    Unique identifier of a finger.

    +

    screenX

    +

    number

    +

    X coordinate of the touch point relative to the left edge of the screen.

    +

    screenY

    +

    number

    +

    Y coordinate of the touch point relative to the upper edge of the device screen.

    +

    x

    +

    number

    +

    X coordinate of the touch point relative to the left edge of the element to touch.

    +

    y

    +

    number

    +

    Y coordinate of the touch point relative to the upper edge of the element to touch.

    +
    + + +- TouchType + + + + + + + + + + + + + + + + + + + +

    Name

    +

    Description

    +

    Down

    +

    Trigger a touch event when a finger is pressed.

    +

    Up

    +

    Trigger a touch event when a finger is lifted.

    +

    Move

    +

    Trigger a touch event when a finger moves on the screen in pressed state.

    +

    Cancel

    +

    Trigger an event when a touch event is canceled.

    +
    + + +## Example ``` @Entry @@ -78,9 +211,9 @@ struct TouchExample { this.eventType = 'Move' } console.info(this.text = 'TouchType:' + this.eventType + '\nDistance between touch point and touch element:\nx: ' - + event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\ncomponent globalPos:(' - + event.target.area.globalPos.x + ',' + event.target.area.globalPos.y + ')\nwidth:' - + event.target.area.width + '\nheight:' + event.target.area.height) ++ event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\ncomponent globalPos: (' + + event.target.area.globalPos.x + ',' + event.target.area.globalPos.y + ')\nwidth:' + + event.target.area.width + '\nheight:' + event.target.area.height) }) Text(this.text) }.height(200).width(350).padding({ left: 35, right: 35, top: 35 }) @@ -88,4 +221,5 @@ struct TouchExample { } ``` -![en-us_image_0000001212058464](figures/en-us_image_0000001212058464.gif) +![](figures/en-us_image_0000001192915178.gif) + diff --git a/en/application-dev/reference/arkui-ts/ts-universal-events.md b/en/application-dev/reference/arkui-ts/ts-universal-events.md index fd2340deb9..3fd64c2747 100644 --- a/en/application-dev/reference/arkui-ts/ts-universal-events.md +++ b/en/application-dev/reference/arkui-ts/ts-universal-events.md @@ -1,19 +1,13 @@ -# Universal Events +# Universal Events +- **[Click Event](ts-universal-events-click.md)** +- **[Touch](ts-universal-events-touch.md)** -- **[Click Event](ts-universal-events-click.md)** +- **[Show/Hide Event](ts-universal-events-show-hide.md)** -- **[Touch Event](ts-universal-events-touch.md)** +- **[Key Event](ts-universal-events-key.md)** -- **[Show/Hide Event](ts-universal-events-show-hide.md)** +- **[Component Area Change Event](ts-universal-events-component-area-change.md)** -- **[Drag/Drop Event](ts-universal-events-drag-drop.md)** -- **[Key Event](ts-universal-events-key.md)** - -- **[Focus Event](ts-universal-focus-event.md)** - -- **[Mouse Event](ts-universal-mouse-key.md)** - -- **[Component Area Change Event](ts-universal-component-area-change-event.md)** \ No newline at end of file diff --git a/en/application-dev/reference/arkui-ts/ts-universal-focus-event.md b/en/application-dev/reference/arkui-ts/ts-universal-focus-event.md deleted file mode 100644 index eb5281c527..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-universal-focus-event.md +++ /dev/null @@ -1,71 +0,0 @@ -# Focus Event - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions - -None - - -## Events - - | **Name** | **Bubble Supported** | **Description** | -| -------- | -------- | -------- | -| onFocus(callback: () => void) | No | Triggered when the current component obtains focus. | -| onBlur(callback:() => void) | No | Triggered when the current component loses focus. | - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> The following components support focus events: **<Button>**, **<Text>**, **<Image>**, **<List>**, and **<Grid>**. - - -## Example - - -``` -@Entry -@Component -struct FocusEventExample { - @State textOne: string = '' - @State textTwo: string = '' - @State textThree: string = '' - @State oneButtonColor: string = '#FF0000' - @State twoButtonColor: string = '#87CEFA' - @State threeButtonColor: string = '#90EE90' - - build() { - Column({ space:20 }){ - Button(this.textOne) - .backgroundColor(this.oneButtonColor) - .width(260).height(70).fontColor(Color.Black) - .focusable(true) - .onFocus(() => { - this.textOne = 'First Button onFocus' - this.oneButtonColor = '#AFEEEE' - }) - .onBlur(() => { - this.textOne = 'First Button onBlur' - this.oneButtonColor = '#FFC0CB' - }) - Button(this.textTwo) - .backgroundColor(this.twoButtonColor) - .width(260).height(70).fontColor(Color.Black) - .focusable(true) - Button(this.textThree) - .backgroundColor(this.threeButtonColor) - .width(260).height(70).fontColor(Color.Black) - .focusable(true) - .onFocus(() => { - this.textThree = 'Third Button onFocus' - this.threeButtonColor = '#AFEEEE' - }) - .onBlur(() => { - this.textThree = 'Third Button onBlur' - this.threeButtonColor = '#FFC0CB' - }) - }.width('100%').margin({ top:20 }) - } -} -``` diff --git a/en/application-dev/reference/arkui-ts/ts-universal-mouse-key.md b/en/application-dev/reference/arkui-ts/ts-universal-mouse-key.md deleted file mode 100644 index c256a22f9f..0000000000 --- a/en/application-dev/reference/arkui-ts/ts-universal-mouse-key.md +++ /dev/null @@ -1,87 +0,0 @@ -# Mouse Event - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE:** -> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version. - - -## Required Permissions - -None - - -## Events - - | Name | Bubble Supported | Description | -| -------- | -------- | -------- | -| onHover(callback: (isHover: boolean) => void) | No | Triggered when the mouse cursor enters or leaves the component.
    **isHover**: whether the mouse cursor hovers over the component. The value **true** means that the mouse cursor enters the component, and the value **false** means that the mouse cursor leaves the component. | -| onMouse(callback: (event?: MouseEvent) => void) | Yes | Triggered when the component is clicked by a mouse button or the mouse cursor moves on the component. The **event** parameter indicates the timestamp, mouse button, action, coordinates of the clicked point on the entire screen, and coordinates of the clicked point relative to the component when the event is triggered. | - - -### MouseEvent - -- Attributes - | Name | Type | Description | - | -------- | -------- | -------- | - | timestamp | number | Timestamp when the event is triggered. | - | screenX | number | X-coordinate of the clicked point relative to the upper left corner of the screen. | - | screenY | number | Y-coordinate of the clicked point relative to the upper left corner of the screen. | - | x | number | X-coordinate of the clicked point relative to the upper left corner of the component. | - | y | number | Y-coordinate of the clicked point relative to the upper left corner of the component. | - | button | MouseButton | Mouse button. | - | action | MouseAction | Event action. | - - -- MouseButton attributes - | Name | Type | Description | - | -------- | -------- | -------- | - | Left | number | Left mouse button. | - | Right | number | Right mouse button. | - | Middle | number | Middle mouse button. | - | Back | number | Back button on the left of the mouse. | - | Forward | number | Forward button on the left of the mouse. | - | None | number | No button. | - -- MouseAction attributes - | Name | Type | Description | - | -------- | -------- | -------- | - | Press | number | The mouse button is pressed. | - | Release | number | The mouse button is released. | - | Move | number | The mouse cursor moves. | - - -## Example - - -``` -@Entry -@Component -struct MouseEventExample { - @State hoverText: string = 'no hover' - @State mouseText: string = 'MouseText' - @State color: Color = Color.Blue - - build() { - Column({ space:20 }) { - Button(this.hoverText) - .onHover((isHover: boolean) => { - if (isHover) { - this.hoverText = 'on hover' - this.color = Color.Pink - } else { - this.hoverText = 'no hover' - this.color = Color.Blue - } - }) - .backgroundColor(this.color) - Button('onMouse') - .onMouse((event: MouseEvent) => { - console.log(this.mouseText = 'onMouse:\nButton = ' + event.button + - '\nAction = ' + event.action + '\nlocalXY=(' + event.x + ',' + event.y + ')' + - '\nscreenXY=(' + event.screenX + ',' + event.screenY + ')') - }) - Text(this.mouseText) - }.padding({ top: 20 }).width('100%') - } -} -``` diff --git a/zh-cn/application-dev/Readme-CN.md b/zh-cn/application-dev/Readme-CN.md index 29c190d3fc..81c318bb63 100644 --- a/zh-cn/application-dev/Readme-CN.md +++ b/zh-cn/application-dev/Readme-CN.md @@ -3,6 +3,7 @@ - [应用开发导读](application-dev-guide.md) - 了解OpenHarmony - [了解OpenHarmony开源项目](../OpenHarmony-Overview_zh.md) + - [了解OpenHarmony系统](../readme) - [术语](../device-dev/glossary/glossary.md) - [版本说明](../release-notes/Readme.md) - 快速开始 diff --git a/zh-cn/application-dev/ability/ability-assistant-guidelines.md b/zh-cn/application-dev/ability/ability-assistant-guidelines.md index 2c7ad62bc8..c21e2c7817 100644 --- a/zh-cn/application-dev/ability/ability-assistant-guidelines.md +++ b/zh-cn/application-dev/ability/ability-assistant-guidelines.md @@ -71,23 +71,23 @@ Ability assistant(Ability助手,简称为aa)是实现应用、原子化服 用于打印Ability的相关信息。 - | 参数 | 参数说明 | - | ---------------------- | -------------------------------------- | - | -h/--help | 帮助信息。 | - | -a/--all | 打印所有mission内的Ability。 | - | -s/--stack \ | 打印指定mission stack内的Ability。 | - | -m/--mission \ | 打印指定mission内的Ability。 | - | -l/--stack-list | 打印每个mission stack内的mission列表。 | - | -u/--ui | 打印system ui Ability。 | - | -e/--serv | 打印Service Ability。 | - | -d/--data | 打印Data Ability。 | - - **使用方法:** - - ``` + | 参数 | 二级参数 | 参数说明 | + | ----------------- | -------------------- | ------------------------------------------------------------ | + | -h/--help | - | 帮助信息。 | + | -a/--all | - | 打印所有mission内的Ability。 | + | -l/--mission-list | type(缺省打印全部) | 打印任务栈信息。
    type:
    NORMAL
    DEFAULT_STANDARD
    DEFAULT_SINGLE
    LAUNCHER | + | -e/--extension | elementName | 打印扩展组件信息。 | + | -u/--userId | UserId | 打印指定UserId的栈信息,需要和其他参数组合使用,例如 aa dump -a -u 100、aa dump -d -u 100、 | + | -d/--data | | 打印Data Ability。 | + | -i/--ability | AbilityRecord ID | 打印指定Ability详细信息 | + | -c/--client | | 打印Ability详细信息,需要和其他参数组合使用,例如 aa dump -a -c、aa dump -i 21 -c、 | + +**使用方法:** + +``` aa dump -a ``` - + - **force-stop** 通过bundle name强制停止一个进程。 diff --git a/zh-cn/application-dev/ability/fa-brief.md b/zh-cn/application-dev/ability/fa-brief.md index 5fcef0a959..d377c532db 100644 --- a/zh-cn/application-dev/ability/fa-brief.md +++ b/zh-cn/application-dev/ability/fa-brief.md @@ -1 +1,22 @@ -# FA模型综述 \ No newline at end of file +# FA模型综述 + +## 整体架构 +鸿蒙用户程序的开发本质上就是开发Ability,OpenHarmony系统也是通过调度Ability,通过系统提供的一致性调度契约对Ability进行生命周期管理,从而实现对用户程序的调度。FA模型中Ability分为PageAbility、ServiceAbility和DataAbility三种类型。其中PageAbility具备ArkUI的Ability,是用户具体可见并可以交互的Ability实例;ServiceAbility也是Ability一种,但是没有UI,提供其他Ability调用自定义的服务,在后台运行;DataAbility也是没有UI,提供其他Ability进行数据的增删查服务,在后台运行。 + +## 应用包结构 +**应用包结构如下图所示:** +![fa-package-info](figures/fa-package-info.png) + +## 生命周期 + +**pageAbility生命周期回调如下图所示:** + +![fa-pageAbility-lifecycle](figures/fa-pageAbility-lifecycle.png) + +开发者可以在 app.js/app.ets 中重写生命周期函数,在对应的生命周期函数内处理应用相应逻辑。 + + +## 进程线程模型 +应用独享独立进程,Ability独享独立线程,应用进程在Ability第一次启动时创建,并为启动的Ability创建线程,应用启动后再启动应用内其他Ability,会为每一个Ability创建相应的线程。每个Ability绑定一个独立的JSRuntime实例,因此Ability之间是隔离的。 + +![fa-threading-nodel](figures/fa-threading-model.png) \ No newline at end of file diff --git a/zh-cn/application-dev/ability/fa-pageability.md b/zh-cn/application-dev/ability/fa-pageability.md index ba42ed13dc..8433c7604e 100644 --- a/zh-cn/application-dev/ability/fa-pageability.md +++ b/zh-cn/application-dev/ability/fa-pageability.md @@ -27,19 +27,19 @@ Page模板(以下简称“Page”)是FA唯一支持的模板,用于提供 **PageAbility类型Ability生命周期回调如下图所示:** -![PageAbility-Lifecycel-Callbacks](figures/page-ability-lifecycle-callbacks.png) +![fa-pageAbility-lifecycle](figures/fa-pageAbility-lifecycle.png) ## 启动本地PageAbility - 导入模块 + * 导入模块 ``` import featureAbility from '@ohos.ability.featureAbility' ``` ``` - FeatureAbility.startAbility(parameter: StartAbilityParameter, callback: AsyncCallback) + featureAbility.startAbility(parameter: StartAbilityParameter, callback: AsyncCallback) ``` * 接口说明 @@ -50,61 +50,75 @@ import featureAbility from '@ohos.ability.featureAbility' ```javascript import featureAbility from '@ohos.ability.featureAbility' -featureAbility.startAbility( - { - want: - { - action: "", - entities: [""], - type: "", - options: { - // indicates the grant to perform read operations on the URI - authReadUriPermission: true, - // indicates the grant to perform write operations on the URI - authWriteUriPermission: true, - // support forward intent result to origin ability - abilityForwardResult: true, - // used for marking the ability start-up is triggered by continuation - abilityContinuation: true, - // specifies whether a component does not belong to ohos - notOhosComponent: true, - // specifies whether an ability is started - abilityFormEnabled: true, - // indicates the grant for possible persisting on the URI. - authPersistableUriPermission: true, - // indicates the grant for possible persisting on the URI. - authPrefixUriPermission: true, - // support distributed scheduling system start up multiple devices - abilitySliceMultiDevice: true, - // indicates that an ability using the service template is started regardless of whether the - // host application has been started. - startForegroundAbility: true, - // install the specified ability if it's not installed. - installOnDemand: true, - // return result to origin ability slice - abilitySliceForwardResult: true, - // install the specified ability with background mode if it's not installed. - installWithBackgroundMode: true - }, - deviceId: "", - bundleName: "com.example.startability", - abilityName: "com.example.startability.MainAbility", - uri: "" - }, +featureAbility.startAbility({ + want: + { + action: "", + entities: [""], + type: "", + options: { + // indicates the grant to perform read operations on the URI + authReadUriPermission: true, + // indicates the grant to perform write operations on the URI + authWriteUriPermission: true, + // support forward intent result to origin ability + abilityForwardResult: true, + // used for marking the ability start-up is triggered by continuation + abilityContinuation: true, + // specifies whether a component does not belong to ohos + notOhosComponent: true, + // specifies whether an ability is started + abilityFormEnabled: true, + // indicates the grant for possible persisting on the URI. + authPersistableUriPermission: true, + // indicates the grant for possible persisting on the URI. + authPrefixUriPermission: true, + // support distributed scheduling system start up multiple devices + abilitySliceMultiDevice: true, + // indicates that an ability using the service template is started regardless of whether the + // host application has been started. + startForegroundAbility: true, + // install the specified ability if it's not installed. + installOnDemand: true, + // return result to origin ability slice + abilitySliceForwardResult: true, + // install the specified ability with background mode if it's not installed. + installWithBackgroundMode: true }, - ); -) + deviceId: "", + bundleName: "com.example.startability", + abilityName: "com.example.startability.MainAbility", + uri: "" + }, +}, +); +``` +want参数也可以使用parameters参数,使用key-value的方式输入。 +* 示例 +```javascript +import featureAbility from '@ohos.ability.featureAbility' +featureAbility.startAbility({ + want: + { + bundleName: "com.example.startability", + uri: "", + parameters: { + abilityName: "com.example.startability.MainAbility" + } + }, +}, +); ``` ## 启动远程PageAbility - 导入模块 +* 导入模块 ``` import featureAbility from '@ohos.ability.featureAbility' ``` ``` -FeatureAbility.startAbility(parameter: StartAbilityParameter) +featureAbility.startAbility(parameter: StartAbilityParameter) ``` * 接口说明 @@ -114,14 +128,13 @@ FeatureAbility.startAbility(parameter: StartAbilityParameter) * 示例 ```javascript - var promise = await ability.startAbility( - { - want: - { - deviceId: this.deviceId, - bundleName: "com.example.test", - abilityName: "com.example.test.MainAbility", - }, - } - ); +var promise = await featureAbility.startAbility({ + want: + { + deviceId: this.deviceId, + bundleName: "com.example.test", + abilityName: "com.example.test.MainAbility", + }, +} +); ``` \ No newline at end of file diff --git a/zh-cn/application-dev/ability/figures/fa-package-info.png b/zh-cn/application-dev/ability/figures/fa-package-info.png new file mode 100755 index 0000000000000000000000000000000000000000..7b660dce47e3873279f9bdf587b1bd290384843b GIT binary patch literal 36680 zcmbTd2Ut^0*Dh>D>4J0+5CrMc5;{l^HPq0-&_jSE5JCq9Y0{OVROyIRsZs?56jXZe zARVOlb~exRyx;lX^S|eu?>ZMGnLT@E_RN}@weGps+F@Fn%ESb81lO)zBUXVZ=v=#Y z9r)Z-x{C+oln~>o0YBGWb(H0<75`#b0WNOY$!f@6yH*xWcm}@>T;ro5My}Vck$k=S zT#x4_p}%(RP8n9w5bNY&i*U5L#wH~HcZyAr-yY?PWfM|h6BJZ*w6Vgvpqzmukne=D zM%W^3tpC0z$S)|!%P+($Afm@F$R;E!ECzh>i}8W^g^d3$54W>%{-+@jA3x9lhXKOb z8s+W^BsKMbF9CiaTSyK_0XM+HekEE?@-V_;*chQP83DuIMV_=LbfHisHS zPeYweP##D-B9Jz~kFt#w5_MI@+6C^;hd=?v1;BhDJ^>(0-rfb}1Qb#d1M~6o34_7H zd;$VjUHP9QyDH4jCj#W@!foL$i2u*it_E#`h1>l-U}d>MF&jZ%K`UEfUQtUyIIp0vt+fDL5DvB${HunLq6iFY zZ3%L9SJL7a&{7tbxARm28EU$@I*A!;I_eptMXa@uMv7Wi%4m0EG{2A_SkOjZUPs

    MV3yj+q41CLZc-cb10xHJFB2EY|EjeQsEu6EehLbGJ6{oIerQz->>*1~? z>**{iXlQR>gVYvP*YR{m383{c9zwQYdqIS=izUB00_kjkk+%aGgVdo;qF`;bCsNhe z3JS4@DhPQQpmdBy1x36Zl{6GIY=smRAi#2v18E|l)=&poMTjHN8GapK z5ypn9FgVo!!T49B?)nHa| zV;5a*Lv=?d4JT!=qr4{?r-8A=xm#;HiP;FCT%e93&S1$+FH%k z5`$3|vlajrtsEL;6Uo4 z{B}Y(8y$TuJ*c~2H5}lc@-Q!$k_xan zmFyva*sQFDot#u{5H?r`E0BYY2FwBJW}~m~2*NmeYUrq|s~V#;oIEu&j6hzxDr(9a z0=7VRbs$FCIzsvwegQihunJOH7o;SlWDUil8u84v<>bh%S)ikVZY;`;xL_M8s97T-XJO#XrJQdtU?KDJH z-Sic7WrZ!3RjeR#j)3Bm^ALszdZ_bzSZUe03h6;L!0Ip?6b53X1q1e(s-P861ct*p zx>(D>aXKhj12KL(bt8Q{?3GSa_3|*#)0MZkH&W5J^AONg5)lGhDH*7`$tpYB;N(QL zz!*az7dxz&u7Z-Nn6)#%zJryr7tTdYSj|BnE`~xY;p|oQ(Vos|ur;vc3G#28fWb1{rw#BHxM8$wzr(td5?qzADZEvffuj%C>;toP6!DNBv-DRzi zg1V}3TdWWqf>w9LLC|upDsZfvqNua1h#^|l5vvS#(nV|8D&t%Yz*@3S&JG5iMvej~ ztR+^*OIy<#=nWF$s3ivSbTc%vgljn~3d$K6;|y$3ZYq`z&?|Fwwb4Y7>h4!|;OZYR zZc6{M5Pz8q;QAlyETqWYzkPD;S_rd>f~=m0`Nrg(XZIKA@wW1eCc_hM*mS<;z3Z$u z;T`ThKjnY;wc${q?fR=wQ7v@29)&f^W^=SbIVt<{u;G!Rs_e{bVW%`EKlaacrb=%f zZ@LRP`29&(RjsCfT3K<@FD*cc5WqB=C@2ss4@9g-4*FADvwnw%)QMNX>DV-wJ{cE3 z7|xW^$+W6x4GpD>$)`1<|2UjTIrlu5HneQ)(TE&%ZWRY%0`-!WnF?oMTqqq6D`Yr< zYUUdiZ>**Jm-{Wul_rI66B=lfJ3DEz6$YLe`6Mc_6+B#xUCTi3*O?}Sa@?!B%}GYK z@c@sLELMd`hlS-0P*8zg01_6eK1P+Dkk2u~Lp8D|XuUDbFx>H&#UV6e10s?@ovEf; zP?o68Vf09XFjdo$hgZI2fXK=)KV9A|^LLoOx7?w^#2{mK`&SlL_9>B

    (hFjYg9T zsHq%-^b1YUt1I)CPD|jCuhsf7_@XkMO z97gwoB<*fr@O?{Uo(uu*KXs}Ow=a-N@}>`pfn~b7l$RCeKL_%kJDH4U)rGEp5|_F` zVG?S5H?fsmdkek$_}@ll8ADF??kh7Ji(r_ns)98+Ah&Oi{?qUYJ~CGt7nK^~F5>oL zT)`iIx`&5yNWRpFae&x5{gi{t!c*Y|^OMdZuwqjL!?U1J4%6j_0vhEe8=;l$gQM7# zKITF(Qxta*|2{5)jcS;=c94Tq_l?BJN)+Sd^?(G|8$qJG@hWDTdr_l4f~jnhTB3p4_Gtva|fwQ@!21MT$N# z%9|f&YHaK8mI}&>k|yAW6>s51wM8vi_%SL!5V{sEy`4{HD?qM84|e{VlV}#;{io>; zIOM?x&JW+Xzqb*VNJi^_gk=;~5S7$#6D(c|k@oiXwp)#D;6|QxJWlrw$cmPtBbC~D zFVHj=Ur5r=gO{ zO1=RSe`+5LoB9(|@t8j+J@?KF9E|k9C2~YDglwG!?hulDe5IJnId0! z+H5OP_?bz$1F^Z+tW5=C9IwH9GbFsbj%Gsw_q1fH0o}hZl2uxNFIxJ92F7O*mY3#B zx4ZbO^>ovZxvi8EDt+*%v$G2`Mw>S~tkTrtP);{_it2~})t+eP-Jgy=Wke1a1`S$* z82e|@GfQDImIL3qw@2PYTL%3&{5d?GATaKJ9NDRRL4Pod_7ONyoABr-Zm(yDrbMK) zIM(kTNO&v;+4a;xQIfkyLf?3QHFwLLM`*Ju%@(?LHwSnUZq4|T&aSTE&3^2)n9U*$ zZeGF6g>|IKl}JkoY_+_o*?Ij@OAl7jWmBgxP-Enf^3AnG0ipBVU&?#`>%$Pn2&-rr zl5>*f$MH+rqINT4-@bouuB}|--{?k&Zv5y+FJBLt>y$N^3EA}j65vnu?98{ZJW7=fv^5Id9+6On2sSD0I0c|Fo5i;!2!(AhoJyZEKrpR)@2n&S-eK%kY7Q z+nq@G`_NvlM%m@X>HPb~J6TJ9QUd-La@lNo^OYhNZ5>R$0jGZ&yA4feVpl_@+l}F;D%LAv3$Xh ze`CA~T_)8BxuT(sR_)D_4Dg?EOwH{}U>^ugx1d)?{D%7*=iXZ^{!wAG+|D=RC0 zw|2dXpN@97F3y^kvVbLxR!g+l{8QjU+h1$Shj5;+9Kqfg6U2@ zoT<4VC1jo@4JK2}eSfGt$taQ}f{Lm+68%88MBhrqYZ?&|K~&*9NzVC!)3Ef}3jv>l z!qF+4Jb_*%w7wd?v8hhP{@PHh4y!uQg`Cw5Bv15%%UzENT!+($T{oc*o=R`xj$x4A&EGWpnd1ZBAI60nMam(P{-@qgxm3Yexq?cT(fg86oS} z#UE*bAxxe$oR|+D+Y8j_O|!$Fm9I(or!Eg>nI}v+Y&q?|ggd*D1T~klAsK~*Kl0sidM*gc)6(5S)FKAACH!2tKIcTCF z;TYzaT=J`x&o%!$oBVlq*`jNHVKG1WyUx_C*JSkgvj zq<6fs#+H1LwPaX)P*70KdBP?9=PGE5QddqSwa@u7huWM6ZU84Dd`zU1*`A?&>q8&^ zzCk1iQC-hMB(DdUOS+Kf>!TDTSew_lGGsNHSewN`QXLfoRiIe;ub&GA;EE^Gnv9c7 zy8*5USfAG`t;=L&isHo%EG&W_dL5Nj74$4>9$XpYiKr{XR9yKOFjV8QS2pX_RR$mH zmF1$mDlty7?xSbRojsP7k(ZLyQ>xz*K?2l?Yz2ef>iyx5aEyt+@J3dCx9 z&Wc8rmF=-=74`$kpeM)zsp57sVo*np!Z`Xz-AAqUy_pwQNpoNM@bmLu^A}n%f|e@F zF`&HdemHR|pJrGre`NW&cY;2PgJ@hodJm(H7{Y_YZ?ch%E=3a9xPG4(R0^Y$`Fkn+C(Oda4sqI1eK6Dm zo;;iK-_i5+VR1-du?#$;UE@X@M?Yd6kgJiB=1JiA9bdb(_KMuJ$Ar-$?I{P7za0S9 zZXI_wK1j@?qs7OqCpSygy<~== zy0_+Pt^eQ9n`I36hF88gOMwj8z3j--Qd%&*meC5)%8R5hdv9WKNHs;B&oGY9Vf?%F zYWgI}qthh$q*t$-o@Sy93sG-h9T4~1ZlA{&k|%jds3iSTTZ&Ch4OeEWVRDWhzdI;O zo7?|Yt>5#$_7-TlWNadm(qk@>$C0OShj=tL4aUmw6;jG;ye0BW?DB@G^fKL#6oHPr zT@Iw^>A*nD*gL!V@RCM>U<9+~+bwRs`aPE{eHe`P`nyDv(C{ZsJ z?jT_$t)++4ZSR&y;_elFZ9SX{BDVwaiLMD_mj`HlPxf2;qe+zDvez|5k14QY)r3(p z+t%two-EQ#$N0{*=OjLd8#EDg+xQ=KGVk3T9air)qaZ@1#D}pN#e1xEOICQVGS#0U z!K$g3jCdB^iF(t*UH$#ZGsgxN9jG^tXEVJ2w6wb+XK~(IdU_GPtTJu2mB_87_2cEq za_)i@{kI1l6p|iG4?OT$H$^KSd;2dF3_N?lgHeIwY)`}cK9Z`)C$sOn z{$e-d+?yO>+WKQsqIP)txE}mlipc*`%17Wp`Rrg#VSU)nKPz*67%7wD(r!e9{poh( z)_2R)yDjHvt6#fDldmH(J!0Is22VykDPV}VPvC4GiWw4HnoTZg`tmJ0WIl0QW_}63 zDKj&ZVJXFnoUd_C_4nfMXTKAtAu%Rv3)%j?J2wSAjW`>BizVmB5_&1pQ9B7}c8phr z-82)*?9DNnF*dMJ3r~EW@V;mImKl3No^&x*KPy$z_EcD6Li`is%5f%%MLH&K3W#Jb)>Kl~dGgaI{^LD_~ zi_t426cF(j1~OH;I>Y~E{#l;UemIotW~W2mw%l;ca1hv;3Taj`4GZ8~UUC#~cK?;@ z-t82|D$#x#9QUB-~8tsYqD4D&?ZogT1sLR^vJ8{$sW6 zpr?a7PXxwZ5uQBCunRYw*2-+p>Akb^is5ml(G=}TklF`oN&{l6Bk){kr;M>7dY^!T=t~s*2tf#1i z1SIHrZLJhaPIy|=d2PMttw^NFX1~n>@i*0ZWfBFEUn07*y8Tp(?D5!*v&I6V*1V&||3K*dTfytI64Juj3YIai z5nj*jrH+)(8E(YnUkE?~IjRR1>Z)9o*r*-z#M1#Fk+QP)og&uCvm%pe`wVmDF?G_zRr_UlG1x4yh?9oLuRLEHz>zrWjJNy*U#UZ2f>8C(ncn(rOz%*Q!ocli6l1} ztc8(LVnTUcH5>r3MRJG1hyR!Op`^8)O-4=WT`8{vxsO9dy>%#ym5XsQHX*UYGs4~` z3zVt*Zqbp~9>))}Ez-F;a`d9uQfA+wp+e;CzyTf$zs2~^+Iq9?Lzcr;31)M0m%ej7 zpN%Ro!J4T@LElH0cXtHwhfEzg3wB6KBm&ohVA%@`IV1Im`;4_qB~3xGwrxowOI3l`GVI&~7y#A^z$WWm*|xGtwW(=@NeQNv1?+l@>TcpGEY zB1v`ar1;uaUzkBEb)6d8G=sz=3f8$Sn`DQT(R`gu}7ANs>`}a$p z6e-6C?0ioYD>U!1W3}aty@K`9oVJh3pUiA35@LF74BnsmHNY#4AKjX)9Ewz=ZFTG$ zgsQ8)F3^|QrpqHQbs5cYVo%Bj0qm6D^P8m76lDSjr6wt|)>MH5*%hMP>*V|!eObNW zLB5}5X5)EbW-a}eDXWGeq=Gk;oJGwB0Ues5|4Adj=G49bO6Q{Ty{zUUVSMYyd^9r~ z+wFP(linI0US36WXFlOO++18*G3g;(dG|LYuwUxM$}zJ>c~<==ZutrCYI0NunP@}Q zy$8xV9wNJ_)~8D>MtD1!32vn+4rC|#|7`Cl-`O6`aq6iwia;$N)Jj$}==0%I5|xRJ_vfE?-2Lt! zs2kYhZ}tSFkoEhGbqQtW$)cpor4$W7jCw3(%|aqb)9o zk-*l~9gdrAc)`2fKFW)B5iuj1r`HaIxkV5DdezDrEdVndj;L_S8yyokHP?;UJYXISzK_cjq# zvja6AuEA3=f11)7KzRBHehHh}wI|!)#QUIP8;JGPWLqcq@Jg~RV%YB{tK==dAm&1q z4!+GDsu-V~c7MlU)#^L#)Vx<|Q}fxMPIE0bbcgGK1=1YE2;C5UGJSV8ePrxKi&QbVB!Snvzu`n%aKQ(Dr8rn@YhD_9KEW-i?8t-WKX%3`Iy)U82^)N z<=+g^|HcP%g+V|s0~5|ZRnT;&k1;ImWhyelzQ;5fL&&j9c!Qsj9a~v82cLGj1QIS^y$dOt-o2kYqS>UEK<8a zbxAhJgvWXN<-w|%Ga{|0lFL)wmLurq|6!Op&r21qV35!`4-+d2@xYUNwpNlh_pA+vUhTr$87OeNUlp{WiWOwWo&w;Oa}b< zY2_o&F#v!DMXwl5bM1f(e@bTa&Q`8!)U&%rInW&0Ov1z5e=-6#@O5kBvFvsS7}EGf5TLS zHe^@7@*?*CPcPzsXRiPMP)y#dEG7tN>n2`|si z`pG=bX7AWAruLTU+7bDhEPV#R%0|fUFVWlK28FSRX`x(+qn_5S_50CtB}Tht_Psjw zCoQg`>szeblhxBR=hf4KHxlV&@DMM1`gPVLsWqLVJn6Z&4$?o19#v9$_~}%kA`J3> zO(DWQK@28dSVc)N+NJu`>t%Cmnd-fi1<>J|bN%hx$Hya|Jh?wrIkzo$ODpbD@$%0e z%Jk-`DMvimrDPzvQ~Y_BuKr??UdNZOy<10&{m~;9F!-0DC_K^6&oRX`u|ox-{uTdm zdPEnWI1{gNw$(shE9N_;!K}ZCS@h4K9Q&a{T6SpC^K!hj=(XZ{B7ik(tB}ciU&_qX zq>&W5+2I#h))dj9Q9TVmyQ?+d!5n$*#EkE?!>9Vrzy;lw)e<#8diR8(?O4w zY6h$?jx!iiYMWRS@uoY7i@V~aad13)c5IlVMnDNc& z_cOVDJirkV19lnPO*m^+7TUqgK3>BdezCyijAX+$%hU}{fO3vietN!7d|tD9q&>D4$D)k{et+K*`aZP z?WOdX^z@E+O|s|yb4q-?zbtufI>uTn_ut|cBzLNtCU>-FPsHz~VvPZrR;(bRCtcn> zYEAAG7Uvt8V647nM$)OO7WrJF@RDqK(%XN1yzIUg&LJeA#m9=++eMXtWVDHzWO?+q zhEUS%4_CaoY+X(H=(L6&@9ARE)t;N%U(27oH#qd|J^T`wJ@-Q>!B;a)l##J|Jl`Sw z6@j*?sdY+-s>N6XDRFy<{IslX7tCX`NFfW@R^JH#nbhULgEm;0$D=NJ-PqX>dvD+2dcEc+Z zWR_75EqD+Z-TkHPl-;s(RWNI;;W#vR`88R6d8mV;sku3vr)%I(!_?4w?jKK{w>iib zVCUJ8k(IxXkJ<8F#L3cQp4W(mknO#W<>2_1xZ3k-ui}y3=j>N8f|>ObVV^$fd{w*W zkh2zAmG!BwEy zPEY@{ysq;KGBiAVn~ybq&3Iu2>F_!sATI7v&7)JSVZ15(#|=e4 zXG>}O*&g2!QQ)lShp@hcp}Y%ztTcz~VA6-A$e?K>L>6YFR5uUR4kGvQ;ac|J28r1H zX&gR&mnpPO^s?(;6}~{6_pen{-Yi|j`dz?5dHbXvrBdib@HjUH07&IAm%Z3-`R+x7 z?o2*1hulErz5oQVgbh3s@@9W1V7pYeq-QY9(HqJ_5g3Q-tfe>EUc*~gh>e=QAs9k< zBa9~7nw&b8TmbStg&7sBKETWm`5vdmpcKt90pw9oWh)Tr{N)e~j8mV({e1=a3xRt) ze2>_GHFMAP3+qco%qFDxlrhitSGx1xv%88r|?<$rZO{V=J zgvVb-8fiUGKHW{x*bkF+(8<2D(ybN_@S}5d+?)IJdgZD+{`J_mS6H@kUUc5{M1PQ@ z7|SX)L{OJqAX4BCCT*(C-QIT=zgkvgP z2BLL;PAZ)w>~1x{Vot|bi-OJ z$2AN?92Lk+yQ#br;Izuw7brZ^Xsi_~(Ks5>Yf#ZF>onq)vjremilK_JK9*05qY_~) z#Q)pqp#KZ3@#rCcl+XCW%tr2|na}k>$?T!yi3d?{`-}hNSo{}?dkNwqAUOt)6lEY!JgBBQ zk9iw+H*{OS67OgLIJTMc74eSDTl3H^5_N$pHsXa}8nExb=2S_Qe*WrsAEgzKVErcctU+2W8ytbI+rk0UVKK7Pb{-)nq}ze5`2=84M_m z@2!y`x!`5y!OkR(xs{6pO?>S?h$?p8o^N|Gx*60ZS(6p%m6G;sF|x zwbj9#qx4aabZOw4(QgwYquH-7d=ENWNhM!e{NSrmGtYh~CEcgQs5y>2lXy zq-2w#`VkzWM?*SUm1x)7=E<)E_m8iDY+oQ@2y6IYz+MEAha}^~vV(zY&`R}|9sjh;};WDQ@E<# zU=@Gv7t0u(EI0JHs88klyNSM4j885TA_H8iQ9qhmj=$}JKN71^Jy9CRozA?0GtDh5 zr3o~aK9M=(dHq`V9zA_X$e)Hg^wo=VyWP@lcC6A$A7Mq9E;j?KZ5i%Tmwi0RgROIj z8nh#OyJ_ZoGifWYqSxCCoUlESj>Ek(yYUHKXzBpbE;w#JlJm2u*EcRn8O|<|_O4IW zLL@H=xE^~QZiK9r)Ds=boN)jVI?p3bT((F0p&9zgLo_=l9}W3YB&w>f$`Gx1>S_Fp zoEka;s1+CN${3l9p9mEOgYPj@EP>w8sD5@{3;NdGWk)S@_b5Rp@V(u5A=Xn%Z+0pR z=W*(RMUf$~v*DdmI`0-UTl>}ce|MYyj{h9-oMf0lBYa`RaB~G|IX^dp9?>>7e&u{x z(YE=99X>S2wp=#tw^cJyBOBl{6GT0GKwm8XnwOy5_J^#jtaN+SF~Q1;2Ii*?b=P@T zB!Y8`CYxetPmf}Z%^$|~JzTl4gEHM|Bnyl_68}2dVE3`YC@Y2>sTgFdwi zXlCe`(k#SKKHyMpxgv8(Gi<arKC8jzZ0WgvcTf^3HHs}Cg3py#-ei&ueXpBX`_T>JV%P5xZ~iYcZ0-I0&7NS2&lv4D`-B&KlXde) ztfZ}rKa*>Ggdtb(#)GPNrY}109pxjhR|_}IjlxV<+L1}Cb1y19=<%4+U$}a)!4KLA z>Oa_(NlFq+30kc#OdPoN4x1Pn-m05))_afXt3)Nm+VV{EaDGt0!Kmiu=W}YYtd%PF z6_ibE42vVUW#!~D)yKcSg?f5YRymJ4^00ifpQ2#&^ld(G-;}PSG%PJ+kiVEQQV0uB zO>}ZdG`)#Ijn%X%8YbvF^AI|v+jiW43~CLilbD@2e;w&rH=&bp!pNOsKa!Kp{!scM z)y4tB>196d`^N(8XGDbn4}edEQN0x4Wc}Lnm~q5Np09~j&D79hXjNB*Q?{TJLG?w# z%lUApTQu1N_F`<0($n5XUQZ?8>M5f=S}efTtTLl=7W2BOTjOETW5V~4e8X|(msN1D z6@UDTaZp}Su>kLFQXs;jXmqU$(+}6!YCbMPw*ej&!Tzxpw?H2U!>fk(kq^SvPI6hK zrWWZxWigkqyuaHFXrM0V^G%00l$^J31jey2aO((0|6>PO=%{0L0Ib282{2%P-K85I z)BP(0@KQc~7Nes8Fk&yhFz18MC$N?*G91Er4_Mm0H4*>ZW&7(c zxtFl7lqsSjl2?ycX$s{#O@A}3{QIM{@(=Ljsw(xVET5F&$8DmSiP%tBuKHQ2F1lUCWCLI*{!)WYcO2@`&HBkc!Ok~j^CFU=1H8Iq;wiA zED7*WG}#s0Q1x#uF)}XOGnk(dyUN=00Gv>e&9-@k+y3lRfwB7Uh93W~;DXfHlAP37 zu5Rb(h^JlzM19EEPgK1}3h-gMCA{*OoH}#TYdQFt%C+J(*O{OLJOJwlIE~@~H1WgD z#$&eHH2bUJY(WTX)(DR_2Z#Iouj>fWe85j*Pm{eLE^FKb01EkBs+pZY9YECtO4L{^ zZ7d5Y5O$i;NXti~(*tg@ib6g|0D*G-TiB7zo}$k;Pi+-K3RmV==4(A8p5k$8TfH}e zExf>P$`9{tzs)fJUn0r>Z9D^am*1&A*m0^dxhlMe(Z4BE*@&26o_^#U1Fa)}O}qnG z=TA3vVrZ<0SHP(-mEJi55v3noU-a*=vw~oZO;aKv1qoWw0U|>;-u4bs8K7Wx(9NQfnr~6Q=djoLk0T^91pQ|tY zB$sA#{UlTnX{SxSxfhQ^h!=5t2Z(VW0E&`x^liof7KfAlunp?-Xh$sxF2xR(TVOKvkmc^)Z23c zJ|3}%(?7~S`-39ix_&0!<7t1=r2dsu<}4yZUPcasp;hv|pv03oxz!#)8!r0U0tX}U zJN9I0k4}#WVe(~=ITvm|G7F6imseNkX}>(Xi6^s7adGTTyDpgN-ECfTazY>5_lT15 zIP!QdT)^Wfwj;8mH>Ma0#8&cG`hPU^sjInb5HNPLHIb=f z2f!CI^wR`=eEX(=`vFfJ1?B8_WyY44Hu5Cg9WJiU*f*(>LA%sfP(+SE>qnZ{1E}N~ zGr$IH{T#O9$New}{iHCvh{S^rO#~?|T(P4H4`*b?7t>-a?;kQwQe0Z=&w=p!-UJu7 zcQx6bwtE?2Grh=pC*6o4#0^X4eh-#X+^-u~IO2b7<9bLRMD>mr-9EZBw?lYmu73Ad zGe~4If^^#3;D)=vP_fy~y4EO?2NHAZuH7A7Pntr1z>2mPmb)VY+15UaA6E!%ePNA; z&j#H72G}<&mS~PGPKr;YJ@T0D%8;jd{f3|Ioa(LjH{LYm+uSW61!T(HuZ6Cy?~>?B zNt1F=#)XP->Bh5CuI#>X?Kuha-}+TyN}*p9$vl}HLvqV^q_0m0yFP;d9RtSqBXk7U z>3y5x8f9n89CQd=90%fHBM7_2AH2!?^+jwcJ(?@8KR*{l1JZJ%t5dhoHs@=V3XP0b z_EN&*N{ts(;zn(r=26-sjKp9i<`1K70{QlqN5JotIn192Cjcw=^&Bxo(7b!var_3TtsHy18)=$3anDz9q2;Fzh zMyACZ1k_97AGX}^EN(OuF!!k>!?CfkdF*_qCcAIdb|&T;`KJz6oGjwhQVaSRxn!ZI z7i#;{gr>{)qZFgZ1bJFzOWBxiWOnu~{LNoS-rI7b)+04c{;^A?UktD7U(K^@9J!M~ z?ecd_-(X zY-gZgwxB>Ro;>8l#0 zS94op#;4313p(#=C;3DdE{;7tT_z(tJ5?#De$y}gVZxqA9-V~uE_;7@(eBbeV)$Wf zZOMs$izkzPnDevX%J(-Q@N^sn>pQdZlOy|9B7$$*gxX$FWLwkUj zHoqZ6$jQkW8ij$}6)%HNimxP@#JqiLja_jwT9H4Tc#$|ob0c}uRxe8<=}~53A%O`P zCAU`Pq`gom2jDP4lPcjGRr&dMS2U7U73qVB*F@C5EoLIhZNEA8QV1d-qYL|&4LLWM z)Vu5yRVmbs`5iux^Umf8(;Q}Nn3@N8(sxB#epGx-e8@CTfn@p4o_!i%p zv%*#9QKp%#E^zXh7j?Wer$M7FO#KEcm-{|92sC-q|fNd5z7DalEZp)P;%nG+qZ>%cMR zkj4zPF)@XnWY+t}?`up~agmpoNcWo0i98_Q<@5A~lz`XoJo`cR`wK26UMJ(Z`z0?* ze9e|t@><=}Kp}(FfNg!7R9$vs=|HtvnY!w$#(94%odGgkC1cP?ijPj1LhUW(NfO@L zpT2tor!~H^qcMOprA05As<$r)s+g>2CIbA0H`u9}anb5|#vFP3ZVx*|PxDqqxyr zK>zsx!UNdBpl1_N!jfC4rxZ72*Zf>1`bq(Ef#7vdtjd z?C`B7LYN0=PL6p5p0|X1m4GU5ZKo>8-K@UEj!4?QQIWK}ztLIK7F2V*#(T6JkRV#C z8vq31{TS1Vs=oZz8g#DnK6&xZ@tQhl`PaSGw@_KyR4Vqy@0(EP|gt= z_OKx0&FTuZNz*S-;*-1pQ{Z!G`D2abA&B;eihw_vVE!XV&5c9&}kS~b)GlTG>BFZDeB^^Si7GU}sLWP#K#|E44ycuJ;ZYKT4F5NS<*gCMbaLBL$x&eLKx{w+gTu~LpErk z=dBfKSaqQ^t@ z@I%(911tP)OF-;YV@Tc^Kkp(@mDQ=BOuJV+_z6O0s<+bKAw+;af5<7y9}pPVbv0ja zAE2rSkz{ifp!E5_Kw##*XH&w?{{n*#zidG0 z0ao;{Hx2(w1OOZar{a#mA+;;>1$23Z(UAXwg6n1q=k&iV{Im#OTNR>1O7|*NJ*Z$c z+uwiOAQI=GMPRB*M{Mb3$TrsJ&>iSt*GGIP zr^D~nMt}Cb3B2La(d@zP&~4zn#yrXS7kvcC>rq{(Cij=yr;q8Y15cfblW}Wn^O&{d zMrYza6cv>K0mGZ3kznvk5}Udc%yj6_kC?t zpKRAz*3K8MXrF6@fWH4{y8oHoTi&#sgHM3%eHTrOxY{d!y^u(8V|`2nkQgAj;l_VI zFi_kuRT{fm5OUAE{+44htoo?0-QngOlDJj|%i_cw2v<56lQ zeg_X*yM?*W)aEVUVzac3b!=~0V=x~C&X-Y*Z^m)JTS}}Cf4#7?@FTv%G&F4}{K=!2 zyncJ}Uj0G)I0p~U3ym9MrdLYg87d+6z?n8sdzS#ckWcJk=fJnqg_BGSVN8@_NN8H^ zo!eLNVDcBGAf52N^D6w+c1u5Wrg+?0&RG*|?z5-@M4=0)a!u51750}ov=N-~|Dmtn zKjDsHX!Axjyb!VQzD*A*O&o34VE`X$ zbACYqm{Ek`?@l$^!&GwX@Pyl1cmaQ<3;5R&nt1AjwFA)hd9?6Pn+)OEWR8C-Wb*(`VBa3ALT|a@yqwC4hjhN5G3@xSaeJC!f)^lSbsDi{XOI zTlnwZgcLW+m~clFRQ%wa^yJ?9B0yV{4<&#t8O#FQCJom9{vLvod$43PYX7OlQo>J@ z?0^Wl@E^7=QuNNz^zYvNT<}WJPW>O8y>(a>Z`(F1ARtHxNOwthw{(Lb-67rGAuZiV z*P^?-1q7r!7PV-kyT8%j^Srg+WAA-@f5I^gYi8YZ&vjmBT#c5qI<4EP-?_Z7;z7$* zBceyjmR=M#DGa*dmUj+PG77B84TS|ohTG?uKrf46Xb3^0!x6c*wvnvPM3%gq&-K7s zrR=Jo(J!>CNo76I;tmjB2hh+Ago`1FBL7%o&}-dyL9SYS)=&-M!5@zD;P_Uzc}+fD zZD_B);;wxV-fA_BiA_hc8~bLqxr!+(2e8OLC>+`E8N%nvx2XYqw`@m< zxy>KsS0H@;3q?J*wb8hsO7^;`H4g2Nl~Ba zs*w}f@TH!yrDFP_>hS4Ox#+JskD0^Gm`C9#EzA(RzLyXtjf}x}5bW_dB3I%IY@NL- z^QM!{!mX!A(}aKe<|g5t0Z|74Ek-TZe{ikvLQ4CK(;0>5)-GJ zGa}*WCxOwC?|1){Ju2CMblSPo7fqSbqFrOHD>LISS96BX4h=<04THEhWjx$PcVb=tK?62C>#p-A&|J>8RMlPuCN&%%W#<6ffts@o(XaHXUYmp59&w&lp zbjo>BfZXp*2(=Q$e?3HJQSANVziuLozphu_&jAwTSFT6@{2?Iq6X%4pc;#-T1gQ4n z!r@&xhrA4Sp(B|UIC^3DfPKfJlkPqHEKxV@TE~yoPN??)(U9Oi_8|e$7nZXVYC(DH z?a4JV$p2fsLeU^XeLJDl!7jek*8zYp!Yq-7?Sj(GeubL?h2`_oT+U-pAqMX6oaAvdo+OXFWCir$_ASI~Wf?JJVP=G<8ncSMy8o z0fYE?)=;*OIw8=&MFXVlKX(JT^uHHnD`^>0l@?Pg?erV8=rfHLOa*80QEVs0do0AU zS)dc2FMs*las6m40w{idG;8=7D!fqU!D>*A|E)ddP(9LTL`9^jS79@iKJ9%0w&P6w zUVhuT^^R2E4k}-9w!gN|bU$!E^kAe2m8J{zWtIBq{z&_+#l9Jg z{P+cO+wt1m`3I71^AkIj#92PRJmw!HQSV%>>;s;Ir?p8q#zM-`v5B5M=-{H3{7FAM zMJ>ZU1zF64(_T|t#<4c4SImj_p5xdV4BR9(u64;5#n_UwtrID}Uu_odltwnhp5%J| z*@r=8+D)6ggRrizozElOdUGN*?>pCuh+wtJy>Z?~v`nZi-?v**(}x^`mF{w}DEA``*OUW-;a69%zxA3?T~yk^EcST>A<>gtXC*-frLGzAi34^Ss; zR#t7K>m+7sGK)D&IGws+&V3Wl`WlIwwtWy(5I&bNvQCm%ygsRUZRDZJ!)dn=20lO< zz6|z&wO3PPmFvR+o(M7*z9}5-M6?_#7wJpnlE8d~i38jHw6zZ@FJ-gG&}q7i7(;{1 zN9_B)t8eO?Z6D?ywNiJKQxyxhii2t^!L^i95eZmKP1~J~<`zSM<6CD_bxe+R|iJ_c6JY?VLBg7UN zy-_D$assFIKf1+%mIFQ>iFD@_c*7tk-$_CJ7iUQBnrIGfI26LDD&88D3+`GT0mDF^|`q*DXSnliMxGy3< zM|w18DBxm67!tR~lyoVwh#W%;$nbAFZYN~ozd_14_q@Dg$`T@0AGz>@%%;SqE)vu@XeBMjWoHIP zFcO5N+qI)usSi8FdUV~cIDKa`F676idUktYxHX$xV?_t?YrqzZ3C$u zweLGCVX3I7YzAZN^(QlEvz%tsDSi4BhM^#cudd^YHfOgI284YeBvJOeA6=2+*l(ek zFR>%5>w874tc9cX3H_Ki9@toIvl|3Dp*=A|jV{L`Jw?i2@(Z7_Yo}IcRwJfkQm6> z;fbFJI#JB9Q$*A^@$oF(vkNAS?bgbl^!+S@*&%@_dl5c2M`1lN0#UVj-aq>L*MB)N z{^&sE53u-Llwa_gDMl1e3)s!q&!j{p-?m*|vS-j>?sbA6@JO8}zCPKXOAkWAoOO>_3r>{aQ}&)Tz@cj zM&NTOLC{LOcezdt9%BrA1olhdMxW&7_?lnOzF8)$`{iKwh;0+8prD@TrkdD@@ll;3 zAA!$G$+tAjm}-P-f$IyNB`rG`F)kF%sLPvcH4bBcUt(r>u~Q)>Ba?{80dCH&)pFs}N=;{vsIi_R6WGMl zHM&dij2y1S^FWX9Ki9x)-Ft->&Ix#l$rO8k$B$I@W2&!(fqsZ_=N)lh-(sBoo{rf( zp_Gk_Uxn)vyp=Mo7;%7X`7T#QI?1j#*cG+)B;#k3lnJ8V)l6)dn3(XwTBA3&cGyWv z^KjZO1l7Uo1!&v0y|u8Ae|K_t?gr=)hK9bGgG&omcFb4+O*hnfg}7$iG2z-nBY>5! zLi&5)uS6quMp=%kaNT#0)T6@LguKeoGBBu~Lb{$a{2kU_f@I8KwHnPy!PlAtPdlU9 z20>pgc5titeiu)eB(RRRIPJ<7KjXWuavUm6^&f|1tmqg|iZ}=}>iO*B{-FAi?=q5n zd-hOux;q2V#ghtzd`9O%XM3w1WxuST7+dzdz1gn$O1$Sc`*KfmK?aAe7wWbp22Yn~ ztZAIVgGW6}F8E)hD0haPW)B)~i%_@nu*shxk%5E&18f7|yP6-n{A z=?@Id7IR5z$9j>WLqzCYhU$3-E+G>*F1E$clBAo0#36#;t#K2T$Z50t463nePZdh7 znnoynGd0=HQEol?2pi4w{F;DX_knu>RNK)M==z^aP8d z2uckQNBFc|iPrs6D0Xa{=ul^BzdvU)pDbmYN;fqaiZ@|B!Pz%$>g$W)x1eXeJu5oH zd7Kc?sB>jlO&*-_pJ!f8OM*2^`bynS6cD?UYvDX7G7?ZlA z*^*(+8jk}ciCR&wo7vf|R(qQ5zVUZy+jilrqqY*P`LH4C$KXbwWk+ADb-!m_sT%@{ z67l-gZFxA(E=uqcg`L5iDFKn9V88(PlW^&s!_4wj@Vu_LwhjzLN=c~|AyK8I6M&dWDlHsGb)Yw+sD#1@Q8hFGW`__ZHpb#Znu z3K86UR@`e{-O;7SRD#%6MKg;~<_AwZxU@!{#tUNsqW%3bJVS|_M;9~?x%X~G%Ddtx zhv`ox!)JO;MK(fueIRGFPp9w`=e#6iO%WxlMU{8OX?=%yg{~YG=crs4+%98^RbExL z>29Ng#U8q|9H`sGdh<_>ZDSzp&r_Z@YtHye5O>hj~W*7|s6~LKHUHj*ih51j-?%#xEBHn7H<`LnXKEazt zIk4=CQ<=iS8B2xu8EMMjAnZ61>tNta>cW5^rrzDNf)nE>;h~LZ#|}5RvfeT2*GHkk z@>?43KWEf^&~+H`+x|F5wF-$lV3D-q6fpBS=C%;}&Fy>fDd%JFJn&#_ddY17Q7~yg zj-*~h&vfqA6x0UxX(V)D(bI@uSroxcR#4C#YRFbi@0)(|q!tL-Kc4O<2b%K~8ga_@ zlm};0US2WMT5Xh$yWk zliZOGQ{($uLH_kudh?uM7yy*c+(93<6+;}JJt6PBkS4nmvf|YW7%Edp1iHB*p`-r# zQxYPN?}LsgvI;I)uTB`JHN88_!ofupP#Ke{O|Yk*TD6k@bWic z|Kj|o=?uI)=Cl6!3jd8E{{Y7S1fhRB?-sABtrY)W?7yJu-@Lg0gqsTuRR8Uk{D1vh zrP*FL0cr(zH{`h;zO&;N28S<$?rReRkpJozYYe+W2K)F`G6sXSx@OBqK1Z1%a5_uH zTqBd_3G@Kw%D_uVDlCrSYYV_ic>G|hgeEb{AePYw9W%(q9F#}VXMCj8e02I@fy;P2 zTL=w6=WN<>zI4L8zM3>+hY8Sa42Z(dPS%68G-=ugy|2I530Cd~){ReRU zyF&gpI{u#+9a<^wU`(E~jQuVmsC03gCEq#1+we>meKHH;3OJyR_>{pUFYz$SaX2<# zse)wRSSM4Lk5&9|J13|Vpn#>R;cV_RaH6g_?GRGP-MH>vs4G{k1#<=&wjZO(M22wNR8eX>x$X&u_9-t^R9{=Yu|bGPp_arz%))#KAtda$07C`67Y;J zXwI*8w1r|>ew2k}7jvq0a(E6-Sx>JT>@|h?jb2EE)58J;ix7ZKHZjt{cU^`L}N!UT(Bm>~HZNDKITX%^I{~W50(jEV%y>cF-j= zh(BBto`Qq)9Tqku^Gd%yalcCi5cjLHOA`jZ{rs1cFz0$Xhny+ZC?0$|dvFTALvLHz z*WsK7>Yc|F#^s)OB_}K`c#Ty>}}WY4S}_9VVc;&?`~(w zSo!SjQ_%=D?^gqLq}=WUHb;=Rk*%Y1xUO#ChV(VudRbBaM!u|iM=3;fSbKifYi0LQ z@yX?nk^=!jMVI2&Ht4-Ha6TUJ?B4gC?(+;8YevUeOVtI6l>T^n&%!ZkY3wJn1lbBB zCt2N}w5~(VA*sAt!PwZCo4s|4gW@T=U*q%0bX>s51E`{++SjsQ;Ks=;rv`dy^M}hL zLd+sT!vI}NUi8C6#ey=)7BskQZ}sAw0j5J><4S}qi&HkAow5UYyC1`ss|(Y4dFaX< z_V0E#GrsO_oJWigX7rC#Z)Nub!85(Wp+w=$%^L2#k1o`qnBN;)k%-3uz2gvp8t6lV zTqC(akD8ek*;gJz4}@eB)n0}!b*&NscO5qR)*`k_f%SL<5_Q7vYJ-%(dcf|l=VZ{vkvwUn2T z21g6d@8R&NG3ZC9P8a2hM*t?MkE)oTNGp`_L=(x-fEa-f^mGFa@LWAbDfI(?dbvxD z5HkPF^53Z1c!|O2-6Nk0Ks_Y#&E^+=75u+|3d?stndKis|WKXaEKDj#u=dCg7v!F!o?L7Z1d(hkxFfYz%n z1dqrk##%Xbb)^g8dgM#&)T&|ZTwT{(a*u72jLI|8eZjT9HYzx|f7(Qk zOsej*`H06`#P?}?^^X7XAT8yepc0kyWD?4O03S9ZZ_%)8q`>;P2YXM!tn}}}fFmL) zJVIFbJ(AAi%+Gy`oCZf{i$!rU;hz5=$*KQM?)PtdFHt=x4*y=ANG~lTP?5`!)*iUF#`rJu08Qhu6hkuj$4Z=ucbP@0w&j=y!pPk>5u0*?-9NZFTAyEn63a2Dj) zdnB37d9R7(nLc_3Agf;4S9*tXATCleexcCVKuU1BI z0e|jW8JR$h6&WqZPZ7=VI}H%)Rgf^{J(CZrNOid|k%*sEr@l&~Ra+Q>#FKH5tfwK0L2v@tRPaILq2uM3kr_RwIYs+!AJtNyQ!w~ZwH)5bm#5-t{>zzVADgHUD?NtFq76> zLN;woKMI5t7uw|NiAVgrKOy{cJy-BYUF1?O$nqZMxMD^xqE+!q)#OAxgL_VKSZ8i z|7NED0}7tlNafek=H})XXAUF6j}gDrevXez&M*#3#|#DniaG8~g+w(qz#!UzhJhc! zGd21GxmmLhcwOdTN0gIw&`o0Vdn+Pa`?z-+qt3q0dC~6HasFtIC4GWYbR1<%K)ayQ zUbDRby{MyW!2E(s1&7L@%r5PlrX~*#r!%!6?iJ?sVo}Fy!{A4AF=+#dTu}XM#+0{7 zwg!jEqf+rQ_4h(!-*+9_43lsN#Ux4D*kFKV(#KcT6%uKRy9aJ!D*d7-=JLmSJBn_z zw@8L1zD-0w?qH;PT)B*x`k`sYM8$gvcFv$y+J33PhQYzmB@4qaHh(}&V$L1t(+TQZqM?~~i2 zj-UJ{Pp#3-`uv-K2>+UqW<}`&_@NrC{1HFfsxRfkRlS33Z|yJ8D zZg$M$lS76ue0zZAs5w1TCchznIO1D}XV_gM$Q(aGt-f32lL?vU)dAellIM2pYR|8R z?c2R7oh)(oUw~$dua*81bTdanGhpPb&Ulm(4j*Gh3--3#HJKV#j{L6buiZ-`mBi?2 z|MT;OUs%~?IQ!Z(hhE?#mK5eerW!VaIa=xA_xj!$OtneY_9^Y}!-tovyH9{Se*nl@ zE?j;IRoC;tHMt_l3m3-g^d{yatJ3aV4f3HRfhYVP4(sMN0HNYo#>yMUFfD>f*5e(v z%BWpn_*&dYyWPr3SVVe|-6&&gwV#vX*{0R2a#GY+4^Zx-!s@!V<@KKAaw3Vnfbgp^ zwYKzqk&EJwV%cSbQ-sl2YE=sx4lY8=U+n&G3ou#4EVzIxO}8D*W4XOGHJ|^n@yE-- zgg|B)3&`K((~hm5iOB#{;1UL~zlj3Gs-9TA6J=3j3Q)fyW43 zspRFByJz^$fhB6*mUhK%cue>drPw{oIg0x7z-%Xb;cU3mpaaX4-;;|8jl>vZcZDP< z-ztPq6&=rIyzix^;!4Lm1+WK~9GpmC%r_vYw&_wwM%*4dfI zaNl6~=~LhOQ_BZL3}t`3-D$Vr#YLHKuEGCR%k@9%!vE_;u76ibf2&pgJHp_k$qPh> z@#aw+7YlrX6-FclE}hzU#jYbsAwD~krytPXo4}xZ-r8~j?h`~hLu?T2XMcv15zI37 zEOVjL`p@(yRu@)Z6Gb}$@krokf|IJ>PW6^_n<7k^ru=LY@11d5^+oijMwqn3u6B7n zvFS;2N3s?c@}~@<i{@=daPor<;nO2!l>eKnq>qed8>Mx7Jw2&+V_ zEYljwCTaDi0Syp>{%5LwJ)KhPVgfsuUovH1eDTnBg`YN$MXF>{D_Iwz=s{?%;J`Jn z|6cSGsf0Fw zjC6;n7wnsiUXxW{k*EGd-ts-sZEN4pJX+ql@uyE6Xwh?2DOC%Xit@XlQYRH!?^=y6rvEZXuZmC#xG5jtzAHmVdd zlC-wmG~Dl7G3ukde?q8l#tJ*3gtU0f*iMU+X-(SUO|5hJSw0H4nt+@~)P^x#+X6%d z1(VHlhR!~U*sWD}6bXBtxTT-XZrjxOSzYw}zE&~Lrb_9h_0S;2v^@ERqvK(KK`_rl zRN{ah)Q=9rcj24V-o86gcY9~~y>tm5a(Kx2C@N^I9A~OGNCF1BiD2~;;Z~PK?*%Go z2XH~@1du44Q_iw#5>#;#f72Xcx4t?}(($?UCwz=exE^5bMG#_BhLpQodUKjqFa?6~ zOq_3Ao|I00X=E(b(J-E{qc&Dd3CuG&ddCR7716y@VV4&)&SsXnfeUoL2^NpFoXzzs z-jln_IfSC7CZR{CfK`s$j!Y)$;3E;{wX`J#pmN~k)0|+?B5IMiDY{itH)T>uzXr@n zh4M%lKeZE&{ey1=v-^vk|0O;SD0hGa?6ZLeItK=?u)Uj>5Zq&2d&4T<)_A9UwCjyo zO`@y6{^OU+w!{@qn4+n2B_)7I+R#a{r0L3s*{=z$1(4{~w`iFHiI^5X z2C>JTrwCK&IH0dsl)_rfG&#a}NJm*3M$Wq~EW(4%@M8x_kr!T6`Qq{3aS@bnxH`#& z-ABe!;%t|j3+7mreV)WyBb{*qo$c83NUr=u!te?PeHX(sl(ChKE8N!?ki6}EtyX-+ zTDioMoG+q8w>)IN#<#38UAx+#eY!1sG?3b^n3u(#Gr#a3zH;5=9-Sd8H=k{m^rMbipkC!v)bTRsMNs)#pV_yNQr?%G7kywF=--eAA&+UxVd zk-I+zL`nY;yjB+J^pN`W0@!^+k6`gZfq@Tmni;p)gJEUEhKOx8+B_ z#P{!UA!c&vA)gg^p*$9OUP4OF+|Ti@YB`N{%H1CQ&V=kBJQM~iO~&>+xJ6`MBWf)S z!gfe0XXnjCDe$|QURWXRS0O73iCCfOw#`^}9cQg_7y+@UFno81A)&qDU=0?~^0(HJ z1KazJ#-GI65h#i+NC~C+l{;thvQdAw{koTVv?dwYG@Oovm{wON?PpYT-zaCM0_ ziJZmQgrul7D#d}{xYNvT$KLOUFYVf|7)|9egLv4?)&VxW+TscBE>g{K(EUn@+c3$uAL5wWy?|6b*yIjbqnEBLw}7 zI7NIakuzcgX%Wvao%(j?v}16PNTb2*#yeL5_FwaR!RQN#id|-7K8m6F&S%xg&xDHg z^3-&easPWBBb3OKImCxq#S|O1NxSRw{X!es3UbDk(ncH6dva53oUiU$O%(N3wPtpE zK?RiGYfF)AJ|BfS0rhF@6=v)W%%{f`w;sRI!sXkRbEsWY3;gYLO5LVSP3GvY%@w0i z!|Kp14BOz?V^LT0N((<-Xh^9TMm!#dhn!nCE22ev7b)n|K^#549iAi~7*W<@@I!$q8}GEa>_n=b zJdHPcVcj?S=TEyuV>WirFlw@clm@SlSS|w%-5-Z`YfMK025y1Kp{54C`b4_G4S8oQ zJw{QGFlukl9AOQ1q1J^indu2%_vR=lyp~lilM}`awf)s}kwVXdXsFTBj8IJ%zpu3p zeJ9}!468Q#;O|sF!#IA|l(9^Mm?%+A2NuD{Q*vM;hZDP1S~x(5x4-lZy5Fa!oNi4s zk?>IBKHXpS+#};VKt|mRhKZ*s>MFP|0semVp>N%>#o>OR3X;03mkbz{Jua|}z#+)D zW@peK3QCeXd3v^JHS(nm6|88^*B-#Hu7Tb{t7o~LyjKj4e2HNq6er3rBFiS!{RSEw zFTZF`n>ygFEL8F6r|fTj4tX)`4_CcC94~RV+hcbAJponKevj3O_XLZ=yCvm)adgvs zokr(yn;UAd_t3|(1xAe=KA!ok&<)b}8$c+^h>8KBXYg2|(9+Ve*xb{v*n?Hks|f)s z`edo9Z2eE`=LD7V4^Ez-uNzu6sX@hJnEVzQjIll)G3UzZr=M z!~}?4K%DH3vdGhNuC>Zpn9AYBcz?WxPnGH3?!d=E3465EAS@EVcww^wEAunJ*^YIX z7998xV?nEGL6eml8wI1U8(oDxQ?pht-pX7;^(vKX?jTL~(5B)z(Y5WwHR^0YY5W0D zA;l2PbUqIA+N1WrlX#U#qKe zoh3tz*aUZ*|dpx{$-RZ5u9w?NoUIGG(%Y z?tCx33P{9h@6h@uZrUz+Ddh}FRKF`HVOinZ+pC=V!_p}lphrC3AuFr z{#YO>)ELu4U+e0u(?|>|5KiWMx$)mTmYwV9;5`0J;6DDIUt@QZ<=7^pH%RbanxhPS z3jm$XAV^Hlwz^(SmOv|HFF(55g=;065qy)-#(7*}A`(vocwWQ*c$oRA<87ah8AAwtEhzYd;iu`{+MSA}4dXwEEA(KOpf znuSt8-D1DfVg_k<8vk*@)JYZ`3`6X9p6dPFp1qc!zzrwh>D-e9h#Z8~*CJ&Z1&Lvp zxb=@|ldAi}`zRmTS2jUj&!g((HI7$!a?e+8TTxn3>?|LGD(P*{F-iFfSBCz=!bnZ9x>=Yw7sF$6mNMgo<$);B-`vu$_II2TEeA&cPa);QM$ zZv1nKPj(NcY-6_uY*==Q>>SB~`=JJQ_>&4a!c?QTle5IeUSOLPZC|lmEfLF36+2V` zchvKXw-ol#1JxVkN@~hv5C&y=&i-zvv4MIEHfD!&J1J?IWTYg^S@&PmD=xbg+(-2Z z)gB{Q{FkQ*?$>wfr`zglM!@^P-EB`2=f20jgwd>rQTM6&mYZI;6={&r>-{|;`>QTl z4t&C+STi&e`a0ce`sfvX!9u$0uXt{Aezte*ymP2n|wG>sGx=vdsjbf z{k5tK*Nk54=TaI&A7vz%(fRijyy&X0xZY>M&Sy^oB9Gq|#x=oeqg{%r;n;e&2{h+NrL*Q&6RIcBJ76_*s(kv#B zmx#ZM%#Y91b^igFjOK#$VE-n|@ID?IIb*Jur z*I!hlUzLS(vHhm~;y84`ap>|x$$-`kh5|QA1lCiOt?o@f6NJj>xII`xRg3K6PO|ld zD%(AyCVsEgs!Ghrk_~cBy5DG39F6yc$(nW$-sc|qY|Y*3Jh`1UxDo20pW||auW96k!4}f^xGJQ5-r4%#59~52CI?RE zQ4#SZfxr3+=!%1E-=iXrqMtl@&z>}nH?yGP?sQd5@14EADilN|Joe+?&ekil?_eiV z+;?5PC-~wCj*#w>Tx#Ij1CslQSmoTTnUCqXDu&L5T4Ksn7~KMdTOS^U@6W_5CQ3>= zH`=Ox?F$bUrEGkUKI86?Bm)9fYmIlM1M3X}9(DPKiIrgLIG+sm(tPhGtkgj}BOIL+ z+8y&(5$~q;21baxa;Kv@udWWp;9jnFXPF`=#S==c6x;NpK1c;R^D7(U=65#XX`r+A zJe6|rM^Q`pWXGPe8v>0NK`IPUI8!47UDDEe=%`ty>PIE|^W2I>b`t08wNn0;3SAU% zbiKrMxCqzJ=#vjk+t{w^UR-y6M^>!94Q{O7iZdB2--}LK^>zDHbYqO`WVy~UR(uZ` z>}A|+mzSnmkC|q_DO_~>+!$=M-wpU6w|PFd;mlSK?G|4*<~|oL<5(>lHruMVMiA>A zO&w&pG2W4yg>hOM>c$=HD7VI2rd;-wf7QSS|DZXP-S>Q=)%DYbTk^yv_Vyq^ewQCU zVH=@P1SUeBPaD@J8gJ4Jb0E&Q;Goi{Cl9N?o0jOZW<}KvdR3y*sGH((i25-x2oTs! z$og1!RE>QuoUhE8yqey)H;aG3?YnG5xp~@m))q4^2#Z}Wr?2v_8~*kq@jY%%Owq;M zoy;_2-t$n@u3cywD=|EgH+z=PjuL^}=Fp3RS?u7&&kN>4)qD5zg;v>$$>4;Is6w(1 zY2QyCI32M@;&^y3xOp;NTYT2U2Uf$x83W7+Uo$xoP}5=93gsmub{OoJXo?^KUsG~O zxQL6g9K$0U^UcPesvVBthUBPhJI_9V3QT}WN6(K>ZY_35wVXCTNa2Y;Xqrl9KV1)& zZjVHTSG^cY8vLLl-)>o&Y;)81K7EESj^98ylWyKTADQ&c_KE7y%kq8%#$J3N<>Vyl z6MCE|E|&B?|HdDJj4Q9b4v7iD?YSS%69*K4q5RP>@Wk%Sw8InxPf0~cUOO!*_A@m_ zq-KX|^)_v&MC~t7&gN^l4>$V}Q+Y;1_NdQp%Qmd~Z!0^m)rS1=2~ZGVxlb=K6mhB= zT+&@}xJ)Crir)&forIcY`@(fS-gcbna2|B74WOc+l~kilbx&DZs*lRT6i8drX1V_+ zjlAEa^S;}jr>3JzA*;lj*Yn}g^W1hR*J&77Fg?l7wF4Llp=yr{H5##DhkH%zjRWBn znHsey;Kczq&i{bE!pJo>op#F^&?t4wDeSF7V68@%#xC6t^>mK|pFN>_q*kG2Ll9)N z$z%*jjDwO!ur?Kdv_KIuuenv@IYQ_Y;3 zS2H8g`IEtCv4|WJu)ypr5yb~e9AQwQeD*hw3+&DB`7u8}kGBT_L72GkJ`bU+gM7VTx{P8^f`YymcUjp*cZ}%DA?^6<|B)pYnMbZF?hH zWyfVJ_=#rr&ecyfT*gw=WOjm}Yo3xk%EP*iT-GTeXQg%k z&!bs7H2|Xe89oPyf4`oWYw2Qiv!UN&D$sVp86=;*m_uFcv`J1b7$hfTXu5JQ;25y+ zhWYs-zN&Cn{@YTVlEahF_Yf~lmncT1lVX6=uGbIP-o>S(Opy{C2C#)=a`z-!oU1wp zm7M_tz*thL9j)njYUoI1JJCtUOa*_?0uX1+3Me>Q>5}5sDXUyQq>AI57>G`Ixq0XaNTjk&pBnyx#AfsTqoI1PHjVf z3;i5zbQNeHBu~m&aphMQfGg?JB|ECkB#ucWlbDE+YOH+nH_7K#Dd0i(2}4nKR~WrDGye$5?C zblS+ab9|wOBUmJMTXo{nYP9_J%T)d>?)Bustkvn5b`?p5CLMw20-8pR5e;BKz#w0* zY?bKDKp%Lhw+Ytw%QX6}>v+s#mSYxUJFxjRK3}EQ#X1Skx zRVU{m zve2-5uGa?AO?!u?{Eld|Au?;-X&}0?L4sM1i-E7{R^AI&sG2lTWwXV8f!-1Agi2E` z6?2GlToptXfX5Xte3{dci_`O_i>So<3BL}1cX^T+spV)+M!jgZbfK#xp%bjoLaTef zgx~vcqry@+=`qaC!F6zrI*lpYs$1@-NTAzkM(|#QNV3U|z0|&?qK)&wYH~343Nge(stKtsOFQbHmF>4o;eY zrHPTmb3{V}`9b6BC!Kibd2{0AK@~;Jtx$d(;iHg3y+*cn7r_BBP)fNVJNn}a9|#dy zIN^S>GD(>9a`SvKXw|9zpzE5(CUGpJ9gsLk4mOT^2NFMDJpXBycdcjqo*PfN6@`5N z)tY}uk%I~d&@%H4!RtXg!JosPz8@|KDkj=!GgZw^7vgDhui`3%#D&OEyr!A7HNTbh zY$A+N5m9P8SZ?4RQbbS$#Kw-=bjsj?skM3;Fc<<%v^)~)tCDhoxm?n96(a0BatAHB z*c~CS9^LA9zGi8&^9sSFi6afdw1_>|N^!zl4w{=x>?*TGnx?IvV_)X%HwZ(YTtxu% zPi~(qVoyqeDb|@GU6F}l#aSGWl~1bvU_twF z)sf_%(8L=qa{lf;sm~rfVgnb3=T?@1buq^fAK9 z|MvLL2d0D$aDM-ZmCzgjjev;*UEvQ&-lzM%nF#*_0QCy_fW#6R)+<+RF-uopdoH! zUa~v^>^WgxJL8s3#lt4W!RxOHPIz zbH1CkM*JM4_)M9r&^}tyBy%Q*QY0_fEwu^nB5OU>!*NuLO0OJU+B;|_ek+q`aZ$T@ zg--iL#CMtXP>}4>RW=lbVFArrmQ0L|%U6=^4Tw}7O?X{Z^ug1*d^eOIf$pa8!f$j7 zY`e8Iy*D5tR8VF+l!t{fY9I@W7W1SbS8SXxjK)eyArneh)6c1kPWCfLv=Os*Y zE{y)JOwak}uP0oPs)lWVPbv(n(_UW;46Tz2F8(ZZJ)&0rt0X|)sH?pc?+oQFiX}z_ z+e3YK>L^G%^#*=oQ-VZ7#6gj>x#F8^Qn%{|XqM)O%e-vy9>gGfKWouC*) zOfefL9=7}@QqO^C>yai=4RAlK*^VVrvfvu`m!H`VwnbfEFAs755O9>NuLY!pZs|}< z9I(h=Sw*l0IP9WUMbNvX#h7jxpC!xW11Sk0ykdrUYi_?6xs@p!`q+{1dOaZg0!bKE zxo&P-J@*Blu7DMm7NosawttjkRj`{OmF2KI@^#()R8xh_2V`HpCIId8W}Igo?AzYqzNvIkdn-RK5?;ns%_}q`b$eh;wjJAmJH#Jk6PJDuczJK}n<` z+UDbv7XxlmVNJMx=>48Om4Q5zmL9yATdd)gPMj9S48ytBCmO|qUcT}Vx~qm!33RHg zdRbn&*7s?Uj(Mfdi~V1K(&5XSLz2w)yw{R0a;M;>Z|(XN?(FOb?zpWrKB_?5TOii6 z{Iy&fQaNU$Cs)~P5jn}0nL*Y&SB-5J4uf{Kn3@l8)&wtv{dhPaZ^l4M!8#b6@6L_brK5S)Fxu zQ46O3f+Cv}+QJMPp#yYay$yDqS##!Oi@$pZZg(K>yz@kwE7$tQ)O8DOQ8M(? zyatt4CW3i00qu4plz6?wF;6$tm9>Mg9~RdAxMjE6{+Yl2mvufs9wJSIzgL{2V7Wm0=>^i%V?T28Yv{n?UU?pum$0x1|DxgGX?!;RO6) z#}oyhnHf8`L=scpZ|28@Y=oY4iKZtr#4gphY}ve`weuOLRrA75r2qhJ)-k^DdrdNf zjhv8tcCdNZ^%;8;N5zC(NO5?r@kU;k!(!6B@#xZ(2GtSh^H^{lJ!-y$UofRIX<;D+ z&yt^1bOHbxYJrj&c*U{}L_MIf)Oe23c=#&M zs_~TlVYH0Tt3Cs2KWmku&o61w^66a0r^e$s)J)h8c&*AESR?Jj;WCl?DfF7rKr9FV z`ZdqJ!`qXX(O|`1zqT;9=>MKI_j+Dt{;>l!1W+>}dB5~AHE)*U+mGgq*sqDk7+(MO z_&GW{*xT~9+USn9{c?EZ*8R54egBRMjhHy%cLqU*=fE8`Q&l$z!Pqe7TLR(~{-shf zb?OJb-Z?}5FL;{%&2JvK7Y*apWLcT=*!a81Dn!@hwi>R;obZM6hzK$7tt zEUc7*Om9&(QvWEIZs4xIyZnw;6u|Bp-p>d{7HK}Dwytof<;>#jJGKB6;y}D#GAR|8 zVu;wrxX`o6eC5ON)hqg85;D;~R6wZIQ6s;%#@CoONM4~q*>~vu32@iN>tFg2PC$$^B%m_|Zg2+(~Nsag%)oOm8I z+yt#{;fm#gKw_p}dj3xU{sIC09k<_XEZh8k>==Cf$!B=&wIN1mYEWwhS|t^ya!CbR z<*G6&O{dd|%1Wnky{xPZZQ6Ij17wl>kZJFdm;+|J)8d1 zZXJ(Qy1iO?8fv{<<9MVQ-b3t}Jszno2IGJJ5f@%`6=u!&4V4v@Xy3ja?6L7ui56k~ zh7E8y9EgvLGgc@iHA&HO5{nl91Bcy?cJ1205gUuGo3|h_Apvno$;jHY5wTLy>Yqs~ z%qD3~khL`n2|7M57OPgT!9MNU8soRfa9xz3a&mH!mX;>-i;$nejbQEGy(=sZ zc`syMrg8HpB10nx($9dBnLv|M^q zhQ<-3#k#NjtrCQF?JFCvdA^-V8#&6rc_J0O$Uwa8tK<4Wy{x{SbD+Vc%q4BJ2 z(g56H`%rC_5@@<-kaX|s8XxFWi|AfVuENG2qC~V!;|WqCqI$w0B_cAZ@dT-^ecxgG zP=AY-=BPEy*Z5mPL?$(k6xnt>(puYzmiaCVfAy}NH;zYIW4v)Z(p;GV!<2~jUgOw~ zH0Nu;mV`!eJko}QYwd{)4L?Y8f0iKJ)$vHBQqB7gNIA~89cdk5tJ|2yc9Qu7;CQ5w zgh5JVX!t?;U$%Y@6#oHa-Uh_9m7J`r;*__*7|sygBMed^Lj)`w)Ns_G48ie8i6|m* zEejEmNeogVB9kH~NO!rNDcfE(J?M+EB?M7qi-46)qkxj>K>9%W;_JDOxDR~b=vEO~ zK=v0v>$|wJi6U0x57MmB-p!w^JK4^Z%rTCvC0gFXAf*Te{2xl|7Qt~Xx~BjD002ov JPDHLkV1f;eHJktd literal 0 HcmV?d00001 diff --git a/zh-cn/application-dev/ability/figures/fa-pageAbility-lifecycle.png b/zh-cn/application-dev/ability/figures/fa-pageAbility-lifecycle.png new file mode 100755 index 0000000000000000000000000000000000000000..269d06b73dde7c952b56cd76f1842a856dde3c01 GIT binary patch literal 25157 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 literal 0 HcmV?d00001 diff --git a/zh-cn/application-dev/ability/figures/fa-threading-model.png b/zh-cn/application-dev/ability/figures/fa-threading-model.png new file mode 100755 index 0000000000000000000000000000000000000000..db1102837790330e536bd43062852bf04d505ee1 GIT binary patch literal 50739 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 literal 0 HcmV?d00001 diff --git a/zh-cn/application-dev/quick-start/basic-resource-file-categories.md b/zh-cn/application-dev/quick-start/basic-resource-file-categories.md deleted file mode 100644 index 97cdaa0ab3..0000000000 --- a/zh-cn/application-dev/quick-start/basic-resource-file-categories.md +++ /dev/null @@ -1,79 +0,0 @@ -# 资源文件的分类 - - -## resources目录 - -应用的资源文件(字符串、图片、音频等)统一存放于resources目录下,便于开发者使用和维护。resources目录包括两大类目录,一类为base目录与限定词目录,另一类为rawfile目录,详见resources目录分类。 - - 资源目录示例: - -``` -resources -|---base // 默认存在的目录 -| |---element -| | |---string.json -| |---media -| | |---icon.png -|---en_GB-vertical-car-mdpi // 限定词目录示例,需要开发者自行创建 -| |---element -| | |---string.json -| |---media -| | |---icon.png -|---rawfile // 默认存在的目录 -``` - - **表1** resources目录分类 - -| 分类 | base目录与限定词目录 | rawfile目录 | -| -------- | -------- | -------- | -| 组织形式 | 按照两级目录形式来组织,目录命名必须符合规范,以便根据设备状态去匹配相应目录下的资源文件。
      一级子目录为**base目录**和**限定词目录**。
    - base目录是默认存在的目录。当应用的resources资源目录中没有与设备状态匹配的限定词目录时,会自动引用该目录中的资源文件。
    - 限定词目录需要开发者自行创建。目录名称由一个或多个表征应用场景或设备特征的限定词组合而成,具体要求参见[限定词目录](#限定词目录)。
    二级子目录为**资源目录**,用于存放字符串、颜色、布尔值等基础元素,以及媒体、动画、布局等资源文件,具体要求参见[资源组目录](#资源组目录)。 | 支持创建多层子目录,目录名称可以自定义,文件夹内可以自由放置各类资源文件。
    rawfile目录的文件不会根据设备状态去匹配不同的资源。 | -| 编译方式 | 目录中的资源文件会被编译成二进制文件,并赋予资源文件ID。 | 目录中的资源文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID。 | -| 引用方式 | 通过指定资源类型(type)和资源名称(name)来引用。 | 通过指定文件路径和文件名来引用。 | - - -## 限定词目录 - -限定词目录可以由一个或多个表征应用场景或设备特征的限定词组合而成,包括移动国家码和移动网络码、语言、文字、国家或地区、横竖屏、设备类型、颜色模式和屏幕密度等维度,限定词之间通过下划线(_)或者中划线(-)连接。开发者在创建限定词目录时,需要掌握限定词目录的命名要求,以及限定词目录与设备状态的匹配规则。 - -**限定词目录的命名要求** - -- 限定词的组合顺序:_移动国家码_移动网络码-语言_文字_国家或地区-横竖屏-设备类型-颜色模式-屏幕密度_。开发者可以根据应用的使用场景和设备特征,选择其中的一类或几类限定词组成目录名称。 - -- 限定词的连接方式:语言、文字、国家或地区之间采用下划线(_)连接,移动国家码和移动网络码之间也采用下划线(_)连接,除此之外的其他限定词之间均采用中划线(-)连接。例如:**zh_Hant_CN**、**zh_CN-car-ldpi**。 - -- 限定词的取值范围:每类限定词的取值必须符合限定词取值要求表中的条件,否则,将无法匹配目录中的资源文件。 - **表2** 限定词取值要求 - - | 限定词类型 | 含义与取值说明 | - | -------- | -------- | - | 移动国家码和移动网络码 | 移动国家码(MCC)和移动网络码(MNC)的值取自设备注册的网络。MCC后面可以跟随MNC,使用下划线(_)连接,也可以单独使用。例如:mcc460表示中国,mcc460_mnc00表示中国_中国移动。
    详细取值范围,请查阅**ITU-T E.212**(国际电联相关标准)。 | - | 语言 | 表示设备使用的语言类型,由2~3个小写字母组成。例如:zh表示中文,en表示英语,mai表示迈蒂利语。
    详细取值范围,请查阅**ISO 639**(ISO制定的语言编码标准)。 | - | 文字 | 表示设备使用的文字类型,由1个大写字母(首字母)和3个小写字母组成。例如:Hans表示简体中文,Hant表示繁体中文。
    详细取值范围,请查阅**ISO 15924**(ISO制定的文字编码标准)。 | - | 国家或地区 | 表示用户所在的国家或地区,由2~3个大写字母或者3个数字组成。例如:CN表示中国,GB表示英国。
    详细取值范围,请查阅**ISO 3166-1**(ISO制定的国家和地区编码标准)。 | - | 横竖屏 | 表示设备的屏幕方向,取值如下:
    - vertical:竖屏
    - horizontal:横屏 | - | 设备类型 | 表示设备的类型,取值如下:
    - phone:手机
    - tablet:平板
    - car:车机
    - tv:智慧屏
    - wearable:智能穿戴 | - | 颜色模式 | 表示设备的颜色模式,取值如下:
    - dark:深色模式
    - light:浅色模式 | - | 屏幕密度 | 表示设备的屏幕密度(单位为dpi),取值如下:
    - sdpi:表示小规模的屏幕密度(Small-scale Dots Per Inch),适用于dpi取值为(0, 120]的设备。
    - mdpi:表示中规模的屏幕密度(Medium-scale Dots Per Inch),适用于dpi取值为(120, 160]的设备。
    - ldpi:表示大规模的屏幕密度(Large-scale Dots Per Inch),适用于dpi取值为(160, 240]的设备。
    - xldpi:表示特大规模的屏幕密度(Extra Large-scale Dots Per Inch),适用于dpi取值为(240, 320]的设备。
    - xxldpi:表示超大规模的屏幕密度(Extra Extra Large-scale Dots Per Inch),适用于dpi取值为(320, 480]的设备。
    - xxxldpi:表示超特大规模的屏幕密度(Extra Extra Extra Large-scale Dots Per Inch),适用于dpi取值为(480, 640]的设备。 | - -**限定词目录与设备状态的匹配规则** - -- 在为设备匹配对应的资源文件时,限定词目录匹配的优先级从高到低依次为:移动国家码和移动网络码 > 区域(可选组合:语言、语言_文字、语言_国家或地区、语言_文字_国家或地区)> 横竖屏 > 设备类型 > 颜色模式 > 屏幕密度。 - -- 如果限定词目录中包含**移动国家码和移动网络码、语言、文字、横竖屏、设备类型、颜色模式**限定词,则对应限定词的取值必须与当前的设备状态完全一致,该目录才能够参与设备的资源匹配。例如,限定词目录“zh_CN-car-ldpi”不能参与“en_US”设备的资源匹配。 - - -## 资源组目录 - -base目录与限定词目录下面可以创建资源组目录(包括element、media、animation、layout、graphic、profile),用于存放特定类型的资源文件,详见资源组目录说明。 - - - **表3** **资源组目录说明** - -| 资源组目录 | 目录说明 | 资源文件 | -| -------- | -------- | -------- | -| element | 表示元素资源,以下每一类数据都采用相应的JSON文件来表征。
    - boolean,布尔型
    - color,颜色
    - float,浮点型
    - intarray,整型数组
    - integer,整型
    - pattern,样式
    - plural,复数形式
    - strarray,字符串数组
    - string,字符串 | element目录中的文件名称建议与下面的文件名保持一致。每个文件中只能包含同一类型的数据。
    - boolean.json
    - color.json
    - float.json
    - intarray.json
    - integer.json
    - pattern.json
    - plural.json
    - strarray.json
    - string.json | -| media | 表示媒体资源,包括图片、音频、视频等非文本格式的文件。 | 文件名可自定义,例如:icon.png。 | -| animation | 表示动画资源,采用XML文件格式。 | 文件名可自定义,例如:zoom_in.xml。 | -| layout | 表示布局资源,采用XML文件格式。 | 文件名可自定义,例如:home_layout.xml。 | -| graphic | 表示可绘制资源,采用XML文件格式。 | 文件名可自定义,例如:notifications_dark.xml。 | -| profile | 表示其他类型文件,以原始文件形式保存。 | 文件名可自定义。 | diff --git a/zh-cn/application-dev/reference/apis/Readme-CN.md b/zh-cn/application-dev/reference/apis/Readme-CN.md index 698d8fdaeb..ff67949950 100644 --- a/zh-cn/application-dev/reference/apis/Readme-CN.md +++ b/zh-cn/application-dev/reference/apis/Readme-CN.md @@ -25,8 +25,7 @@ - [访问控制](js-apis-abilityAccessCtrl.md) - [通用密钥库系统](js-apis-huks.md) - 数据管理 - - [轻量级存储9+](js-apis-data-preferences.md) - - [轻量级存储](js-apis-data-storage.md) + - [轻量级存储](js-apis-data-preferences.md) - [分布式数据管理](js-apis-distributed-data.md) - [关系型数据库](js-apis-data-rdb.md) - [结果集](js-apis-data-resultset.md) @@ -77,15 +76,17 @@ - [USB管理](js-apis-usb.md) - [位置服务](js-apis-geolocation.md) - 基本功能 + - [应用上下文](js-apis-basic-features-app-context.md) + - [日志打印](js-apis-basic-features-logs.md) - [页面路由](js-apis-basic-features-routes.md) - [弹窗](js-apis-basic-features-pop-up.md) + - [应用配置](js-apis-basic-features-configuration.md) - [定时器](js-apis-basic-features-timer.md) - [锁屏管理](js-apis-screen-lock.md) - [设置系统时间](js-apis-system-time.md) - [壁纸](js-apis-wallpaper.md) - [剪贴板](js-apis-pasteboard.md) - [动画](js-apis-basic-features-animator.md) - - [媒体查询](js-apis-mediaquery.md) - [WebGL](js-apis-webgl.md) - [WebGL2](js-apis-webgl2.md) - [屏幕截图](js-apis-screenshot.md) diff --git a/zh-cn/application-dev/reference/apis/js-apis-ability-context.md b/zh-cn/application-dev/reference/apis/js-apis-ability-context.md index bf66918245..e1ab57aed3 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-ability-context.md +++ b/zh-cn/application-dev/reference/apis/js-apis-ability-context.md @@ -10,10 +10,10 @@ Ability的上下文环境,继承自Context。 ## 使用说明 -在使用AbilityContext的功能前,需要通过Ability子类实例获取。 - +​在使用AbilityContext的功能前,需要通过Ability子类实例获取。 + ```js import Ability from '@ohos.application.Ability' class MainAbility extends Ability { @@ -42,10 +42,10 @@ startAbility(want: Want, callback: AsyncCallback<void>): void **参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| want | [Want](js-apis-featureAbility.md#want) | 是 | 启动Ability的want信息。 | -| callback | AsyncCallback<void> | 是 | callback形式返回启动结果 | + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](js-apis-featureAbility.md#Want类型说明) | 是 | 启动Ability的want信息。 | + | callback | AsyncCallback<void> | 是 | callback形式返回启动结果 | **示例:** @@ -71,11 +71,11 @@ startAbility(want: Want, options: StartOptions, callback: AsyncCallback<void& **参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| want | [Want](js-apis-featureAbility.md#want) | 是 | 启动Ability的want信息。 | -| options | StartOptions | 是 | 启动Ability所携带的参数。 | -| callback | AsyncCallback<void> | 是 | callback形式返回启动结果。 | + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](js-apis-featureAbility.md#Want类型说明) | 是 | 启动Ability的want信息。 | + | options | StartOptions | 是 | 启动Ability所携带的参数。 | + | callback | AsyncCallback<void> | 是 | callback形式返回启动结果。 | **示例:** @@ -96,7 +96,7 @@ startAbility(want: Want, options: StartOptions, callback: AsyncCallback<void& ## AbilityContext.startAbility -startAbility(want: Want, options: StartOptions): Promise<void> +startAbility(want: Want, options: StartOptions): Promise<void>; 启动Ability。通过Promise返回结果。 @@ -104,10 +104,10 @@ startAbility(want: Want, options: StartOptions): Promise<void> **参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| want | [Want](js-apis-featureAbility.md#want) | 是 | 启动Ability的want信息。 | -| options | StartOptions | 是 | 启动Ability所携带的参数。 | + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](js-apis-featureAbility.md#Want类型说明) | 是 | 启动Ability的want信息。 | + | options | StartOptions | 是 | 启动Ability所携带的参数。 | **返回值:** @@ -145,10 +145,10 @@ startAbilityForResult(want: Want, callback: AsyncCallback<AbilityResult>): **参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| want |[Want](js-apis-featureAbility.md#want) | 是 | 启动Ability的want信息。 | -| callback | AsyncCallback<[AbilityResult](js-apis-featureAbility.md#abilityresult)> | 是 | 执行结果回调函数。 | + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want |[Want](js-apis-featureAbility.md#Want类型说明) | 是 | 启动Ability的want信息。 | + | callback | AsyncCallback<[AbilityResult](js-apis-featureAbility.md#abilityresult)> | 是 | 执行结果回调函数。 | **示例:** @@ -173,11 +173,11 @@ startAbilityForResult(want: Want, options: StartOptions, callback: AsyncCallback **参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| want |[Want](js-apis-featureAbility.md#want) | 是 | 启动Ability的want信息。 | -| options | StartOptions | 是 | 启动Ability所携带的参数。 | -| callback | AsyncCallback<[AbilityResult](js-apis-featureAbility.md#abilityresult)> | 是 | 执行结果回调函数。 | + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want |[Want](js-apis-featureAbility.md#Want类型说明) | 是 | 启动Ability的want信息。 | + | options | StartOptions | 是 | 启动Ability所携带的参数。 | + | callback | AsyncCallback<[AbilityResult](js-apis-featureAbility.md#abilityresult)> | 是 | 执行结果回调函数。 | **示例:** @@ -206,10 +206,10 @@ startAbilityForResult(want: Want, options: StartOptions): Promise<AbilityResu **参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| want | [Want](js-apis-featureAbility.md#want) | 是 | 启动Ability的want信息。 | -| options | StartOptions | 是 | 启动Ability所携带的参数。 | + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](js-apis-featureAbility.md#Want类型说明) | 是 | 启动Ability的want信息。 | + | options | StartOptions | 是 | 启动Ability所携带的参数。 | **返回值:** @@ -353,9 +353,9 @@ startAbilityByCall(want: Want): Promise<Caller>; **参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| want | [Want](js-apis-featureAbility.md#want) | 是 | 传入需要启动的ability的信息,包含ability名称、包名、设备ID,设备ID缺省或为空表示启动本地ability。 | + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | want | [Want](js-apis-featureAbility.md#Want类型说明) | 是 | 传入需要启动的ability的信息,包含ability名称、包名、设备ID,设备ID缺省或为空表示启动本地ability。 | **返回值:** diff --git a/zh-cn/application-dev/reference/apis/js-apis-basic-features-app-context.md b/zh-cn/application-dev/reference/apis/js-apis-basic-features-app-context.md new file mode 100644 index 0000000000..be16b12372 --- /dev/null +++ b/zh-cn/application-dev/reference/apis/js-apis-basic-features-app-context.md @@ -0,0 +1,79 @@ +# 应用上下文 + + +## 导入模块 + +``` +import app from '@system.app'; +``` + +## 权限列表 + +无 + + +## app.getInfo + +getInfo(): <AppResponse> + +获取当前应用配置文件中声明的信息。 + +- 返回值 + **表1** AppResponse + + | | | | + | -------- | -------- | -------- | + | 参数名 | 类型 | 说明 | + | appID6+ | string | 表示应用的包名,用于标识应用的唯一性。 | + | appName | string | 表示应用的名称。 | + | versionName | string | 表示应用的版本名称。 | + | versionCode | number | 表示应用的版本号。 | + +- 示例 + ``` + export default { + getInfo(){ + var info = app.getInfo(); + console.log(JSON.stringify(info)); + } + } + ``` + + +## app.terminate + +terminate(): void + +退出当前Ability + +> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** +> 从API Version 7 开始,推荐使用新接口['@ohos.ability.featureAbility'](js-apis-featureAbility.md)。 + +- 示例 + ``` + export default { + terminate(){ + app.terminate(); + }} + ``` + +## app.requestFullWindow + +requestFullWindow(duration: number): void + +请求应用以全窗口运行,FA在某些场景下(如半模态FA)会以非全窗口运行,调用该接口会从非全窗口切换为全窗口运行,如果已经以全窗口运行则该接口调用无效。 + +- 参数 + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | -------- | -------- | + | duration | number | 否 | 请求全屏时,设定非全屏到全屏的过渡时间,单位为毫秒,默认时间与非全屏到全屏的距离成正比。 | + +- 示例 + ``` + export default { + requestFullWindow(){ + app.requestFullWindow({ + duration: 200}); + } + } + ``` diff --git a/zh-cn/application-dev/reference/apis/js-apis-basic-features-configuration.md b/zh-cn/application-dev/reference/apis/js-apis-basic-features-configuration.md new file mode 100644 index 0000000000..d9602902ca --- /dev/null +++ b/zh-cn/application-dev/reference/apis/js-apis-basic-features-configuration.md @@ -0,0 +1,44 @@ +# 应用配置 + + +> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** +> - 从API Version 7 开始,该接口不再维护,推荐使用新接口['@ohos.i18n'](js-apis-i18n.md)和['@ohos.intl'](js-apis-intl.md)。 +> + + +## 导入模块 + +``` +import configuration from '@system.configuration'; +``` + +## 权限列表 + +无 + + +## configuration.getLocale + +getLocale(): <LocaleResponse> + +获取应用当前的语言和地区。默认与系统的语言和地区同步。 + +- 返回值 + **表1** LocaleResponse + + | 参数名 | 类型 | 说明 | + | -------- | -------- | -------- | + | language | string | 语言。例如:zh。 | + | countryOrRegion | string | 国家或地区。例如:CN。 | + | dir | string | 文字布局方向。取值范围:
    - ltr:从左到右;
    - rtl:从右到左。 | + | $unicodeSetting^{5+}$ | string | 语言环境定义的Unicode语言环境键集,如果此语言环境没有特定键集,则返回空集。
    例如:{"nu":"arab"},表示当前环境下的数字采用阿拉伯语的数字。 | + +- 示例 + ``` + export default { + getLocale() { + const localeInfo = configuration.getLocale(); + console.info(localeInfo.language); + } + } + ``` diff --git a/zh-cn/application-dev/reference/apis/js-apis-basic-features-logs.md b/zh-cn/application-dev/reference/apis/js-apis-basic-features-logs.md index 00ecf31842..0c6afae60d 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-basic-features-logs.md +++ b/zh-cn/application-dev/reference/apis/js-apis-basic-features-logs.md @@ -5,6 +5,10 @@ 无需导入。 +## 权限列表 + +无 + ## console.debug diff --git a/zh-cn/application-dev/reference/apis/js-apis-fileio.md b/zh-cn/application-dev/reference/apis/js-apis-fileio.md index b01a673db1..1e6def6533 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-fileio.md +++ b/zh-cn/application-dev/reference/apis/js-apis-fileio.md @@ -1432,7 +1432,7 @@ lstat(path:string, callback:AsyncCallback<Stat>): void ```js fileio.lstat(path, function (err, stat) { // do something - )); + }); ``` @@ -1827,7 +1827,7 @@ chown(path: string, uid: number, gid: number): Promise<void> - 示例: ```js let stat = fileio.statSync(path); - fileio.chown(path, stat.uid, stat.gid)).then(function(){ + fileio.chown(path, stat.uid, stat.gid).then(function(){ console.info("chown successfully"); }).catch(function(err){ console.info("chown failed with error:"+ err); @@ -2127,7 +2127,7 @@ fdopenStream(fd: number, mode: string): Promise<Stream> - 示例: ```js fileio.fdopenStream(fd, mode).then(function(stream){ - console.info("openStream successfully"+); + console.info("openStream successfully"); }).catch(function(err){ console.info("openStream failed with error:"+ err); }); diff --git a/zh-cn/application-dev/reference/apis/js-apis-formprovider.md b/zh-cn/application-dev/reference/apis/js-apis-formprovider.md new file mode 100644 index 0000000000..b6f721e33b --- /dev/null +++ b/zh-cn/application-dev/reference/apis/js-apis-formprovider.md @@ -0,0 +1,128 @@ +# FormProvider + +> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** +> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 + +卡片提供方相关接口。 + +## 导入模块 + +``` +import formProvider from '@ohos.application.formProvider'; +``` + +## 权限 + +无 + +## setFormNextRefreshTime + +setFormNextRefreshTime(formId: string, minute: number, callback: AsyncCallback): void; + +设置指定卡片的下一次更新时间。 + +**系统能力:** + +SystemCapability.Ability.Form + +**参数:** + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------------------------- | + | formId | string | 是 | 卡片标识 | + | minute | number | 是 | 指定多久之后更新,单位分钟,大于等于5 | + +**示例:** + + ```js + var formId = "12400633174999288"; + formProvider.setFormNextRefreshTime(formId, 5, (error, data) => { + if (error) { + console.log('formProvider setFormNextRefreshTime, error:' + error.code); + } + }); + ``` + +## setFormNextRefreshTime + +setFormNextRefreshTime(formId: string, minute: number): Promise; + +设置指定卡片的下一次更新时间,以promise方式返回。 + +**系统能力:** + +SystemCapability.Ability.Form + +**参数:** + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------------------------- | + | formId | string | 是 | 卡片标识 | + | minute | number | 是 | 指定多久之后更新,单位分钟,大于等于5 | + +**示例:** + + ```js + var formId = "12400633174999288"; + formProvider.setFormNextRefreshTime(formId, 5).catch((error) => { + console.log('formProvider setFormNextRefreshTime, error:' + JSON.stringify(error)); + }); + ``` + +## updateForm + +updateForm(formId: string, formBindingData: formBindingData.FormBindingData, callback: AsyncCallback): void; + +更新指定的卡片。 + +**系统能力:** + +SystemCapability.Ability.Form + +**参数:** + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ---------------------------------------------------------------------- | ---- | ---------------- | + | formId | string | 是 | 请求更新的卡片标识 | + | formBindingData | [FormBindingData](js-apis-formbindingdata.md#formbindingdata) | 是 | 用于更新的数据 | + +**示例:** + + ```js + import formBindingData from '@ohos.application.formBindingData'; + var formId = "12400633174999288"; + let obj = formBindingData.createFormBindingData({temperature:"22c", time:"22:00"}); + formProvider.updateForm(formId, obj, (error, data) => { + if (error) { + console.log('formProvider updateForm, error:' + error.code); + } + }); + ``` + +## updateForm + +updateForm(formId: string, formBindingData: formBindingData.FormBindingData): Promise; + +更新指定的卡片,以promise方式返回。 + +**系统能力:** + +SystemCapability.Ability.Form + +**参数:** + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ---------------------------------------------------------------------- | ---- | ---------------- | + | formId | string | 是 | 请求更新的卡片标识 | + | formBindingData | [FormBindingData](js-apis-formbindingdata.md#formbindingdata) | 是 | 用于更新的数据 | + +**示例:** + + ```js + import formBindingData from '@ohos.application.formBindingData'; + var formId = "12400633174999288"; + let obj = formBindingData.createFormBindingData({temperature:"22c", time:"22:00"}); + formProvider.updateForm(formId, obj).catch((error) => { + console.log('formProvider updateForm, error:' + JSON.stringify(error)); + }); + ``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-geolocation.md b/zh-cn/application-dev/reference/apis/js-apis-geolocation.md index bbb22b733f..6dd2b097b5 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-geolocation.md +++ b/zh-cn/application-dev/reference/apis/js-apis-geolocation.md @@ -1,4 +1,4 @@ -# 位置服务 +# 位置服务(新) > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** @@ -7,7 +7,7 @@ ## 导入模块 - + ``` import geolocation from '@ohos.geolocation'; ``` @@ -34,7 +34,7 @@ on(type: 'locationChange', request: LocationRequest, callback: Callback<Locat | callback | Callback<[Location](#location)> | 是 | 接收位置变化状态变化监听。 | - 示例: - + ``` var requestInfo = {'priority': 0x203, 'scenario': 0x300, 'timeInterval': 0, 'distanceInterval': 0, 'maxAccuracy': 0}; var locationChange = (location) => { @@ -57,7 +57,7 @@ off(type: 'locationChange', callback?: Callback<Location>) : void | callback | Callback<[Location](#location)> | 否 | 接收位置变化状态变化监听。 | - 示例: - + ``` var requestInfo = {'priority': 0x203, 'scenario': 0x300, 'timeInterval': 0, 'distanceInterval': 0, 'maxAccuracy': 0}; var locationChange = (location) => { @@ -81,7 +81,7 @@ on(type: 'locationServiceState', callback: Callback<boolean>) : void | callback | Callback<boolean> | 是 | 接收位置服务状态变化监听。 | - 示例: - + ``` var locationServiceState = (state) => { console.log('locationServiceState: ' + state); @@ -103,7 +103,7 @@ off(type: 'locationServiceState', callback?: Callback<boolean>) : void; | callback | Callback<boolean> | 否 | 接收位置服务状态变化监听。 | - 示例: - + ``` var locationServiceState = (state) => { console.log('locationServiceState: state: ' + state); @@ -127,7 +127,7 @@ on(type: 'cachedGnssLocationsReporting', request: CachedGnssLocationsRequest, ca | callback | Callback<boolean> | 是 | 接收GNSS缓存位置上报。 | - 示例: - + ``` var cachedLocationsCb = (locations) => { console.log('cachedGnssLocationsReporting: locations: ' + locations); @@ -150,7 +150,7 @@ off(type: 'cachedGnssLocationsReporting', callback?: Callback<Array<Locati | callback | Callback<boolean> | 否 | 接收GNSS缓存位置上报。 | - 示例: - + ``` var cachedLocationsCb = (locations) => { console.log('cachedGnssLocationsReporting: locations: ' + locations); @@ -174,7 +174,7 @@ on(type: 'gnssStatusChange', callback: Callback<SatelliteStatusInfo>) : vo | callback | Callback<SatelliteStatusInfo> | 是 | 接收GNSS卫星状态信息上报。 | - 示例: - + ``` var gnssStatusCb = (satelliteStatusInfo) => { console.log('gnssStatusChange: ' + satelliteStatusInfo); @@ -196,7 +196,7 @@ off(type: 'gnssStatusChange', callback?: Callback<SatelliteStatusInfo>) : | callback | Callback<SatelliteStatusInfo> | 否 | 接收GNSS卫星状态信息上报。 | - 示例: - + ``` var gnssStatusCb = (satelliteStatusInfo) => { console.log('gnssStatusChange: ' + satelliteStatusInfo); @@ -219,7 +219,7 @@ on(type: 'nmeaMessageChange', callback: Callback<string>) : void; | callback | Callback<string> | 是 | 接收GNSS NMEA信息上报。 | - 示例: - + ``` var nmeaCb = (str) => { console.log('nmeaMessageChange: ' + str); @@ -241,7 +241,7 @@ off(type: 'nmeaMessageChange', callback?: Callback<string>) : void; | callback | Callback<string> | 否 | 接收GNSS NMEA信息上报。 | - 示例: - + ``` var nmeaCb = (str) => { console.log('nmeaMessageChange: ' + str); @@ -265,7 +265,7 @@ on(type: 'fenceStatusChange', request: GeofenceRequest, want: WantAgent) : void; | want | WantAgent | 是 | 用于接收地理围栏事件上报(进出围栏)。 | - 示例: - + ``` import WantAgent from '@ohos.wantAgent'; import { OperationType, WantAgentFlags } from '@ohos.wantagent'; @@ -327,7 +327,7 @@ off(type: 'fenceStatusChange', request: GeofenceRequest, want: WantAgent) : void | want | WantAgent | 是 | 用于接收地理围栏事件上报(进出围栏)。 | - 示例: - + ``` import WantAgent from '@ohos.wantAgent'; import { OperationType, WantAgentFlags } from '@ohos.wantagent'; @@ -391,7 +391,7 @@ getCurrentLocation(request: CurrentLocationRequest, callback: AsyncCallback<L | callback | AsyncCallback<[Location](#location)> | 是 | 用来接收位置信息的回调。 | - 示例: - + ``` var requestInfo = {'priority': 0x203, 'scenario': 0x300,'maxAccuracy': 0}; var locationChange = (err, location) => { @@ -421,7 +421,7 @@ getCurrentLocation(request?: CurrentLocationRequest) : Promise<Location> | Promise<[Location](#location)> | 返回位置信息。 | - 示例: - + ``` var requestInfo = {'priority': 0x203, 'scenario': 0x300,'maxAccuracy': 0}; locationEventListener.getCurrentLocation(requestInfo).then((result) => { @@ -442,7 +442,7 @@ getLastLocation(callback: AsyncCallback<Location>) : void | callback | AsyncCallback<[Location](#location)> | 是 | 用来接收上次位置的回调。 | - 示例: - + ``` geolocation.getLastLocation((err, data) => { console.log('getLastLocation: ' + err + " data: " + JSON.stringify(data)); @@ -462,7 +462,7 @@ getLastLocation() : Promise<Location> | Promise<[Location](#location)> | 返回上次位置信息。 | - 示例: - + ``` geolocation.getLastLocation().then((result) => { console.log('getLastLocation: result: ' + JSON.stringify(result)); @@ -484,7 +484,7 @@ isLocationEnabled(callback: AsyncCallback<boolean>) : void | callback | AsyncCallback<boolean> | 是 | 用来接收位置服务状态的回调。 | - 示例: - + ``` geolocation.isLocationEnabled((err, data) => { console.log('isLocationEnabled: ' + err + " data: " + data); @@ -504,7 +504,7 @@ isLocationEnabled() : Promise<boolean> | Promise<boolean> | 返回位置服务是否可用的状态。 | - 示例: - + ``` geolocation.isLocationEnabled().then((result) => { console.log('promise, isLocationEnabled: ' + result); @@ -526,7 +526,7 @@ requestEnableLocation(callback: AsyncCallback<boolean>) : void | callback | AsyncCallback<boolean> | 是 | 用来接收位置服务状态的回调。 | - 示例: - + ``` geolocation.requestEnableLocation((err, data) => { console.log('requestEnableLocation: ' + err + " data: " + data); @@ -546,7 +546,7 @@ requestEnableLocation() : Promise<boolean> | Promise<boolean> | 返回位置服务是否可用。 | - 示例: - + ``` geolocation.requestEnableLocation().then((result) => { console.log('promise, requestEnableLocation: ' + result); @@ -566,7 +566,7 @@ isGeoServiceAvailable(callback: AsyncCallback<boolean>) : void | callback | AsyncCallback<boolean> | 是 | 用来接收地理编码服务状态的回调。 | - 示例: - + ``` geolocation.isGeoServiceAvailable((err, data) => { console.log('isGeoServiceAvailable: ' + err + " data: " + data); @@ -586,7 +586,7 @@ isGeoServiceAvailable() : Promise<boolean> | Promise<boolean> | 返回地理编码服务是否可用的状态。 | - 示例: - + ``` geolocation.isGeoServiceAvailable().then((result) => { console.log('promise, isGeoServiceAvailable: ' + result); @@ -608,7 +608,7 @@ getAddressesFromLocation(request: ReverseGeoCodeRequest, callback: AsyncCallback | callback | AsyncCallback<Array<[GeoAddress](#geoaddress)>> | 是 | 设置接收逆地理编码请求的回调参数。 | - 示例: - + ``` var reverseGeocodeRequest = {"latitude": 31.12, "longitude": 121.11, "maxItems": 1}; geolocation.getAddressesFromLocation(reverseGeocodeRequest, (err, data) => { @@ -634,7 +634,7 @@ getAddressesFromLocation(request: ReverseGeoCodeRequest) : Promise<Array<G | Promise<Array<[GeoAddress](#geoaddress)>> | 返回地理描述信息。 | - 示例: - + ``` var reverseGeocodeRequest = {"latitude": 31.12, "longitude": 121.11, "maxItems": 1}; geolocation.getAddressesFromLocation(reverseGeocodeRequest).then((data) => { @@ -656,7 +656,7 @@ getAddressesFromLocationName(request: GeoCodeRequest, callback: AsyncCallback< | callback | AsyncCallback<Array<[GeoAddress](#geoaddress)>> | 是 | 设置接收地理编码请求的回调参数。 | - 示例: - + ``` var geocodeRequest = {"description": "上海市浦东新区xx路xx号", "maxItems": 1}; geolocation.getAddressesFromLocationName(geocodeRequest, (err, data) => { @@ -682,7 +682,7 @@ getAddressesFromLocationName(request: GeoCodeRequest) : Promise<Array<GeoA | Promise<Array<[GeoAddress](#geoaddress)>> | 设置接收地理编码请求的回调参数。 | - 示例: - + ``` var geocodeRequest = {"description": "上海市浦东新区xx路xx号", "maxItems": 1}; geolocation.getAddressesFromLocationName(geocodeRequest).then((result) => { @@ -704,7 +704,7 @@ getCachedGnssLocationsSize(callback: AsyncCallback<number>) : void; | callback | AsyncCallback<number> | 是 | 用来接收GNSS芯片缓存位置个数的回调。 | - 示例: - + ``` geolocation.getCachedGnssLocationsSize((err, size) => { console.log('getCachedGnssLocationsSize: err:' + err + " size: " + size); @@ -724,7 +724,7 @@ getCachedGnssLocationsSize() : Promise<number>; | Promise<number> | 返回GNSS缓存位置的个数。 | - 示例: - + ``` geolocation.getCachedGnssLocationsSize().then((result) => { console.log('promise, getCachedGnssLocationsSize: ' + result); @@ -744,7 +744,7 @@ flushCachedGnssLocations(callback: AsyncCallback<boolean>) : void; | callback | AsyncCallback<boolean> | 是 | 用来接收清空GNSS芯片缓存位置操作的结果。 | - 示例: - + ``` geolocation.flushCachedGnssLocations((err, result) => { console.log('flushCachedGnssLocations: err:' + err + " result: " + result); @@ -764,7 +764,7 @@ flushCachedGnssLocations() : Promise<boolean>; | Promise<boolean> | 清空所有GNSS缓存位置是否成功。 | - 示例: - + ``` geolocation.flushCachedGnssLocations().then((result) => { console.log('promise, flushCachedGnssLocations: ' + result); @@ -785,7 +785,7 @@ sendCommand(command: LocationCommand, callback: AsyncCallback<boolean>) : | callback | AsyncCallback<boolean> | 是 | 用来接收命令发送的结果。 | - 示例: - + ``` var requestInfo = {'scenario': 0x301, 'command': "command_1"}; geolocation.sendCommand(requestInfo, (err, result) => { @@ -811,7 +811,7 @@ sendCommand(command: LocationCommand) : Promise<boolean>; | Promise<boolean> | 表示命令发送成功或失败。 | - 示例: - + ``` var requestInfo = {'scenario': 0x301, 'command': "command_1"}; geolocation.sendCommand(requestInfo).then((result) => { @@ -833,7 +833,7 @@ isLocationPrivacyConfirmed(type : LocationPrivacyType, callback: AsyncCallback&l | callback | AsyncCallback<boolean> | 是 | 表示用户是否同意定位服务隐私申明。 | - 示例: - + ``` geolocation.isLocationPrivacyConfirmed(1, (err, result) => { console.log('isLocationPrivacyConfirmed: err:' + err + " result: " + result); @@ -858,7 +858,7 @@ isLocationPrivacyConfirmed(type : LocationPrivacyType,) : Promise<boolean> | Promise<boolean> | 表示用户是否同意定位服务隐私申明。 | - 示例: - + ``` geolocation.isLocationPrivacyConfirmed(1).then((result) => { console.log('promise, isLocationPrivacyConfirmed: ' + result); @@ -880,7 +880,7 @@ setLocationPrivacyConfirmStatus(type : LocationPrivacyType, isConfirmed: boolean | callback | AsyncCallback<boolean> | 是 | 表示操作是否成功。 | - 示例: - + ``` geolocation.setLocationPrivacyConfirmStatus(1, true, (err, result) => { console.log('isLocationPrivacyConfirmed: err:' + err + " result: " + result); @@ -906,7 +906,7 @@ setLocationPrivacyConfirmStatus(type : LocationPrivacyType, isConfirmed : boolea | Promise<boolean> | 表示操作是否成功。 | - 示例: - + ``` geolocation.setLocationPrivacyConfirmStatus(1, true).then((result) => { console.log('promise, setLocationPrivacyConfirmStatus: ' + result); diff --git a/zh-cn/application-dev/reference/apis/js-apis-media.md b/zh-cn/application-dev/reference/apis/js-apis-media.md index 6a4e22478e..74a1d0b8f4 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-media.md +++ b/zh-cn/application-dev/reference/apis/js-apis-media.md @@ -1,8 +1,5 @@ # 媒体服务 -> **说明:** -> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - 媒体子系统为开发者提供一套简单且易于理解的接口,使得开发者能够方便接入系统并使用系统的媒体资源。 媒体子系统包含了音视频相关媒体业务,提供以下常用功能: @@ -26,7 +23,7 @@ createAudioPlayer(): [AudioPlayer](#audioplayer) 同步方式创建音频播放实例。 -**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer + **返回值:** @@ -37,7 +34,64 @@ createAudioPlayer(): [AudioPlayer](#audioplayer) **示例:** ```js -let audioPlayer = media.createAudioPlayer(); +var audioPlayer = media.createAudioPlayer(); +``` + +## media.createAudioPlayerAsync8+ + +createAudioPlayerAsync(callback: AsyncCallback\<[AudioPlayer](#audioplayer)>): void + +异步方式创建音频播放实例。通过注册回调函数获取返回值。 + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ------------------------------------------ | ---- | ------------------------------ | +| callback | AsyncCallback<[AudioPlayer](#audioplayer)> | 是 | 异步创建音频播放实例回调方法。 | + +**示例:** + +```js +media.createAudioPlayerAsync((error, audio) => { + if (typeof(audio) != 'undefined') { + audioPlayer = audio; + console.info('audio createAudioPlayerAsync success'); + } else { + console.info(`audio createAudioPlayerAsync fail, error:${error.message}`); + } +}); +``` + +## media.createAudioPlayerAsync8+ + +createAudioPlayerAsync: Promise<[AudioPlayer](#audioplayer)> + +异步方式创建音频播放实例。通过Promise获取返回值。 + +**返回值:** + +| 类型 | 说明 | +| ------------------------------------ | ----------------------------------- | +| Promise<[AudioPlayer](#audioplayer)> | 异步创建音频播放实例Promise返回值。 | + +**示例:** + +```js +function failureCallback(error) { + console.info(`audio failureCallback, error:${error.message}`); +} +function catchCallback(error) { + console.info(`audio catchCallback, error:${error.message}`); +} + +await media.createAudioPlayerAsync.then((audio) => { + if (typeof(audio) != 'undefined') { + audioPlayer = audio; + console.info('audio createAudioPlayerAsync success'); + } else { + console.info('audio createAudioPlayerAsync fail'); + } +}, failureCallback).catch(catchCallback); ``` ## media.createVideoPlayer8+ @@ -46,8 +100,6 @@ createVideoPlayer(callback: AsyncCallback\<[VideoPlayer](#videoplayer8)>): void 异步方式创建视频播放实例,通过注册回调函数获取返回值。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -57,8 +109,6 @@ createVideoPlayer(callback: AsyncCallback\<[VideoPlayer](#videoplayer8)>): void **示例:** ```js -let videoPlayer - media.createVideoPlayer((error, video) => { if (typeof(video) != 'undefined') { videoPlayer = video; @@ -71,12 +121,10 @@ media.createVideoPlayer((error, video) => { ## media.createVideoPlayer8+ -createVideoPlayer(): Promise<[VideoPlayer](#videoplayer8)> +createVideoPlayer: Promise<[VideoPlayer](#videoplayer8)> 异步方式创建视频播放实例,通过Promise获取返回值。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **返回值:** | 类型 | 说明 | @@ -86,8 +134,6 @@ createVideoPlayer(): Promise<[VideoPlayer](#videoplayer8)> **示例:** ```js -let videoPlayer - function failureCallback(error) { console.info(`video failureCallback, error:${error.message}`); } @@ -111,8 +157,6 @@ createAudioRecorder(): AudioRecorder 创建音频录制的实例来控制音频的录制。 -**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder - **返回值:** | 类型 | 说明 | @@ -125,54 +169,103 @@ createAudioRecorder(): AudioRecorder let audiorecorder = media.createAudioRecorder(); ``` -## media.createVideoRecorder8+ +## media.createAudioRecorderAsync8+ -createVideoRecorder(callback: AsyncCallback\<[VideoRecorder](#videorecorder8)>): void +createAudioRecorderAsync(callback: AsyncCallback\<[AudioRecorder](#audiorecorder)>): void -异步方式创建视频录制实例。通过注册回调函数获取返回值。 +异步方式创建音频录制实例。通过注册回调函数获取返回值。 -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ---------------------------------------------- | ---- | ------------------------------ | +| callback | AsyncCallback<[AudioRecorder](#audiorecorder)> | 是 | 异步创建音频录制实例回调方法。 | + +**示例:** + +```js +media.createAudioRecorderAsync((error, audio) => { + if (typeof(audio) != 'undefined') { + audioRecorder = audio; + console.info('audio createAudioRecorderAsync success'); + } else { + console.info(`audio createAudioRecorderAsync fail, error:${error.message}`); + } +}); +``` + +## media.createAudioRecorderAsync8+ + +createAudioRecorderAsync: Promise<[AudioRecorder](#audiorecorder)> + +异步方式创建音频录制实例。通过Promise获取返回值。 + +**返回值:** + +| 类型 | 说明 | +| ---------------------------------------- | ----------------------------------- | +| Promise<[AudioRecorder](#audiorecorder)> | 异步创建音频录制实例Promise返回值。 | + +**示例:** + +```js +function failureCallback(error) { + console.info(`audio failureCallback, error:${error.message}`); +} +function catchCallback(error) { + console.info(`audio catchCallback, error:${error.message}`); +} + +await media.createAudioRecorderAsync.then((audio) => { + if (typeof(audio) != 'undefined') { + audioRecorder = audio; + console.info('audio createAudioRecorderAsync success'); + } else { + console.info('audio createAudioRecorderAsync fail'); + } +}, failureCallback).catch(catchCallback); +``` + +## media.createVideoRecorderAsync8+ + +createVideoRecorderAsync(callback: AsyncCallback\<[VideoRecorder](#videorecorder8)>): void + +异步方式创建视频录制实例。通过注册回调函数获取返回值。 **参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | ----------------------------------------------- | ---- | ------------------------------ | +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ----------------------------------------------------------- | ---- | ------------------------------ | | callback | AsyncCallback<[VideoRecorder](#videorecorder8)> | 是 | 异步创建视频录制实例回调方法。 | **示例:** ```js -let videoRecorder - -media.createVideoRecorder((error, video) => { +media.createVideoRecorderAsync((error, video) => { if (typeof(video) != 'undefined') { videoRecorder = video; - console.info('video createVideoRecorder success'); + console.info('video createVideoRecorderAsync success'); } else { - console.info(`video createVideoRecorder fail, error:${error.message}`); + console.info(`video createVideoRecorderAsync fail, error:${error.message}`); } }); ``` -## media.createVideoRecorder8+ +## media.createVideoRecorderAsync8+ -createVideoRecorder(): Promise<[VideoRecorder](#videorecorder8)> +createVideoRecorderAsync: Promise<[VideoRecorder](#videorecorder8)> 异步方式创建视频录制实例。通过Promise获取返回值。 -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder - **返回值:** -| 类型 | 说明 | -| ----------------------------------------- | ----------------------------------- | +| 类型 | 说明 | +| ----------------------------------------------------- | ----------------------------------- | | Promise<[VideoRecorder](#videorecorder8)> | 异步创建视频录制实例Promise返回值。 | **示例:** ```js -let videoRecorder - function failureCallback(error) { console.info(`video failureCallback, error:${error.message}`); } @@ -180,12 +273,12 @@ function catchCallback(error) { console.info(`video catchCallback, error:${error.message}`); } -await media.createVideoRecorder.then((video) => { +await media.createVideoRecorderAsync.then((video) => { if (typeof(video) != 'undefined') { videoRecorder = video; - console.info('video createVideoRecorder success'); + console.info('video createVideoRecorderAsync success'); } else { - console.info('video createVideoRecorder fail'); + console.info('video createVideoRecorderAsync fail'); } }, failureCallback).catch(catchCallback); ``` @@ -194,9 +287,7 @@ await media.createVideoRecorder.then((video) => { ## MediaErrorCode8+ -媒体服务错误类型枚举。 - -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。 +媒体服务错误类型枚举 | 名称 | 值 | 说明 | | -------------------------- | ---- | -------------------------------------- | @@ -213,33 +304,29 @@ await media.createVideoRecorder.then((video) => { ## MediaType8+ -媒体类型枚举。 - -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。 +媒体类型枚举 -| 名称 | 值 | 说明 | -| -------------- | ---- | ---------- | -| MEDIA_TYPE_AUD | 0 | 表示音频。 | -| MEDIA_TYPE_VID | 1 | 表示视频。 | +| 名称 | 值 | 说明 | +| ------------------- | ---- | ------------------ | +| MEDIA_TYPE_AUD | 0 | 表示音频。 | +| MEDIA_TYPE_VID | 1 | 表示视频。 | +| MEDIA_TYPE_SUBTITLE | 2 | 表示字幕:开发中。 | ## CodecMimeType8+ -Codec MIME类型枚举。 - -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。 +Codec MIME类型枚举 | 名称 | 值 | 说明 | | ------------ | ----------------- | ------------------------ | | VIDEO_MPEG4 | ”video/mp4v-es“ | 表示视频/mpeg4类型。 | +| AUDIO_MPEG | "audio/mpeg" | 表示音频/mpeg类型。 | | AUDIO_AAC | "audio/mp4a-latm" | 表示音频/mp4a-latm类型。 | | AUDIO_VORBIS | "audio/vorbis" | 表示音频/vorbis类型。 | | AUDIO_FLAC | "audio/flac" | 表示音频/flac类型。 | ## MediaDescriptionKey8+ -媒体信息描述枚举。 - -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。 +媒体信息描述枚举 | 名称 | 值 | 说明 | | ------------------------ | --------------- | ------------------------------------------------------------ | @@ -256,9 +343,7 @@ Codec MIME类型枚举。 ## BufferingInfoType8+ -缓存事件类型枚举。 - -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。 +缓存事件类型枚举 | 名称 | 值 | 说明 | | ----------------- | ---- | -------------------------- | @@ -269,17 +354,15 @@ Codec MIME类型枚举。 ## AudioPlayer -音频播放管理类,用于管理和播放音频媒体。在调用AudioPlayer的方法前,需要先通过[createAudioPlayer()](#mediacreateaudioplayer)构建一个[AudioPlayer](#audioplayer)实例。 +音频播放管理类,用于管理和播放音频媒体。在调用AudioPlayer的方法前,需要先通过[createAudioPlayer()](#media.createaudioplayer)或[createAudioPlayerAsync()](#media.createaudioplayerasync8)构建一个[AudioPlayer](#audioplayer)实例。 音频播放demo可参考:[音频播放开发指导](../../media/audio-playback.md) ### 属性 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.AudioPlayer。 - | 名称 | 类型 | 可读 | 可写 | 说明 | | ----------- | ------------------------- | ---- | ---- | ------------------------------------------------------------ | -| src | string | 是 | 是 | 音频媒体URI,支持当前主流的音频格式(mp4、aac、mp3、ogg)。
    **支持路径示例**:
    1. fd类型播放:fd://xxx
    ![zh-cn_image_0000001164217678](figures/zh-cn_image_url.png)
    2. http网络播放路径:开发中
    3. hls网络播放路径:开发中
    **注意事项**:
    使用媒体素材需要获取读权限,否则无法正常播放。 | +| src | string | 是 | 是 | 音频媒体URI,支持当前主流的音频格式(mp4、aac、mp3、ogg)。
    **支持路径示例**:
    1、本地绝对路径:file:///data/data/ohos.xxx.xxx/files/test.mp4
    ![zh-cn_image_0000001164217678](figures/zh-cn_image_0000001164217678.png)
    2、http网络播放路径:开发中
    3、hls网络播放路径:开发中
    4、fd类型播放:开发中
    **注意事项**:
    媒体素材需至少赋予读权限后,才可正常播放 | | loop | boolean | 是 | 是 | 音频循环播放属性,设置为'true'表示循环播放。 | | currentTime | number | 是 | 否 | 音频的当前播放位置。 | | duration | number | 是 | 否 | 音频时长。 | @@ -291,8 +374,6 @@ play(): void 开始播放音频资源,需在[dataLoad](#on('play' | 'pause' | 'stop' | 'reset' | 'dataload' | 'finish' | 'volumechange'))事件成功触发后,才能调用play方法。 -**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer - **示例:** ```js @@ -308,8 +389,6 @@ pause(): void 暂停播放音频资源。 -**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer - **示例:** ```js @@ -325,8 +404,6 @@ stop(): void 停止播放音频资源。 -**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer - **示例:** ```js @@ -342,8 +419,6 @@ reset(): void 切换播放音频资源。 -**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer - **示例:** ```js @@ -359,8 +434,6 @@ seek(timeMs: number): void 跳转到指定播放位置。 -**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -386,8 +459,6 @@ setVolume(vol: number): void 设置音量。 -**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -409,8 +480,6 @@ release(): void 释放音频资源。 -**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer - **示例:** ```js @@ -424,8 +493,6 @@ getTrackDescription(callback: AsyncCallback> 通过Promise方式获取音频轨道信息。 -**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer - **返回值:** | 类型 | 说明 | @@ -503,8 +568,6 @@ on(type: 'bufferingUpdate', callback: (infoType: [BufferingInfoType](#bufferingi 开始订阅音频缓存更新事件。 -**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -527,8 +590,6 @@ on(type: 'play' | 'pause' | 'stop' | 'reset' | 'dataLoad' | 'finish' | 'volumeCh 开始订阅音频播放事件。 -**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -578,19 +639,7 @@ audioPlayer.on('error', (error) => { //设置'error'事件回调 console.info(`audio error called, errCode is ${error.code}`); console.info(`audio error called, errMessage is ${error.message}`); }); - -// 用户选择视频设置fd(本地播放) -let fdPath = 'fd://' -let path = 'data/accounts/account_0/appdata/ohos.xxx.xxx.xxx/01.mp3'; -await fileIO.open(path).then(fdNumber) => { - fdPath = fdPath + '' + fdNumber; - console.info('open fd sucess fd is' + fdPath); -}, (err) => { - console.info('open fd failed err is' + err); -}),catch((err) => { - console.info('open fd failed err is' + err); -}); -audioPlayer.src = fdPath; //设置src属性,并触发'dataLoad'事件回调 +audioPlayer.src = 'file:///data/data/ohos.xxx.xxx/files/test.mp4'; //设置src属性,并触发'dataLoad'事件回调 ``` ### on('timeUpdate') @@ -599,8 +648,6 @@ on(type: 'timeUpdate', callback: Callback\): void 开始订阅音频播放[seek()](#seek)时间更新事件。 -**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -627,8 +674,6 @@ on(type: 'error', callback: ErrorCallback): void 开始订阅音频播放错误事件。 -**系统能力:** SystemCapability.Multimedia.Media.AudioPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -651,8 +696,6 @@ audioPlayer.setVolume(3); //设置volume为无效值,触发'error'事件 音频播放的状态机。可通过state属性获取当前状态。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.AudioPlayer。 - | 名称 | 类型 | 描述 | | ------------------ | ------ | -------------- | | idle | string | 音频播放空闲。 | @@ -667,19 +710,17 @@ audioPlayer.setVolume(3); //设置volume为无效值,触发'error'事件 视频播放demo可参考:[视频播放开发指导](../../media/video-playback.md) -### 属性 - -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoPlayer。 +### 属性8+ -| 名称 | 类型 | 可读 | 可写 | 说明 | -| ------------------------ | ---------------------------------- | ---- | ---- | ------------------------------------------------------------ | -| url8+ | string | 是 | 是 | 视频媒体URL,支持当前主流的视频格式(mp4、mpeg-ts、webm、mkv)。
    **支持路径示例**:
    1. fd类型播放:fd://xxx
    ![zh-cn_image_0000001164217678](figures/zh-cn_image_url.png)
    **注意事项**:
    使用媒体素材需要获取读权限,否则无法正常播放。 | -| loop8+ | boolean | 是 | 是 | 视频循环播放属性,设置为'true'表示循环播放。 | -| currentTime8+ | number | 是 | 否 | 视频的当前播放位置。 | -| duration8+ | number | 是 | 否 | 视频时长,返回-1表示直播模式。 | -| state8+ | [VideoPlayState](#videoplaystate8) | 是 | 否 | 视频播放的状态。 | -| width8+ | number | 是 | 否 | 视频宽。 | -| height8+ | number | 是 | 否 | 视频高。 | +| 名称 | 类型 | 可读 | 可写 | 说明 | +| ----------- | ---------------------------------- | ---- | ---- | ------------------------------------------------------------ | +| url | string | 是 | 是 | 视频媒体URL,支持当前主流的视频格式(mp4、mpeg-ts、webm、mkv)。
    **支持路径示例**:
    1. 本地绝对路径:file:///data/data/ohos.xxx.xxx/files/test.mp4
    ![zh-cn_image_0000001164217678](figures/zh-cn_image_0000001164217678.png)
    **注意事项**:
    媒体素材需至少赋予读权限后,才可正常播放 | +| loop | boolean | 是 | 是 | 视频循环播放属性,设置为'true'表示循环播放。 | +| currentTime | number | 是 | 否 | 视频的当前播放位置。 | +| duration | number | 是 | 否 | 视频时长,返回-1表示直播模式 | +| state | [VideoPlayState](#videoplaystate8) | 是 | 否 | 视频播放的状态。 | +| width | number | 是 | 否 | 视频宽。 | +| height | number | 是 | 否 | 视频高。 | ### setDisplaySurface8+ @@ -687,8 +728,6 @@ setDisplaySurface(surfaceId: string, callback: AsyncCallback\): void 通过回调方式设置SurfaceId。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -714,8 +753,6 @@ setDisplaySurface(surfaceId: string): Promise\ 通过Promise方式设置SurfaceId。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -748,8 +785,6 @@ prepare(callback: AsyncCallback\): void 通过回调方式准备播放视频。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -774,8 +809,6 @@ prepare(): Promise\ 通过Promise方式准备播放视频。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **返回值:** | 类型 | 说明 | @@ -802,8 +835,6 @@ play(callback: AsyncCallback\): void; 通过回调方式开始播放视频。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -828,8 +859,6 @@ play(): Promise\; 通过Promise方式开始播放视频。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **返回值:** | 类型 | 说明 | @@ -856,8 +885,6 @@ pause(callback: AsyncCallback\): void 通过回调方式暂停播放视频。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -882,8 +909,6 @@ pause(): Promise\ 通过Promise方式暂停播放视频。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **返回值:** | 类型 | 说明 | @@ -910,8 +935,6 @@ stop(callback: AsyncCallback\): void 通过回调方式停止播放视频。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -936,8 +959,6 @@ stop(): Promise\ 通过Promise方式停止播放视频。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **返回值:** | 类型 | 说明 | @@ -964,8 +985,6 @@ reset(callback: AsyncCallback\): void 通过回调方式切换播放视频。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -990,8 +1009,6 @@ reset(): Promise\ 通过Promise方式切换播放视频。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **返回值:** | 类型 | 说明 | @@ -1018,8 +1035,6 @@ seek(timeMs: number, callback: AsyncCallback\): void 通过回调方式跳转到指定播放位置,默认跳转到指定时间点的下一个关键帧。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1045,8 +1060,6 @@ seek(timeMs: number, mode:SeekMode, callback: AsyncCallback\): void 通过回调方式跳转到指定播放位置。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1073,8 +1086,6 @@ seek(timeMs: number, mode?:SeekMode): Promise\ 通过Promise方式跳转到指定播放位置,如果没有设置mode则跳转到指定时间点的下一个关键帧。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1112,8 +1123,6 @@ setVolume(vol: number, callback: AsyncCallback\): void 通过回调方式设置音量。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1139,8 +1148,6 @@ setVolume(vol: number): Promise\ 通过Promise方式设置音量。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1173,8 +1180,6 @@ release(callback: AsyncCallback\): void 通过回调方式释放视频资源。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1199,8 +1204,6 @@ release(): Promise\ 通过Promise方式释放视频资源。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **返回值:** | 类型 | 说明 | @@ -1223,12 +1226,10 @@ await videoPlayer.release().then() => { ### getTrackDescription8+ -getTrackDescription(callback: AsyncCallback>): void +getTrackDescription(callback: AsyncCallback>)>>): void 通过回调方式获取视频轨道信息。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1259,17 +1260,15 @@ videoPlayer.getTrackDescription((error, arrlist) => { ### getTrackDescription8+ -getTrackDescription(): Promise> +getTrackDescription(): Promise>)>> 通过Promise方式获取视频轨道信息。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **返回值:** -| 类型 | 说明 | -| ------------------------------------------------------ | ------------------------------- | -| Promise> | 获取视频轨道信息Promise返回值。 | +| 类型 | 说明 | +| -------------------------------------------------------- | ------------------------------- | +| Promise>)>> | 获取视频轨道信息Promise返回值。 | **示例:** @@ -1307,8 +1306,6 @@ setSpeed(speed:number, callback: AsyncCallback\): void 通过回调方式设置播放速度。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1334,8 +1331,6 @@ setSpeed(speed:number): Promise\ 通过Promise方式设置播放速度。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1362,8 +1357,6 @@ on(type: 'playbackCompleted', callback: Callback\): void 开始监听视频播放完成事件。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1385,8 +1378,6 @@ on(type: 'bufferingUpdate', callback: (infoType: BufferingInfoType, value: numbe 开始监听视频缓存更新事件。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1409,8 +1400,6 @@ on(type: 'startRenderFrame', callback: Callback\): void 开始监听视频播放首帧送显上报事件。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1432,8 +1421,6 @@ on(type: 'videoSizeChanged', callback: (width: number, height: number) => void): 开始监听视频播放宽高变化事件。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1456,8 +1443,6 @@ on(type: 'error', callback: ErrorCallback): void 开始监听视频播放错误事件。 -**系统能力:** SystemCapability.Multimedia.Media.VideoPlayer - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1480,8 +1465,6 @@ videoPlayer.setVolume(3); //设置volume为无效值,触发'error'事件 视频播放的状态机,可通过state属性获取当前状态。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoPlayer。 - | 名称 | 类型 | 描述 | | -------- | ------ | -------------- | | idle | string | 视频播放空闲。 | @@ -1495,19 +1478,17 @@ videoPlayer.setVolume(3); //设置volume为无效值,触发'error'事件 视频播放的Seek模式枚举,可通过seek方法作为参数传递下去。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。 - -| 名称 | 值 | 描述 | -| -------------- | ---- | ------------------------------------------------------------ | -| SEEK_NEXT_SYNC | 0 | 表示跳转到指定时间点的下一个关键帧,建议向后快进的时候用这个枚举值。 | -| SEEK_PREV_SYNC | 1 | 表示跳转到指定时间点的上一个关键帧,建议向前快进的时候用这个枚举值。 | +| 名称 | 值 | 描述 | +| ----------------- | ---- | ------------------------------------------------------------ | +| SEEK_NEXT_SYNC | 0 | 表示跳转到指定时间点的下一个关键帧,建议向后快进的时候用这个枚举值 | +| SEEK_PREV_SYNC | 1 | 表示跳转到指定时间点的上一个关键帧,建议向前快进的时候用这个枚举值 | +| SEEK_CLOSEST_SYNC | 2 | 表示跳转到指定时间点最近的关键帧。 | +| SEEK_CLOSEST | 3 | 表示精确跳转到指定时间点。 | ## PlaybackSpeed8+ 视频播放的倍速枚举,可通过setSpeed方法作为参数传递下去。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoPlayer。 - | 名称 | 值 | 描述 | | -------------------- | ---- | ------------------------------ | | SPEED_FORWARD_0_75_X | 0 | 表示视频播放正常播速的0.75倍。 | @@ -1518,11 +1499,9 @@ videoPlayer.setVolume(3); //设置volume为无效值,触发'error'事件 ## MediaDescription8+ -### [key : string] : Object +### [key : string] : any -通过key-value方式获取媒体信息。 - -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。 +通过key-value方式获取媒体信息 | 名称 | 类型 | 说明 | | ----- | ------ | ------------------------------------------------------------ | @@ -1551,7 +1530,7 @@ audioPlayer.getTrackDescription((error, arrlist) => { ## AudioRecorder -音频录制管理类,用于录制音频媒体。在调用AudioRecorder的方法前,需要先通过[createAudioRecorder()](#media.createaudiorecorder) 构建一个[AudioRecorder](#audiorecorder)实例。 +音频录制管理类,用于录制音频媒体。在调用AudioRecorder的方法前,需要先通过[createAudioRecorder()](#media.createaudiorecorder) 或[createAudioRecorderAsync()](#media.createaudiorecorderasync8)构建一个[AudioRecorder](#audiorecorder)实例。 音频录制demo可参考:[音频录制开发指导](../../media/audio-recorder.md) @@ -1561,10 +1540,6 @@ prepare(config: AudioRecorderConfig): void 录音准备。 -**需要权限:** ohos.permission.MICROPHONE - -**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1580,7 +1555,7 @@ let audioRecorderConfig = { audioSampleRate : 22050, numberOfChannels : 2, format : media.AudioOutputFormat.AAC_ADTS, - uri : 'fd://1', // 文件需先由调用者创建,并给予适当的权限 + uri : 'file:///data/accounts/account_0/appdata/appdata/recorder/test.m4a', // 文件需先由调用者创建,并给予适当的权限 location : { latitude : 30, longitude : 130}, } audioRecorder.on('prepare', () => { //设置'prepare'事件回调 @@ -1596,8 +1571,6 @@ start(): void 开始录制,需在[prepare](#audiorecorder_on)事件成功触发后,才能调用start方法。 -**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder - **示例:** ```js @@ -1613,8 +1586,6 @@ pause():void 暂停录制,需要在[start](#audiorecorder_on)事件成功触发后,才能调用pause方法。 -**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder - **示例:** ```js @@ -1630,8 +1601,6 @@ resume():void 暂停录制,需要在[pause](#audiorecorder_on)事件成功触发后,才能调用resume方法。 -**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder - **示例:** ```js @@ -1647,8 +1616,6 @@ stop(): void 停止录音。 -**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder - **示例:** ```js @@ -1664,8 +1631,6 @@ release(): void 释放录音资源。 -**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder - **示例:** ```js @@ -1684,8 +1649,6 @@ reset(): void 进行重置录音之前,需要先调用[stop()](#audiorecorder_stop)停止录音。重置录音之后,需要调用[prepare()](#audiorecorder_prepare)设置录音参数项,才能再次进行录音。 -**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder - **示例:** ```js @@ -1701,8 +1664,6 @@ on(type: 'prepare' | 'start' | 'pause' | 'resume' | 'stop' | 'release' | 'reset' 开始订阅音频录制事件。 -**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1720,7 +1681,7 @@ let audioRecorderConfig = { audioSampleRate : 22050, numberOfChannels : 2, format : media.AudioOutputFormat.AAC_ADTS, - uri : 'fd://xx', // 文件需先由调用者创建,并给予适当的权限 + uri : 'file:///data/accounts/account_0/appdata/appdata/recorder/test.m4a', // 文件需先由调用者创建,并给予适当的权限 location : { latitude : 30, longitude : 130}, } audioRecorder.on('error', (error) => { // 设置'error'事件回调 @@ -1759,8 +1720,6 @@ on(type: 'error', callback: ErrorCallback): void 开始订阅音频录制错误事件。 -**系统能力:** SystemCapability.Multimedia.Media.AudioRecorder - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1783,8 +1742,6 @@ audioRecorder.prepare(); // prepare不设置参数,触发'error' 表示音频的录音配置。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.AudioRecorder。 - | 名称 | 参数类型 | 必填 | 说明 | | --------------------- | --------------------------------------- | ---- | ------------------------------------------------------------ | | audioEncoder | [AudioEncoder](#audioencoder) | 否 | 音频编码格式,默认设置为AAC_LC。 | @@ -1793,60 +1750,52 @@ audioRecorder.prepare(); // prepare不设置参数,触发'error' | numberOfChannels | number | 否 | 音频采集声道数,默认值为2。 | | format | [AudioOutputFormat](#audiooutputformat) | 否 | 音量输出封装格式,默认设置为MPEG_4。 | | location8+ | [Location](#location8) | 否 | 音频采集的地理位置。 | -| uri | string | 是 | 视频输出URI:fd://xx (fd number)
    ![zh-cn_image_0000001164217678](figures/zh-cn_image_url.png)
    文件需要由调用者创建,并赋予适当的权限。 | +| uri | string | 是 | 音频输出URI。支持:
    1. 文件的绝对路径:file:///data/data/ohos.xxx.xxx/cache/test.mp4![zh-cn_image_0000001164217678](figures/zh-cn_image_0000001164217678.png)
    2. 文件的fd路径:file://1 (fd number)
    文件需要由调用者创建,并赋予适当的权限。 | ## AudioEncoder 表示音频编码格式的枚举。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.AudioRecorder。 - | 名称 | 默认值 | 说明 | | ------- | ------ | ------------------------------------------------------------ | -| DEFAULT | 0 | Default audio encoding format is AMR_NB。
    本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。 | -| AMR_NB | 1 | AMR-NB(Adaptive Multi Rate-Narrow Band Speech Codec) 编码格式。
    本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。 | -| AMR_WB | 2 | AMR-WB(Adaptive Multi Rate-Wide Band Speech Codec) 编码格式。
    本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。 | -| AAC_LC | 3 | AAC-LC(Advanced Audio Coding Low Complexity)编码格式。 | -| HE_AAC | 4 | HE_AAC(High-Efficiency Advanced Audio Coding)编码格式。
    本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。 | +| DEFAULT | 0 | Default audio encoding format is AMR_NB。本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。
    **系统能力:**SystemCapability.Multimedia.Media.AudioRecorder | +| AMR_NB | 1 | AMR-NB(Adaptive Multi Rate-Narrow Band Speech Codec) 编码格式。本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。
    **系统能力:**SystemCapability.Multimedia.Media.AudioRecorder | +| AMR_WB | 2 | AMR-WB(Adaptive Multi Rate-Wide Band Speech Codec) 编码格式。本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。
    **系统能力:**SystemCapability.Multimedia.Media.AudioRecorder | +| AAC_LC | 3 | AAC-LC(Advanced Audio Coding Low Complexity)编码格式。
    **系统能力:**SystemCapability.Multimedia.Media.AudioRecorder | +| HE_AAC | 4 | HE_AAC(High-Efficiency Advanced Audio Coding)编码格式。本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。
    **系统能力:**SystemCapability.Multimedia.Media.AudioRecorder | ## AudioOutputFormat 表示音频封装格式的枚举。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.AudioRecorder。 - | 名称 | 默认值 | 说明 | | -------- | ------ | ------------------------------------------------------------ | -| DEFAULT | 0 | 默认封装格式为MPEG-4。
    本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。 | -| MPEG_4 | 2 | 封装为MPEG-4格式。 | -| AMR_NB | 3 | 封装为AMR_NB格式。
    本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。 | -| AMR_WB | 4 | 封装为AMR_WB格式。
    本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。 | -| AAC_ADTS | 6 | 封装为ADTS(Audio Data Transport Stream)格式,是AAC音频的传输流格式。 | +| DEFAULT | 0 | 默认封装格式为MPEG-4。本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。
    **系统能力:**SystemCapability.Multimedia.Media.AudioRecorder | +| MPEG_4 | 2 | 封装为MPEG-4格式。
    **系统能力:**SystemCapability.Multimedia.Media.AudioRecorder | +| AMR_NB | 3 | 封装为AMR_NB格式。本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。
    **系统能力:**SystemCapability.Multimedia.Media.AudioRecorder | +| AMR_WB | 4 | 封装为AMR_WB格式。本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。
    **系统能力:**SystemCapability.Multimedia.Media.AudioRecorder | +| AAC_ADTS | 6 | 封装为ADTS(Audio Data Transport Stream)格式,是AAC音频的传输流格式。
    **系统能力:**SystemCapability.Multimedia.Media.AudioRecorder | ## VideoRecorder8+ -视频录制管理类,用于录制视频媒体。在调用VideoRecorder的方法前,需要先通过[createVideoRecorder()](#media.createvideorecorder8)构建一个[VideoRecorder](#videorecorder8)实例。 +视频录制管理类,用于录制视频媒体。在调用VideoRecorder的方法前,需要先通过[createVideoRecorderAsync()](#media.createvideorecorderasync8)构建一个[VideoRecorder](#videorecorder8)实例。 视频录制demo可参考:[视频录制开发指导](../../media/video-recorder.md) ### 属性 -| 名称 | 类型 | 可读 | 可写 | 说明 | -| ------------------ | ------------------------------------- | ---- | ---- | ---------------- | -| state8+ | [VideoRecordState](#videorecordstate) | 是 | 否 | 视频录制的状态。 | +| 名称 | 类型 | 可读 | 可写 | 说明 | +| ----- | ------------------------------------- | ---- | ---- | ---------------- | +| state | [VideoRecordState](#videorecordstate) | 是 | 否 | 视频录制的状态。 | -### prepare8+ +### prepare prepare(config: VideoRecorderConfig, callback: AsyncCallback\): void; 异步方式进行视频录制的参数设置。通过注册回调函数获取返回值。 -**需要权限:** ohos.permission.MICROPHONE ohos.permission.CAMERA - -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1874,7 +1823,7 @@ let videoConfig = { audioSourceType : 1, videoSourceType : 0, profile : videoProfile, - url : 'fd://xx', // 文件需先由调用者创建,并给予适当的权限 + url : 'file:///data/accounts/account_0/appdata/appdata/recorder/test.mp4', // 文件需先由调用者创建,并给予适当的权限 orientationHint : 0, location : { latitude : 30, longitude : 130 }, } @@ -1905,16 +1854,12 @@ media.createVideoRecorder((err, recorder) => { }); ``` -### prepare8+ +### prepare prepare(config: VideoRecorderConfig): Promise\; 异步方式进行视频录制的参数设置。通过Promise获取返回值。 -**需要权限:** ohos.permission.MICROPHONE ohos.permission.CAMERA - -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -1947,7 +1892,7 @@ let videoConfig = { audioSourceType : 1, videoSourceType : 0, profile : videoProfile, - url : 'fd://xx', // 文件需先由调用者创建,并给予适当的权限 + url : 'file:///data/accounts/account_0/appdata/appdata/recorder/test.mp4', // 文件需先由调用者创建,并给予适当的权限 orientationHint : 0, location : { latitude : 30, longitude : 130 }, } @@ -1976,7 +1921,7 @@ await videoRecorder.prepare(videoConfig).then(() => { }); ``` -### getInputSurface8+ +### getInputSurface getInputSurface(callback: AsyncCallback\): void; @@ -1986,8 +1931,6 @@ getInputSurface(callback: AsyncCallback\): void; 只能在[prepare()](#videorecorder_prepare1)接口调用后调用。 -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -2009,7 +1952,7 @@ videoRecorder.getInputSurface((err, surfaceId) => { }); ``` -### getInputSurface8+ +### getInputSurface getInputSurface(): Promise\; @@ -2019,8 +1962,6 @@ getInputSurface(): Promise\; 只能在[prepare()](#videorecorder_prepare1)接口调用后调用。 -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder - **返回值:** | 类型 | 说明 | @@ -2042,15 +1983,13 @@ await videoRecorder.getInputSurface().then((surfaceId) => { }); ``` -### start8+ +### start start(callback: AsyncCallback\): void; 异步方式开始视频录制。通过注册回调函数获取返回值。 -在[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface8)后调用,需要依赖数据源先给surface传递数据。 - -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder +在[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface)后调用,需要依赖数据源先给surface传递数据。 **参数:** @@ -2071,15 +2010,13 @@ videoRecorder.start((err) => { }); ``` -### start8+ +### start start(): Promise\; 异步方式开始视频录制。通过Promise获取返回值。 -在[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface8)后调用,需要依赖数据源先给surface传递数据。 - -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder +在[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface)后调用,需要依赖数据源先给surface传递数据。 **返回值:** @@ -2100,7 +2037,7 @@ await videoRecorder.start().then(() => { }); ``` -### pause8+ +### pause pause(callback: AsyncCallback\): void; @@ -2108,8 +2045,6 @@ pause(callback: AsyncCallback\): void; 在[start()](#videorecorder_start1)后调用。可以通过调用[resume()](#videorecorder_resume1)接口来恢复录制。 -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -2129,7 +2064,7 @@ videoRecorder.pause((err) => { }); ``` -### pause8+ +### pause pause(): Promise\; @@ -2137,8 +2072,6 @@ pause(): Promise\; 在[start()](#videorecorder_start1)后调用。可以通过调用[resume()](#videorecorder_resume1)接口来恢复录制。 -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder - **返回值:** | 类型 | 说明 | @@ -2158,14 +2091,12 @@ await videoRecorder.pause().then(() => { }); ``` -### resume8+ +### resume resume(callback: AsyncCallback\): void; 异步方式恢复视频录制。通过注册回调函数获取返回值。 -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -2185,14 +2116,12 @@ videoRecorder.resume((err) => { }); ``` -### resume8+ +### resume resume(): Promise\; 异步方式恢复视频录制。通过Promise获取返回值。 -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder - **返回值:** | 类型 | 说明 | @@ -2212,15 +2141,13 @@ await videoRecorder.resume().then(() => { }); ``` -### stop8+ +### stop stop(callback: AsyncCallback\): void; 异步方式停止视频录制。通过注册回调函数获取返回值。 -需要重新调用[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface8)接口才能重新录制。 - -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder +需要重新调用[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface)接口才能重新录制。 **参数:** @@ -2241,15 +2168,13 @@ videoRecorder.stop((err) => { }); ``` -### stop8+ +### stop stop(): Promise\; 异步方式停止视频录制。通过Promise获取返回值。 -需要重新调用[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface8)接口才能重新录制。 - -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder +需要重新调用[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface)接口才能重新录制。 **返回值:** @@ -2270,14 +2195,12 @@ await videoRecorder.stop().then(() => { }); ``` -### release8+ +### release release(callback: AsyncCallback\): void; 异步方式释放视频录制资源。通过注册回调函数获取返回值。 -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -2297,14 +2220,12 @@ videoRecorder.release((err) => { }); ``` -### release8+ +### release release(): Promise\; 异步方式释放视频录制资源。通过Promise获取返回值。 -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder - **返回值:** | 类型 | 说明 | @@ -2324,15 +2245,13 @@ await videoRecorder.release().then(() => { }); ``` -### reset8+ +### reset reset(callback: AsyncCallback\): void; 异步方式重置视频录制。通过注册回调函数获取返回值。 -需要重新调用[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface8)接口才能重新录制。 - -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder +需要重新调用[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface)接口才能重新录制。 **参数:** @@ -2353,15 +2272,13 @@ videoRecorder.reset((err) => { }); ``` -### reset8+ +### reset reset(): Promise\; 异步方式重置视频录制。通过Promise获取返回值。 -需要重新调用[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface8)接口才能重新录制。 - -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder +需要重新调用[prepare()](#videorecorder_prepare1)和[getInputSurface()](#getinputsurface)接口才能重新录制。 **返回值:** @@ -2382,14 +2299,12 @@ await videoRecorder.reset().then(() => { }); ``` -### on('error')8+ +### on('error') on(type: 'error', callback: ErrorCallback): void 开始订阅视频录制错误事件。 -**系统能力:** SystemCapability.Multimedia.Media.VideoRecorder - **参数:** | 参数名 | 类型 | 必填 | 说明 | @@ -2412,8 +2327,6 @@ videoRecorder.on('error', (error) => { // 设置'error'事件回调 视频录制的状态机。可通过state属性获取当前状态。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。 - | 名称 | 类型 | 描述 | | -------- | ------ | ---------------------- | | idle | string | 视频录制空闲。 | @@ -2427,8 +2340,6 @@ videoRecorder.on('error', (error) => { // 设置'error'事件回调 表示视频录制的参数设置。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。 - | 名称 | 参数类型 | 必填 | 说明 | | --------------- | ---------------------------------------------------------- | ---- | ------------------------------------------------------------ | | audioSourceType | [AudioSourceType](#audiosourcetype8+) | 是 | 视频录制的音频源类型。 | @@ -2436,25 +2347,21 @@ videoRecorder.on('error', (error) => { // 设置'error'事件回调 | profile | [VideoRecorderProfile](#videorecorderprofile8+) | 是 | 视频录制的profile。 | | orientationHint | number | 否 | 录制视频的旋转角度。 | | location | [Location](#location8) | 否 | 录制视频的地理位置。 | -| url | string | 是 | 视频输出URL:fd://xx (fd number)
    ![zh-cn_image_0000001164217678](figures/zh-cn_image_url.png)
    文件需要由调用者创建,并赋予适当的权限。 | +| uri | string | 是 | 视频输出URI。支持:
    1. 文件的绝对路径:file:///data/data/ohos.xxx.xxx/cache/test.mp4![zh-cn_image_0000001164217678](figures/zh-cn_image_0000001164217678.png)
    2. 文件的fd路径:file://1 (fd number)
    文件需要由调用者创建,并赋予适当的权限。 | ## AudioSourceType8+ 表示视频录制中音频源类型的枚举。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。 - -| 名称 | 值 | 说明 | -| ------------------------- | ---- | ---------------------- | -| AUDIO_SOURCE_TYPE_DEFAULT | 0 | 默认的音频输入源类型。 | -| AUDIO_SOURCE_TYPE_MIC | 1 | 表示MIC的音频输入源。 | +| 名称 | 值 | 说明 | +| -------------------------- | ---- | ---------------------- | +| AUDIO_SOURCE_TYPE_DEFAULT0 | 0 | 默认的音频输入源类型。 | +| AUDIO_SOURCE_TYPE_MIC | 1 | 表示MIC的音频输入源。 | ## VideoSourceType8+ 表示视频录制中视频源类型的枚举。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。 - | 名称 | 值 | 说明 | | ----------------------------- | ---- | ------------------------------- | | VIDEO_SOURCE_TYPE_SURFACE_YUV | 0 | 输入surface中携带的是raw data。 | @@ -2464,8 +2371,6 @@ videoRecorder.on('error', (error) => { // 设置'error'事件回调 视频录制的配置文件。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.VideoRecorder。 - | 名称 | 参数类型 | 必填 | 说明 | | ---------------- | -------------------------------------------- | ---- | ---------------- | | audioBitrate | number | 是 | 音频编码比特率。 | @@ -2481,8 +2386,6 @@ videoRecorder.on('error', (error) => { // 设置'error'事件回调 表示容器格式类型的枚举,缩写为CFT。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。 - | 名称 | 值 | 说明 | | ----------- | ----- | --------------------- | | CFT_MPEG_4 | "mp4" | 视频的容器格式,MP4。 | @@ -2492,8 +2395,6 @@ videoRecorder.on('error', (error) => { // 设置'error'事件回调 视频录制的地理位置。 -**系统能力:** 以下各项对应的系统能力均为 SystemCapability.Multimedia.Media.Core。 - | 名称 | 参数类型 | 必填 | 说明 | | --------- | -------- | ---- | ---------------- | | latitude | number | 是 | 地理位置的纬度。 | diff --git a/zh-cn/application-dev/reference/apis/js-apis-pasteboard.md b/zh-cn/application-dev/reference/apis/js-apis-pasteboard.md index 1cd0041026..169bf06fbf 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-pasteboard.md +++ b/zh-cn/application-dev/reference/apis/js-apis-pasteboard.md @@ -86,9 +86,9 @@ createWantData(want:Want): PasteData **系统能力**: SystemCapability.Miscservices.Pasteboard - 参数 - | 参数名 | 类型 | 必填 | 说明 | + | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | - | want | [Want](js-apis-featureAbility.md#want) | 是 | 待保存的Want内容。 | + | want | [ERROR:Invalid link:zh-cn_topic_0000001153972080.xml#xref16101652152415,link:zh-cn_topic_0000001153498376.xml#section249133711278](zh-cn_topic_0000001153498376.xml#section249133711278) | 是 | 待保存的Want内容。 | - 返回值 | 类型 | 说明 | @@ -191,9 +191,9 @@ createWantRecord(want:Want): PasteDataRecord **系统能力**: SystemCapability.Miscservices.Pasteboard - 参数 - | 参数名 | 类型 | 必填 | 说明 | + | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | - | want | [Want](js-apis-featureAbility.md#want) | 是 | Want类型数据。 | + | want | [ERROR:Invalid link:zh-cn_topic_0000001153972080.xml#xref1929278214,link:zh-cn_topic_0000001153498376.xml#section249133711278](zh-cn_topic_0000001153498376.xml#section249133711278) | 是 | Want类型数据。 | - 返回值 | 类型 | 说明 | @@ -263,7 +263,7 @@ createUriRecord(uri:string): PasteDataRecord | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | | htmlText7+ | string | 是 | 否 | HTML文本内容。 | -| want7+ | [Want](js-apis-featureAbility.md#want) | 是 | 否 | Want文本内容。 | +| want7+ | [ERROR:Invalid link:zh-cn_topic_0000001153972080.xml#xref97376211378,link:zh-cn_topic_0000001153498376.xml#section249133711278](zh-cn_topic_0000001153498376.xml#section249133711278) | 是 | 否 | Want文本内容。 | | mimeType7+ | string | 是 | 否 | 数据类型。 | | plainText7+ | string | 是 | 否 | 文本内容。 | | uri7+ | string | 是 | 否 | URI内容。 | @@ -388,9 +388,9 @@ getPrimaryWant(): Want **系统能力**: SystemCapability.Miscservices.Pasteboard - 返回值 - | 类型 | 说明 | + | 类型 | 说明 | | -------- | -------- | - | [Want](js-apis-featureAbility.md#want) | Want对象内容。 | + | [ERROR:Invalid link:zh-cn_topic_0000001153972080.xml#xref731715497254,link:zh-cn_topic_0000001153498376.xml#section249133711278](zh-cn_topic_0000001153498376.xml#section249133711278) | Want对象内容。 | - 示例 @@ -474,7 +474,7 @@ addHtmlRecord(htmlText: string): void ### addWantRecord7+ -addWantRecord(want: Want): void +addWantRecord(want: [ERROR:Invalid link:zh-cn_topic_0000001153972080.xml#xref13369155013717,link:zh-cn_topic_0000001153498376.xml#section249133711278](zh-cn_topic_0000001153498376.xml#section249133711278)): void 向当前剪贴板内容中添加一条Want条目,并将MIMETYPE_TEXT_INTENT添加到[PasteDataProperty](#pastedataproperty7)的mimeTypes中。入参均不能为空,否则添加失败。 @@ -483,9 +483,9 @@ addWantRecord(want: Want): void **系统能力**: SystemCapability.Miscservices.Pasteboard - 参数 - | 参数名 | 类型 | 必填 | 说明 | + | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | - | want | [Want](js-apis-featureAbility.md#want) | 是 | Want对象内容。 | + | want | [ERROR:Invalid link:zh-cn_topic_0000001153972080.xml#xref179262227253,link:zh-cn_topic_0000001153498376.xml#section249133711278](zh-cn_topic_0000001153498376.xml#section249133711278) | 是 | Want对象内容。 | - 示例 diff --git a/zh-cn/application-dev/reference/apis/js-apis-request.md b/zh-cn/application-dev/reference/apis/js-apis-request.md index 4a7f928077..b853b07257 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-request.md +++ b/zh-cn/application-dev/reference/apis/js-apis-request.md @@ -1,4 +1,4 @@ -# 上传下载 +# 上传下载(新) > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-app.md b/zh-cn/application-dev/reference/apis/js-apis-system-app.md deleted file mode 100644 index 6ceb384650..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-app.md +++ /dev/null @@ -1,122 +0,0 @@ -# 应用上下文 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 从API Version 7 开始,该接口不再维护,推荐使用新接口。具体新接口在接口描述中说明。 -> -> - 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import app from '@system.app'; -``` - - -## app.getInfo - -getInfo(): <AppResponse> - -获取当前应用配置文件中声明的信息。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Lite - -**返回值:** -**表1** AppResponse - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| appID6+ | string | 表示应用的包名,用于标识应用的唯一性。 | -| appName | string | 表示应用的名称。 | -| versionName | string | 表示应用的版本名称。 | -| versionCode | number | 表示应用的版本号。 | - -**示例:** - - ``` - export default { - getInfo(){ - var info = app.getInfo(); - console.log(JSON.stringify(info)); - } - } - ``` - -## app.screenOnVisible - -screenOnVisible(Object): void - -应用申请息屏不返回主表盘,再次亮屏依旧显示应用界面。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| visible | boolean | 否 | 是否启动保活,默认值false。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**示例:** - - ``` - export default { - screenOnVisible(){ - app.screenOnVisible({ - visible: true, - success() { - console.log('call app.keepVisible success'); - }, - fail(data, code) { - console.log('call app.keepVisible fail'); - }, - }); - } - } - ``` - - -## app.terminate - -terminate(): void - -退出当前Ability。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Lite - -**示例:** - - ``` - export default { - terminate(){ - app.terminate(); - }} - ``` - -## app.requestFullWindow - -requestFullWindow(duration: number): void - -请求应用以全窗口运行,FA在某些场景下(如半模态FA)会以非全窗口运行,调用该接口会从非全窗口切换为全窗口运行,如果已经以全窗口运行则该接口调用无效。 - -此接口为系统接口,三方应用不支持调用。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| duration | number | 否 | 请求全屏时,设定非全屏到全屏的过渡时间,单位为毫秒,默认时间与非全屏到全屏的距离成正比。 | - -**示例:** - - ``` - export default { - requestFullWindow(){ - app.requestFullWindow({ - duration: 200}); - } - } - ``` diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-battery.md b/zh-cn/application-dev/reference/apis/js-apis-system-battery.md deleted file mode 100644 index 0370a7b99e..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-battery.md +++ /dev/null @@ -1,55 +0,0 @@ -# 电量信息 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 从API Version 6开始,该接口不再维护,推荐使用新接口['@ohos.batteryInfo'](js-apis-battery-info.md)。 -> -> - 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import battery from '@system.battery'; -``` - - -## battery.getStatus - -getStatus(Object): void - -获取设备当前的充电状态及剩余电量。 - -**系统能力:** SystemCapability.PowerManager.BatteryManager.Core - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| charging | boolean | 当前电池是否在充电中。 | -| level | number | 当前电池的电量,取值范围:0.00 - 1.00 。 | - -**示例:** - -``` -export default { - getStatus() { - battery.getStatus({ - success: function(data) { - console.log('success get battery level:' + data.level); - }, - fail: function(data, code) { - console.log('fail to get battery level code:' + code + ', data: ' + data); - }, - }); - }, -} -``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-bluetooth.md b/zh-cn/application-dev/reference/apis/js-apis-system-bluetooth.md deleted file mode 100644 index 78d6b4aaed..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-bluetooth.md +++ /dev/null @@ -1,175 +0,0 @@ -# 蓝牙 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import bluetooth from '@system.bluetooth'; -``` - - -## 权限列表 - -ohos.permission.USE_BLUETOOTH - -ohos.permission.DISCOVER_BLUETOOTH - -ohos.permission.MANAGE_BLUETOOTH - - -## bluetooth.startBLEScan(OBJECT) - -开始搜寻附近的低功耗蓝牙外围设备。此操作比较耗费系统资源,请在搜索并连接到设备后调用[bluetooth.stopBLEScan](#bluetoothstopblescanobject)方法停止搜索。 - -**需要权限:** ohos.permission.DISCOVER_BLUETOOTH、ohos.permission.LOCATION - -**系统能力:** SystemCapability.Communication.Bluetooth.Lite - -**参数:** -**表1** StartBLEScanOptions - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| interval | number | 否 | 上报设备的间隔,单位毫秒,默认值为0。0表示找到新设备立即上报,其他数值根据传入的间隔上报。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**示例:** - - ``` - bluetooth.startBLEScan({ - success() { - console.log('call bluetooth.startBLEScan success.'); - }, - fail(code, data) { - console.log('call bluetooth.startBLEScan failed, code: ${code}, data: ${data}.`); - }, - complete() { - console.log('call bluetooth.startBLEScan complete.'); - } - }); - ``` - - -## bluetooth.stopBLEScan(OBJECT) - -停止搜寻附近的低功耗蓝牙外围设备。与[bluetooth.startBLEScan(OBJECT)](#bluetoothstartblescanobject)接口配套使用。 - -**需要权限:** ohos.permission.DISCOVER_BLUETOOTH、ohos.permission.LOCATION - -**系统能力:** SystemCapability.Communication.Bluetooth.Lite - -**参数:** -**表2** StopBLEScanOptions - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**示例:** - - ``` - bluetooth.stopBLEScan({ - success() { - console.log('call bluetooth.stopBLEScan success.'); - }, - fail(data, code) { - console.log(`call bluethooth.stopBLEScan fail, code: ${code}, data: ${data}.`); - }, - complete() { - console.log('call bluethooth.stopBLEScan complete.'); - } - }); - ``` - - -## bluetooth.subscribeBLEFound(OBJECT) - -订阅寻找到新设备。再次调用时,会覆盖前一次调用效果,即仅最后一次调用生效。 - -**需要权限:** ohos.permission.DISCOVER_BLUETOOTH、ohos.permission.LOCATION - -**系统能力:** SystemCapability.Communication.Bluetooth.Lite - -**参数:** -**表3** SubscribeBLEFoundOptions - -| 参数 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 是 | 寻找到新设备上报时调用的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | - -**表4** success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| devices | Array<BluetoothDevice> | 新搜索到的设备列表。 | - -**表5** BluethoothDevice - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| addrType | string | 设备地址类型,可能值有:
    - public: 公共地址
    - random: 随机地址 | -| addr | string | 设备MAC地址。 | -| rssi | number | 设备蓝牙的信号强弱指标。 | -| txpower | string | 广播数据中的txpower字段。 | -| data | hex string | 广播数据(包含广播数据和扫描响应数据),十六进制字符串。 | - -**示例:** - - ``` - bluetooth.startaBLEScan({ - success() { - bluetooth.subscribeBLEFound({ - success(data) { - const [device] = data.devices; - if (!!device) { - bluetooth.stopBLEScan(); - } - } - }); - }, - fail(code, data) { - console.log('Failed to start BLE device scan, code: ${code}, data: ${data}`); - } - }); - ``` - - -## bluetooth.unsubscribeBLEFound() - -解除订阅寻找到新设备。 - -**需要权限:** ohos.permission.DISCOVER_BLUETOOTH、ohos.permission.LOCATION - -**系统能力:** SystemCapability.Communication.Bluetooth.Lite - -**示例:** - - ``` - bluetooth.unsubscribeBLEFound(); - ``` - - -## 常见错误码 - -| 错误码 | 说明 | -| -------- | -------- | -| 1100 | 是否处于已连接状态。 | -| 1101 | 当前蓝牙适配器不可用。 | -| 1102 | 没有找到指定设备。 | -| 1103 | 连接失败。 | -| 1104 | 没有找到指定服务。 | -| 1105 | 没有找到指定特征值。 | -| 1106 | 当前连接已断开。 | -| 1107 | 当前特征值不支持此操作。 | -| 1108 | 其余所有系统上报的异常。 | -| 1109 | 系统版本不支持 BLE。 | diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-brightness.md b/zh-cn/application-dev/reference/apis/js-apis-system-brightness.md deleted file mode 100644 index eadac91a59..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-brightness.md +++ /dev/null @@ -1,197 +0,0 @@ -# 屏幕亮度 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 从API Version 7 开始,该接口不再维护,推荐使用新接口['@ohos.brightness'](js-apis-brightness.md)。 -> -> - 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import brightness from '@system.brightness'; -``` - - -## brightness.getValue - -getValue(Object): void - -获得设备当前的屏幕亮度值。 - -**系统能力:** SystemCapability.PowerManager.DisplayPowerManager - -**参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| value | number | 屏幕亮度,取值为1-255之间的整数。 | - -**示例:** - - ``` - export default { - getValue() { - brightness.getValue({ - success: function(data){ - console.log('success get brightness value:' + data.value); - }, - fail: function(data, code) { - console.log('get brightness fail, code: ' + code + ', data: ' + data); - }, - }); - }, - } - ``` - - -## brightness.setValue - -setValue(Object): void - -设置设备当前的屏幕亮度值。 - -**系统能力:** SystemCapability.PowerManager.DisplayPowerManager - -**参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| value | number | 是 | 屏幕亮度,值为1-255之间的整数。
    - 如果值小于等于0,系统按1处理。
    - 如果值大于255,系统按255处理。
    - 如果值为小数,系统将处理为整数。例如设置为8.1,系统按8处理。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**示例:** - - ``` - export default { - setValue() { - brightness.setValue({ - value: 100, - success: function(){ - console.log('handling set brightness success.'); - }, - fail: function(data, code){ - console.log('handling set brightness value fail, code:' + code + ', data: ' + data); - }, - }); - }, - } - ``` - - -## brightness.getMode - -getMode(Object): void - -获得当前屏幕亮度模式。 - -**系统能力:** SystemCapability.PowerManager.DisplayPowerManager - -**参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - - success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| mode | number | 值为0或1:
    - 0为手动调节屏幕亮度模式
    - 1为自动调节屏幕亮度模式 | - -**示例:** - - ``` - export default { - getMode() { - brightness.getMode({ - success: function(data){ - console.log('success get mode:' + data.mode); - }, - fail: function(data, code){ - console.log('handling get mode fail, code:' + code + ', data: ' + data); - }, - }); - }, - } - ``` - - -## brightness.setMode - -setMode(Object): void - -设置设备当前的屏幕亮度模式。 - -**系统能力:** SystemCapability.PowerManager.DisplayPowerManager - -**参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| mode | number | 是 | 值为0或1
    - 0为手动调节屏幕亮度
    - 1为自动调节屏幕亮度 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**示例:** - - ``` - export default { - setMode() { - brightness.setMode({ - mode: 1, - success: function(){ - console.log('handling set mode success.'); - }, - fail: function(data, code){ - console.log('handling set mode fail, code:' + code + ', data: ' + data); - }, - }); - }, - } - ``` - - -## brightness.setKeepScreenOn - -setKeepScreenOn(Object): void - -设置屏幕是否保持常亮状态,开启常亮模式推荐在onShow()阶段调用。 - -**系统能力:** SystemCapability.PowerManager.DisplayPowerManager - -**参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| keepScreenOn | boolean | 是 | 是否保持屏幕常亮。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**示例:** - - ``` - export default { - setKeepScreenOn() { - brightness.setKeepScreenOn({ - keepScreenOn: true, - success: function () { - console.log('handling set keep screen on success.') - }, - fail: function (data, code) { - console.log('handling set keep screen on fail, code:' + code + ', data: ' + data); - }, - }); - }, - } - ``` diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-cipher.md b/zh-cn/application-dev/reference/apis/js-apis-system-cipher.md deleted file mode 100644 index 7d434d3c98..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-cipher.md +++ /dev/null @@ -1,164 +0,0 @@ -# 加密算法 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> -> 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import cipher from '@system.cipher' -``` - - -## cipher.rsa - -rsa(Object): void - -RSA 算法加解密。 - -**系统能力:** SystemCapability.Security.Cipher - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| action | string | 是 | 加密类型,可选项有:
    1. encrypt 加密
    2. decrypt 解密 | -| text | string | 是 | 待加密或解密的文本内容。待加密的文本内容应该是一段普通文本,长度不能超过 keySize / 8 - 66,其中 keySize 是密钥的长度(例如密钥长度为 1024 时,text 不能超过 62 个字节)。待解密的文本内容应该是经过 base64 编码的一段二进制值。base64 编码使用默认风格。 | -| key | string | 是 | 加密的密钥,RSA的密钥。加密时key为公钥,解密时key为私钥 | -| transformation | string | 否 | RSA算法的填充项,默认为RSA/None/OAEPWithSHA256AndMGF1Padding | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**示例:** - -``` -export default { - rsa() { - cipher.rsa({ - //加密 - action: 'encrypt', - //待加密的文本内容 - text: 'hello', - //base64编码后的加密公钥 - key: - 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc7GR2MrfAoefES+wrs1ns2afT\n' + - 'eJXSfIkEHfPXG9fVFjaws1ho4KcZfsxlA0+SXvc83f2SVGCuzULmM2lxxRCtcUN/\n' + - 'h7SoaYEeluhqFimL2AEjfSwINHCLqObJkcjCfoZpE1JCehPiDOJsyT50Auc08h/4\n' + - 'jHQfanyC1nc62LqUCQIDAQAB', - success: function(data) { - console.log('handling success: ${data.text}'); - }, - fail: function(data, code) { - console.log(`### cipher.rsa encrypt fail ### ${code}: ${data}`); - } - }); - cipher.rsa({ - //解密: - action: 'decrypt', - //待解密的内容,是base64编码后的一段二进制值,解密后是文本内容“hello” - text: - 'CUg3tTxTIdpCfreIxIBdws3uhd5qXLwcrVl3XDnQzZFVHyjVVCDHS16rjopaZ4C5xU2Tc8mSDzt7\n' + - 'gp9vBfSwi7bMtSUvXG18DlncsKJFDkJpS5t0PkpS9YrJXrY80Gpe+ME6+6dN9bjgqMljbitDdBRf\n' + - 'S/ZWNI4Q8Q0suNjNkGU=', - //base64编码后的解密私钥 - key: - 'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANzsZHYyt8Ch58RL\n' + - '7CuzWezZp9N4ldJ8iQQd89cb19UWNrCzWGjgpxl+zGUDT5Je9zzd/ZJUYK7NQuYz\n' + - 'aXHFEK1xQ3+HtKhpgR6W6GoWKYvYASN9LAg0cIuo5smRyMJ+hmkTUkJ6E+IM4mzJ\n' + - 'PnQC5zTyH/iMdB9qfILWdzrYupQJAgMBAAECgYEAkibhH0DWR13U0gvYJeD08Lfd\n' + - 'Sw1PMHyquEqIcho9Yv7bF3LOXjOg2EEGPx09mvuwXFgP1Kp1e67XPytr6pQQPzK7\n' + - 'XAPcLPx80R/ZjZs8vNFndDOd1HgD3vSVmYQarNzmKi72tOUWMPevsaFXPHo6Xx3X\n' + - '8x0wYb7XuBsQguRctTECQQD7GWX3JUiyo562iVrpTDPOXsrUxmzCrgz2OZildxMd\n' + - 'Pp/PkyDrx7mEXTpk4K/XnQJ3GpJNi2iDSxDuPSAeJ/aPAkEA4Tw4+1Z43S/xH3C3\n' + - 'nfulYBNyB4si6KEUuC0krcC1pDJ21Gd12efKo5VF8SaJI1ZUQOzguV+dqNsB/JUY\n' + - 'OFfX5wJAB1dKv9r7MR3Peg6x9bggm5vx2h6i914XSuuMJupASM6X5X2rrLj+F3yS\n' + - 'RHi9K1SPyeOg+1tkBtKfABgRZFBOyQJAbuTivUSe73AqTKuHjB4ZF0ubqgEkJ9sf\n' + - 'Q2rekzm9dOFvxjZGPQo1qALX09qATMi1ZN376ukby8ZAnSafLSZ64wJBAM2V37go\n' + - 'Sj44HF76ksRow8gecuQm48NCTGAGTicXg8riKog2GC9y8pMNHAezoR9wXJF7kk+k\n' + - 'lz5cHyoMZ9mcd30=', - success: function(data) { - console.log('handling success: ${data.text}'); - }, - fail: function(data, code) { - console.log(`### cipher.rsa decrypt fail ### ${code}: ${data}`); - }, - }); - } -} -``` - - -## cipher.aes - -aes(Object): void - -AES 算法加解密。 - -**系统能力:** SystemCapability.Security.Cipher - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| action | string | 是 | 加密类型,可选项有:
    1. encrypt 加密
    2. decrypt 解密 | -| text | string | 是 | 待加密或解密的文本内容。待加密的文本内容应该是一段普通文本。待解密的文本内容应该是经过 base64 编码的一段二进制值。base64 编码使用默认风格 | -| key | string | 是 | 加密或解密使用到的密钥,经过 base64 编码后生成的字符串 | -| transformation | string | 否 | AES算法的加密模式和填充项,默认AES/CBC/PKCS5Padding | -| iv | string | 否 | AES加解密的初始向量,经过base64编码后的字符串,默认值为key值 | -| ivOffset | string | 否 | AES加解密的初始向量偏移,默认值0 | -| ivLen | string | 否 | AES加解密的初始向量字节长度,默认值16 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**示例:** - -``` -export default { - aes() { - cipher.aes({ - //加密 - action: 'encrypt', - //待加密的文本内容 - text: 'hello', - //base64编码后的密钥 - key: 'NDM5Qjk2UjAzMEE0NzVCRjlFMkQwQkVGOFc1NkM1QkQ=', - transformation: 'AES/CBC/PKCS5Padding', - ivOffset: 0, - ivLen: 16, - success: (data) => { - console.log('handling success: ${data.text}'); - }, - fail: (data, code) => { - console.log(`### cipher.aes encrypt fail ### ${code}: ${data}`); - } - }); - cipher.aes({ - //解密: - action: 'decrypt', - //待解密的内容,是base64编码后的一段二进制值 - text: 'CUg3tTxTIdpCfreIxIBdws3uhd5qXLwcrVl3XDnQzZFVHyjVVCDHS16rjopaZ4C5xU2Tc8mSDzt7\n' + - 'gp9vBfSwi7bMtSUvXG18DlncsKJFDkJpS5t0PkpS9YrJXrY80Gpe+ME6+6dN9bjgqMljbitDdBRf\n' + - 'S/ZWNI4Q8Q0suNjNkGU=', - //base64编码后的密钥 - key: 'NDM5Qjk2UjAzMEE0NzVCRjlFMkQwQkVGOFc1NkM1QkQ=', - transformation: 'AES/CBC/PKCS5Padding', - ivOffset: 0, - ivLen: 16, - success: (data) => { - this.dealTxt = data.text; - }, - fail: (data, code) => { - prompt.showToast({ - message: (`### cipher.aes decrypt fail ### code = ${code}: ${data}`) - }) - }, - }); - } -} - -``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-configuration.md b/zh-cn/application-dev/reference/apis/js-apis-system-configuration.md deleted file mode 100644 index d754366355..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-configuration.md +++ /dev/null @@ -1,45 +0,0 @@ -# 应用配置 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 从API Version 7 开始,该接口不再维护,推荐使用新接口['@ohos.i18n'](js-apis-i18n.md)和['@ohos.intl'](js-apis-intl.md)。 -> -> -> - 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import configuration from '@system.configuration'; -``` - - -## configuration.getLocale - -getLocale(): <LocaleResponse> - -获取应用当前的语言和地区。默认与系统的语言和地区同步。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Lite - -**返回值:** -**表1** LocaleResponse - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| language | string | 语言。例如:zh。 | -| countryOrRegion | string | 国家或地区。例如:CN。 | -| dir | string | 文字布局方向。取值范围:
    - ltr:从左到右;
    - rtl:从右到左。 | -| unicodeSetting5+ | string | 语言环境定义的Unicode语言环境键集,如果此语言环境没有特定键集,则返回空集。
    例如:{"nu":"arab"},表示当前环境下的数字采用阿拉伯语的数字。 | - -**示例:** - -``` -export default { - getLocale() { - const localeInfo = configuration.getLocale(); - console.info(localeInfo.language); - } -} -``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-deviceinfo.md b/zh-cn/application-dev/reference/apis/js-apis-system-deviceinfo.md deleted file mode 100644 index 7deaf91a5a..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-deviceinfo.md +++ /dev/null @@ -1,75 +0,0 @@ -# 设备信息 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 从API Version 6开始,该接口不再维护,推荐使用新接口['@ohos.deviceInfo'](js-apis-device-info.md)进行设备信息查询。 -> -> - 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import device from '@system.device'; -``` - - -## device.getInfo - -getInfo(Object): void - -获取当前设备的信息。 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 在首页的onShow生命周期之前不建议调用device.getInfo接口。 - -**系统能力:** SystemCapability.Startup.SysInfo - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| brand | string | 品牌。 | -| manufacturer | string | 生产商。 | -| model | string | 型号。 | -| product | string | 代号。 | -| language4+ | string | 系统语言。 | -| region4+ | string | 系统地区。 | -| windowWidth | number | 可使用的窗口宽度。 | -| windowHeight | number | 可使用的窗口高度。 | -| screenDensity4+ | number | 屏幕密度。 | -| screenShape4+ | string | 屏幕形状。可取值:
    - rect:方形屏;
    - circle:圆形屏。 | -| apiVersion4+ | number | 系统API版本号。 | -| releaseType4+ | string | 版本发布类型,值为类型+版本号,如Beta1。
    类型可能值有:
    - Canary:同一apiVersion下,canary版本之间保持API兼容,beta版本不对canary版本兼容。
    - Beta:同一apiVersion下,beta版本之间保持API兼容,release版本不对beta版本兼容。
    - Release:release版本会保持5个API版本兼容。 | -| deviceType4+ | string | 设备类型,可能值有:
    - phone:智能手机
    - tablet:平板
    - tv:智慧屏
    - wearable:智能穿戴
    - liteWearable:轻量级智能穿戴
    - ar:增强现实
    - vr:虚拟现实
    - earphones:耳机
    - pc:个人计算机
    - speaker:音箱
    - smartVision:智能视觉设备
    - linkIoT:联接类模组 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 200 | 返回结果中存在无法获得的信息。 | - -**示例:** - -``` -export default { - getInfo() { - device.getInfo({ - success: function(data) { - console.log('Device information obtained successfully. Device brand:' + data.brand); - }, - fail: function(data, code) { - console.log('Failed to obtain device information. Error code:'+ code + '; Error information: ' + data); - }, - }); - }, -} -``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-fetch.md b/zh-cn/application-dev/reference/apis/js-apis-system-fetch.md deleted file mode 100644 index 678ead5ffa..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-fetch.md +++ /dev/null @@ -1,104 +0,0 @@ -# 数据请求 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 从API Version 6开始,该接口不再维护,推荐使用新接口['@ohos.net.http'](js-apis-http.md)。 -> -> - 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import fetch from '@system.fetch'; -``` - - -## fetch.fetch - -fetch(Object): void - -通过网络获取数据。 - -**需要权限:** ohos.permission.INTERNET - -**系统能力:** SystemCapability.Communication.NetStack - -**参数:** -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| url | string | 是 | 资源地址。 | -| data | string \| Object | 否 | 请求的参数,可选类型是字符串或者json对象。详见表 data与Content-Type关系。 | -| header | Object | 否 | 设置请求的header。 | -| method | string | 否 | 请求方法默认为GET,可选值为:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE。 | -| responseType | string | 否 | 默认会根据服务器返回header中的Content-Type确定返回类型,支持文本和json格式。详见success返回值。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**表1** data与Content-Type关系 - -| data | Content-Type | 说明 | -| -------- | -------- | -------- | -| string | 不设置 | Content-Type默认为 text/plain,data值作为请求的body。 | -| string | 任意 Type | data值作为请求的body。 | -| Object | 不设置 | Content-Type默认为application/x-www-form-urlencoded,data按照资源地址规则进行encode拼接作为请求的body。 | -| Object | application/x-www-form-urlencoded | data按照资源地址规则进行encode拼接作为请求的body。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| code | number | 表示服务器的状态code。 | -| data | string \| Object | 返回数据类型由responseType确定,详见表 responseType与success中data关系。 | -| headers | Object | 表示服务器response的所有header。 | - -**表2** responseType与success中data关系 - -| responseType | data | 说明 | -| -------- | -------- | -------- | -| 无 | string | 服务器返回的header中的type如果是text/\*或application/json、application/javascript、application/xml,值为文本内容。 | -| text | string | 返回文本内容。 | -| json | Object | 返回json格式的对象。 | - -**示例:** - -``` -export default { - data: { - responseData: 'NA', - url: "test_url", - }, - fetch: function () { - var that = this; - fetch.fetch({ - url: that.url, - success: function(response) { - console.info("fetch success"); - that.responseData = JSON.stringify(response); - }, - fail: function() { - console.info("fetch fail"); - } - }); - } -} -``` - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 默认支持https,如果要支持http,需要在config.json里增加network标签,属性标识 "cleartextTraffic": true。即: -> -> ``` -> { -> "deviceConfig": { -> "default": { -> "network": { -> "cleartextTraffic": true -> } -> ... -> } -> } -> ... -> } -> ``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-file.md b/zh-cn/application-dev/reference/apis/js-apis-system-file.md deleted file mode 100644 index f43e669498..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-file.md +++ /dev/null @@ -1,599 +0,0 @@ -# 文件存储 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 从API Version 6开始,该接口不再维护,推荐使用新接口['@ohos.fileio'](js-apis-fileio.md)。 -> -> - 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import file from '@system.file'; -``` - - -## file.move - -move(Object): void - -将指定文件移动到其他指定位置。 - -**系统能力:** SystemCapability.FileManagement.File.FileIO - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| srcUri | string | 是 | 要移动的文件的uri。字符串最大长度为128,且不能包含“"\*+,:;<=>?[]\|\x7F”等特殊符号。 | -| dstUri | string | 是 | 文件要移动到的位置的uri。字符串最大长度为128,且不能包含“"\*+,:;<=>?[]\|\x7F”等特殊符号。 | -| success | Function | 否 | 接口调用成功的回调函数,返回文件要移动到的位置的uri。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 202 | 出现参数错误。 | -| 300 | 出现I/O错误。 | -| 301 | 文件或目录不存在。 | - -**示例:** - -``` -export default { - move() { - file.move({ - srcUri: 'internal://app/myfiles1', - dstUri: 'internal://app/myfiles2', - success: function(uri) { - console.log('call success callback success'); - }, - fail: function(data, code) { - console.error('call fail callback fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` - - -## file.copy - -copy(Object): void - -将指定文件拷贝并存储到指定位置。 - -**系统能力:** SystemCapability.FileManagement.File.FileIO - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| srcUri | string | 是 | 要拷贝的文件的uri。 | -| dstUri | string | 是 | 文件要拷贝到的位置的uri。
    不支持用应用资源路径或tmp类型的uri。 | -| success | Function | 否 | 接口调用成功的回调函数,返回文件要拷贝到的位置的uri。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 202 | 出现参数错误。 | -| 300 | 出现I/O错误。 | -| 301 | 文件或目录不存在。 | - -**示例:** - -``` -export default { - copy() { - file.copy({ - srcUri: 'internal://app/file.txt', - dstUri: 'internal://app/file_copy.txt', - success: function(uri) { - console.log('call success callback success'); - }, - fail: function(data, code) { - console.error('call fail callback fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` - - -## file.list - -list(Object): void - -获取指定路径下全部文件的列表。 - -**系统能力:** SystemCapability.FileManagement.File.FileIO - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| uri | string | 是 | 目录uri。字符串最大长度为128,且不能包含“"\*+,:;<=>?[]\|\x7F”等特殊符号。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| fileList | Array<FileInfo> | 获取的文件列表,其中每个文件的信息的格式为:
    {
    uri:'file1',
    lastModifiedTime:1589965924479,
    length:10240,
    type: 'file'
    } | - -**表1** FileInfo - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| uri | string | 文件的 uri。 | -| lastModifiedTime | number | 文件上一次保存时的时间戳,显示从1970/01/01 00:00:00 GMT到当前时间的毫秒数。 | -| length | number | 文件的大小,单位为字节。 | -| type | string | 文件的类型,可选值为:
    - dir:目录;
    - file:文件。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 202 | 出现参数错误。 | -| 300 | 出现I/O错误。 | -| 301 | 文件或目录不存在。 | - -**示例:** - -``` -export default { - list() { - file.list({ - uri: 'internal://app/pic', - success: function(data) { - console.log(data.fileList); - }, - fail: function(data, code) { - console.error('call fail callback fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` - - -## file.get - -get(Object): void - -获取指定本地文件的信息。 - -**系统能力:** SystemCapability.FileManagement.File.FileIO - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| uri | string | 是 | 文件的uri。 | -| recursive | boolean | 否 | 是否进行递归获取子目录文件列表,缺省为false。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| uri | string | 文件的uri。 | -| length | number | 文件字节长。 | -| lastModifiedTime | number | 文件保存时的时间戳,从1970/01/01 00:00:00到当前时间的毫秒数。 | -| type | string | 文件类型,可选值为:
    - dir:目录;
    - file:文件。 | -| subFiles | Array | 文件列表。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 202 | 出现参数错误。 | -| 300 | 出现I/O错误。 | -| 301 | 文件或目录不存在。 | - -**示例:** - -``` -export default { - get() { - file.get({ - uri: 'internal://app/file', - success: function(data) { - console.log(data.uri); - }, - fail: function(data, code) { - console.error('call fail callback fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` - - -## file.delete - -delete(Object): void - -删除本地文件。 - -**系统能力:** SystemCapability.FileManagement.File.FileIO - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| uri | string | 是 | 删除文件的uri,不能是应用资源路径。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 202 | 参数错误。 | -| 300 | I/O错误。 | -| 301 | 文件或目录不存在。 | - -**示例:** - -``` -export default { - delete() { - file.delete({ - uri: 'internal://app/my_file', - success: function() { - console.log('call delete success.'); - }, - fail: function(data, code) { - console.error('call fail callback fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` - - -## file.writeText - -writeText(Object): void - -写文本内容到指定文件。仅支持文本文档读写。 - -**系统能力:** SystemCapability.FileManagement.File.FileIO - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| uri | string | 是 | 本地文件uri,如果文件不存在会创建文件。 | -| text | string | 是 | 写入的字符串。 | -| encoding | string | 否 | 编码格式,默认为UTF-8。 | -| append | boolean | 否 | 是否追加模式,默认为false。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 202 | 参数错误。 | -| 300 | I/O错误。 | - -**示例:** - -``` -export default { - writeText() { - file.writeText({ - uri: 'internal://app/test.txt', - text: 'Text that just for test.', - success: function() { - console.log('call writeText success.'); - }, - fail: function(data, code) { - console.error('call fail callback fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` - - -## file.writeArrayBuffer - -writeArrayBuffer(Object): void - -写Buffer内容到指定文件。仅支持文本文档读写。 - -**系统能力:** SystemCapability.FileManagement.File.FileIO - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| uri | string | 是 | 本地文件uri,如果文件不存在会创建文件。 | -| buffer | Uint8Array | 是 | 写入的Buffer。 | -| position | number | 否 | 文件开始写入数据的位置的偏移量,默认为0。 | -| append | boolean | 否 | 是否追加模式,默认为false。当设置为true时,position参数无效。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 202 | 出现参数错误。 | -| 300 | 出现I/O错误。 | - -**示例:** - -``` -export default { - writeArrayBuffer() { - file.writeArrayBuffer({ - uri: 'internal://app/test', - buffer: new Uint8Array(8), //buffer为Uint8Array类型 - success: function() { - console.log('call writeArrayBuffer success.'); - }, - fail: function(data, code) { - console.error('call fail callback fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` - - -## file.readText - -readText(Object): void - -从指定文件中读取文本内容。仅支持文本文档读写。 - -**系统能力:** SystemCapability.FileManagement.File.FileIO - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| uri | string | 是 | 本地文件uri。 | -| encoding | string | 否 | 编码格式,缺省为UTF-8。 | -| position | number | 否 | 读取的起始位置,默认值为文件的起始位置。 | -| length | number | 否 | 读取的长度,默认值为4096。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| text | string | 读取到的文本内容。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 202 | 出现参数错误。 | -| 300 | 出现I/O错误。 | -| 301 | 文件或目录不存在。 | -| 302 | 要读取的文件内容超过4KB。 | - -**示例:** - -``` -export default { - readText() { - file.readText({ - uri: 'internal://app/text.txt', - success: function(data) { - console.log('call readText success: ' + data.text); - }, - fail: function(data, code) { - console.error('call fail callback fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` - - -## file.readArrayBuffer - -readArrayBuffer(Object): void - -从指定文件中读取Buffer内容。仅支持文本文档读写。 - -**系统能力:** SystemCapability.FileManagement.File.FileIO - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| uri | string | 是 | 本地文件uri。 | -| position | number | 否 | 读取的起始位置,缺省为文件的起始位置。 | -| length | number | 否 | 需要读取的长度,缺省则读取到文件结尾。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| buffer | Uint8Array | 读取到的文件内容。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 202 | 出现参数错误。 | -| 300 | 出现I/O错误。 | -| 301 | 文件或目录不存在。 | - -**示例:** - -``` -export default { - readArrayBuffer() { - file.readArrayBuffer({ - uri: 'internal://app/test', - position: 10, - length: 200, - success: function(data) { - console.log('call readArrayBuffer success: ' + data.buffer); - }, - fail: function(data, code) { - console.error('call fail callback fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` - - -## file.access - -access(Object): void - -判断指定文件或目录是否存在。 - -**系统能力:** SystemCapability.FileManagement.File.FileIO - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| uri | string | 是 | 目录或文件uri。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 202 | 出现参数错误。 | -| 300 | 出现I/O 错误。 | -| 301 | 文件或目录不存在。 | - -**示例:** - -``` -export default { - access() { - file.access({ - uri: 'internal://app/test', - success: function() { - console.log('call access success.'); - }, - fail: function(data, code) { - console.error('call fail callback fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` - - -## file.mkdir - -mkdir(Object): void - -创建指定目录。 - -**系统能力:** SystemCapability.FileManagement.File.FileIO - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| uri | string | 是 | 目录的uri路径。 | -| recursive | boolean | 否 | 是否递归创建该目录的上级目录,缺省为false。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 202 | 出现参数错误。 | -| 300 | 出现I/O 错误。 | - -**示例:** - -``` -export default { - mkdir() { - file.mkdir({ - uri: 'internal://app/test_directory', - success: function() { - console.log('call mkdir success.'); - }, - fail: function(data, code) { - console.error('call fail callback fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` - - -## file.rmdir - -rmdir(Object): void - -删除指定目录。 - -**系统能力:** SystemCapability.FileManagement.File.FileIO - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| uri | string | 是 | 目录的uri路径。 | -| recursive | boolean | 否 | 是否递归删除子文件和子目录,缺省为false。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 202 | 出现参数错误。 | -| 300 | 出现I/O 错误。 | -| 301 | 文件或目录不存在。 | - -**示例:** - -``` -export default { - rmdir() { - file.rmdir({ - uri: 'internal://app/test_directory', - success: function() { - console.log('call rmdir success.'); - }, - fail: function(data, code) { - console.error('call fail callback fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-location.md b/zh-cn/application-dev/reference/apis/js-apis-system-location.md deleted file mode 100644 index 0c5e8bde4c..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-location.md +++ /dev/null @@ -1,211 +0,0 @@ -# 地理位置 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 从API Version 7 开始,该接口不再维护,推荐使用新接口['@ohos.geolocation'](js-apis-geolocation.md)。 -> -> - 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import geolocation from '@system.geolocation'; -``` - - -## 权限列表 - -ohos.permission.LOCATION - - -## geolocation.getLocation - -getLocation(Object): void - -获取设备的地理位置。 - -**系统能力:** SystemCapability.Location.Location.Lite - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| timeout | number | 否 | 超时时间,单位为ms,默认值为30000。
    设置超时,是为了防止出现权限被系统拒绝、定位信号弱或者定位设置不当,导致请求阻塞的情况。超时后会使用fail回调函数。
    取值范围为32位正整数。如果设置值小于等于0,系统按默认值处理。 | -| coordType | string | 否 | 坐标系的类型,可通过getSupportedCoordTypes获取可选值,缺省值为wgs84。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| longitude | number | 设备位置信息:经度。 | -| latitude | number | 设备位置信息:纬度。 | -| altitude | number | 设备位置信息:海拔。 | -| accuracy | number | 设备位置信息:精确度。 | -| time | number | 设备位置信息:时间。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 601 | 获取定位权限失败,失败原因:用户拒绝。 | -| 602 | 权限未声明。 | -| 800 | 超时,失败原因:网络状况不佳或GPS不可用。 | -| 801 | 系统位置开关未打开。 | -| 802 | 该次调用结果未返回前接口又被重新调用,该次调用失败返回错误码。 | - -**示例:** - -``` -export default { - getLocation() { - geolocation.getLocation({ - success: function(data) { - console.log('success get location data. latitude:' + data.latitude); - }, - fail: function(data, code) { - console.log('fail to get location. code:' + code + ', data:' + data); - }, - }); - }, -} -``` - - -## geolocation.getLocationType - -getLocationType(Object): void - -获取当前设备支持的定位类型。 - -**系统能力:** SystemCapability.Location.Location.Lite - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| types | Array<string> | 可选的定位类型['gps', 'network']。 | - -**示例:** - -``` -export default { - getLocationType() { - geolocation.getLocationType({ - success: function(data) { - console.log('success get location type:' + data.types[0]); - }, - fail: function(data, code) { - console.log('fail to get location. code:' + code + ', data:' + data); - }, - }); - }, -} -``` - - -## geolocation.subscribe - -subscribe(Object): void - -订阅设备的地理位置信息。多次调用的话,只有最后一次的调用生效。 - -**系统能力:** SystemCapability.Location.Location.Lite - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| coordType | string | 否 | 坐标系的类型,可通过getSupportedCoordTypes获取可选值,默认值为wgs84。 | -| success | Function | 是 | 位置信息发生变化的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| longitude | number | 设备位置信息:经度。 | -| latitude | number | 设备位置信息:纬度。 | -| altitude | number | 设备位置信息:海拔。 | -| accuracy | number | 设备位置信息:精确度。 | -| time | number | 设备位置信息:时间。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 601 | 获取定位权限失败,失败原因:用户拒绝。 | -| 602 | 权限未声明。 | -| 801 | 系统位置开关未打开。 | - -**示例:** - -``` -export default { - subscribe() { - geolocation.subscribe({ - success: function(data) { - console.log('get location. latitude:' + data.latitude); - }, - fail: function(data, code) { - console.log('fail to get location. code:' + code + ', data:' + data); - }, - }); - }, -} -``` - - -## geolocation.unsubscribe - -unsubscribe(): void - -取消订阅设备的地理位置信息。 - -**系统能力:** SystemCapability.Location.Location.Lite - -**示例:** - -``` -export default { - unsubscribe() { - geolocation.unsubscribe(); - }, -} -``` - - -## geolocation.getSupportedCoordTypes - -getSupportedCoordTypes(): Array<string> - -获取设备支持的坐标系类型。 - -**系统能力:** SystemCapability.Location.Location.Lite - -**返回值:** - -| 类型 | 非空 | 说明 | -| -------- | -------- | -------- | -| Array<string> | 是 | 表示坐标系类型,如[wgs84, gcj02]。 | - -**示例:** - -``` -export default { - getSupportedCoordTypes() { - var types = geolocation.getSupportedCoordTypes(); - }, -} -``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-mediaquery.md b/zh-cn/application-dev/reference/apis/js-apis-system-mediaquery.md deleted file mode 100644 index 08ca1c593b..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-mediaquery.md +++ /dev/null @@ -1,105 +0,0 @@ -# 媒体查询 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import mediaquery from '@system.mediaquery'; -``` - - -## mediaquery.matchMedia - -matchMedia(condition: string): <MediaQueryList> - -根据媒体查询条件,创建MediaQueryList对象。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| condition | string | 是 | 用于查询的条件。 | - -**返回值:** -**表1** MediaQueryList - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| MediaQueryList | Object | 表示创建MediaQueryList对象的属性,详情见下表 MediaQueryList说明。 | - -**示例:** - -``` -export default { - matchMedia() { - var mMediaQueryList = mediaquery.matchMedia('(max-width: 466)'); - }, -} -``` - - **表2** MediaQueryList说明 - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| matches | boolean | 如果查询条件匹配成功则返回true,否则返回值为false。只读。 | -| media | string | 序列化的媒体查询条件,只读。 | -| onchange | Function | matches状态变化时的执行函数。 | - - -## MediaQueryList.addListener - -addListener(Object): void - -给MediaQueryList添加回调函数,回调函数应在onShow生命周期之前添加,即需要在onInit或onReady生命周期里添加。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| callback | Function | 是 | 匹配条件发生变化的响应函数。 | - -**示例:** - -``` -export default { - onReady() { - var mMediaQueryList = mediaquery.matchMedia('(max-width: 466)'); - function maxWidthMatch(e) { - if (e.matches) { - // do something - } - } - mMediaQueryList.addListener(maxWidthMatch); - }, -} -``` - - -## MediaQueryList.removeListener - -removeListener(Object): void - -移除MediaQueryList中的回调函数。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| callback | Function | 是 | 匹配条件发生变化的响应函数。 | - -**示例:** - -``` -query.removeListener(minWidthMatch); -``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-network.md b/zh-cn/application-dev/reference/apis/js-apis-system-network.md deleted file mode 100644 index fa0b34f7a1..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-network.md +++ /dev/null @@ -1,134 +0,0 @@ -# 网络状态 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 从API Version 7 开始,该接口不再维护,推荐使用新接口['@ohos.telephony.observer'](js-apis-observer.md)。 -> -> - 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import network from '@system.network'; -``` - - -## 权限列表 - -ohos.permission.GET_WIFI_INFO - -ohos.permission.GET_NETWORK_INFO - - -## network.getType - -getType(Object): void - -获取当前设备的网络类型。 - -**系统能力:** SystemCapability.Communication.NetManager.Core - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| metered | boolean | 是否按照流量计费。 | -| type | string | 网络类型,可能的值有2g,3g,4g,5g,wifi,none等。 | - -fail返回值: - -| 错误码 | 说明 | -| -------- | -------- | -| 602 | 当前权限未声明。 | - -**示例:** - -``` -export default { - getType() { - network.getType({ - success: function(data) { - console.log('success get network type:' + data.type); - }, - fail: function(data, code) { - console.log('fail to get network type code:' + code + ', data:' + data); - }, - }); - }, -} -``` - - -## network.subscribe - -subscribe(Object): void - -订阅当前设备的网络连接状态。如果多次调用,会覆盖前一次调用。 - -**系统能力:** SystemCapability.Communication.NetManager.Core - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 否 | 网络发生变化的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| metered | boolean | 是否按照流量计费。 | -| type | string | 网络类型,可能的值为2g,3g,4g,5g,wifi,none。 | - -fail返回值: - -| 错误码 | 说明 | -| -------- | -------- | -| 602 | 当前权限未声明。 | -| 200 | 订阅失败。 | - -**示例:** - -``` -export default { - subscribe() { - network.subscribe({ - success: function(data) { - console.log('network type change type:' + data.type); - }, - fail: function(data, code) { - console.log('fail to subscribe network, code:' + code + ', data:' + data); - }, - }); - }, -} -``` - - -## network.unsubscribe - -unsubscribe(): void - -取消订阅设备的网络连接状态。 - -**系统能力:** SystemCapability.Communication.NetManager.Core - -**示例:** - -``` -export default { - unsubscribe() { - network.unsubscribe(); - }, -} -``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-notification.md b/zh-cn/application-dev/reference/apis/js-apis-system-notification.md deleted file mode 100644 index e0fac1ec7e..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-notification.md +++ /dev/null @@ -1,58 +0,0 @@ -# 通知消息 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 从API Version 7 开始,该接口不再维护,推荐使用新接口['@ohos.notification'](js-apis-notification.md)。 -> -> - 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import notification from '@system.notification'; -``` - - -## notification.show - -show(contentTitle: string, contentText: string, clickAction: ActionInfo): void - -显示通知。 - -**系统能力:** SystemCapability.Notification.Notification - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| contentTitle | string | 否 | 通知标题。 | -| contentText | string | 否 | 通知内容。 | -| clickAction | ActionInfo | 否 | 通知点击后触发的动作。 | - - **表1** ActionInfo - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| bundleName | string | 是 | 点击通知后要跳转到的应用的bundleName | -| abilityName | string | 是 | 点击通知后要跳转到的应用的abilityName | -| uri | string | 是 | 要跳转到的uri,可以是下面的两种格式:
    - 页面绝对路径,由配置文件中pages列表提供,例如:
      - pages/index/index
      - pages/detail/detail
    - 特殊的,如果uri的值是"/",则跳转到首页。 | - -**示例:** - -``` -export default { - show() { - notification.show({ - contentTitle: 'title info', - contentText: 'text', - clickAction: { - bundleName: 'com.example.testapp', - abilityName: 'notificationDemo', - uri: '/path/to/notification', - }, - }); - }, -} -; -``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-package.md b/zh-cn/application-dev/reference/apis/js-apis-system-package.md deleted file mode 100644 index 5572556897..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-package.md +++ /dev/null @@ -1,57 +0,0 @@ -# 应用管理 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import pkg from '@system.package'; -``` - - -## package.hasInstalled - -hasInstalled(Object): void - -查询指定应用是否存在,或者原生应用是否安装。 - -**需要权限:** ohos.permission.GET_BUNDLE_INFO - -**系统能力:** SystemCapability.BundleManager.BundleFramework - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| bundleName | string | 是 | 应用包名。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| result | boolean | 表示查询的应用是否存在,或者原生应用是否安装。 | - -**示例:** - -``` -export default { - hasInstalled() { - pkg.hasInstalled({ - bundleName: 'com.example.bundlename', - success: function(data) { - console.log('package has installed: ' + data); - }, - fail: function(data, code) { - console.log('query package fail, code: ' + code + ', data: ' + data); - }, - }); - }, -} -``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-prompt.md b/zh-cn/application-dev/reference/apis/js-apis-system-prompt.md deleted file mode 100644 index be6c4bf4cb..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-prompt.md +++ /dev/null @@ -1,144 +0,0 @@ -# 弹窗 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import prompt from '@system.prompt'; -``` - -## prompt.showToast - -showToast(Object): void - -显示文本弹窗。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| message | string | 是 | 显示的文本信息。 | -| duration | number | 否 | 默认值1500ms,建议区间:1500ms-10000ms。
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
    > 若小于1500ms则取默认值,最大取值为10000ms。 | -| [bottom]5+ | <length> | 否 | 设置弹窗边框距离屏幕底部的位置。
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
    > 仅手机和平板设备支持。 | - -**示例:** - -``` -export default { - showToast() { - prompt.showToast({ - message: 'Message Info', - duration: 2000, - }); - } -} -``` - - -## prompt.showDialog - -showDialog(): void - -在页面内显示对话框。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| title | string | 否 | 标题文本。 | -| message | string | 否 | 内容文本。 | -| buttons | Array | 否 | 对话框中按钮的数组,结构为:{text:'button', color: '\#666666'},支持1-3个按钮。其中第一个为positiveButton;第二个为negativeButton;第三个为neutralButton。 | -| success | Function | 否 | 接口调用成功的回调函数,返回值如success返回值所示。 | -| cancel | Function | 否 | 取消调用此接口的回调函数。 | -| complete | Function | 否 | 弹框退出时的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| index | number | 选中按钮在buttons数组中的索引。 | - -**示例:** - -``` -export default { - showDialog() { - prompt.showDialog({ - title: 'Title Info', - message: 'Message Info', - buttons: [ - { - text: 'button', - color: '#666666', - }, - ], - success: function(data) { - console.log('dialog success callback,click button : ' + data.index); - }, - cancel: function() { - console.log('dialog cancel callback'); - }, - }); - } -} -``` - -## prompt.showActionMenu6+ - -showActionMenu(Object): void - -显示操作菜单。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| title | string | 否 | 标题文本。 | -| buttons | Array | 是 | 对话框中按钮的数组,结构为:{text:'button', color: '\#666666'},支持1-6个按钮。大于6个按钮时弹窗不显示。 | -| success | (data: TapIndex) => void | 否 | 接口调用成功的回调函数。 | -| cancel | () => void | 否 | 接口调用失败的回调函数。 | -| complete | () => void | 否 | 接口调用结束的回调函数。 | - - **表1** TapIndex - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| tapIndex | number | 选中按钮在buttons数组中的索引,从0开始。 | - -**示例:** - -``` -export default { - showActionMenu() { - prompt.showActionMenu({ - title: 'Title Info', - buttons: [ - { - text: 'item1', - color: '#666666', - }, - { - text: 'item2', - color: '#000000', - }, - ], - success: function(data) { - console.log('dialog success callback,click button : ' + data.tapIndex); - }, - fail: function(data) { - console.log('dialog fail callback' + data.errMsg); - }, - }); - } -} -``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-request.md b/zh-cn/application-dev/reference/apis/js-apis-system-request.md deleted file mode 100644 index 35832ab5a7..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-request.md +++ /dev/null @@ -1,191 +0,0 @@ -# 上传下载 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 从API Version 6开始,该接口不再维护,推荐使用新接口['@ohos.request'](https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-request-0000001123753962)。 -> -> - 本模块首批接口从API version 4开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import request from '@system.request'; -``` - -## 权限列表 - -ohos.permission.INTERNET。 - - -## request.upload - -upload(Object): void - -上传文件。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| url | string | 是 | 上传服务器地址。 | -| header | Object | 否 | 请求头。 | -| method | string | 否 | 请求方法:POST、PUT。缺省POST。 | -| files | Array<File> | 是 | 待上传文件列表。请使用multipart/form-data进行提交。 | -| data | Array<RequestData> | 否 | 请求的表单数据。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**表1** File - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| filename | string | 否 | multipart 提交时,请求头中的文件名。 | -| name | string | 否 | multipart 提交时,表单项目的名称,缺省为file。 | -| uri | string | 是 | 文件的本地存储路径。 | -| type | string | 否 | 文件的内容类型,默认根据文件名或路径的后缀获取。 | - -**表2** RequestData - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| name | string | 是 | 表示form 元素的名称。 | -| value | string | 是 | 表示form 元素的值。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| code | number | 服务器返回的HTTP状态码。 | -| data | string | 服务器返回的内容。根据返回头内容中的type决定该值的类型。 | -| headers | Object | 服务器返回的返回头内容。 | - -fail返回值中的data中的code为HTTP状态码。 - -**示例:** - -``` -export default { - upLoad() { - request.upload({ - url: 'http://www.path.com', - files: [ - { - uri: 'internal://cache/path/to/file.txt', - name: 'file', - filename: 'file.txt', - }, - ], - data:[ - { - name: 'name1', - value: 'value', - }, - ], - success: function(data) { - console.log('upload success, code:' + data.code); - }, - fail: function() { - console.log('upload fail'); - }, - }); - } -} -``` - - -## request.download - -download(Object): void - -下载文件。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| url | string | 是 | 资源地址。 | -| header | Object | 否 | 请求头。 | -| description | string | 否 | 资源地址的下载描述,默认为文件名称。 | -| filename | string | 否 | 本次下载文件的名称。默认从本次请求或资源地址中获取。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| token | string | 表示下载的 token,获取下载状态的依据。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 400 | 表示下载任务失败。 | - -**示例:** - -``` -export default { - downLoad() { - request.download({ - url: 'http://www.path.com', - success: function(data) { - console.log('call success callback success: ' + data.token); - }, - fail: function(data, code) { - console.log('handling fail'); - }, - }); - } -} -``` - - -## request.onDownloadComplete - -onDownloadComplete(Object): void - -获取下载任务状态。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| token | string | 是 | download 接口返回的结果 token。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| uri | string | 表示下载文件的uri。 | - -fail返回错误代码: - -| 错误码 | 说明 | -| -------- | -------- | -| 400 | 表示下载任务失败。 | -| 401 | 表示不存在该下载任务。 | - -**示例:** - -``` -export default { - onDownloadComplete() { - request.onDownloadComplete({ - token: 'token-index', - success: function(data) { - console.log('download success, uri:' + data.uri); - }, - fail: function(data, code) { - console.log('download fail'); - }, - }); - } -} -``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-router.md b/zh-cn/application-dev/reference/apis/js-apis-system-router.md deleted file mode 100644 index a6264dc54e..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-router.md +++ /dev/null @@ -1,326 +0,0 @@ -# 页面路由 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import router from '@system.router'; -``` - -## router.push - -push(Object): void - -跳转到应用内的指定页面。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| uri | string | 是 | 表示目标页面的uri,可以用以下两种格式:
    - 页面绝对路径,由配置文件中pages列表提供,例如:
      - pages/index/index
      - pages/detail/detail
    - 特殊值,如果uri的值是"/",则跳转到首页。 | -| params | Object | 否 | 跳转时要同时传递到目标页面的数据,跳转到目标页面后,参数可以在页面中直接使用,如this.data1(data1为跳转时params参数中的key值)。如果目标页面中已有该字段,则其值会被传入的字段值覆盖。 | - -**示例:** - -``` -// 在当前页面中 -export default { - pushPage() { - router.push({ - uri: 'pages/routerpage2/routerpage2', - params: { - data1: 'message', - data2: { - data3: [123, 456, 789] - }, - }, - }); - } -} -``` - - -``` -// 在routerpage2页面中 -export default { - data: { - data1: 'default', - data2: { - data3: [1, 2, 3] - } - }, - onInit() { - console.info('showData1:' + this.data1); - console.info('showData3:' + this.data2.data3); - } -} -``` - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 页面路由栈支持的最大Page数量为32。 - - -## router.replace - -replace(Object): void - -用应用内的某个页面替换当前页面,并销毁被替换的页面。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Lite - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| uri | string | 是 | 目标页面的uri,可以是以下的两种格式:
    - 页面绝对路径,由配置文件中pages列表提供,例如:
      - pages/index/index
      - pages/detail/detail
    - 特殊值,如果uri的值是"/",则跳转到首页。 | -| params | Object | 否 | 跳转时要同时传递到目标页面的数据,跳转到目标页面后,参数可以在页面中直接使用,如this.data1(data1为跳转时params参数中的key值)。如果目标页面中已有该字段,则其值会被传入的字段值覆盖。 | - -**示例:** - -``` -// 在当前页面中 -export default { - replacePage() { - router.replace({ - uri: 'pages/detail/detail', - params: { - data1: 'message', - }, - }); - } -} -``` - - -``` -// 在detail页面中 -export default { - data: { - data1: 'default' - }, - onInit() { - console.info('showData1:' + this.data1) - } -} -``` - -## router.back - -back(Object): void - -返回上一页面或指定的页面。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| uri | string | 否 | 返回到指定uri的界面,如果页面栈上没有uri页面,则不响应该情况。如果uri未设置,则返回上一页。 | -| params | Object | 否 | 跳转时要同时传递到目标页面的数据 | - -**示例:** - -``` -// index页面 -export default { - indexPushPage() { - router.push({ - uri: 'pages/detail/detail', - }); - } -} -``` - - -``` -// detail页面 -export default { - detailPushPage() { - router.push({ - uri: 'pages/mall/mall', - }); - } -} -``` - - -``` -// mall页面通过back,将返回detail页面 -export default { - mallBackPage() { - router.back(); - } -} -``` - - -``` -// detail页面通过back,将返回index页面 -export default { - defaultBack() { - router.back(); - } -} -``` - - -``` -// 通过back,返回到detail页面 -export default { - backToDetail() { - router.back({uri:'pages/detail/detail'}); - } -} -``` - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 示例中的uri字段是页面路由,由配置文件中的pages列表指定。 - -## router.clear - -clear(): void - -清空页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**示例:** - -``` -export default { - clearPage() { - router.clear(); - } -} -``` - -## router.getLength - -getLength(): string - -获取当前在页面栈内的页面数量。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**返回值:** - -| 类型 | 说明 | -| -------- | -------- | -| string | 页面数量,页面栈支持最大数值是32。 | - -**示例:** - -``` -export default { - getLength() { - var size = router.getLength(); - console.log('pages stack size = ' + size); - } -} -``` - -## router.getState - -getState(): <RouterState> - -获取当前页面的状态信息。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**返回值:** -**表1** RouterState - -| 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| index | number | 表示当前页面在页面栈中的索引。
    > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
    > 从栈底到栈顶,index从1开始递增。 | -| name | string | 表示当前页面的名称,即对应文件名。 | -| path | string | 表示当前页面的路径。 | - -**示例:** - -``` -export default { - getState() { - var page = router.getState(); - console.log('current index = ' + page.index); - console.log('current name = ' + page.name); - console.log('current path = ' + page.path); - } -} -``` - -## router.enableAlertBeforeBackPage6+ - -enableAlertBeforeBackPage(Object): void - -开启页面返回询问对话框。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| message | string | 是 | 询问对话框内容。 | -| success | () => void | 否 | 接口调用成功的回调函数。 | -| fail | () => void | 否 | 接口调用失败的回调函数。 | -| complete | () => void | 否 | 接口调用结束的回调函数。 | - -**示例:** - -``` -export default { - enableAlertBeforeBackPage() { - router.enableAlertBeforeBackPage({ - message: 'Message Info', - success: function() { - console.log('success'); - }, - fail: function() { - console.log('fail'); - }, - }); - } -} -``` - -## router.disableAlertBeforeBackPage6+ - -disableAlertBeforeBackPage(Object): void - -禁用页面返回询问对话框。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | () => void | 否 | 接口调用成功的回调函数。 | -| fail | () => void | 否 | 接口调用失败的回调函数。 | -| complete | () => void | 否 | 接口调用结束的回调函数。 | - -**示例:** - -``` -export default { - disableAlertBeforeBackPage() { - router.disableAlertBeforeBackPage({ - success: function() { - console.log('success'); - }, - fail: function() { - console.log('fail'); - }, - }); - } -} -``` - diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-sensor.md b/zh-cn/application-dev/reference/apis/js-apis-system-sensor.md deleted file mode 100644 index 498ba951ea..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-sensor.md +++ /dev/null @@ -1,561 +0,0 @@ -# 传感器 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 本模块首批接口从API version 4开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 -> - 从API Version 8开始,该接口不再维护,推荐使用新接口[sensor](js-apis-sensor.md)。 -> - 该功能使用需要对应硬件支持,仅支持真机调试。 - - -## 导入模块 - - -``` -import sensor from '@system.sensor'; -``` - - -## 权限列表 - -计步器:ohos.permission.ACTIVITY_MOTION - -心率:ohos.permission.READ_HEALTH_DATA - -加速度:ohos.permission.ACCELEROMETER - -陀螺仪:ohos.permission.GYROSCOPE - - -## 传感器错误码列表 - - | 错误码 | 说明 | -| -------- | -------- | -| 900 | 当前设备不支持相应的传感器。 | - -## sensor.subscribeAccelerometer - -subscribeAccelerometer(Object): void - -观察加速度数据变化。针对同一个应用,多次点击调用时,会覆盖前面的调用效果,即仅最后一次调用生效。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| interval | string | 是 | 频率参数,加速度的回调函数执行频率。
    默认为normal,可选值有:
    - game:极高的回调频率,20ms/次,适用于游戏。
    - ui:较高的回调频率,60ms/次,适用于UI更新。
    - normal:普通的回调频率,200ms/次,低功耗。 | -| success | Function | 是 | 感应到加速度数据变化后的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | - -success返回值: - - | 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| x | number | x轴的加速度。 | -| y | number | y轴的加速度。 | -| z | number | z轴的加速度。 | - -**示例:** - -``` -sensor.subscribeAccelerometer({ - interval: 'normal', - success: function(ret) { - console.log('X-axis data: ' + ret.x); - console.log('Y-axis data: ' + ret.y); - console.log('Z-axis data: ' + ret.z); - }, - fail: function(data, code) { - console.error('Subscription failed. Code: ' + code + '; Data: ' + data); - }, -}); -``` - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 建议在页面销毁时,即onDestory回调中,取消数据订阅,避免不必要的性能开销。 - -## sensor.unsubscribeAccelerometer - -unsubscribeAccelerometer(): void - -取消订阅加速度数据。 - -**示例:** - -``` -sensor.unsubscribeAccelerometer(); -``` - -## sensor.subscribeCompass - -subscribeCompass(Object): void - -订阅罗盘数据变化。针对同一个应用,多次点击调用时,会覆盖前面的调用效果,即仅最后一次调用生效。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 是 | 罗盘数据改变后触发的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | - -success返回值: - - | 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| direction | number | 设备面对的方向度数。 | - -**示例:** - -``` -sensor.subscribeCompass({ - success: function(ret) { - console.log('get data direction:' + ret.direction); - }, - fail: function(data, code) { - console.error('Subscription failed. Code: ' + code + '; Data: ' + data); - }, -}); -``` - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 建议在页面销毁时,即onDestory回调中,取消数据订阅,避免不必要的性能开销。 - -## sensor.unsubscribeCompass - -unsubscribeCompass(): void - -取消订阅罗盘。 - -**示例:** - -``` -sensor.unsubscribeCompass(); -``` - -## sensor.subscribeProximity - -subscribeProximity(Object): void - -订阅距离感应数据变化。针对同一个应用,多次点击调用时,会覆盖前面的调用效果,即仅最后一次调用生效。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 是 | 距离感应数据改变后调用的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | - -success返回值: - - | 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| distance | number | 可见物体相对于设备显示屏的接近或远离状态。 | - -**示例:** - -``` -sensor.subscribeProximity({ - success: function(ret) { - console.log('get data distance:' + ret.distance); - }, - fail: function(data, code) { - console.error('Subscription failed. Code: ' + code + '; Data: ' + data); - }, -}); -``` - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 建议在页面销毁时,即onDestory回调中,取消数据订阅,避免不必要的性能开销。 - -## sensor.unsubscribeProximity - -unsubscribeProximity(): void - -取消订阅距离感应。 - -**示例:** - -``` -sensor.unsubscribeProximity(); -``` - -## sensor.subscribeLight - -sensor.subscribeLight(Object): void - -订阅环境光线感应数据变化。再次调用时,会覆盖前一次调用效果,即仅最后一次调用生效。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 是 | 光线感应数据改变后的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | - -success返回值: - - | 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| intensity | number | 光线强度,单位为lux。 | - -**示例:** - -``` -sensor.subscribeLight({ - success: function(ret) { - console.log('get data intensity:' + ret.intensity); - }, - fail: function(data, code) { - console.error('Subscription failed. Code: ' + code + '; Data: ' + data); - }, -}); -``` - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 建议在页面销毁时,即onDestory回调中,取消数据订阅,避免不必要的性能开销。 - -## sensor.unsubscribeLight - -unsubscribeLight(): void - -取消订阅环境光线感应。 - -**示例:** - -``` -sensor.unsubscribeLight(); -``` - -## sensor.subscribeStepCounter - -subscribeStepCounter(Object): void - -订阅计步传感器数据变化。针对同一个应用,多次点击调用时,会覆盖前面的调用效果,即仅最后一次调用生效。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 是 | 计步传感器数据改变后的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | - -success返回值: - - | 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| steps | number | 计步传感器重启后累计记录的步数。
    | - -**示例:** - -``` -sensor.subscribeStepCounter({ - success: function(ret) { - console.log('get step value:' + ret.steps); - }, - fail: function(data, code) { - console.log('Subscription failed. Code: ' + code + '; Data: ' + data); - }, -}); -``` - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 建议在页面销毁时,即onDestory回调中,取消数据订阅,避免不必要的性能开销。 - -## sensor.unsubscribeStepCounter - -unsubscribeStepCounter(): void - -取消订阅计步传感器。 - -**示例:** - -``` -sensor.unsubscribeStepCounter(); -``` - - -## sensor.subscribeBarometer - -subcribeBarometer(Object): void - -订阅气压传感器数据变化。针对同一个应用,多次点击调用时,会覆盖前面的调用效果,即仅最后一次调用生效。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 是 | 气压传感器数据改变后的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | - -success返回值: - - | 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| pressure | number | 气压值,单位:帕斯卡。 | - -**示例:** - -``` -sensor.subscribeBarometer({ - success: function(ret) { - console.log('get data value:' + ret.pressure); - }, - fail: function(data, code) { - console.log('Subscription failed. Code: ' + code + '; Data: ' + data); - }, -}); -``` - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 建议在页面销毁时,即onDestory回调中,取消数据订阅,避免不必要的性能开销。 - - -## sensor.unsubscribeBarometer - -unsubscribeBarometer(): void - -取消订阅气压传感器。 - -**示例:** - -``` -sensor.unsubscribeBarometer(); -``` - - -## sensor.subscribeHeartRate - -subscribeHeartRate(Object): void - -订阅心率传感器数据变化。针对同一个应用,多次点击调用时,会覆盖前面的调用效果,即仅最后一次调用生效。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 是 | 心率传感器数据改变后的回调函数,默认频率5s/次。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | - -success返回值: - - | 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| heartRate | number | 心率值。 | - -**示例:** - -``` -sensor.subscribeHeartRate({ - success: function(ret) { - console.log('get heartrate value:' + ret.heartRate); - }, - fail: function(data, code) { - console.log('Subscription failed. Code: ' + code + '; Data: ' + data); - }, -}); -``` - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 建议在页面销毁时,即onDestory回调中,取消数据订阅,避免不必要的性能开销。 - - -## sensor.unsubscribeHeartRate - -unsubscribeHeartRate(): void - -取消订阅心率。 - -**示例:** - -``` -sensor.unsubscribeHeartRate(); -``` - -## sensor.subscribeOnBodyState - -subscribeOnBodyState(Object): void - -订阅设备佩戴状态。针对同一个应用,多次点击调用时,会覆盖前面的调用效果,即仅最后一次调用生效。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 是 | 穿戴状态改变后的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | - -success返回值: - - | 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| value | boolean | 是否已佩戴。 | - -**示例:** - -``` -sensor.subscribeOnBodyState({ - success: function(ret) { - console.log('get on-body state value:' + ret.value); - }, - fail: function(data, code) { - console.log('Subscription failed. Code: ' + code + '; Data: ' + data); - }, -}); -``` - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 建议在页面销毁时,即onDestory回调中,取消数据订阅,避免不必要的性能开销。 - -## sensor.unsubscribeOnBodyState - -unsubscribeOnBodyState(): void - -取消订阅设备佩戴状态。 - -**示例:** - -``` -sensor.unsubscribeOnBodyState(); -``` - -## sensor.getOnBodyState - -getOnBodyState(Object): void - -获取设备佩戴状态。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -success返回值: - - | 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| value | boolean | 是否已佩戴。 | - -**示例:** - -``` -sensor.getOnBodyState({ - success: function(ret) { - console.log('on body state: ' + ret.value); - }, - fail: function(data, code) { - console.log('Subscription failed. Code: ' + code + '; Data: ' + data); - }, -}); -``` - -## sensor.subscribeDeviceOrientation6+ - -subscribeDeviceOrientation(interval: string, success: (data: DeviceOrientationResponse), fail?: (data: string, code: number)): void - -观察设备方向传感器数据变化。 - -针对同一个应用,多次点击调用时,会覆盖前面的调用效果,即仅最后一次调用生效;针对同一个方法内,不支持多次调用。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| interval | string | 是 | 频率参数,设备方向传感器的回调函数执行频率。
    默认为normal,可选值有:
    - game:极高的回调频率,20ms/次,适用于游戏。
    - ui:较高的回调频率,60ms/次,适用于UI更新。
    - normal:普通的回调频率,200ms/次,低功耗。 | -| success | Function | 是 | 感应到设备方向传感器数据变化后的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | - - success返回值: - | 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| alpha | number | 当手机坐标 X/Y 和地球 X/Y 重合时,绕着 Z 轴转动的夹角为 alpha。 | -| beta | number | 当手机坐标 Y/Z 和地球 Y/Z 重合时,绕着 X 轴转动的夹角为 beta。 | -| gamma | number | 当手机 X/Z 和地球 X/Z 重合时,绕着 Y 轴转动的夹角为 gamma。 | - -**示例:** - -``` -sensor.subscribeDeviceOrientation({ - interval: 'normal', - success: function(ret) { - console.log('Alpha data: ' + ret.alpha); - console.log('Beta data: ' + ret.beta); - console.log('Gamma data: ' + ret.gamma); - }, - fail: function(data, code) { - console.error('Subscription failed. Code: ' + code + '; Data: ' + data); - } -}); -``` - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 建议在页面销毁时,即onDestory回调中,取消数据订阅,避免不必要的性能开销。 - -## sensor.unsubscribeDeviceOrientation6+ - -unsubscribeDeviceOrientation(): void - -取消订阅设备方向传感器数据。 - -**示例:** - -``` -sensor.unsubscribeDeviceOrientation(); -``` - -## sensor.subscribeGyroscope6+ - -subscribeGyroscope(interval: string, success: (data: GyroscopeResponse), fail?: (data: string, code: number)): void - -观察陀螺仪数据变化。 - -针对同一个应用,多次点击调用时,会覆盖前面的调用效果,即仅最后一次调用生效;针对同一个方法内,不支持多次调用。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| interval | string | 是 | 频率参数,陀螺仪的回调函数执行频率。
    默认为normal,可选值有:
    - game:极高的回调频率,20ms/次,适用于游戏。
    - ui:较高的回调频率,60ms/次,适用于UI更新。
    - normal:普通的回调频率,200ms/次,低功耗。 | -| success | Function | 是 | 感应到陀螺仪数据变化后的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | - -success返回值: - - | 参数名 | 类型 | 说明 | -| -------- | -------- | -------- | -| x | number | x轴的旋转角速度。 | -| y | number | y轴的旋转角速度。 | -| z | number | z轴的旋转角速度。 | - -**示例:** - -``` -sensor.subscribeGyroscope({ - interval: 'normal', - success: function(ret) { - console.log('X-axis data: ' + ret.x); - console.log('Y-axis data: ' + ret.y); - console.log('Z-axis data: ' + ret.z); - }, - fail: function(data, code) { - console.error('Subscription failed. Code: ' + code + '; data: ' + data); - } -}); -``` - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 建议在页面销毁时,即onDestory回调中,取消数据订阅,避免不必要的性能开销。 - -## sensor.unsubscribeGyroscope6+ - -unsubscribeGyroscope(): void - -取消订阅陀螺仪数据。 - -**示例:** - -``` -sensor.unsubscribeGyroscope(); -``` diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-storage.md b/zh-cn/application-dev/reference/apis/js-apis-system-storage.md deleted file mode 100644 index eed952738c..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-storage.md +++ /dev/null @@ -1,163 +0,0 @@ -# 数据存储 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> -> - 从API Version 6开始,该接口不再维护,可以使用接口['@ohos.data.storage'](js-apis-data-storage.md)。在API Version 9后,推荐使用新接口 ['@ohos.data.preferences'](js-apis-data-preferences.md)。 -> -> - 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 - - -## 导入模块 - - -``` -import storage from '@system.storage'; -``` - - -## storage.get - -get(Object): void - -读取存储的内容。 - -**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| key | string | 是 | 内容索引。 | -| default | string | 否 | key不存在则返回的默认值。 | -| success | Function | 否 | 接口调用成功的回调函数,返回存储的内容。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**示例:** - -``` -export default { - storageGet() { - storage.get({ - key: 'storage_key', - success: function(data) { - console.log('call storage.get success: ' + data); - }, - fail: function(data, code) { - console.log('call storage.get fail, code: ' + code + ', data: ' + data); - }, - complete: function() { - console.log('call complete'); - }, - }); - } -} -``` - - -## storage.set - -set(Object): void - -修改存储的内容。 - -**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| key | string | 是 | 要修改的存储内容的索引。 | -| value | string | 否 | 新值。最大长度128。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**示例:** - -``` -export default { - storageSet() { - storage.set({ - key: 'storage_key', - value: 'storage value', - success: function() { - console.log('call storage.set success.'); - }, - fail: function(data, code) { - console.log('call storage.set fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` - - -## storage.clear - -clear(Object): void - -清空存储的内容。 - -**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**示例:** - -``` -export default { - storageClear() { - storage.clear({ - success: function() { - console.log('call storage.clear success.'); - }, - fail: function(data, code) { - console.log('call storage.clear fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` - - -## storage.delete - -delete(Object): void - -删除存储的内容。 - -**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| key | string | 是 | 内容索引。 | -| success | Function | 否 | 接口调用成功的回调函数。 | -| fail | Function | 否 | 接口调用失败的回调函数。 | -| complete | Function | 否 | 接口调用结束的回调函数。 | - -**示例:** - -``` -export default { - storageDelete() { - storage.delete({ - key: 'Storage1', - success: function() { - console.log('call storage.delete success.'); - }, - fail: function(data, code) { - console.log('call storage.delete fail, code: ' + code + ', data: ' + data); - }, - }); - } -} -``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-time.md b/zh-cn/application-dev/reference/apis/js-apis-system-time.md index f19a8fb1cf..b2389c5b57 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-system-time.md +++ b/zh-cn/application-dev/reference/apis/js-apis-system-time.md @@ -6,7 +6,7 @@ ## 导入模块 - + ``` import systemTime from '@ohos.systemTime'; ``` @@ -29,7 +29,7 @@ setTime(time : number, callback : AsyncCallback<void>) : void | callback | AsyncCallback<void> | 是 | 回调函数,可以在回调函数中处理接口返回值。 | - 示例: - + ``` // time对应的时间为2021-01-20 02:36:25 var time = 1611081385000; @@ -64,7 +64,7 @@ setTime(time : number) : Promise<void> | Promise<void> | 返回的异步回调函数。 | - 示例: - + ``` // time对应的时间为2021-01-20 02:36:25 var time = 1611081385000; @@ -91,7 +91,7 @@ getCurrentTime(isNano?: boolean, callback: AsyncCallback<number>): void | callback | AsyncCallback<number> | 是 | 回调函数,返回自 Unix 纪元以来经过的时间。 | - 示例: - + ``` systemTime.getCurrentTime(true, (error, data) => { if (error) { @@ -122,7 +122,7 @@ getCurrentTime(isNano?: boolean): Promise<number> | Promise<number> | 以Promise形式返回结果,返回自 Unix 纪元以来经过的时间。 | - 示例: - + ``` systemTime.getCurrentTime().then((data) => { console.log(`systemTime.getCurrentTime success data : ` + JSON.stringify(data)); @@ -147,7 +147,7 @@ getRealActiveTime(isNano?: boolean, callback: AsyncCallback<number>): void | callback | AsyncCallback<number> | 是 | 回调函数,返回自系统启动以来但不包括度睡眠时间经过的时间。 | - 示例: - + ``` systemTime.getRealActiveTime(true, (error, data) => { if (error) { @@ -178,7 +178,7 @@ getRealActiveTime(isNano?: boolean): Promise<number> | Promise<number> | 以Promise形式返回结果,返回自系统启动以来但不包括度睡眠时间经过的时间。 | - 示例: - + ``` systemTime.getCurrentTime().then((data) => { console.log(`systemTime.getRealActiveTime success data : ` + JSON.stringify(data)); @@ -203,7 +203,7 @@ getRealTime(callback: AsyncCallback<number>): void | callback | AsyncCallback<number> | 是 | 回调函数,返回自系统启动以来包括深度睡眠时间经过的毫秒数。 | - 示例: - + ``` systemTime.getRealTime(true, (error, data) => { if (error) { @@ -234,7 +234,7 @@ getRealTime(): Promise<number> | Promise<number> | 以Promise形式返回结果,返回自系统启动以来包括深度睡眠时间经过的时间。 | - 示例: - + ``` systemTime.getRealTime().then((data) => { console.log(`systemTime.getRealTime success data: ` + JSON.stringify(data)); @@ -261,7 +261,7 @@ setDate(date: Date, callback: AsyncCallback<void>): void | callback | AsyncCallback<void> | 是 | 回调函数,可以在回调函数中处理接口返回值。 | - 示例: - + ``` var data = new Date("October 13, 2020 11:13:00"); systemTime.setDate(data,(error, data) => { @@ -295,7 +295,7 @@ setDate(date: Date): Promise<void> | Promise<void> | 返回的异步回调函数。 | - 示例: - + ``` var data = new Date("October 13, 2020 11:13:00"); systemTime.setDate(data).then((value) => { @@ -320,7 +320,7 @@ getDate(callback: AsyncCallback<Date>): void | callback | AsyncCallback<Date> | 是 | 回调函数,返回当前系统日期。 | - 示例: - + ``` systemTime.getDate((error, data) => { if (error) { @@ -346,7 +346,7 @@ getDate(): Promise<Date> | Promise<Date> | 以Promise形式返回结果,返回当前系统日期。 | - 示例: - + ``` systemTime.getDate().then((data) => { console.log(`systemTime.getDate success data : ` + JSON.stringify(data)); @@ -373,7 +373,7 @@ setTimezone(timezone: string, callback: AsyncCallback<void>): void | callback | AsyncCallback<void> | 是 | 回调函数,可以在回调函数中处理接口返回值。 | - 示例: - + ``` systemTime.setTimezone('Asia/Shanghai', (error, data) => { if (error) { @@ -406,7 +406,7 @@ setTimezone(timezone: string): Promise<void> | Promise<void> | 返回的异步回调函数。 | - 示例: - + ``` systemTime.setTimezone('Asia/Shanghai').then((data) => { console.log(`systemTime.setTimezone success data : ` + JSON.stringify(data)); @@ -430,7 +430,7 @@ getTimeZone(callback: AsyncCallback<string>): void | callback | AsyncCallback<string> | 是 | 回调函数,返回系统时区。 | - 示例: - + ``` systemTime.getTimeZone((error, data) => { if (error) { @@ -456,7 +456,7 @@ getTimeZone(): Promise<string> | Promise<string> | 以Promise形式返回结果,返回系统时区。 | - 示例: - + ``` systemTime.getDate().then((data) => { console.log(`systemTime.getTimeZone success data : ` + JSON.stringify(data)); diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-vibrate.md b/zh-cn/application-dev/reference/apis/js-apis-system-vibrate.md deleted file mode 100644 index b30152d767..0000000000 --- a/zh-cn/application-dev/reference/apis/js-apis-system-vibrate.md +++ /dev/null @@ -1,46 +0,0 @@ -# 振动 - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 本模块首批接口从API version 4开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 -> - 从API Version 8开始,该接口不再维护,推荐使用新接口[vibrator](js-apis-vibrator.md)。 -> - 该功能使用需要对应硬件支持,仅支持真机调试。 - - -## 导入模块 - - -``` -import vibrator from '@system.vibrator'; -``` - - -## vibrator.vibrate - -vibrate(Object): void - -触发设备振动。 - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| -------- | -------- | -------- | -------- | -| mode | string | 否 | 振动的模式,其中long表示长振动,short表示短振动,默认值为long。 | - -**示例:** - -``` -vibrator.vibrate({ - mode: 'short', - success: function(ret) { - console.log('vibrate is successful'); - }, - fail: function(ret) { - console.log('vibrate is failed'); - }, - complete: function(ret) { - console.log('vibrate is completed'); - } -}); -``` - diff --git a/zh-cn/application-dev/reference/apis/js-apis-volumemanager.md b/zh-cn/application-dev/reference/apis/js-apis-volumemanager.md index a11bb17eb9..55913343e0 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-volumemanager.md +++ b/zh-cn/application-dev/reference/apis/js-apis-volumemanager.md @@ -174,6 +174,6 @@ unmount(volumeId: string, callback:AsyncCallback<boolean>):void | id9+ | number | 卷id | | uuid9+ | string | 卷uuid | | description9+ | string | 卷相关描述 | -| removeAble9+ | boolean | 是否为可移动存储设备 | +| removable9+ | boolean | 是否为可移动存储设备 | | state9+ | int | 当前卷状态 | | path9+ | string | 卷的挂载地址 | \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-wallpaper.md b/zh-cn/application-dev/reference/apis/js-apis-wallpaper.md index 212f15f2fe..754db5beae 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-wallpaper.md +++ b/zh-cn/application-dev/reference/apis/js-apis-wallpaper.md @@ -6,7 +6,7 @@ ## 导入模块 - + ``` import wallpaper from '@ohos.wallpaper'; ``` @@ -39,7 +39,7 @@ getColors(wallpaperType: WallpaperType, callback: AsyncCallback<Array<Rgba | callback | AsyncCallback<Array<[RgbaColor](#rgbacolor)>> | 是 | 回调函数,返回壁纸的主要颜色信息。 | - 示例: - + ``` wallpaper.getColors(wallpaper.WallpaperType.WALLPAPER_SYSTEM, (error, data) => { if (error) { @@ -70,7 +70,7 @@ getColors(wallpaperType: WallpaperType): Promise<Array<RgbaColor>> | Promise<Array<[RgbaColor](#rgbacolor)>> | 返回壁纸的主要颜色信息。 | - 示例: - + ``` wallpaper.getColors(wallpaper.WallpaperType.WALLPAPER_SYSTEM).then((data) => { console.log(`success to getColors.`); @@ -95,7 +95,7 @@ getId(wallpaperType: WallpaperType, callback: AsyncCallback<number>): void | callback | AsyncCallback<number> | 是 | 回调函数,返回壁纸的ID。如果配置了指定类型的壁纸就返回一个大于等于0的数,否则返回-1。取值范围是-1~2^31-1。 | - 示例: - + ``` wallpaper.getId(wallpaper.WallpaperType.WALLPAPER_SYSTEM, (error, data) => { if (error) { @@ -127,7 +127,7 @@ getId(wallpaperType: WallpaperType): Promise<number> | Promise<number> | 壁纸的ID。如果配置了这种壁纸类型的壁纸就返回一个大于等于0的数,否则返回-1。取值范围是-1~2^31-1。 | - 示例: - + ``` wallpaper.getId(wallpaper.WallpaperType.WALLPAPER_SYSTEM).then((data) => { console.log(`success to getId: ` + JSON.stringify(data)); @@ -151,7 +151,7 @@ getMinHeight(callback: AsyncCallback<number>): void | callback | AsyncCallback<number> | 是 | 回调函数,返回壁纸的最小高度值,单位是像素。如果返回值等于0,说明没有设置壁纸,调用者应该使用默认显示的高度值代替。 | - 示例: - + ``` wallpaper.getMinHeight((error, data) => { if (error) { @@ -178,7 +178,7 @@ getMinHeight(): Promise<number> | Promise<number> | 返回壁纸的最小高度值,单位是像素。如果返回值等于0,说明没有设置壁纸,调用者应该使用默认显示的高度值代替。 | - 示例: - + ``` wallpaper.getMinHeight().then((data) => { console.log(`success to getMinHeight: ` + JSON.stringify(data)); @@ -203,7 +203,7 @@ getMinWidth(callback: AsyncCallback<number>): void | callback | AsyncCallback<number> | 是 | 回调函数,壁纸的最小宽度值,单位是像素。如果返回值等于0,说明没有设置壁纸,调用者应该使用默认显示的宽度值代替。 | - 示例: - + ``` wallpaper.getMinWidth((error, data) => { if (error) { @@ -229,7 +229,7 @@ getMinWidth(): Promise<number> | Promise<number> | 壁纸的最小宽度值,单位是像素。如果返回值等于0,说明没有设置壁纸,调用者应该使用默认显示的宽度值代替。 | - 示例: - + ``` wallpaper.getMinWidth().then((data) => { console.log(`success to getMinWidth: ` + JSON.stringify(data)); @@ -253,7 +253,7 @@ isChangePermitted(callback: AsyncCallback<boolean>): void | callback | AsyncCallback<boolean> | 是 | 回调函数,返回是否允许应用改变当前用户的壁纸。如果允许返回true,否则返回false。 | - 示例: - + ``` wallpaper.isChangePermitted((error, data) => { if (error) { @@ -279,7 +279,7 @@ isChangePermitted(): Promise<boolean> | Promise<boolean> | 返回是否允许应用改变当前用户的壁纸。如果允许返回true,否则返回false。 | - 示例: - + ``` wallpaper.isChangePermitted().then((data) => { console.log(`success to isChangePermitted: ` + JSON.stringify(data)); @@ -303,7 +303,7 @@ isOperationAllowed(callback: AsyncCallback<boolean>): void | callback | AsyncCallback<boolean> | 是 | 回调函数,返回是否允许用户设置壁纸。如果允许返回true,否则返回false。 | - 示例: - + ``` wallpaper.isOperationAllowed((error, data) => { if (error) { @@ -329,7 +329,7 @@ isOperationAllowed(): Promise<boolean> | Promise<boolean> | 异步回调函数,返回是否允许用户设置壁纸。如果允许返回true,否则返回false。 | - 示例: - + ``` wallpaper.isOperationAllowed().then((data) => { console.log(`success to isOperationAllowed: ` + JSON.stringify(data)); @@ -356,7 +356,7 @@ reset(wallpaperType: WallpaperType, callback: AsyncCallback<void>): void | callback | AsyncCallback<void> | 是 | 回调函数,调用成功则返回是否移除成功的结果,调用失败则返回error信息。 | - 示例: - + ``` wallpaper.reset((error, data) => { if (error) { @@ -389,7 +389,7 @@ reset(wallpaperType: WallpaperType): Promise<void> | Promise<void> | 调用成功则返回是否移除成功的结果,调用失败则返回error信息。 | - 示例: - + ``` wallpaper.reset(wallpaper.WALLPAPER_SYSTEM).then((data) => { console.log(`success to reset.`); @@ -410,14 +410,14 @@ setWallpaper(uriOrPixelMap: string | image.PixelMap, wallpaperType: WallpaperTyp **系统能力**: SystemCapability.Miscservices.Wallpaper - 参数: - | 参数名 | 类型 | 必填 | 说明 | + | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | - | uriOrPixelMap | string \|[PixelMap](js-apis-image.md#pixelmap7) | | JPEG或PNG文件的Uri路径,或者PNG格式文件的位图。 | - | wallpaperType | [WallpaperType](#wallpapertype) | 是 | 壁纸类型。 | - | callback | AsyncCallback<void> | 是 | 回调函数,调用成功则返回是返回设置的结果,调用失败则返回error信息。 | + | uriOrPixelMap | string \| [ERROR:Invalid link:zh-cn_topic_0000001154665636.xml#xref134981523104113,link:zh-cn_topic_0000001122977382.xml#section160331714124](zh-cn_topic_0000001122977382.xml#section160331714124) | 是 | JPEG或PNG文件的Uri路径,或者PNG格式文件的位图。 | + | wallpaperType | [WallpaperType](#wallpapertype) | 是 | 壁纸类型。 | + | callback | AsyncCallback<void> | 是 | 回调函数,调用成功则返回是返回设置的结果,调用失败则返回error信息。 | - 示例: - + ``` // uriOrPixelMap类型为string let wallpaperPath = "/data/data/ohos.acts.aafwk.plrdtest.form/files/Cup_ic.jpg"; @@ -463,10 +463,10 @@ setWallpaper(uriOrPixelMap: string | image.PixelMap, wallpaperType: WallpaperTyp **系统能力**: SystemCapability.Miscservices.Wallpaper - 参数: - | 参数名 | 类型 | 必填 | 说明 | + | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | - | uriOrPixelMap | string \|[PixelMap](js-apis-image.md#pixelmap7) | 是 | JPEG或PNG文件的Uri路径,或者PNG格式文件的位图。 | - | wallpaperType | [WallpaperType](#wallpapertype) | 是 | 壁纸类型。 | + | uriOrPixelMap | string \| [ERROR:Invalid link:zh-cn_topic_0000001154665636.xml#xref2071734616,link:zh-cn_topic_0000001122977382.xml#section160331714124](zh-cn_topic_0000001122977382.xml#section160331714124) | 是 | JPEG或PNG文件的Uri路径,或者PNG格式文件的位图。 | + | wallpaperType | [WallpaperType](#wallpapertype) | 是 | 壁纸类型。 | - 返回值: | 类型 | 说明 | @@ -474,7 +474,7 @@ setWallpaper(uriOrPixelMap: string | image.PixelMap, wallpaperType: WallpaperTyp | Promise<void> | 调用成功则返回是返回设置的结果,调用失败则返回error信息。 | - 示例: - + ``` // uriOrPixelMap类型为string let wallpaperPath = "/data/data/ohos.acts.aafwk.plrdtest.form/files/Cup_ic.jpg"; @@ -514,13 +514,13 @@ on(type: 'colorChange', callback: (colors: Array<RgbaColor>, wallpaperType **系统能力**: SystemCapability.Miscservices.Wallpaper - 参数: - | 参数名 | 类型 | 必填 | 说明 | + | 参数名 | 类型 | 必填 | 说明 | | -------- | -------- | -------- | -------- | - | type | string | 是 | 取值为'colorChange',表示壁纸颜色变化结果上报事件。 | - | callback | function | 是 | 壁纸颜色变化触发该回调方法,返回壁纸类型和壁纸的主要颜色信息。
    - colors
      壁纸的主要颜色信息,其类型见[RgbaColor](#rgbacolor)。
    - wallpaperType
      壁纸类型。 | + | type | string | 是 | 取值为'colorChange',表示壁纸颜色变化结果上报事件。 | + | callback | function | 是 | 壁纸颜色变化触发该回调方法,返回壁纸类型和壁纸的主要颜色信息。
    - colors
      壁纸的主要颜色信息,其类型见[RgbaColor](#rgbacolor)。
    - wallpaperType
      壁纸类型。 | - 示例: - + ``` let listener = (colors, wallpaperType) => { console.log(`wallpaper color changed.`); @@ -544,7 +544,7 @@ off(type: 'colorChange', callback?: (colors: Array<RgbaColor>, wallpaperTy | callback | function | 否 |   表示取消壁纸颜色变化结果上报,不填写该参数则取消订阅该type对应的所有回调。
    - colors
      壁纸的主要颜色信息,其类型见[RgbaColor](#rgbacolor)。
    - wallpaperType
      壁纸类型。 | - 示例: - + ``` let listener = (colors, wallpaperType) => { console.log(`wallpaper color changed.`); diff --git a/zh-cn/application-dev/reference/apis/js-apis-workScheduler.md b/zh-cn/application-dev/reference/apis/js-apis-workScheduler.md index 8224175b47..b2b623dc6f 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-workScheduler.md +++ b/zh-cn/application-dev/reference/apis/js-apis-workScheduler.md @@ -269,7 +269,6 @@ isLastWorkTimeOut(workId: number): Promise\ .catch(err => { console.info('workschedulerLog isLastWorkTimeOut failed, because:' + err.data); }); - }) ``` ## WorkInfo diff --git a/zh-cn/application-dev/reference/arkui-js/figures/transition.gif b/zh-cn/application-dev/reference/arkui-js/figures/transition.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b1aacbf3092a0ed946ce477251e60a41b365774 GIT binary patch literal 74240 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࠳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 literal 0 HcmV?d00001 diff --git a/zh-cn/application-dev/reference/arkui-js/js-components-common-transition.md b/zh-cn/application-dev/reference/arkui-js/js-components-common-transition.md index bbf7ca807f..8aefd3c435 100644 --- a/zh-cn/application-dev/reference/arkui-js/js-components-common-transition.md +++ b/zh-cn/application-dev/reference/arkui-js/js-components-common-transition.md @@ -48,10 +48,8 @@ PageA跳转到PageB,跳转的共享元素为image, shareid为“shareImage

    @@ -237,3 +235,145 @@ export default { b. back场景下:退出页面栈的Page2.js应用transition-enter描述的动画配置,并进行倒播;从页面栈第二位置进入栈顶位置的Page1.js应用transition-exit描述的动画配置,并进行倒播。 ![zh-cn_image_0000001238184345](figures/zh-cn_image_0000001238184345.png) + +### 示例 + +Page1有一个不透明盒子,点击盒子会跳转到Page2,当点击Page2中的盒子,会回退到Page1页面。 + +1. Page1 + + ``` + +
    + index +
    +
    + ``` + + ``` + + import router from '@system.router'; + export default { + data: { + + }, + jump() { + router.push({ + uri:'pages/transition2/transition2' + }) + } + } + ``` + + ``` + + .container { + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; + } + .move_page { + width: 100px; + height: 100px; + background-color: #72d3fa; + transition-enter: go_page; + transition-exit: exit_page; + transition-duration: 5s; + transition-timing-function: friction; + } + + @keyframes go_page { + from { + opacity: 0; + transform: translate(0px) rotate(60deg) scale(1.0); + } + + to { + opacity: 1; + transform: translate(100px) rotate(360deg) scale(1.0); + } + } + @keyframes exit_page { + from { + opacity: 1; + transform: translate(200px) rotate(60deg) scale(2); + } + + to { + opacity: 0; + transform: translate(200px) rotate(360deg) scale(2); + } + } + ``` + + + +2. Page2 + + ``` + +
    + transition +
    +
    + import router from '@system.router'; + export default { + data: { + + }, + jumpBack() { + router.back() + } + } + ``` + + ``` + + .container { + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; + } + + .move_page { + width: 100px; + height: 100px; + background-color: #f172fa; + transition-enter: go_page; + transition-exit: exit_page; + transition-duration: 5s; + transition-timing-function: ease; + } + + @keyframes go_page { + from { + opacity: 0; + transform:translate(100px) rotate(0deg) scale(1.0); + } + to { + opacity: 1; + transform:translate(100px) rotate(180deg) scale(2.0); + } + } + + @keyframes exit_page { + from { + opacity: 1; + transform: translate(0px) rotate(60deg) scale(1); + } + to { + opacity: 0; + transform: translate(0px) rotate(360deg) scale(1); + } + } + ``` + + ![transition](figures/transition.gif) diff --git a/zh-cn/application-dev/reference/arkui-ts/Readme-CN.md b/zh-cn/application-dev/reference/arkui-ts/Readme-CN.md index cfd6f34071..fac811e748 100644 --- a/zh-cn/application-dev/reference/arkui-ts/Readme-CN.md +++ b/zh-cn/application-dev/reference/arkui-ts/Readme-CN.md @@ -132,6 +132,7 @@ - [插值计算](ts-interpolation-calculation.md) - 全局UI方法 - [图片缓存](ts-methods-image-cache.md) + - [媒体查询](ts-methods-media-query.md) - 弹窗 - [警告弹窗](ts-methods-alert-dialog-box.md) - [列表选择弹窗](ts-methods-action-sheet.md) diff --git a/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-gauge.md b/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-gauge.md deleted file mode 100644 index aa5ea7c36a..0000000000 --- a/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-gauge.md +++ /dev/null @@ -1,63 +0,0 @@ -# Gauge - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -数据量规图表组件,用于将数据展示为环形图表。 - - -## 权限列表 - -无 - - -## 子组件 - -无 - - -## 接口 - -Gauge(value:{value: number, min?: number, max?: number}) - -- 参数 - | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 | - | -------- | -------- | -------- | -------- | -------- | - | value | number | 是 | - | 当前数据值。 | - | min | number | 否 | 0 | 当前数据段最小值。 | - | max | number | 否 | 100 | 当前数据段最大值。 | - - -## 属性 - - | 名称 | 参数类型 | 默认值 | 描述 | -| -------- | -------- | -------- | -------- | -| value | number | 0 | 设置当前数据图表的值。 | -| startAngle | Angle | -150 | 设置起始角度位置,时钟0点为0度,顺时针方向为正角度。 | -| endAngle | Angle | 150 | 设置终止角度位置,时钟0点为0度,顺时针方向为正角度。 | -| colors | Color \| Array<ColorStop> | - | 设置图表的颜色,支持纯色和分段渐变色设置。 | -| strokeWidth | Length | - | 设置环形图表的环形厚度。 | - - -## 示例 - - -``` -@Entry -@Component -struct GaugeExample { - build() { - Column() { - Gauge({ value: 50, min: 0, max: 100 }) - .startAngle(210).endAngle(150) - .colors([[0x317AF7, 1], [0x5BA854, 1], [0xE08C3A, 1], [0x9C554B, 1], [0xD94838, 1]]) - .strokeWidth(20) - .width(200).height(200) - }.width('100%').margin({ top: 5 }) - } -} -``` - -![zh-cn_image_0000001174422916](figures/zh-cn_image_0000001174422916.png) diff --git a/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-marquee.md b/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-marquee.md deleted file mode 100644 index 9ae0bffa88..0000000000 --- a/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-marquee.md +++ /dev/null @@ -1,95 +0,0 @@ -# Marquee - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -跑马灯组件,用于滚动展示一段单行文本。 - - -## 权限列表 - -无 - - -## 子组件 - -无 - - -## 接口 - -Marquee(value: { start: boolean, step?: number, loop?: number, fromStart?: boolean, src: string }) - -- 参数 - | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 | - | -------- | -------- | -------- | -------- | -------- | - | start | boolean | 是 | - | 控制是否进入播放状态。 | - | step | number | 否 | 6 | 滚动动画文本滚动步长。 | - | loop | number | 否 | -1 | 设置重复滚动的次数,小于等于零时无限循环。 | - | fromStart | boolean | 否 | true | 设置文本从头开始滚动或反向滚动。 | - | src | string | 是 | - | 需要滚动的文本。 | - - -## 事件 - - | 名称 | 功能描述 | -| -------- | -------- | -| onStart(callback: () => void) | 开始滚动时触发回调。 | -| onBounce(callback: () => void) | 滚动到底时触发回调。 | -| onFinish(callback: () => void) | 滚动完成时触发回调。 | - - -## 示例 - - -``` -@Entry -@Component -struct MarqueeExample { - @State start: boolean = false - @State fromStart: boolean = true - @State step: number = 50 - @State loop: number = 3 - @State src: string = "Running Marquee starts rolling" - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Marquee({ - start: this.start, - step: this.step, - loop: this.loop, - fromStart: this.fromStart, - src: this.src - }) - .fontColor(Color.White) - .fontSize(50) - .allowScale(false) - .fontWeight(FontWeight.Bold) - .backgroundColor(Color.Black) - .margin({bottom:40}) - .onStart(() => { - console.log('Marquee animation complete onStart') - }) - .onBounce(() => { - console.log('Marquee animation complete onBounce') - }) - .onFinish(() => { - console.log('Marquee animation complete onFinish') - }) - Button('start') - .onClick(() => { - this.start = true - }) - .width(200) - .height(60) - .margin({bottom:20}) - } - .width('100%') - .height('100%') - } -} -``` - -![zh-cn_image_0000001193499234](figures/zh-cn_image_0000001193499234.gif) diff --git a/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-plugincomponent.md b/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-plugincomponent.md deleted file mode 100644 index 7707e68d94..0000000000 --- a/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-plugincomponent.md +++ /dev/null @@ -1,318 +0,0 @@ -# PluginComponent - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 -> -> - 本组件均为系统接口,三方应用不支持调用。 - - -提供外部应用组件嵌入式显示功能,即外部应用提供的UI可在本应用内显示。 - - -## 权限列表 - -无 - - -## 子组件 - -无 - - -## 接口 - -PluginComponent(value: { template: PluginComponentTemplate, data: any }) - -创建插件组件,用于显示外部应用提供的UI。 - -- 参数 - | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 | - | -------- | -------- | -------- | -------- | -------- | - | value | {
    template: PluginComponentTemplate,
    data: KVObject
    } | 是 | - | template:  组件模板,用于跟提供者定义的组件绑定。
    data: 传给插件组件提供者使用的数据。 | - -- PluginComponentTemplate类型说明 - | 参数 | 类型 | 描述 | - | -------- | -------- | -------- | - | source | string | 组件模板名。 | - | ability | string | 提供者Ability的abilityname。 | - - -## 事件 - - | 名称 | 功能描述 | -| -------- | -------- | -| onComplete(callback: () => void) | 组件加载完成回调。 | -| onError(callback: (info: { errcode: number, msg: string }) => void) | 组件加载错误回调。
    errcode: 错误码。
    msg: 错误信息。 | - - -## PluginComponentManager - -提供配套插件组件使用的相关接口,用于给插件组件的使用者请求组件与数据,使用者发送组件模板和数据。 - - -## 导入模块 - - -``` -import pluginComponentManager from '@ohos.plugincomponent' -``` - - -## push - -push(param: PushParameters, callback: AsyncCallback<void>): void - -组件提供者向组件使用者主动发送组件与数据。 - - -- 参数 - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | param | PushParameters | 是 | 组件使用者的详细信息,详见PushParameters参数说明。 | - | callback | AsyncCallback<void> | 是 | 此次接口调用的异步回调。 | - -- PushParameters参数说明 - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | want | Want | 是 | 组件使用者Ability信息。 | - | name | string | 是 | 组件名称。 | - | data | KVObject | 否 | 组件数据值。 | - | extraData | KVObject | 否 | 附加数据值。 | - -- 示例 - 见[组件使用者调用接口](#组件使用者调用接口)示例。 - - -## request - -request(param: RequestParameters, callback: AsyncCallback<RequestCallbackParameters>): void - -组件使用者向组件提供者主动请求组件。 - -- 参数 - | 参数名 | 类型 | 必填 | 说明 | - | -------- | -------- | -------- | -------- | - | param | RequestParameters | 是 | 组件模板的详细请求信息,详见RequestParameters参数说明。 | - | callback | AsyncCallback"push”:指组件提供者向使用者主动推送数据。
    "request”:指组件使用者向提供者主动请求数据。 | - | callback | OnPushEventCallback \| OnRequestEventCallback | 是 | 见callback事件说明。 | - -- callback事件说明 - | 参数名 | 类型 | 说明 | - | -------- | -------- | -------- | - | OnRequestEventCallback | (source: Want,
    name: string,
    data: KVObject ) =>RequestEventResult | 数据请求事件的回调。
    source: 组件请求方Ability信息。
    name: 请求组件名称。
    data: 附加数据。
    返回值: 请求数据结果。 | - | OnPushEventCallback | (source: Want,
    template: PluginComponentTemplate,
    data: KVObject,
    extraData: KVObject
    ) => void | 接收提供者主动推送的数据。
    source: 组件提供者Ability信息。
    template: 组件模板。
    data: 组件更新数据。
    extraData: 附加数据。 | - -- RequestEventResult类型说明 - | 参数 | 类型 | 说明 | - | -------- | -------- | -------- | - | template | string | 组件名称。 | - | data | KVObject | 组件数据。 | - | extraData | KVObjec | 附加数据。 | - -- 示例 - 见[组件使用者调用接口](#组件使用者调用接口)示例。 - - -## 示例 - - -### 使用PluginComponent组件 - - -``` -import plugin from "../../test/plugin_component.js" -import plugincomponent from '@ohos.plugincomponent' - -@Entry -@Component -struct PluginComponentExample { - @StorageLink("plugincount") plugincount: Object[] = [ - { source: 'plugincomponent1', ability: 'com.example.plugin' }, - { source: 'plugintemplate', ability: 'com.example.myapplication' }, - { source: 'plugintemplate', ability: 'com.example.myapplication' }] - - build() { - Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Text('Hello World') - .fontSize(50) - .fontWeight(FontWeight.Bold) - Button('Push') - .fontSize(50) - .width(400) - .height(100) - .onClick(() => { - plugin.Push() - console.log("Button('Push')") - }) - .margin({ top: 20 }) - Button('Request1') - .fontSize(50) - .width(400) - .height(100) - .margin({ top: 20 }) - .onClick(() => { - plugin.Request1() - console.log("Button('Request1')") - }) - Button('Request2') - .fontSize(50) - .width(400) - .height(100) - .margin({ top: 20 }) - .onClick(() => { - plugin.Request2() - console.log("Button('Request2')") - }) - ForEach(this.plugincount, item => { - PluginComponent({ - template: { source: 'plugincomponent1', ability: 'com.example.plugin' }, - data: { 'countDownStartValue': 'new countDownStartValue' } - }).size({ width: 500, height: 100 }) - .onComplete(() => { - console.log("onComplete") - }) - .onError(({errcode, msg}) => { - console.log("onComplete" + errcode + ":" + msg) - }) - }) - } - .width('100%') - .height('100%') -} -``` - - -### 组件使用者调用接口 - - -``` -import pluginComponentManager from '@ohos.plugincomponent' - -function onPushListener(source, template, data, extraData) { - console.log("onPushListener template.source=" + template.source) - var jsonObject = JSON.parse(data.componentTemplate.source) - console.log("request_callback1:source json object" + jsonObject) - var jsonArry = jsonObject.ExternalComponent - for (var i in jsonArry) { - console.log(jsonArry[i]) - } - console.log("onPushListener:source json object" + jsonObject) - console.log("onPushListener:source json string" + JSON.stringify(jsonObject)) - console.log("onPushListener template.ability=" + template.ability) - console.log("onPushListener data=" + JSON.stringify(data)) - console.log("onPushListener extraData=" + JSON.stringify(extraData)) -} - -export default { - //register listener - onListener() { - pluginComponentManager.on("push", onPushListener) - }, - Request() { - // 组件使用者主动发送事件 - pluginComponentManager.request({ - want: { - bundleName: "com.example.myapplication", - abilityName: "com.example.myapplication.MainAbility", - }, - name: "plugintemplate", - data: { - "key_1": "plugin component test", - "key_2": 34234 - }, - jsonPath: "assets/js", - }, - (err, data) => { - console.log("request_callback1: componentTemplate.ability=" + data.componentTemplate.ability) - console.log("request_callback1: componentTemplate.source=" + data.componentTemplate.source) - var jsonObject = JSON.parse(data.componentTemplate.source) - console.log("request_callback1:source json object" + jsonObject) - var jsonArry = jsonObject.ExternalComponent - for (var i in jsonArry) { - console.log(jsonArry[i]) - } - console.log("request_callback1:source json string" + JSON.stringify(jsonObject)) - console.log("request_callback1: data=" + JSON.stringify(data.data)) - console.log("request_callback1: extraData=" + JSON.stringify(data.extraData)) - } - ) - } -} - -// 组件提供者使用接口示例 -import pluginComponentManager from '@ohos.plugincomponent' - -function onRequestListener(source, name, data) { - console.log("onRequestListener name=" + name) - console.log("onRequestListener data=" + JSON.stringify(data)) - return { template: "plugintemplate", data: data } -} - -export default { - //register listener - onListener() { - pluginComponentManager.on("request", onRequestListener) - }, - Push() { - // 组件提供者主动发送事件 - pluginComponentManager.push( - { - want: { - bundleName: "com.example.myapplication", - abilityName: "com.example.myapplication.MainAbility", - }, - name: "plugintemplate", - data: { - "key_1": "plugin component test", - "key_2": 34234 - }, - extraData: { - "extra_str": "this is push event" - }, - jsonPath: "assets/js", - }, - (err, data) => { - console.log("push_callback1: componentTemplate.ability=" + data.componentTemplate.ability) - console.log("push_callback1: componentTemplate.source=" + data.componentTemplate.source) - console.log("push ok!") - } - ) - }, -} -``` diff --git a/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-stepper.md b/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-stepper.md deleted file mode 100644 index 9899f76f8d..0000000000 --- a/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-stepper.md +++ /dev/null @@ -1,125 +0,0 @@ -# Stepper - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -步骤导航器。 - - -## 权限列表 - -无 - - -## 子组件 - -仅能包含子组件[StepperItem](ts-basic-components-stepperitem.md)。 - - -## 接口 - -Stepper(value?: { index?: number }) - - -- 参数 - | 参数名 | 参数类型 | 必填 | 默认值 | 参数描述 | - | -------- | -------- | -------- | -------- | -------- | - | index | number | 否 | 0 | 设置步骤导航器显示第几个StepperItem。 | - - -## 属性 - -无 - - -## 事件 - - | 名称 | 描述 | -| -------- | -------- | -| onFinish(callback: () => void) | 步骤导航器最后一个StepperItem的nextLabel被点击时触发该回调 。 | -| onSkip(callback: () => void) | 当前显示的StepperItem状态为ItemState.Skip时,nextLabel被点击时触发该回调。 | -| onChange(callback: (prevIndex?: number, index?: number) => void) | 点击左边或者右边文本按钮进行步骤切换时触发该事件。
    - prevIndex:切换前的步骤页索引值。
    - index:切换后的步骤页(前一页或者下一页)索引值。 | - - -## 示例 - -``` -@Entry -@Component -struct StepperExample { - @State currentIndex: number = 0 - @State firstState: ItemState = ItemState.Normal - @State secondState: ItemState = ItemState.Normal - - build() { - Stepper({ - index: this.currentIndex - }) { - StepperItem() { - Text('Page One') - .fontSize(35) - .fontColor(Color.Blue) - .width(200) - .lineHeight(50) - .margin({top:250}) - } - .nextLabel('') - .position({x: '35%', y: 0}) - StepperItem() { - Text('Page Two') - .fontSize(35) - .fontColor(Color.Blue) - .width(200) - .lineHeight(50) - .margin({top:250}) - .onClick(()=>{ - this.firstState = this.firstState === ItemState.Skip ? ItemState.Normal : ItemState.Skip - }) - } - .nextLabel('Next') - .prevLabel('Previous') - .status(this.firstState) - .position({x: '35%', y: 0}) - StepperItem() { - Text('Page Three') - .fontSize(35) - .fontColor(Color.Blue) - .width(200) - .lineHeight(50) - .margin({top:250}) - .onClick(()=>{ - this.secondState = this.secondState === ItemState.Waiting ? ItemState.Normal : ItemState.Waiting - }) - } - .position({x: '35%', y: 0}) - .status(this.secondState) - StepperItem() { - Text('Page four') - .fontSize(35) - .fontColor(Color.Blue) - .width(200) - .lineHeight(50) - .margin({top:250}) - } - .position({x: '35%', y: 0}) - .nextLabel('Finish') - } - .onFinish(() => { - console.log('onFinish') - }) - .onSkip(() => { - console.log('onSkip') - }) - .onChange((prevIndex: number, index: number) => { - this.currentIndex = index - }) - .align(Alignment.Center) - } -} -``` - - -![zh-cn_image_0000001250678457](figures/zh-cn_image_0000001250678457.gif) - diff --git a/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-stepperitem.md b/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-stepperitem.md deleted file mode 100644 index 2239965229..0000000000 --- a/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-stepperitem.md +++ /dev/null @@ -1,46 +0,0 @@ -# StepperItem - - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 - - -步骤导航器元素。 - - -## 权限列表 - -无 - - -## 子组件 - -支持单个子组件。 - - -## 接口 - -StepperItem() - - -## 属性 - -| 参数名 | 参数类型 | 默认值 | 参数描述 | -| -------- | -------- | -------- | -------- | -| prevLabel | string | - | 当步骤导航器大于一页,除第一页默认值都为"返回"。 | -| nextLabel | string | - | 步骤导航器大于一页时,最后一页默认值为"开始",其余页默认值为"下一步"。 | -| status | ItemState | ItemState.Normal | 步骤导航器元素的状态。 | - -- ItemState枚举说明 - | 名称 | 描述 | - | -------- | -------- | - | Normal | 正常状态,右侧文本按钮正常显示,可点击进入下一个StepperItem。 | - | Disabled | 不可用状态,右侧文本按钮灰度显示,不可点击进入下一个StepperItem。 | - | Waiting | 等待状态,右侧文本按钮不显示,使用等待进度条,不可点击进入下一个StepperItem。 | - | Skip | 跳过状态,表示跳过当前步骤, 进入下一个StepperItem。 | - - -## 示例 - -见[Stepper](ts-basic-components-stepper.md)。 - diff --git a/zh-cn/application-dev/reference/apis/js-apis-mediaquery.md b/zh-cn/application-dev/reference/arkui-ts/ts-methods-media-query.md similarity index 100% rename from zh-cn/application-dev/reference/apis/js-apis-mediaquery.md rename to zh-cn/application-dev/reference/arkui-ts/ts-methods-media-query.md diff --git a/zh-cn/application-dev/ui/ts-application-resource-access.md b/zh-cn/application-dev/ui/ts-application-resource-access.md deleted file mode 100644 index 61bf3d3a3c..0000000000 --- a/zh-cn/application-dev/ui/ts-application-resource-access.md +++ /dev/null @@ -1,164 +0,0 @@ -# 访问应用资源 - - -## 资源定义 - -应用资源由开发者在工程的resources目录中定义,resources目录按照两级目录的形式来组织: - -- 一级目录为base目录、限定词目录以及rawfile目录 - - base目录是默认存在的目录。当应用的resources资源目录中没有与设备状态匹配的限定词目录时,会自动引用该目录中的资源文件。 - - 限定词目录需要开发者自行创建,其可以由一个或多个表征应用场景或设备特征的限定词组合而成,包括移动国家码和移动网络码、语言、文字、国家或地区、横竖屏、设备类型、颜色模式和屏幕密度等维度,限定词之间通过下划线(_)或者中划线(-)连接。 - - 在引用rawfile中的资源时,不会根据系统的状态去匹配,rawfile目录中可以直接存放资源文件。 - -- 二级目录为资源目录 - - 用于存放字符串、颜色、浮点数等基础元素,以及媒体等资源文件。 - - 当前支持的文件和资源类型如下: - | 文件名 | 资源类型 | - | -------- | -------- | - | color.json | 颜色资源。 | - | float.json | 间距、圆角、字体等资源。 | - | string.json | 字符串资源。 | - | plural.json | 字符串资源。 | - | media目录 | 图片资源。 | - - -## 资源引用 - -在工程中,通过**“$r('app.type.name')”**的形式引用应用资源。app代表是应用内resources目录中定义的资源;type代表资源类型(或资源的存放位置),可以取“color”、“float”、“string”、“plural”、“media”,name代表资源命名,由开发者定义资源时确定。 - -引用rawfile下资源时使用**“$rawfile('filename')”**的形式**,**当前$rawfile仅支持Image控件引用图片资源,filename需要表示为rawfile目录下的文件相对路径,文件名需要包含后缀,路径开头不可以以"/"开头。 - -> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 资源描述符不能拼接使用。 - - -## 示例 - -base目录中部分自定义资源如下所示: - - -``` - resources - ├─ base - │ ├─ element - │ │ ├─ color.json - │ │ ├─ string.json - │ │ └─ float.json - │ └─ media - │ └─ my_background_image.png - └─ rawfile - ├─ test.png - └─ newDir - └─ newTest.png -``` - -color.json文件的内容如下: - - -``` -{ - "color": [ - { - "name": "color_hello", - "value": "#ffff0000" - }, - { - "name": "color_world", - "value": "#ff0000ff" - } - ] -} -``` - -float.json文件的内容如下: - - -``` -{ - "float":[ - { - "name":"font_hello", - "value":"28.0fp" - }, - { - "name":"font_world", - "value":"20.0fp" - } - ] -} -``` - -string.json文件的内容如下: - - -``` -{ - "string":[ - { - "name":"string_hello", - "value":"Hello" - }, - { - "name":"string_world", - "value":"World" - }, - { - "name":"message_arrive", - "value":"We will arrive at %s." - } - ] -} -``` - -plural.json文件的内容如下: - - -``` -{ - "plural":[ - { - "name":"eat_apple", - "value":[ - { - "quantity":"one", - "value":"%d apple" - }, - { - "quantity":"other", - "value":"%d apples" - } - ] - } - ] -} -``` - - 在ets文件中,可以使用在resources目录中定义的资源。 - -``` -Text($r('app.string.string_hello')) - .fontColor($r('app.color.color_hello')) - .fontSize($r('app.float.font_hello')) -} - -Text($r('app.string.string_world')) - .fontColor($r('app.color.color_world')) - .fontSize($r('app.float.font_world')) -} - -Text($r('app.string.message_arrive', "five of the clock")) //引用string资源,$r的第二个参数用于替换%s - .fontColor($r('app.color.color_hello')) - .fontSize($r('app.float.font_hello')) -} - -Text($r('app.plural.eat_apple', 5, 5)) //plural$r引用,第一个指定plural资源,第二个参数指定单复数的数量,此处第三个数字为对%d的替换 - .fontColor($r('app.color.color_world')) - .fontSize($r('app.float.font_world')) -} - -Image($r('app.media.my_background_image')) //media资源的$r引用 - -Image($rawfile('test.png')) //rawfile$r引用rawfile目录下图片 - -Image($rawfile('newDir/newTest.png')) //rawfile$r引用rawfile目录下图片 -``` diff --git a/zh-cn/application-dev/ui/ts-system-resource-access.md b/zh-cn/application-dev/ui/ts-system-resource-access.md deleted file mode 100644 index f888038883..0000000000 --- a/zh-cn/application-dev/ui/ts-system-resource-access.md +++ /dev/null @@ -1,20 +0,0 @@ -# 访问系统资源 - - -系统资源包含色彩、圆角、字体、间距、字符串及图片等。通过使用系统资源,不同的开发者可以开发出具有相同视觉风格的应用。 - - -开发者可以通过**“$r('sys.type.resource_id')”**的形式引用系统资源。sys代表是系统资源;type代表资源类型,可以取“color”、“float”、“string”、“media”;resource_id代表资源id。 - -``` -Text('Hello') - .fontColor($r('sys.color.id_color_emphasize')) - .fontSize($r('sys.float.id_text_size_headline1')) - .fontFamily($r('sys.string.id_text_font_family_medium')) - .backgroundColor($r('sys.color.id_color_palette_aux1')) -Image($r('sys.media.ic_app')) - .border({color: $r('sys.color.id_color_palette_aux1'), radius: $r('sys.float.id_corner_radius_button'), width: 2}) - .margin({top: $r('sys.float.id_elements_margin_horizontal_m'), bottom: $r('sys.float.id_elements_margin_horizontal_l')}) - .height(200) - .width(300) -``` -- GitLab

    uZ_9;?B83LU$etk z9wp!WeL5Q&X{R8U5}#IBr)4%T9#=gk*2>>4PTT206O`bDzZ_!X)IBZ5zmi=s0)~87 z=t^8TbF^itL0l1CM$SVDEh5}@d-!midO-o|+4MftG%_CFm0VgaXwgYRj86navh&ylD!W;G(MK36Y75IO5`=!{`+pFg9SC0#t!yH@uhIB zVO;t!{Cge-I5j+U5JD3&F9jWr8#r$-@O`7@LLJ`~YrdjwpCY@9E%4DkIz%b)bJ>(L zD(NR#!!)1fg%@c=^Ez``jNGQ&oL`5t^(1EQoRc@WTE)3ny zr#W9BjTyLTAdxQdrbY!3GHO^mpRISj9Y&&`I+${gA&&i$YOV8p$KLc_cTp8h16``_ zQA$kEb(_2tiym1icwdQk?Deh~4@iuTz*Crrjdlg>QWN{=1!>~VTY40PKSaUHN^yF$ z6qmIJ#)u8)7w}dZNcj*Gl3kIoeYy~Ul^(mYtAJDDRWwN)l0_FmIr;mb?L2t+rC*Dj zyLCxeEz(O|pAO1uY-Ha#I&B+DDPVo~{t*c9#4CuxF>>%PW;Oesei zrRqG`I|SwSUIwB-Ixa@%UMnn$(I0N$$pd&-LiKgI93I2Soaeq?2E@Z{-x4wMP|G-G ziUL|%cVWyHehE;$Xk^wg!uNl^vydEvRjbGK0Vs8X^?NfbhP- z;#M&e)GC6c-S-9I|7LCTI*(XkRDkG%XzO!iPoft&T>^Ceu{~ryy%@ zYSi3o0PkgDV^bHyr83aye9}`Sry)j*MOiP_xl7cAEMd*>+K}#OJ4+0|Aq!HdV6_rD z83MKWu3RuaoUP<%1Mmws(r_eVyh-jydpkKo7(@cffOtI`jrMhy(pKEz+rOw*Y6U~B zSYqJ6!Tz}-vQ+XC_tmw7NZy=XJA}^BGL9}o9r}7?yG2!>*c|NI1 z%lg=7!$9#F<gHMXXypQkt~ASgcH^+6!yxzbuQWN zaT1xkt%hIGEq-Crn?nid`0-p7=&hRsFnR`tfGXHGTN|kiq$beR5jWx7&C*=n_LvR0|82W7!xGxwERc} z?0Q%5ylIHc%YE=_7>Xe${zaqZ)J0v9;FN~Q8wz+V8S%?OA5MfL-C=P0ZjAf+?FE7Q zwp6PIS0%WsCA{1=G=mtJs(uWS;NYZN67= z_k+%eA=?;RWPnRdplnIhC)4A?x*=sIwnJXW_Ph$TH;W}l3MfTVojrnA<6`e;#XN2` zzAGr?k#m7I9A{+~clDbvF*Dd)?QaAy7myFDDK#tu>V+WYDxTLc95qdZL;>< z96LBF^#h64eV|zoj8P|?j4^O;Ow5TS-7UHtJC?XVP1IM{zi=b4QNjP-tY3+);B{|W zWof`+WODU<;vUDO>+_*?kqNdN36BT@MY{1PHjq@e2p)1x@WlOTmowt_d7d60W`m zH&Al<$cJU5b5ujsyZ4;Y%i?v1>_tV8D?4FKNTk}=SBbv`=36IxE@C|U(vNJ4Xbw#; zC+2ug+_{{D+?=GQoRsmLD?f7RqPgjMxtTw521=Fwot?@H*s1UT;T3_Z66h)Y-8l#L z4{&|{uAKt|33x?+(slL=KzIUi3gjx$@g?Y)udvx5O9yl-P^mzEirTS&q#c<36S)Iw z7a+`lfCb(Xzs(A0i~}DC=u?13{WH#?t4pw%7I6I2QE!=G%Q?INW)IN3z*Pce@~I8B zlG||i6dOeJlupb`I8Fk6s^|U`NZ0WdwxrWX&@<<^et(+A)bV;RYBQ$d`dQVfXPeu~ z=dWyWyP>XWcJTmP&g(0`!^qGx}^552%;Me>YGWCO{w*63t;%^=&QtEB$n6~(~f5&=#k5w;x#a1yE4 zqA?t~xv_#ME-umAw*@g-Ssa4AWxNT|MKA_~R#cqA;E;eSV^MeGQ0Tf8QM70>2EDy! zyQJiH4)mkeST5wlp=@N@&2(hT%S2&LP9&03Hhv%xGs21!WL#H>-L&KJf`8hoL_gI#cU<= z@O=HScl?-0FP9`vcZ?Mjt$#IUS3XjN(uP8dVDSq~lG}ddW5bcWjq201t1yg<8HIGh zv;xv!hJRdF8L#o|IC4|bUTiGtEc^aFzn|f16V+PPM`C}{tE!BQ5*Kcs#T2Dc?JM$PJPaedH$(}gYmg|PUN^EwEQqXw z(wstX&*SqSxl>>=g60}uvS43Ei!E@9xrzr-2m6yB-62x$6bd4gQwUPGqGBf|N+h>4 zG0lnCm3M8XypvfW6L6>Q8yEElS2mOTY+gg+EUVWiyOpM47oa`UE_-32L<({U!z6{k zb>_RNys7j8Qv?rjIzgI$?kH4$Oo$TFgsGuG+bpyaIprTlpNu2c5hJl1xkStP`VinNDlJ!-?dBd+J3^X!Lw-c?3A>Co*h}@*; zw{AZ~6yvU3pj5G~Q_Q$y_Q`-VrQNP>>pybH{-`7cJFj1-N|PdUuVoid)rwEs`Jv`Z z?q>2loOK)XKBVNi?s|UWA2O|Htl&m9wyccNIgwCWj7Z$XT_Ao5~aS z!zG1MkPt_HEXSMh*J@m<-5zZ`ihY5Gha;Fj#_=Q3Km&&`yNP#_pZHsa@IFca7q zjvHDnodWY(ErJ9JIVK68V5KReqPXHOcN5DW3)czVa)9Ji@XO8uMa`=fJTSy=w5*zd-qbw2V$xoJ*qU8mV$<}Q74 z#B9yxOG^nPKue~FbeITSm^6Q@7?I3aS>RfPoK=1IQY+oW#xBA+4u`rLaW~!8FhVFs z@oMOFM^I-`Z2sY!P?=d69DIAs} zhRuOp>gj=_k_EXHN$2et^q{@(FPhv^Qx(W}_LB!Qlq&5h=XE1x+3QMF=cqoR42-#!d>1lnIrkOKv`24&=45R;) z_c)!GWNj?Wj66j1|(iA*!yd$oLi`=zC;hvRmw)Xq?7vC76RjPOE6)&zla)X*AU zL5R7M$IrzTN%R;+5Qi2jXKME3BBBXO= zy+XWkWrdJUhnD^4V-~+&igUd;QjmXDY{-7TAewscRb{8=1q!a*vFp%C&Gq#PZ_9Ge zxL`APIukCX)($&A-plO^DFxk2aNQj^NSg_je|s+xW+sh6x-fGH<}t9%f?}>l54^cl z42;l}^X!Nmf-~?Vk)KR)RSlQOM}1OB72q|LB`J;LV|`u~$fwj6B9QZE-49x0JZkIi zqIDsyU}xvyRa(8zG^AbFl8hj=H4acrq`Sqr8*{)6|ul;MjcRk|nb)32+hl3+!%FS7%zhF}k7Al8S#bI~|4#A-O z-@ktY3=|xW!~Q>I3;hii0)!y|5CUu=Ko|mGA%GVG0HMFZLVzIzAVYt%g~0g$s6v20 z1PDVpjlTeD=wJUD|C=pzP6$r@uWTWlD~n9@fKva3EwoL8=Res(k^djqLVR$}{|Q?N z{})>b3m5;JEd(G#f7n9&Sj26y|H2mfcl6S4etQu4Sy6Uw2V-k|_H!ckZ^7d`c%uhi z0(dS5@9*G=AD98aiU4ouz*?AHV}lb7cmUv?z5fdv@MXdCIxq=<~(LI4UeX8vwS72nddX zVt`(Xf|sTJK`*&-AcX(=csSu=g@2)!xZ!+%J|6Lwe2EvYM(+L#dC3C&=U;(+{Htd2 zw@U-AS7~YK>1lA8E&?k?Lqmhl`p@x8B9Xv344NarRACGPnAr;G)Q>IvK_r3m*5dr1 zeF4z>*ycC_&R%faf*bkPty_N&>H(0I=<)Xez66lJpp&9Z9s+47@C{UUZUY4qMlTz% zm_%*n33k&mj$L+?Dc}n&{9psWh@3pnW5=7 z-<=abAB$rL#6NL}A1!>wE~tCcIPeSneCQ9^F?laytJoR!n<U5taAald-%D_=JRig=mr%}2JvM5q6nPIv)7BP2+$$XSVlU;0xsi989RsJl~c zRuJ3bI&-wox;1NRu%fZ*0e_wUFH6Cg`afKnTb7UN!TBGu_!hV{pZm^S=Gwlkq1bY| zJ7aO*!eFG?hk-ly^USp)!#<8ZIN{Nsb|K^wt8F*?>s!ftVPEFk4(vAjbz$@SbZSJz zk!?>d&ackBeEMQL`&gPz?&v#8`#BMtizaoZELu}#HY<#z-_45Q*6O-RgISll`}Kcp zco#?P33mzmdQ)UNQCd1d>YpHAnS*C?b>F9!jVJsA?^R-+Rd`;=(e@ z*k81h%E4y~K)!q)9r*M^;l~Hzm>4B5C$1FYt6Xm_3WzV)C)z+59ZEijjI2k;b^qBP z)>dc@@~J%e;6Uhx^THWLW0+td1$%iH9gjfb&(9Z$J|>YMO)E-{0Xl!B6iT;NE;}WH zAyJ^xZTL5^Vt&>_IZ}ch=u>)UWWfrO!4MB}$VGx+*_oRYOh!BZ-tx-sL$xq&oeyFN z1Ej@@QYAVlw<3Edha3rmlq9Md;xPHlx|t(IDz)#n398q9$lA*+hIbGl^!$<6%a1uY z^L<0<*eH^1DiP zyS9)J^C>H7?`n?*XZLDvgA>7Gi<60awmVH*9grD&kZzzrsO>ZQ+^rq6 z#CbFH#$s4pLG;l%rLaKdJ+3~F7k zB;9nc^M85q&cKPY?8@&GLA!5$f2T2_A08j`)4Or-fI`)Vp^Ex)#V4Gb z&5Kz6F_#~&zByl%?Z4-ANlDe_LPf*!<|3o3YG}4b+bj%n!CSX1H-Eo{;?cFGv>{VN99w=S$V+Ev5(mF^9hVoc>fAj%UBKKZ=}M$qB8^t(1l9~asU~u!4Y93 z&U6w=G(qt9j~z7r=G0+q8YFB5i{3s+MCy*|pf3dmO3hfE?x!OV74EWfMnn$##s}!S z{LACX?q}JCClQD!h)12$ir5oKl-xt)R!TUD-L^tewAMtKK!y0UwKPotB;^4QVf>63 zg@L0!%3DkU~fZcJQxB>-p2y2M`7ZMOwB&(v66WlVaToB zrh7O@+$tInVQUO#6qUv;C1uFtMU1~)N9IWJoe6-G5f};!EA^3tieR=2o+NV^ZRB!A zEB3sM@`$&ar*x(a!7)n(*Y>y&-}|gSvl%1AebbxCNZ1sQI^IGm4UQa|mL z*Fp>+5qVnjlDcqYIK_xtouO~^qd>DR@y1oMI~Se;*Fa4{m|7`WuuV^K))zoam-`jbBN!Q_f|@;XK+Un zA6&w9?%)|2el_|OelH95<+lJNZEJOOPi0`sLtR12r7qsIYn@4NUVJdVzc#nq&+Sm4!oIP9T zId~p3RH(FWADNmUe1uL>n;}*y=w0uuPcm#jxX!TJ>GX>pQwz0IQHB^e1i{AADPcM5 z;!6pF;&zR}GYq3^iQ+XZ6g4luMpkM`<9?R?)rwut@{2yHJ$J_X*~Ae|aXmGkozf$3 ze=8XNaKG+%;P9I)Grxu`p$g{!2d(jk;fIaVFqF{bH%TtxO&mVUzR7!Uvh5=F#jkw| zUSAvk^wwVbk{Odv_vhredqne`YvZp^&b;0=EO?}xIa4O#cslF* zkS+7N9j6!`MqL+n@1TYST~14XhbtHA(m%F*He%~dZ_8L0=~4!*O=WERUfpNArCuMO zdel2_D5}1_b19+jeBHJaO`1afJTI;jSU;qH^t!qG1?+uoto^8--RC`Pe(I{l3FHC2 zes+cSth<@|I&A=ds4WbuX*iOrKe+eU0;*`wpx4duDg(m(~$g^iaWbq z=TuMa>CsUh&ei|*arx4i@tkPYEpyie3voj8i1E%m=jWMsJd)sz{dHAJWKYetjltSW ziEv%g(n*0E@ME5@TAezU%uug)ghb}lHoU4t2@(;pQWp25zxf)1z4H|~rNN@M%K!Ua z6LbQ}p!24d|BV}JuzU(s!C2;`i`#y-??WQ31j5U?-u+naAAA(KlAHDtF|NY6& zi+Te$7vG(I?(%@=x58oZ;6UE(9_kLqM=HFcf)7_XH6L_aZLYKO8y7#@*Zae8R|6kL z|MsaKnLS^M-epj^p3V$^Ht!MguU&MN{#m_w{@Y%?8}mD^URYe%cJ}`A#mthpeiqm5 zR(im%FO!chwCs5LW!LWCYa#DuKB7g(MqWJm*6`wD&7P+}v+77}jJMStyoK{b37l=7 za)g5FR^FlY1%mG)u{XEJaqe?CV9rCK^f%s?*#@bi-7guPz6f7IaIV7P5M{y35?Oj# zRtnmtftMgb5TGM|q2LqvG`_=OWF;JvPio+D=adRc_hRF;GMoaJ7l7m1f^ZM0U~~=5 zfPD^z#F%{h^I>+HLI@TtTRK|U0G+IbPonvn1i_rTwu$5`8#?ld3|y9=LIR3-5xV*| zzF39EC>;v4f`$+jNMe9bgr#Jm7<+V{z(<4=rQq zg^9`t9AL(aX(Z6b;^njBbqe7-@Q6Vn2$x2Idr;+17Q{H0UbYSrS&mEiXH`Gd*6Ui% z`S$po@4hEipwIV=CK3eQmIrn6bv=%DxTR?)rIgq`=sq5GD!DoPI+f&GVeZQTQ8U*NTm;&v}Zk4<|e zzY(zhKy)0f8fAmV4Ct~**$gFsoj03KAn)dXvGw)!fkp%h8sN>||73$W9qZ#3kcKZ; zfd$fIc5c0+qhsOgZy=HmhYtctE@$_|K7Q6DV#O?C#XoBS=<&d7OWJ`yL>xcnH?0fX zeGzkf7hCj^S}^6D#y)X%{YLkn`4k}P^BdX8m29BUooT~X(O-bH2aW|$@eKp)@|NF| zzu177+x3}!|Ni|)lWd>d%?jpBR7Pt~ac5=wI#Bm9H~K5v*411(RNeY`?Z2qIv=Qy! z?DU+}kJwZrzua}IU){P~&iaw3r{|vIH^HNU{s{(;{et@OM;f+8rXl0@p^uMv-#r%I zMhaOWg)W%;PX704m;ZJC@SigWybt(q&liajWW@!*rS{;Zn6DpyC~BdzF=dAiHplYcS4%Ox<1#6TxO_A zf58Cy8zlX)GXOmfJ*Cu5NdAEVBslHOlg-~CQU&4x3_!KPn74g7C}I>imzuRJSE%r6P;EHf5vk^HrAcwns zpxET3T z77e#+o)ry%YEvOcr5IFku~49kMuPS_UH0tp~}tPAN{ zq7dRd#~#HCX@<(y9B{?cO32(epF0p&XyU!n+@zTn2#XwOfoAyFMRR$zBS{O_x#`N* zSa`e70LVBzYGX9enrIO5%feYBjNn;0G&~VXOfmez_I2cT6c z8;<+;`q7Q^DKwsCYa$b^Xr@4K8pB$>et1;bS@6lcPw)L}J;E`kZ$(U)mpnu$++$)Z z`DClmf(|a#jkw)7c_!Mk_hu(CUUjuwHrsdgnPN%BYL9Be(rT|pm+C)NTE$xbzVAzG zFGy&$uLH&+e*Y&xHT?q5{cpX)E?v2Peci$Nox*I^i8aEmi>Kn7tVT~i%C4VCzco=G z7SLvS_j-tpL&TZGKJ4e>Z_jak4?ku~Dr}h&+ZWV0ohVb)B2IlYisH(2=r!8H@Hwh)(o0x6AW z9@gQTX$~T(ZH2T-JD^M9&|IMko+5P+2nL)crBvR_7zxvr0*p)|Q(D3*T3Qtiq4z-& z(g4B8NK5rkA>qDt9c)RP;c;#>;O)=pl#Qyy3u(AZ8fDaBwpb9k`#DDpW&bL75tSw} zb2?D4Q#FRnlhh8*?dfR53@QCB7e&}tCH(uJfMLm7cWR{`_FXVNg^X<(Dn%m5h~%76UCY+l^cHL{E9n*!W$0g zr3VOcy(z|gw|%On?%Sc|GNBwH$I>*DkS9$pIAuTdbvKJF{P`vmNkn{0A8QdbQGoi& z9)TsNb8;Locu~jWcjn1Bh+ch7_j~PgX$Rx$bvwSU8biV9W)JEQy0G2aoi7!bUFKF5 z@G)1Bnp+@T6y4${$T6EEHc45=(j}SO$CM zw`zoBC%{~)*8=cHCh z3}lcmfM|}I<3mmj$e4u|ewp!74Vrz2lw%i^X8EIqaDRNPQJIiu=z5dr>@kL z+rctpbGY zm*!eVIO@$cAVnG;DeL|pN zXMyC}?%Pbxb#91b9|e!AVAbC*&UTEuvUW%N%!tHTi%+L96}^vwaBSE_BoKoxB8Z5+ zOg&WRk#9Bc-YkA~Wsv0a5my^0KM{2IP9$0uHNF0|9QoouRNAl46y9bQ`shZh`0tg3 zqs`MIFCvTAo2CE#NQXf**tdTi>3>s?fr$cK6G7V*kP!lbA`k}xM>^md|8154mjzfC z05J?)mU|_oz()ax_TM)i|Gx73U5arx8)>DX?lxbb4bEJ_-^? zqQ@5cCfUn?zZ^K`5&N9rI30g$BE6G+==|iFlvgH^;EzGVYLg|bAag_ zlRq9te*vJzbL;G3;HJ#Zj=yJjObpCerx`^$Xb^vk>EcMgFgUHQe`BWSO> zow8tqlOvm&4MgB9ukr)sNDo8U-a8O}Y`CH9Bd zHAG85aM><3f+UqeEZoFQ6eOuqUf1}&7OnmG^1>odGd&*^UO26KZ%t;SqF<|KP2391 zZ}|Kc=gqbKQaC)C3n7@7pwB=do~a(e-#&740pi@oAx|d_G|hZ^1x74(oTsu-NTk5N z13A#IjqfWVSCmMBv=}Cgf8Z)O(#@}+B&<%rcm>HUDsp-59Sv85gy6iYJ6jNHvIB;( zA~jHf2RAs<4RAX2Ns5+b_f))MIH3^1A-O`aK;oyuOh+$H&kUCAudxbjF-sj`pe<{3pnK+#($hvN2 zs*$>ob+2Mb?znwq0efPh0{aX*o>)IrwrG<#b!egL_H57D`xoG^@15-a?Xy%|iY;F# z>#b2PfAB(C{L|eugKNIkqxL>3btO)(KNY>enk+Tm&DxuL|4rfIr=xnm zg|{#c3~P-0-Rd{3YA90U|awNAz9%X{nBJpLrc$M21q?10}t=1cDX-dt+<{QKuh*Js7} z>7J`%_U9&@Dt*2=l&ClVjJ9W&YL^Wn8J7^gDYtBQibCqf6wb`&uEa6Y?~lAxJ{OCM z`hzWDoGQ^Jx#ZtO1e4pRJev5m4=!NSddC%iK}jNob5Xh#aZ)4h;yw4H`@GwDr}5fo z)dFtzWrE?WCA!W&L1{kAQ!RB%4Ey~q)4z&4(sV*uV21jnaP|O)5|1g?F2A(_4q(PP zUsAj+WVp%m2bRO>F!9$3S)$4cu5J0ZOc`+mu6l#D{PQY>E zSR4}Mmp7Cl1)e}F1Q?&pd@)RPTP9I-1B=iP@?iE?%qeI1S+}IS=R_^Z?0)g$2P%?$ zZFmnB>WVjvOFE~;W~n=x&)6M_mo&f;#i9w_Q09}Z({}K{*nI>RLXvvgaPACz`wS5+ zY)24NosTMh$c>PRN**<%SiYGOj`w5H*7mj1HBX9 zf;Gm#Va5(=?wft0h-T$;bd3WP5X83sRm);l$BL?$x|Po=teADXG+c z1!}oFuVYT^Ny>mMrqC4bR^H$E82zGGJQfU^DKywEdR`WXOfWRz8$vvJ>tTDiv1H$Y znnQMz>v>rpdP~Q^V9QKCRb9`Ee?N0#dG?Q}=fIBNIVqOiq)_ zBlN|DFAXFPw=emLJu$H4A8fD@zL1`-kb&pB*k+$Vhl;`^aEHH~aUE@wS+d)VIZy78 z_fr3zCAe?R#=YyNbq_mnN*s;;Gc^khO%LrbPf=cTk8h zk2gMd@P@mIgC>n{yGup%#@IXM9!50;Oe)HgDuYYd9_GJR|Mi2{_E0{n3hl_<=T-WK zbIr0L@WLdlKuoEW_7|jGXx0O~oK^3pSm^bvl~?V~jICKN@>jW1yc@=6x3Sj622%o5((iS?Dfx79bI+7n_r0#8U7vZ!kM(cpu*&;$TLq&w_FFFA$%)_sNdGyBDP&Qdk6~_aR6jjkncf*lH1D1LG+t-=ivWd{#%a5G`2VC@M5qx>C`Np2%K0=U zgm0u2yC#K}8GJXR7;LHt1#{5M?s-PD_DW+n^eMJ-m5DzCDe!09g2_d&CvWxj=3gIX zLnA~iNZdOj=W;2URZFpsGf#|UmmW#dkV;AR&+n1xR82N}N`wu)yXc54)+o01JpPVh zKw3SblSie8i(q^%g10|CeEqOh5ggnUB*r>pu%zK9rYZ1Du`E$?4+kZUNOl#$ueF$R z94yFoyr^af8$xUBh-ez>`GsSUS*)>VY>-NZwc>0%<7{Un zFG>^t)ifv!orK@~^RXf;3l_xQgO>_;aDX?8n9HAucJN-A{mxrhSOn(;;NSu;81Qxh z@dfZM0nZW8stz72;2oo&pa3ef?py;AQ~k`GA>G&HD|wOn|$Bvgh!`cOG~TRlekjxxWMMGXMBqpyq=; zzFoU^f#-{y_c(Ykt=rRLy7vW$;DgjY=;H!!oy@8Q@Nntnu7cSVV9{H@uRAaf8~{4X z%F5yk$BXWN1Qs=8pN8ndU*N$39tR5x3k>#X!z-StscG$V-pRsup?SZ7dF;@oA7GH> zSZ+U^*~2LO&^E^7bbY$o1$=&ssf8Wqnt6$}Jau)AmX?-Hn>O9+{90H&=HcN143jl& zUtYg{%_ta1C>S!_H(+2nM3?Eg5(|KIQd|38lv&HwqalDbmO zeRhH5@mD$@47hJ=QkUtYcjr?;z3|rC+8qU(&wLW3|25!#B{PtK%ytWd`+n>FR|pK@ zul}_n>Wblip~}|nff#oq#xzN^SLJUW#C*;vr_f`C`JhLHz&vOlB!1+JE_kdMHexN6 z1fzQbNPbU}6hZ96D{P<)R$^B*s6;jjUD*hHUvfcqXso?*U`O2@;QKN>uFv8aAt-QB z=-%E?ADN&C6SZj%P*};HB9Gj2%%-Kef#efEDO5YhYn^`XJo4p-4ac4-D%y})KJ1jm zwQl)^I|{2|e#y+!_A6AYUpy#9G7l5wW$Pv;(PK(G1Dno}cB)iyth^-%I0{N1ua%F{ zw*VIf6E|XGlDaeG>Bc`oX-v_t&~6mE!vF*B>omB9c4&HMhI`@w+w)Q#ysj}@)$33ryK*|B$~o!Mq$L)ZNhRS8#% zkJbeR7s*=^bS|HFTBW#OQtg?&Zs_Z+C<{@5=2Smwb9I%y@IGXsJCv! z);s%_<$ef0_Rb)Lf_mDbjbN5-DIXu+uG^>!sg!T1bgryGgn0^^ zgTnUTKX;Hf;}@+_!eIy&ir}6y8E;j=aZ%W-siZkH2YWkFt!!l+Qo?gdA4n{IQiO)m zl9e!yl3+K_hA9y*MV-0u`^y-0rJp1`Sf&#zr@$9c91N|r30*I8nw?SP$TMrgDJVdK zHFI1zgsUwlNQyPx?;sc-oOw>B2tHg7eZsMAI7#5s5 zj$P{savw=aVh~OJs2PN#ylpac&rlPWK~!$9;H0@w;vIhVAD#UVKbni3+@av0h$F?4 zRt-}X2CamJX_#}`AdnN&2uhJR3FdyvDs5(nQhS~yR;8!kY6!GPMZm&>ToG?UL@bPk zvawo(ta7iA`|(K zoNT|nY$r+sXXyxKDDkV~Y$>m6&T-IzUm)BHgvtxKW4KXALMNW9ZJ_YwR$leid9#`X z-AQU?RqB|;HI`e$#Fk2X{w%-G&hpzHV$9=rhtb3?)ot?LQj=J+J@8nQL1$)3wScVe z71KE{QjYu4`zrJMwRVZVs`z@RD(zNSki2FD?@&&i>C;;Wj&=->u717C5vqtt+%_^H z_pQEld&Qv(9V1g4zTGQ*pcn;9_FFwYaNoN80A2Fz8|CC2=ji=#|Mpgf;-{6{eXJL>TM8~qu0Puty{ zhiVe_@)gRK&$b`YS)$tHyi5K`=h>kd2&C@v?$WQL>H!OD2pD!kc`zg3j-g!gR+~h8 zPe@Dnxsifhl1faO?Q|&_&zr={!8xe|y&-iKb#Xqk=fgBqRAQ_OHg13K9J>GIwLcdH zAywB}@5l|u?vw{@pYtBx;9mFe?{xl;)qaj}T~%VZXNk{+fs+dJ$C8EApQ*lj)e&A- z>(%sL9mRp=+P^BdDL{%6ls3#P!@a&n^7d8D0YxhHEWZ`>1i}rCL{rX#|5&1*1fsL4 z>+R^ITpy83YRV)EpB25dQ>Jz7?)G8OKY_YOB*BXNj(RIO72UIsJF@t7&5)A~OI@G) zR#^l_Td~IJYr)I==)k#nh^3rsp~5e{*2HDQB11U#DoVi)K?{DC4Y_n2mTdKcbm>KW z5e=kpwpW!R9d%RY@*4aA)SYg?T}Vh#vl&2OM=lhB=FA8WK%z~XqWN;)OlK1!Qa3C@ zA74(vn&hexU{Z?xyutR+E~H<%_FD!9^B0Rt0L0RFgoq#zJ^arMGGKAA4-R}i0ENXp zX8@D~M-NCP1JnkN9)Q#Uy8(!k_dErp{x_xrq!x8w1V{}=4FRT)ec*w##^~su3j*ME z;Q9e3AmHTzGI)H+S77sz_m}}?RwTDRzrXo}S}VwtjD6y%xVOLm#M|g!Uo-e; zf3f`yuVZ+D?A-u7J3#7hpW&UZ<}q&Y)C0!BIlwl&30xKo!{;^J9$QAd-E?3I7>Kqa zA4$8XfoCV>Ht)mSf|>s#5No+uJNM5FazY~LtNl-t_Q}HH;zVLW0b4w;KL@~kod-udD9zJ@^X>59uMi3Jfs3XP^1>x?VZm6O8)$9I&!2tn2fgW+bSQzT+ z?IDg2y`TFqzmO)}D~FA{`tjS!_tk-(*p4qLgw$cXDt2RRDvnUbVf!*rl1lDLW;;nu zpeafW<3i123#dCMNeu3{g2m)O24R01OgI>4U}4BNk0QkDgABq&2Wo6gd~wuOSuP67 zw*XC1$6Kvp1(f)7N;$WIyCq&BOj~QAlxedk1GrnF$CyI$1O?9%98{5z5O1PA?LiTM z(eKWz+}68H%R_of1gQ}^cJxV7t!P?1{mDdvzxcL-hLCEjj$hiLqx$+GD&6`2$RPhW zA%rmiqsmSV^-FJC&+F~!YPk1#y64KaKlYX{a|5-ZV_gp)eEZ0Kau%#V|0D^3_2)ul z^yC-D&Oj2|P5?r|VEy^o4vys)>^GH&Jt$!bCIu%P%z46;GcJV*sO9OxsO@;plXak? z=*dnd27&l;O4j*BVMuI>v5`8dh@_lgHW76ZONxcait(JYBYSZW%#Uz)Lj2sB-8;2M zq#M(}C9@}ancGIS1EU0hMIBm8GGS+V`X`T_r`h%(r}T-LP}14t*1d;&$t1`mmgSIj zF~~?d4FX9nStz3An9uGn582nFh4Gy0q_yhwmxY73*yAGDKo$j8V42r=HOuL^a`7|E zD-gjHKMh`$fCbi&x+z)>6DLXoNHJ$50*%!fYPjdS|q>F#*;+3O@iEn zbKMqX;9}`ao7Sm@%F&&r^{^r zP_<@0L2{xB2f{@+1St8DaOlo+X{#}|B32jTuQUrmx^GAMoyg32lS9X~Sc>zILu$}T zhTtjBVHLO6Oum>;yz}gnh)AGa+eu1q*ozoM=p6Yr+=GOcG$#%cB5`^nD(*6Lw4|o& zHkApz#D)(Vx#br`SN1wb&F|-?&CwB3qE7CHkni-r&m80{vMfDcjhvg za<}!q4W?UpsMG8aO3_Yp8b)*L&JJR=2Rz_#j&PHMcAAdb2+DaY#^HJjo?>Q3LUeks>!Bzxp_9VAW-5sVKcHRM zFM}EJw>`oOxncE9?bVGTeyl1b12XQ(&ajPj^S!*sSb>FHIo?{{Lkaa3auA@(e%>x~ z`KHQo0)n+ytvs&SoQuz3RO4QYfm}A9K?J;+#;^6wt5Lw0Kus;;Bl^ zBMBdgs$`;dQL?~kqR$0n3RO^&ydBvFiBag8$KeVLfkm>uN)k2tKA$QyqayQI%!ckOZC0m|%Xa zL7Ma4g+Ihlk$$m~=Z%)v_RbJ??|!BGZ(?OMBnb(FJv1KllgATxdk2D}Alpd<>&~$q z0G2>RQ^xfjh)@C%4Jeg=f}n1rAn**-x4)$~ki+~t&kVFYAlQKf>3^whVeS7!c#jDo zNVdMLOmYvjb@-8hYH^(+2J-F3t_XQO4qP*+*%Y|zIHbGh z+9Zc`UO%oW%Lu3gum(TUqAj&{uqRhLGlL216aGq`|NZp|un1%YP5zTj z|2DONRc%0`M9*1ZLjiaSv|d1^VCVq2SO6>nDi!}rKL(I$7c&ib6sW?0M}cMxIQ3dP z5BOIAg8~nVo)-u7s{+ggcp9F)2rTPlzaB6R2e9?{@#8=e2JNm&dp-c(1%7q^_#UU| zK_E!``}+gZH4A8#ai1i)zKCOws(ZWuya;-B0x~}r78U}#jEdKg(w=vcZsQr{i?+vR z6kT5=B_sh)du_{SR_RFZ$ci_kuVsd(>fRcf%Tx24(e>j3@wlO5YJ8dZ2V|9$M!xXm zJx9geKw^GS(QUvlwljdW8Wi82o}O+WHDnd_mQgUcFMS2jEplZk_UeaorIULSUQYRkKPzxrPH#nwkJTV55H7s28>;~H<@j_Y&{ z-^6REtK-YHGzbLUFJB0hJF^+Ejyf7vWi1l7Hk#82_Uz&HrARy`+sTuDb%v{j6_>R_ zncFH6@%DtF%l=yOm-e-(;<^)2ai3GExN1OlC%IxM*&cHaMx$0~M9-#0ziD zU35r^OGaf8b1mZNI(@cMQtI57jq&%f9_H|36}L%6L^cjPLsJP;!3yy@3tmNZTJO5c zG{D@TTLtaGp0zNRajcI(H!u~VC_R3W0eq>xj%!pjGHm@LN{s0=}4I+uSm zj7D7t)G2oeMdR4Rd|^-rZq|#5#QR}saA3BX8Kf$&-_w~SeY&_<-9RZ8ojiw);_Qp1 zL6=p{eDN4GuC4};#VN6`@-k5pp4^le$)2l_qz%P^VZgn*H^(511ZBl&9AaeBaTM4y zEfudBB#r07s(d3`UR{uOMj?>TO z)sib_UE*E$(b>3B$t3P|oVTto##H+rhd+U|zp<>mX6x0`k*76UB`II`&E2Y>Dx0fl z`1*dXlJoCux*E=W6FqEbQ{edyKI(h4z%_K_*v$UWTec;v>G0E6n)yZ!Zf^4Mtt%~m zu>J5%n(^*KlipX9)(se6skrwhCdeo9eS1d%XJ|nnA_@EW#78~16;k69qMbsd=ohO) zf;<_^}I~V zjf)(7lVS~uumRAmh825}(jlMNvn5h5F5**HPQ)Uo`$HrV)jNhFq9nJ5_Ad~fW$4WZ z6=a~VwXo|N>%j%M2PKDV6+N&f{PC$yf_cF14ne2N?HC+QUKV<`m$b0*HtG5jXXNAW zPmQ7~E6_4=C$WcFPu@(z5)6}kHo%5ikI-;nfMOyn@{-jmSaRmvwqcRUf(NY+#21l| zn@_SUWQ}DIOb^`2iJgA4EOby~iv3Fr2e(+C$PWr|gCfxT#D{evQ=!ZzW3JDUcnKEU1p(2clz8jJvVsWD!f=?An zL6C?tLg<2C){L>Z$j4jR#A5X*qUw!Nja$QyI{GGE0arR8i>-E-OpVLrY z9IxNGSJIt&45HWi$ z@9$JUbvVd?$U&*HAaPoow7oyF)#LsPt?Xb_zeJpa3a8jXQFSNHAuTJPR;sYrc3DHN zna!Q-GlsKwnM>MWFi33Ph6%QxCBKxur@ zJ#I)N7R;VSxzWi7!zn(y^R8s!{R@&dybqDszoT#QTIF4)MmXkD+aOd|m9+gs4PH;a zMfYp9&&jubMN0zF7hiZ0<|Z4-KLmqsl+?UXO$*v_J}>xUbj`NfuBJ`GX<>fWVS{%zMs_b*ViNUQS zNhbw0ziHmRjsIJS`v4y3tlU_WtY1^^DA z8^At*Yk+hHz-RFXPr-9s%ySMf3qYG&VEcC0$KKvv8J9_2uO>h`K&BIOS<>;J@km|) z%mUD_ z(N2LAc>Rk%v|?>-P1^Mi*nnkSdr2;@fCQ)I(*;iKsy?H%lM^a#91!?Zb!!LE3-0A= zUVVU;0d@jf7V=ya@>~GS3@EyLo~Q5K**eNgt^zVzNmNu6z_fLq_dOUN!RdOP&m)^- zb9P5(%y-vqJGHb07~4)xMC80bUN9DXb`V_m0dk+Y3pp`Hl=C+y&eriR zxA87N{KMWi8<*Zp{d)0{_j-yq{*kxy(6ic(9{|NS?WyZY zwStA&<9Eb_kDFGJ)?35sn?^uoyPc~bjzWG(N4C&_0+cVdR&b0_BW`^#om+z|yafWo$C?Yc4qL-qBW(tmhyK9y(Nd|PHWSeLUuAGI+@{A z#&nmW>j&Siky(^}|4jyR@-xOr&US_oIj8<+-O1 z3U_RlJh^jaZf>k{R_FK6pIB|K>gew4zA!AID}AyPnZwb1Y@XIn`Smu`p+_uKS$yHH|!@f>@{xy zAlg$+6eG4gw-!Tf-FWc)w=H}eLcO9thtMi)v6o@s{H`jSXy$PT5xk$|VuUS_pjo0zSU&nQ~_ z>{c7;heloMdh^SDhUb1NzjXBo|MJQ+=+>9lK1b)j^wSg9d>z;@^?`qooR{`>=&!4A z#IrR=hqrgH33wAdee14n%*Xj}V_#OiQQAx_<`sJWg{&u*H zoxRCo4kxRqi?O*JtCh16TzGzF-TDL(*9bl-3kobtY&tDTWE>A}WPH*(iFkB00`Nn1K@Zd7D%|&~mVxfzoMh zQu*)=Hqb3*Xz1Iv627OcqjAx@Sw(#3BOvLhR36$XDNwT~0?~MRE>pnInve&fWJxoz zmwyIo3tULjwI^GaHuDLG)WaUCct(NaPV`wyhs{XM;d>H%{73|%h*@U=v#muIg9My> zQsYWX8GH&C9g`p~#zvb;_)2CR%5zCjF6W5MJaeLEiQ}C}Q#usSgwIF%B;7{dz@}9& zVWqEdN7YmQC|HDSHM4hBFd|YNw@~`>+Fwd(+FO0M=kyiWGOlknvHG6!{Y9EtSL7=} zisB1;ToALAKtZTGmrx3UDCme9Pfu&-^>&t1SZA5DxSU6&m{HY~{_%iQZEc;a3fD?Z z^!&ExtM;tAr#GAIJzNsHJ5AT*o>BPC6Gysw6av*B;_6g<6~mmLgmga{I%1V-QXa6e z$-TuX$B?L|PhZ=SG2@U^J6o$8{O!d+@23O`Yo&a@&e?UZJ@?%?#xH8TO<>n+BmbK# zW&bz|=g`Z3g`0(ulSL((>YEf(&amzeP97IGydGv?%bpuib^C`9ch+m6c+34?k++Vn zgGZP0F4)QFeLS{H6uj1e5SRAxgnZp-V3-wptu_T_QG||G>G)RZLbu)zE21SJST6~w zI8b%NMzP5g6I{VNen$_HcC>lC5d1n8Yn#j;bQF72wpjql)>Bk(@+?$cG_x&7Zjjzn ziSCh>BoZVpKJheVqAE3wis)6%63l+CMLst}A|F>o1@Tqrt52?BR+`(;5ucLyP6i%K zMYgwI&WRNg4RDqje4s|8?7O!2tBN5BS|!c z>05X&S&^~kmaR2m1E+yXoqhd zqian45_z{mA5R<_yhf>u5NJ`k*qbwW_j2BZQ(X97$IO16_jRQBH4DJ5H!|aN_kREL zh3E%A-YlNG+b})im|=ZIU;0uC>|Bw0Xb;^` zn(YQDAj|@F?lk2w+-B{IN3kJkIGB1F+xWR~WfHZH!f4;Gh{*QPiQ41?TG32AUvB)2 z`aNp&1~PLd_$tXA-uP@ICpyoEJKtk=LWRVNzN4%SZ{tHS!Sr?f3M~sc4xH=iET}}t zo`O!;+<=*B(umreh%0pC_NW>L7SC7 zaeN+iqVDykEptcaE<8&U{QT)y-E8CzmBALJZ>BeYePk$yWm(EEKI%R-bxis5yM#;M zk11|izP=}Y@X7FM?z2Z_cg7AZxbS{(?ZQ_sS^oai{px3s_2bnqqNhHqX;;ss^HA?L zpIIH|{XY5m(S1>ge;a!eg3iFd|4Gh&%Y=ZC|E{S3*bJmWG0#~Ew?%NU2I?SSOQ87y zu@JzmyldYd5pj$QC>juT`70i{S-*bA1Jn(|Yha4?;pm^*Mde-Zz?BwwMgel~+qW+> zGZToV-EUR^e)qol0yr7awVeB)`YtZe8Uczo4gBe!00(h!_y!WIs%ImpxBwaF}cXEb(?0C?uS{sY@_adAMKRd;Jwaewvj^&jbx z^M-ft4G-Y4fk(Y#WOwhT+j(f~JbTFMm$nJ0coPgNEHAYiy#p_6J^Q_zX3V@qqUG z=Qv)%lXjg~b87-3@PDrW1Ih5eA?IxPV*cdzE<&Rrm^nuCM3q2jrtJ`DWJRIzwcsu#-S$p}|P}2LU zg^!C%1MeS=_RNfbTK(~JwK8!T`85Yl*woN2j_ib6<(tMtqFQ^ImNx0ZNwIYyBT2Kn zD5=8cDGKH<0?f`rhM7KXV*b|W1+dOx4z-$8x?w=O>wZw9cL-f*dH#EC>CVFzF1{9j z)#%aw%6@?pwrB0%HF|%>j{YiWs125mzq+0cYV^>&%xjk~WpMCvHkuNu6dRiqI3A$@ znUIXRpX887iGY)Em`%9t2piyp)do4vksm1PM7JE81U0>nTqh)b+mcQ#ZR4}KOznu) zf%B5lmv9QfhBKzOrLAuNx)MpRi%b@ZK(}TxkV!!@t`~pW-X`Jg!1r)f8r2RKXZi*r zrleTREZ#KLvwIWvENbxWvu#JH2!bn@!_&2qR+8vftTr23Yzrbe!-A}*Fh0!L8WxnS zVnmgfhWFqngH7qwR&{qh}_J2Qef>7}6&pa4e04_})n3 z45@6DSealo)1Yw@8c$^MNGQkpRQzIfrmCvG*!~hS92h~tqGd>&Bg~loCdeE7cVJ9Q zU{B?R)KDg}BVJ^(iSQ;QV9Q#fCn7uunXyk{2edr$?>bj1xO1{B;sI{s zOWH>M(DDea%UkEF^PI{))O7mmzOQ_28+xgdgN#DK)Ysv>cxz69cXoNmjGkI;b z_r`2yyY7Q|!d!;sP|L20bq=pWKR){Tb#ATy>TkV8&M?lg>ZF#5|6=3b5`PZrcy-@v zD~7v|A&-F=og@kJ(etT+2{Y4Pdf&q7pW5DsBM3__z=HwpdMy*IvQdKmxiucovQkyP zJzx~Q3g>JUKp7k2F(_?A24p5)ysmo_FU$whx`vwYW0JT&ncF>L{~8Ie&<}4iioQ(flbF19bW|nk=hw){BZ9RsGLJp1f<{)R3nPDp=ksq| z9vK(^gRKX6>H^uev;-msaS zeRup5-+QUG-<*HULu#Z|BfeC-PapRc7Hn8Lyu`T;^Q)3L_^iTH2xjDHx21@zjgTeJ zo6EPA4xpol)FyNH;P1}2eUcQcL`0j@RD$}AC;JY(lHMFVfl9&@$Ku!gcg$D4e`pCSuTB?)$X3z^sq6O;_a>Kz7L(f-aSC`_6R2h zS?n?FjseECTY}d%77eC_jd1Zw_)-dA2wFrU3*#v>zR6A%r*^whD3L?K)K_75Yf{e2 zY)5Qm*^q#CWYKyZ8?jUtgjJ{Wi>4t8Y*P1e90$H(W`)v+Ui1j65_Z&U^Bbo)Tia*B z+MH*4`+9ow5;P^9>=B{Y2zK2ewrU&)l0;HU1D~?5tn!S@3{l)T<9ZULL1Ul_hPFcX z#;~?0W~XJD+l8toEExpkU0G1gJ~aA?<4sk6vJ3sr9nys37Re1{_fp{roRK{u`_lWR z<8QZYh9&H0PRS^&AmOQ=jeAXQ4t5@ASEro(U?`+ASbZ8@skugn-@Rk#a-PJ^;#cy$e+fZP4I#VElvrC%nhj)meij}p!9@rXK_no6B%_P`)bi#ElX-R=|c_Vn}jz@ca zNaU3t#7Q|+b#RHRMt`2$!j%7g$I=Sai1>2ZN zU1H4|d^wGYlCS3&Xfp&#q20g50;^uWspQ#EBX$x!SDK`pAiUXe?4b<<3Vyj%Ob#M4 ztjk7=(x@qJsTlQA&QntwC2{=6_>Qm8wc8s*rH>=AN^jYG&Rj!QdJk9bqgpCNLdy*h z<7M2Og?6lzWqkKTbUiLY?p;RbDjX4onC~69MP|+|3x?5!W1TJu8H*G3DW9&%N~iny zX@C8(PrtXmE2gWq;9KYPrXLp-b$`~f`L@qkb?dq&Y?{)}xEL&RDoU}o$@a>0L;J7$ z@4F5aL}|r^RBTIh@4I8qXH9yjOH;!rUezqQ@uhwyyyCu${nS3mJrCW&?hGa!(7b(1 zZTp;`LgwX?g*$5TgfKS&`L5<`5|!z^=Ph>Y@&=zz;UuyA;o)VNzK|Prb$6f7A2{)2 z_-d;Og|q#@nI0jiWh3&3oYBh_BSmB?LZG3oOCP{1T}K}&(~$ngVR3kX0xMM^gqiE` zLo?`#pb8AH{204W$Vfhcswta)P%V`I2K2IYyYmncX|Ju5%Dg-F3RWH8Q( zH%&skWSu*= z>?lLo=Bj0`%CY-W7U~bRJaADVf;FQD!*ll$2<3hnk0&XJZZ_M<5fWH{@GvZ4-;5qT zouo`+&jlyiKp~3=Pnn}3Us?nS(%CC5E?le#bdswmiV_Ou!Xi~a-)*7br2>^cv-^L( z)7X5>mdKr@^_vf4BN-wx+|GRlhebUpt1kkqQCzBxKuEw3T1UgT1vB%-#2qL1sNG-5 zNm9L&q0FB(8TUPN=CyQ(-cO6}#oglxF*mz@otPR68LCeBtrvj*?R9pKXtqJ!YWJC$ z18d@cRjR9g9Zx^Keu(#Lc}K$e2jfWR zc>=$3rcr7Qqn{5klCcNjFN#c@m06rkjFg0DoPBQG*7~^T&*Gd`;%GAQ&Svqht+tGR zIrKY1LJ$KG{B_{5`2PJn(7uIu*BX77a?`N4+Izpa#5~!a%=1lI z*7G0sO_(qb86JGkdoaoaxBeG1JkA8KZRGdHfco6~zq1>7%(CB{zMr(it-u?g=KaS| z(lN&aTKU{(p0?|~H}8Lg{yM7zgATF3eHrbole~%!-km<)iE>_f)2GDZ;jD@Y;BYv} z{v5^XdNRzTF~1yR^#gr8BA<64^DWu$l~F*u>Hgu(r+6CvpUAFPO!wT=^Lz;E%w?Px zb$0b=(8t#JG$Z)~4x=Ksbi7_7``p_)o1tdwrZ=sCq`##n}3kH+f+?JYK90%bfEP4WVqfBBrS*}j^ zAe`;K!QvEeCy7Q}+5Rd925nviA47%Xl`!&AAP}axrm6`JGOS|y=|yGlJA)nMpDsiW z#c{Cj9k7j;kG;E>AItY$7PMDvvT4L_5S5^yrC&-?_@r&>Zp0dx9;IFdbFDq-wGCB` z1o_)?yHHwTJdmbeo5Yevugz!ARcKAFGH-Blh7kN6$vFxG66_%bpIk$ajqb5J%MfaG zm!Gvgy!QkRyK$@3l{?(uZ5OC-7o^|c^GUdA5I61pzBpj!(SwBst71J`!$Qk0gNHx6 zv<|vYe>YB=`S|TD(P46gVu!^Hj3^jul5}H-O>Mabzj3$tH+>T zRZ~K|zEPY0j=h!7bT*Gfb{HqddpuQM+n{WP?f>xE8GSUrrbmVscDuv8qr|vQSo!7W zUK-!tnofsAg)gr*ji0S)*fn?dOaFS=I&Z7>0S!h2!JnJS4g3ED!hrPuKLTOvA17M! z9)24mWyf>4v4uh_;}VxioQc#QX)A9fMJb#%mdAo9tY04feJVh-iZOLizU#Xu$_BdF z=p$t@eyU;%cWAC6?La05#pamFM5QcfqUb~-3innMiu)L}uVZDYRe-e70ZsyE5Mc}+ zg6{|ExZ=A55X&zEsHLB{O%|0yAt?ORGWPsh{_ZFX+N1=~aHacLP0 zatj+si`QIMd5cFZbj2c)6ql4?g(wsh=)^dX!ui!A1%22}+T{9@?kmOjz%-9|R!J5S zDP4KMU$*UxerrdFC*|oTsla%FLykm#yscT&P1b=!5R6n+ZhKydY7w|vg4^F(A08Jy zV%-Y5+@vW77E`jLhN03V&5eXOEJ|ifP~%u-HNRn2xB#ScG~vRxQ)fvC=8c{oe;pLJ z_85xN7h(lw*$uig0rQP>V=EUcqMe*U#oS!*ijId%n&i!O zWqJ=5%KCdu)Nk#Y3$>2-c9VSL2z(CupJgU`?v}ZzY3zAV-V<{)1n%bJ9gf81Uu^Zzh zp|&VatV9o&2ysy(>QPuw2!U%ob$-A=-go)EL|N80{u6h4u#8Fiqk)X%c_j4CB;x z61w^m8*4CN zpJb-b6~C$D+>QQHL*uMDP?XBR;bOkoxkoXk-Jf5bNyVy=dHRfm-fzyO(hR8~N+_#geb#}pIhN6X&w&ISMQmX^d znC~Us)AD&|C3-Lh_0W*lJqEnMx+U+(#c&83Lu7z7zgL$4F3KW7Wje8ggGL~z0I zBx*5UDV;OpUiwATvF+8b5q5nVnWA~}Ci19ngv?O>d8OSL@e?(n-6`p-C`mIL=T|SaxqpHC=7l_GsOXbb$AyaEyNQm|>Ti~09O-*R zR#wpa%r@|jSd~C(J{LtfqfaoU237JB(A?eE%gypS7!ip}MT&=GC8B!Jn>%6d>(3rv zn*wl)xSQ~?7&bIj3_Zl1+ITHkgB|uw?BKTxyPjt|Ib)&oh`|OLln))kk>QVZa?jnN z(J56D1)V=-Yz2%)z>OTl*`MBVEOzV~g;)#Iq7_Jp(_JFSj@;zQs5pJH(1nMr@=dS9YHU z(wUn!q#gUpQ;~N&P3)TM8_$!C_;a0R=bTMNX9Le|O**$ZGHurj*AFx2J`|rb3_iE) zdDJ4C4CSOVGX3A-(?({}oukvov{`a?thQ|b2G4VCt)}_cS*KuUn=5HzItFQO8QhqR z-BuYNa#;#qtaXwsU-8WBFT3AmXOi}3zAS>VJ2l9%=Z(zI^RZ#mW9Q9y7tiaPpH9zq z9lw44^7MJNq5z6{#!l0$Ef=%4-pg_v%yRmkrEqT#%{=>%o8`QHwnJo==e=yx!`VK` z;Zb(PZZK=dZwHg`E&lq48K}+I?R*EfrJ|ws!;Ya|<_Bj@tqh?;n(FUZ4U8yikHevp zDz-6=ISjA0Vye)ds0*VqId5{wt8by0j7@UZFn`3w+=~}4@Tc#3rz+NbQ8i0dIm_|c zXGQce--ay7+lQ6T@25#EZcAjCE4ZnCR&$Jarz+2};gc{(VQj5?VuKS!y=)@gaLtC) zp!xIb+A;bcU1VINWK>vo&HFC}Vab9N=w(!1gq5cJQa+9fJvm0i^Jw{z?^LyEj$$!8 zM!kr=H&S(=V#FC?oj-mp_|msj?-by>D(3&^A2Hnu!2AsvCL=HGnl#ntUYY`YY) zfQG3`*;+ZdlEd)~spOLXkG=DZYI0w<{rjd7dI$kR54{K&da;FGEOZ1!42X(=8Wj-% zF$o+^+lL1H+&V8WkSq6(mbXzvPM?*DEHUR8-AZn44!z*;NJ?r@u(7 zr22XO2sDi1%kg!04Uwt}0pAs#mc$2nD{|cpj(1iaUU&2UT9vjgM(;c?w`75(al8gV2`)^EU}Dfx(?B2I*6?vQcS z&kuz4EZ3T#Vz@SELMp(Z7B!;XpB$>FD8bKyPfXShtyl1{p^SXeY_HOHgUY<18fz7T zAOz!vVP0GCD{C4?S7BXR-`m%RO{mD&4-RR6NX!SH?_E4^344Vy)M>Gc82>Eal$0aoX=3}i8?!7NRcIn zR)9mc&Oh&N^W!xN|oeBCn>3bLuh0utq43v7uFJ1^i6ncyJP+0kJE+J?4g} z;1X1DqeGaqgNNP0y4sO@)rjvY)EA+1WmBi!W7q2YJ~hGKzg9a9CaI^_C*w}HDYaEx%CU(TF41NH}iX#@-&DX(eZKma!gI7xqQqko-)foU`|Gc!Iu zo_zg}_d_rJ28(0E zo;iML4YZz}6SxsoT!%QWcJNPi_jcv|%Vx(W$-eyo@sG?-acjC4^X_n&tnrdNU_9_$ zR^9xouiR%V+_KL1jgPqi$~rK|?S2WCotNC*-Tjz%Z5iC$TU@UTzi*Fzrd|5h@swNF z`=cCeF~8$psQ+>_ceQqeYkv0E%J+3uzX{#FY{P?3Gy}h>2P~=k&zSl(-g(U>x!u1% z%T@4vsJ8d{+-L678Lmx8vqMmY&5>T0@VmC5<5pqIMkm((?eYBodIkR3B@)Eg^*1Qc z<9Ll_^6b(}m`I$gxKDdA^Bz)|M{~*3&k{<6h1~ktjVjwON{MW(Vv+j#d60+vNpuDS z!Q|2Euf;tk!5C>PJ$gUX+nXf-zOSY!D0TBVr-&PvrcvNTv_DpWMOw71@!;`RXJt>u zUlZncqXva(j>H7N(A?a?(V>^}6H$+_$Ge%#1mVT(2)$mvM4~vMf$ACK2H`Y40&axA zAK=0H7e-+xD=EY3yS28=?fx{7B}6!n0S3zCn2?0o+~A1$Q?O-yD~x`U!)zAb@cyGr zOwX$k*vN@fkik4K?YK|r*mepJ8pG+{#`SEcBn%-4goH8`D?zIysXek~!^)$x>b6q!Sx6)UO0f^@RU(Lext9@ZS=m|7$?>jFOjx#&CHqwV>iD zN{B>d@?myT%uyTZPbN`_K7b86(b_^O+(;r(aOz?t2q8bW#&oAykb8;~Qya_$tgx)7 zNJJvJ+forr7xhBiq_8c;u}iQy?L?SUxpWvOaCZ@(+k6Gm-HbsiR^?jNco1=_6cpl4 zQXb@gH+i^LNr+%k!T-w(heDWq#leWE7Juo=)Kw`oLRpM1grI(z;6YG~op?C$()Gze zV)jv_Op-<5D@B`z%g!m1KHdDh&^Z|>O~S#jx(2Sh5YK0zVX4@RzFhRv7fTV~2_UhL zA5L1BMt%0ax@0dxqVBh3-z7k8q~j*iEvnik)qQ9&P}D@Yef0~Q4{Okk*;wO45NL~+ zMzz-#WgY72&p+HVY$bezhO$$;9EvryhL*#MqL<83F0K#jx{D51Q4=RFpy>}sgD$`F zHK+)`mb(8_Hg1CF;d}oVW{pQClU3^XmcG?n^{J{o+r8s~M z0(F=)Tb;GHS-Xoa&DbJ}lwWVUzpA%i?3;E8O?pw5mcaM=f_t~YtuRQAnORkZ!=(=sBj} z+p2KfzBG9vwlNWIhOkZcZy>HG))?vsUqrMLWuk_Q&0j7l?CqDsVMhTw_PDt*jq@rs zuP+U|5#n7nM;;{SC<{>d)vfj^2sp*j;~W`=8Qr{{CZ!P6&AWw&6vbr3^M@;3Q1fHR zcVQu%07q!29n9y#?zho%NegvL6a7s?@)Fs6ID0zj8ogLc0OI#0Oc7}$hD*WcEH%!A z{dpSvv4tX>|57;x!A2laARy*dB%J^KCWdw``yrC@^)m+23y1i0#?1LE8gM&(S$rP6 z5MF=jJEu@i)mCN49qh=-|+d22Q4= z@@3*15;yzQBW-hhY-LJ=DP)K3;~l;<6&ywFkBGpawuDn<1j##?W5t-wPELw6G9-ne z@ZkgLQq7|AaspIdv~#i5zAv$+N0s>np;+PO$BDDWlM0(n`p_s{SMqN*WWp||;7PFx zN3UOUF^$3DOweYD42(9JE%I5CuJeV3wuO*#(U66Kl_(D;5y^WOtVL(AvB;`7wt@qj zk>pR<&EaWEK1-XC1}vVFSUK~=iTko+Pjfc~QmE)lTNvwXL8B^$NC*i-h){+1*;xqU z%wtqc!bnk`zVabdq!cX&!zza*+Nu3^C3XRdFQm+mQXxgv*h^wt(qiSZS^~Kf>dQ__y19#asFLOF)^&~ovq>M~_3+rs# zdvtq2>Cs68i4ui$iIa0XuSGn6@cLWlcaRXh7WHoXoArtBx6&WeqrX3R^Q)*$TWQ$C zT+gP`bRfljTLA?(6LZbRun=N?9fef{+{fukiV(kq*D> zx37OQI~)(4K9Wka-CCHsJ3w5~I-g`lhXr~zAJnx>8i17W=K}_n2}h`0l$0V=_%L|y zt&xtznw$FLX^R1i4yWzU{n!}&=guv?KAgC#xkTdOoQb6v$9EXSy)}N6vQ2(#{=`#3-fo0y3l2@;XsSOL zxE7NoE>^_@d8Q9sPjXvi$gmzzc)wlTH6^CY8$dxI=*>r>GVD7B#|6d+aNm}XQ-m`L zVxGzF1QzNxOhP)0d14B`Kq^ojX#*t@F{`bNu7v_Uj`O|xEL$d0%SK?&v5{J7SqvGO zNt`hrwxBF0Cy)j-!`bb|w~hy2kv2u)QY3(0{s?^1AI74?`FabNt!{Y7Qmbzyw;O8r&Y z_2Ky!ZcxTsdg*t-@YmmW)8+I%X^$!Jbp@s7B&J61GFg0h<94rFs5R!305sVEmu5G;@zA0*M!hA@U#)Lg^p{c~BOO zI1m)J3l=Vyhw@6UH#Wsp1v*|8k+k4x1|T0=Yp_#WS9kxweQKXK)b?Ox^sxix*>mxl zD(K#m*KY>U{QPJkGA|rO-3 ztNr(fDAnrwM6n@#!~ z{7P{MGAMHdPqR6SqzFYio1A!iTF{cS1wQ^WqYK+2zo8=_8WI{5d8`)=T`hr8u} zdbr^8@Ly6GKv0Xi&Wm_0{!L{A9S!6&AnF2X{HHwF-w#5|pVzrSYXe{xNKgY!oz%z$ zxeOqvLFNJ^HGu9mJGlZ9*HZ2yc+aJsJ9mNvbzEE=2u_2tVfB43NNQxXb3r!{NOd5q zrClco?la)6K+f|ykj5ZBt>`vN-gDhIVcOKxbYYo0_Jyl^@D)!9r?%!~BU9X@y5Ez_+?QXtAlaer)^nnaOO2mCk~#|B zOtyy(HjQu%seM4FA1wlz=Q(Bnw_fopUgy_r4&TVApVbNe1VFk5A@dvD>lCRA{nK1( z1~({u5{w7lc*1Rd@LSC5BWICo7yedx&zPpyjZ62q`JKN&Y}@YaPy5hmtH@se# z-(S1;Rnh(4_y?{o^^y6B*C49x9oFI$`Ko7<>li*Zu)x*azn~j1UV4{HInb!$-U&qd zfAjx~fB$jt3jDLa7S;3t4a{DUBX=nL+Z?<0|D3`=A*+0n8visf_X8|%=H%Ui{}}q~ zy@cJ(C(HMw5^RWo6h`}Tb%GJ>)+g_UuX<{@a^bWYXTC?u>)rijrklVxHQQ|$4KbN1P*pI zy-S8==tRNEgJ^*&+ZZ;BRd)d?=>H&95bk{k=GY}R(@Bjmisu<$Hl3oGJj!E9c>eI_ znm-y#sI6_dNk;HcEGgmq5M$*NX9mwTq*=5(d=9fjy;~&R{PEq3=iIQxsZ;v|l0?~W zhTf=+pvLlZDM%;NG&aCZ*jXTwzP{tcs0yA!#8{b9EcQXlY<9fN(L{C}E?(W=-sLi& zu%2$Q?ukH|JIT58SS>wCGp@-AF$xXaaCtW}I~_&aVQ+SdK=xQR=db$3;-f(W@0_~ae_PZXM{U*d;W zk)2;Rw2hj%r?nqGvxnF|v@6bY_hLbcR_9H;QQpn7mp6U9u{0Z@v**X7t985AD)`-f zsq=S^Cc~RvWcdXv93=Whg~0K)m`=F*QiGCU;lIa2$;bG)%1lm^Tft6Y$ z^PvSVl}Qo&sg)&wv^xMnmzL3Ng!ZAmTF$=wfJp4u^Rks<%X6po#Xuvsj}GxSALxNL zVOU>yd`vHESe#xFtaY`+LfHc9FKkZTSG}s$G@B~CVRAGO)>uKLU!t{|6C6WMyz3Sc z>w)YV+!&BHR_uhiEziTw24i~?^aQmWweIR5J>ikDt5|IH<3%LZygwp;xc$>n1eNmo zd;Keul@2p)N-+8i$<)baJIVdyo(~Uy)x)s@Tc64g-^#hK;d{)`T{`6UtyjbI36!@bIsB?dfW~3L$U7L3F|nw0pB1|rP$Xq)`muENwf9? zdlKL39P1F->g1Ovb3HH3tY$IwXHw}-xzDzg_^JyBzf9j2=pb%fm?sOG5tV)+>^~a3 zwbk$JZ&MwRG%MiQnDp|2;-^!FyB2JGBeZgFcZP3PwjRkE94PH3?MRuB1L$Eh9%yLgwX#<6`Ijv6AF6}V#Dmcmoj>{6+hS4$6F_SRRN2+pAN= znG;zSu}>;CoPl`UXsC8Phlg~y2SrPBxz8QV#*}q!SL9#HUeAF1*YuDjNFlJ;GwKJ2jNNbLmoHACSVVr++yLT;+fN>)KM;qZD3kM z9%xAQg8hClp z6V(BcZx7}`mGetR(f#J$%^x7g%UZi4-kcOr0vjS~I+)%;ih!eu)&?Xwi4e*X0(D|3 zi(Mx&PEtpOxZj6VxK%?9SQTCwN~l{w8e*(|!;I4_C09Gshr?f&+iXaxP$&*FCP_X(fd&Cf4>#)fqocP;If zydmk@9KO@?_vgH!o3qA4XM*)fO429n61Kis+m%yfQ`G!(zQgnG(;Fa#aq;Y<1CEhI zi_w=YL%)a`if3Ng<}KY4zO{5AaWMPa@>1_m&eZqu>VZn#wO6ANwfq{d-dS=#xL#CV zx^@n~KXvre%LGmCsWlT@TKtvznB6JJXG6cgHF1A#T%)f>;1DZ-Fpun~98N6h$hSGr2E0cn`9dH+_;bQn1- zMbU#iRtVo#944kkx=u&n$Oh8O#%Xw{$x{A^h<*@bOJ)nRrJSLar^rWwq?ZV$mJyoi z5Q1i=SsW9W&e%%yi%;KnMFNt>(KTThL4tX+jP9VIsg+nf8s=r`trp`0^a<)DXpF(k z7u7qe&QzSEQ1e7Ki0JEOT7&EJGg~f|@9K}ct)9^BDI%*3 ztsc^&=x##b(1!XOxk!59EG1e_Z+a50{nQ6cqw{b1)Aa{4>Ok31P z|4iH&^5DG;9{Y`{-^0xYBDe0|m;|TUu7%dM+3h$Jg)~Y3HJZ7zT11>Bfu~C5k7VZ` zhg!n3$JAh4!#Ouml7)z5zdlAb79GpH4c< z$IeCgAwM9DqLae?PN#oeB_?^{Ku=MC1!Z~V+o@s!u(*89YLI$mz-a4wz&W^S#Zn`PPDuv;s<$q;>4+&r>6>z@TT87bEzjE zFOXJva~y|Z7eWn%=_3Xk{Gjgn3|G^%p~E;nCs=G4dLvmhxpTbmt}Tu)E!%nI@>>nL zI~_$I*NT=TuN=f@KYw2IIY0D!{+0EPD?c^l;PESv6st;&h4N-$B3M{6#cvuZ`~@tb zbrw#l7@sT_F7i(o>>WT{#KIW(A3X=qO9t8+tk{6QGLY2Zl>K@2H{N9tC~TmifqM4x z@&c3{pnau0CxCPYXdlodK5^m%-gz15V}i$*r0ZO8?gpA0Fa$v<0+gPC%$4$dtaV@p zsA_PU2KR74?*@V!fV2xbesk7)4J4$(b3VMa4hLQ(LK%8@M!l>TN8ER%zx!tMg0O=mgu>3 zvV^-o=E2j?e@16AI=EBs*EV<$Z1f*+JYfy*2tH`tta#S#D_VQ;nc+R*@f_ zPj(rGOeyW3bB+0^9q_z=5$x2o03WFN3Aem?E{64{uzl{trO(Qq13~#*CC{GNMsD8q z>8z%24X?Pza@X9BmfD7NU8r45t$O7Y{W7P6TQr2e%1arNL)wHSG63 zu`^Y7xRSe<^*nOH63|AUUQO3Qb@y&n&n}tWJSGWCN*n=Ezesd~%?uJ&v?Tk8YvSyBW0*q+j$h zym9hDo_??mkq#qkix@_af;cOKcP{~+IjcO4aQNI;r6J1~#OsNwa)8*PssNvGNf zrJk~+z7W98etQU5<5dE7*yozEfe`-QNk<9duMWT(7q#JXO|z_MA7xW*u1HcX6PA{y zHyN{wqZ5R_W(K#M+opS3=sP-Go-WgWh{LGKpLxvOYdt#_DotC;^o>X-!A#=8)xAzF z?oW&3N%87aiOM;FQ%UL-Ra41Yt#ecV!Z>P|3=q8jJw26DfXxVLynZP6;$}>>a=gMF zR3^<{uH$VM)=aXTvf0;5Ios!8_<;=Xpz)c!p|hrY^IoJ^A3S+bD(-Co&Fp!_rLA`l zs~y{Qzgf26^tXKPBA2ZLUIo$OQW7kNlwnozdA@k{oRfSLb7e=K^3Jo4xzuQQ<{UkP z%kV#{SyLJtZ}xYEZGqNIulq}3H$Mydqp-7P$_q_70O+``X<6T=^97HVBRD}QFZW?~ z)9_a5F&l(BfQ=*E_PlSs5<#LP^_^HD&XcK>?hb+hiGB{o(%ETp+9as$i@zxY!iOs} zAOcMlLRn$lAw=Q8o?~75iKI+OFe-=%-5Z!a+PxyT+4*DXKvKD6E#yTrIHN1tCdCmp-6cx$j?fB_j3E*Oq`U)pljYurNhC6C#s z`Hwpqv$@*eYcW_3!*?5BC>@e08~BVmYxuE!@Z4i5dgr!7i_g2F1)rXTv%kx%y~M`q zm?88@oPG1wGBPa^~_{3fms;Tb&ZmN9whLB_6 zay~9N!qLC{tY1thP<8a|tMHzn$Kz8j?oI@s`*Bp|Ax?aNGnt zps<${?Vc2WF37Ud^g5I@9jthMS5=z2gUIGjk@zn~yJK+S%PG{KQ{wgP*bU5nB{ia@ zP$-zG=Xg3OGu&VgN4hBY(NJn7Ub~>C9rL7%cAsR#0GG(X~VOY@S~_Ja;6YaOKJ zS?c|yzzS^Tvez^ex{RZ4g)7Is&!CHO`&dnp>j=#Kb&b(vah*uoJAM~h8A`wcwjQgZ z;Bm3ANl$ExEZt$TIri1>Z+g?yiE^P(BKBt^N%0OvL;#Nx@G(~j zoUe`Hg&Vw7)Sr`hNwH+%mxby(MiCnm>B+l8VrMWGwc4KDe50mx>wpuL+Md@_PZfGb z-pcK(8|YS)v=30!_b2hD^$PXfw-YP$E43Y{P)ylz;JP=xjiNf3kIFz0$M6_xYq_?2 z%G<43Ft6V#IX&nqWCnF}F~?dNh3^DV&g)}s#O|21gyBK0-KZf^4F_Bx2bm)NR`{T& zWl2y*Y$$*Z?pkVcfX=23NJ;gnmWEnqr12($1n&yi28ak_Mc9hW8owOiV+%YIbdxpWU8G}?}3RLDDzymE~4zv|eC6j1kjg;)62 zvi*qc@$F*C>o!;{fsTq=40`!fXfg*%{TOHP9gC@KZLIsX#q$zMATrB{Pw^4%?6LGW z@~2xanYaVwr_X*PecUHuY#` z>iy~grx$wi5#{vDp>JP#&mTLpek;9hbCs>^*v5-()pc@mWyjJMJwuA0cc-fPW^OTG zxH>ofe3$_6JUW5zkjeOR)Ai8T^O9mC34N)GSdj_H)N+i$kp^uE=gQP%wC z?W*@0LU})`a}qL=*p z1w`%UMx>zQb?DVtge14f%lB;4_8t3ADPf=3(aW#K-S&^#$hH2cNcV#&dnfDZkgwA9 zHW4{U4?6d`O;l$YUThQ*PK%Q6)95?>L2=@Go)tDuvlqX}!uxP5RZpekUKl0rAvn zlkjB)!SUnLPOt<8?u4ZXG*~Rn^i-7=4a-2UB?A~Xjs+`n;3g#SF|>p^aLj%Q`2o3p zE+QP(h@o2GP{WWET?I#rg-8eqGKf2qt({^1G}U=TsvxgQ(+Xad8sn{iI0tYi-C2jH zv}TB6m5E|{)NBG=ixOjtev3NnTRA;eFr*dTFMcJTG?sLkUz*NbFB$0vwspNf5*s`7+cWvF*$SVZMs zH5~jesTc@KfcgJY{;R92fN%iNzJNRi4%r}r4zB8W&-Xz5gV;F`@IcQmudaiGINtdW z{6N%m834*ajvbf+qAp9|3NP*Xc47UGK3DR74r~Ho0f1{bxW5Az05Hck9q#`VcXuCW zvAKEylfVnOeEBkP5Tsq76I~X-!5y6A@g7q^`9FBgCGUR{lr{-gu_Qg`?@n<+`W@H` z;28Y|B-Py?g8Td1w{MReIbyiy+S^}TN!Qu1{C6AtC$+rq0Pt^C{h!SUFok>V-pZx} zeIz#!;dr0c$tAnif;_;&SFVE3bju`{>IxJ(%E9vL4!nO0)xiO`407qtd z_?GF(Z(C1ITb*308s&P^$1TqO$^2|^yAA?BATtlF1d>ZHSgr*p^=$#2B{x6sN%`uV zGG}*oUCiy}_!QUS?5CFtejw-nwlQvP?oa=Z+qxNEnO*|G265hLnveft zwAHw1K4n>mc+WVr){Zv?UJ-Ktv3%IGB=|A7t+yTBU8Vng_DFEsHE>%O`+Q_E>%(hy zqUZ*j2hSV)t{q1+_wE3MgTf24O=tP_KhF%YEcXq*Z(j~*DfzSHkoJXoGxA#JE??;&4-TLUJ>2zZ64bDU4q~kei!rhi-4X4=r>Nph$N~h-to}U|^1!Sp&Cq zAvBHY#)rf0hD8-U=}Z&_Ox_Ax8`0yC?pVei)J`gtKx&;+w3JgOiNR`sR~x`TB~F2P zZvw&rLW51`K{D7B1PaVjc%#Xj00gg$h6+*;ak%^pETbWYLM_Mj;Q7rp+ZyoXX3};*B`4w9H$m#8HIC_P$ue)mTitmJ_t$h`bCS9Pnt> zu;C3Rti>ecW%lCr4Yjnz#;byWv@mS5{T)S~09gdozpkuHyRWyXedMF8vU!cZ`BHb= zKhKP9_;hp61&2>vtFu@CVzhm_U8j9$BO4_Vveb=Lt6l2h-kEW?=pDGb)aO1=^zoIj zwOzhTdzhuWQyzJ5x&Ohb_u_}0FVvo(>1n*9IaMBMZM;8VFQ9){Z)ouNLqzLO*FOB> zj_bia)>>Z%D@E#-M>f6K>@ldTe}VkO!E$rMlV9Q<*&)t67rx#mmF68kL{$4_IL0on zExmV0zIM-j+1syLyHC8k`E~T9<5@!|Ehp}9+ZzH($b|pQV?l~2KbAxhv|estPp56u zF{dT(_FbFKmhh!P7md@q`4C#y?DPs;9meXpBv zKRAwmEcKa3V9cxcL-316VHB5?wpIGk2GB>_H$?bLR6 zZpkj$SC6YavN&kqsb`zhgv#$V*uQ<+WG3U{$mNN<&$jRD9L>^^u6UL_F6}dlH};5B z(Vx+4$mP{CV-@oG#hdONMhWI}b{sI)SZSqA9VzT*=QM>o z2P#R$D3YKCSa%yu&mdsDh695(kJ3#8Sx5;iQ{vz#q!q~Fl^SN_rIy45NgP;vbsiZl z#V8hXM+*n$J7_nFSgjJ^ZPpZ27Tfiri2_!PuIZ*kPONDyN6U~Hp7$I)@X88^?P5Ej zCBUThq42tJC_)Eu43#J=EM*2ML`zHLw}OONA#`3H4&v2IQgvZBuTm(e@rRP?RC(!2 za%7~GTeiTV50LF|GLz4fQR!&fhtz?*F9x#EabJ1uBAj3$k_r^D3M1Y^kO7y{ssTY( zgazonjTHw$4CfVzc4CmD`h+DYbm8PtI>86xQRin971{9dWM$}#6H^rM0$=!kS0OGf z*bqcu6v`M%o6}O*Y7u*-=($piwq>Z-qIb@6tkSEmIyU~9@qB4vN<@=j+@lm&0aU$Z z#k3GCX=&ZftXoy{_OV|tr3Y-C5tI#wB(h2|q9hhFWYt2*Z3%_px9fIKgmH8nQtU?i z9jU-0{zs;=e!8^xsPQxQTzHV9GRVS;sBc8DD0#DrEQD|sJtJl?Ky_RAT|=+g3ztgJ zVm_QE`C_K@PktmZv=z;Cs^e93V&d}F1_Oo64_$rmFzNgx7glO`k;N_Dq&dh!T*Q46 zF>_*Qq9h-lcn7g%hycpIa#5sWqV( zec-Fr@BVa&zHn62Z#(28986Z{8IDV&kRqP>h!M;-e%TUc?Ly(%Wal=XbKa8hb9>Cq z#A38{_%W!TJZnVTgyz?AgpQJ?vtDulZrC`qF$Sl`D!%T7`(#@|W^M_cyvfK3k~caN zxOR880k^fyA~lVP?K3S$9J}C|I2v=DO42e`7F=@7G&a;_`R+=eLeNyHkm1JOF=8O$LzjR!nrHnQe{&|Ig>3ATI?!{ zqzc~{lO}(K45%WmY$l;5S*mIJ1;0V!CP81y_s+*`fy!^|6t$4-kb2h^=>fR7^Z`nY zxaZR~*;UIc&zuR@>y9R#+eMBOe3<4eH<~UVF`le?;QYGs%5D499pZSWVTpT({YTp8 zFStaw?JoOz^>(s>bXo4$3stMTmBfiam)Y4v5JM5jgkFtA0Oycy0woldF@Rv zYUP>x?_IUkpW5yBt)|tV{c`PCZqbn|Kk&Yl+?DQQHLTv~+q-`J{5}9~>)RU+emry` zs92Oc6EhkR5EJz)U$5`?_if&I&N<7h%?JfLt^tW@M{Xj)d|0{=QTxYf(Zjt)Uqf|8 z62%tUoHBPyRp@G3D;<>>6KPl`fBd3btrop{PqJ5nS^wOk!!N2&S4_(@YC<{s+T_-6 zEz$a`5jK{N=4~;xr;jK;-bJY*#E6K+9gi{ejI}@RU~FkvW-PgVENX{|WA*pg^@bH$Zx9WOzDcNJ-RUQ!-%dFI;3|o&u7eisGRoiks|n)DauVsN~+n8>QwL zhQ(=Yl0-MePf_%?+Uj_Ga|;6EW0~|KlhNidzf(dP(W?Qu1>uY|BtR@nE$MVKwX&^8 z!&9t^Qy{VpvKvGMNRE?~F3a=CgrGa^=isH}U}a?GNj)ACWIUSqtXJ=0Z^+YdMwDNY zT=)6tMv)&U&E!SQQa!iL1fJ&^x!^V>VjqC4&oE)NZ{p`DLy~C?t1(~3@b~s3F@DIT zrnCv=^8#q7IWUFIBY_^ki8eszU3Dk?D20lIp8m~-eQ{#dxJf0Xt_k$G$xyz-Tqz%~ z-a*mB66UHh8trf;?IAR-Yub$_N|c%^0#eITQmQzfsckBi6K=XRXXU7XROD>k)RC5) zX_9ktueF9`^jN~OC?raS-+i`1(5$J|=b=+f_qDx-!wPb}$d3IYfu1=z22$aZIYVmc zQs!wVlJ>Ws%FT$E)UC>mUdxTszj*pgG=2PRm{(q+hAguqawah*DJfFXI3n-unIm3V zy5Y{*w%ZBqx$fclB6l36n)1p5clM#AQ|}qxD2pknj?%-1(@Kpx%<)$bN2GS_thYZC zyOwuv%<)HA{^hoP5#x@PyfKpHmwW;*rTH;>4i}agr)%tY8n8FoBkC2lYOvlHmAgCN zef;$Pe!cIxmp48pG;t-*>`HR5^DGSa%1PPnP-J^~AwP1&YRA6*LW8jUFZSocG<2I9 zujGu1DQUn|3kXG2w$FgQzNp;GV12B<{LvT|Vnb*uEW|l~yfFbygGvyDq6~?sLOT&oTDb-MXX`&)&f1~u-sS>GlWyCUUyp9k1 zd|^|g8YW$Jvy{l!5#={y%C6ne^Us9McnbWsG}5%F^_>Q9gFM74iAaa66mg<-WvZ98 zb4HmW7Is&zh*Tt@pi)gHZnH&t;ChT(sE#~6xh_M~QKa&e32d_vd8**78bujNL->9M z2?kb1zpng^Nm%(wP^f(}j$MA$PD^q)8zj;sA;PQWDuJoOQ=Li}IsgF42Ep=pjuwVO zhe4920d6$A+PF~3G^^5GkOeRkUs!%&`9j8stlPTmv~JbOIUEUB;XWc;8d!VJzVflD zRQOzNqiJ2KLtWnSt7DyYFKculVM)y$Y(E@%9sls9$i{zj!~NZCd@PreHRx zc5f}#p&wV3#Ifhs-dr)1R6 zD|wIW?Y$G0GZB#T>TLc?%BeM{P_`-U+lIh(@04F4c2GIMz50Y(c%4(+2TDv|KyzVc zjmv(@z5nv}k-U|2MbiN(9RG|zc*U42Z)2}=PZq76t>bF!8Bq6qY2x3l>Cq|d`9Z;> z9~5M=Z*engr)ux~0KtgMcetiUrZ;%^1tpE9HgXM*%qzS1G{58yE^+&3xk@g#=Du=` z-LE{E;flMxzB$Y7c>HHmY3u$@Irl-0eM9;Oo_IzLc$|Hxec+uw?T4;!zikXx_t48- z!8MivHRjY3+rSpfBZJn#Y}>$&BT0k*soekl5C7L!;J-FE^i>5YWcs~}q%A@Jh&3Ee zSL#b6dx7FW)1O#_G;?#iE0vDLGx=mSyAM42t2mInQc1xGpI z{{qmzST;xVVhB*;#Bl^N*7rsRFgNP==JVI`xiwINVsBx#sH39V8YX)aMU0$?END-H z&a`ULjt)J~%5=3aV)o>Fdt%bHQ{;B8ADrfMg(>O~o$(fd^LT)9qMVoq#ewYtY{&v} zr9s8O31T!*u)-M|93OeNfeCfvh<=s?`&i4~y88`V(jvcn;%M`5!>Q&7^A%pjJ!u;n z&X}ie>UnU*alB@6Mb(Vk3zD zo?uQSi|zvpQ7BGm6;J9^lByYpep(cm8}@y7RFzPs{a?ZUdcaa1g+I%QeUb8ejvluW z6bE*u-)W&>_QqN5;nk7@%S~#M{i1)Cn`Ux+!schda+8K?j&tha+5EtY>e+&jR)BA$ z-PKS#df?IFcbCIwtKStxeVYgPMvUehD^@&c?&vAGnz@qmMhkPLsw#Z*Wmz6U^W}L5 zL2;lkY~iosKuuKPn%hEEW)Ytx4=4_3@(dJnYpNJRGQ-_rI%k}^>u-K^cuL`sQKmzU zdQuRo_YqDDqf<_P-_(m>v3w*As2^IMFz48Gbn}N2m`bAr zm_aOaA6TnZ{!m8!k4kTsy^s{7k0s^P*S9)66?lJ&hr(C$>=_l}h}WvezUXQz5|I5B z24Q4Qzr5a;d;+4kvSgR)8&oT6^{$gdrMh7WR-}8d$jplqg|G~X5`oAGUU|q=r8XkI z@O3E;gVu33>>Ou=!yv5Kdt-Q&x(-3`joC6sp217Q2L)|HP8Gpr5c{r7CHweI#LnS@ z)3SZqZ7=ulJKOy#eEQebn-bw%H9CgQBWLp9)SLXOnytK?B6Cfg?`o;@@1Lu+8IDKS zX7Uczugw;o{nhvg=cfeo-+N#2m)w!Gk7dv^7VZ znSsfCGF>#59&d1*$xETeBNf@a3PiT@))PoMI!A;D z#TG>9(s7}VI;x3qN=cQdN*)z`2m&9y{TYyeKhk4$UuF)4F7|UHx)#>Qfze3ESYp}voRPL48BmS`PAriD+UP>^K+jvZqXaStOZ z!mDnXpYbuS3{N1J+4gY|P%W&S+c2dt^BIANGLMqG4r6^Sw)oaqDUb3)0@x))TA)7~ zWrxJkSqZj94Uw5X40$Uym{4~`oh7m@3!AqG+c-q*&9@L}p>rQXc9RV0F*by4h(F+v zk>Mc#iUXan%y7EGo~A?D)DwwnI7nEV_*`&miOtxWCd`8xP@W|BU>q74$O9an5HelK z$EBo#H;HHgA!Pc~&mSkUF|+JlWIRg{OO!zPP!XymPE`Wouqb5-w!*P+Ph$`7*fz@C z493svloRpnHJ&t*0!qy;#?6O}Fx5om>MOH(>($(qC9BXjRsIqs5|9!O!rKc%i1!ZY zYlWPON0u8Pu#v0U+@diS+Kcs|@u(@#F@!YKEyOU2&&S-IewMiX&>Rz1HjhmBa9}ri za#-E~3m+q~#XhflBEDpkc0^Tlk|po7b5lvpI}i6^)#-6JnPq$%=)K|@W@v;Hr>UVu z#o!Xj5gMBWdkEDsv`v{%nt2S8Z6SG|!u*&43GRhs6)9Av7NHoMZ(<>&zaR>QJ`+$T z_7Y1tuhyTjI-VT4FYUyO;9Gru8{gbxyFh!xlkyVRlVzqP60`QWV44O6bg;pnEqcRSvhy;%DPfPQU=F4X)Nfc~F~`P}hMkND}Z z>dtuw*NKty)fB!kD&6Hw0Ibmf)sru$Ls%Qg3`s{Tu0Rm0z|$%*1x=tVdOz<(mTgTu zV@45^VBl$6$8LZ31G=&wYAKFu1h z@XJDW~674XEc4%Y*-5_^k z-ODWI*)8+^Q09j^L)8c09#x#(a!S)j%U+nDe8*r-&$>TXi)mHGNjCHGpSYx zQ;0d8U^u1Mj}X6=1_f@n+I{pGPYAL#x~6alP8>q(Whvxa?|}q4yZ9WOnB^NU&l~)Y z_RcM;sVj}+=j0**QF4Khh%f=E1jG_LFu}n(K^PNQtp$NVSuIjPMW;Ls`15Wx~) zl!Tkmjs~#x0vM!}v4BbhDVJCfP%0n>7zyAYLbTx)&U{f3?sivNUY0KAdvWM?FG3$V+THvA?cCKOJ|nVMw!E zS3jtKoYd7YtouQCZAm{PGHX;Dy>tEyZRJTO#2UCg!+Fj7+M>DsVY1;U-!1aq`$FkB zS5emX*L_Bg9irRu|3cPs1RszyMN=V)MO>xB9MdBO=j?Bl7Q}msa74tR!o+&oAiL_P z_Vv{?^Pm(F-c9a(>S zvw$b|x8hqV$Xa>)-}__Rbt(9GdJmO# zgyIszcd5Ve*+@~8g*?8u4AHrgw{hI1-y?XgO;}*^hy&Ht2-#SjwvL+oVLx(s45e|< z>{*J-gqRj8B8>c@QFruN8RC0@+&n8X$;B_8`^@QlDj_d%4QDG+nx3t5A^!5#l7>G!DG+qT@g7T$swY{TLb?b+&ZU83q-MN~1_ujzZ z&c!FX(UlAXr64+FKQ7(;7Dm5iL8mEZ}oT$xV2LlMrh%+KM&oNdaUL@Mv#2-|MnZNzGsPLJf7Hx=TT&U^k?Gbj16+}ShU-Ty*IjyxTEN?9oW zmRf)kcD&8Go0-2y5*(O1ex;2i$J6+{xS)1KxuIpz7YXUN)W3N}D z@+Lp2x!bwKAoVxGcI2%jvb~5OZjr^%B-)Ey)P5cporEphe2J*1O~Cw?m>Xk0)_!|U zbIX-eJ}Tn2$A6jKTT<+nuKG8uzpqy(uA-Ijm#S2kh+r;o?_W}7srXyODd|{eJKYH0o=lNfqchISTj@bL6Z+C4pg7;RL`&I1!zI69M*! z7Q?iec_KBC+kRL5GJhq$4 zeLwe!ZY$}UsQp{jadJkcB7wyI#()huv!fdyAMoBs$r;B%JN%k=P8vTa;b>M~enDYG zE@{K5oFaof%{dpP9dWhBneI#|yQHYT{KiJ2ab?Yw@9Il&b-4|&3qCO>Qknr95`xEB zR2i@#ZZ2P5T0tE=;o8ob}#5xgi9p7m7ts7 zBqq^DNetYpH6=f0Ns%m{1B!pR>1=R0fFHNj64AO0izj4(8H0Ruou*i zS)CrH9xo)#Fvx&8$j^)qpnGf#xdVU?cr5awmk=))YI>0ArF^xfxIIs}er^!p6t}%Z zv84E>r|;j1QkWOj)qrBjvksl?e~x0A^|xb$e?(Xie_j&)r%}gdUnS3}O zl9}Wrk(HO><2R=O8i0HO0P+`TfD7P13qe$o*3y&|SCi&oVS@tx=VJO#0sjlD_u!PeZ6_Pba?mz0=+*6oMoLqyuLo)9NyU9zg*tEzFwgtfNoyS zUdCTv?z`@+9`En=Uv8H^_CLM=Fz+v;I2iCR?oUrWZeK4?k5i9NpHJS6KX*1G58Tfl zFYj{F^#JHl{9JfYT~DW#=er*JcP1Z}7EEUWH|?zf>pNNhCjIU&zLw-W z?}eTmWgV4Q8lCJ1UD>?dU%u8>d1qzVr^M;p+nwK~-;WLXoj)Ed`L5tV(V1v*dpht? zQz8%$VD3Ae?>p}|SBG>phh1J*`Zy?@o|ZJ0eAUyX|Lru|+39F#AXcYWV{6R|4v;5~ z*$?FpTb<3iYCgYfcwz_{O%P7T0AQ_!9!|&2`FKfP#5|my#0UiU?B9Q^Iqq({9kHP> zy&gOgfUsVz9%x|c$?>7jtnc@~p6>-7GNbU_xxG3FI-b0~hk(^JG>H)bWcwRggkej3 zIDFrv!CbJs+KM6+D4f$1C2yDe{=#3CWI4G}C5N`|%ycDvIKQbg82S3J2KtFU^xyf2 z`AG`0oL-(u;fngZ>h3;onOO4b5o+9(Kg_r-PPi;pRoIQYum5ve`)e_q9%s`i-#NYD z`*+@>zt3aAbhFX0rT>@Xaqz{F@#*^4{j

  • 51AgL$tC6yai3Z^|Hq{>I5dIIAV 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 diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898512.gif b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898512.gif deleted file mode 100644 index 18bc8e9fbfba12c94b617b372b9c85d92c00088a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31747 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 diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058468.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058468.png deleted file mode 100644 index b15b9d83968672a6771322069b47394cfb3b8c1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14656 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 PsGtYhMp_kj9isjRQ3`l1 diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058476.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058476.png deleted file mode 100644 index 77113dac339f335dc44b3fb4a271e92f7c8cbb00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13960 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 diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218450.gif b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218450.gif deleted file mode 100644 index a5092180309ecb061248cc205e4bd667eb290085..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164517 zcmb4~^;gu-+s5A;z>+Q<5=(a}Ak8k_(%s!%QZ6YVAQFm5NwZ$xs^bF?7+iaF*t)w{b94+qVdwYvix(Gd z8=LeD^dlo900H6Z-^=gczXLGbv$M0N{jG(Ch4uCI{r&xe`}@|t&97&tB_{{{{rw;! z(x#2|w&TN|z5Vsu+v@$zuLmck2YV1Q@+WEeSI12-?}z7 zsW~}+p8sJN6K~tx9X>krO-?TU@x6F-7#{#Nt}j)Mjo=d!YTDWpkdu~dtjp``N$VMa zp`@|JCFzZy-eSHr{QOb-*?r{z=K+`a@B%lJ8?R^K&pT0SHbEc}V|t zb&-&cKK*lR+xetAW!XQ8q0^P6t3iu!sg{++$7t*Jb}3VZ*aU6@}& zTc_z{vwLr|W^Ji)aoWt!zw!EljGm?J;Fy7dIis|^baAom?5gYJFlTJC>SXJETU+bR z88ZU|A;rVctPGErNvh^nx^6B`5m7Nk`IbSUgBx3RQQ@S_jD~*xq+lXKdS*N(_QuiS zs_8k$m^jC{gpT?7?#(?R3CZfERnM&ClH&~mB68K>;H26HFa_DEs9^+o%? zYcfKz*DYWC-(}=p9Yz*>csKLCvbFWyr0{Z(vPF1w_3W>tvdWO;*Et)%^Y?d3J9-O#jAu2} z24-f|HMF=DgJostrYbFKHgTEeZ>PK2d;-Az)DdR54Yon!#f^{HgLsxlXZqp8Dsi zU)3f}ZcD?Tt7ksi^dvE8G}p{Ex%{ZI9BHmy_~NrZYzPB&$9{za8(OBQmE|Prf=n6;Q>hLKz%=Hq38K-P7fG*I*lLL99g zC!(lhOIX3hT0Z)N*YBBUx?u@?xsQPna_NJ6om4J4$8ngs zKx^zr!Z1X98zT?zAF0)7yvsnP=WJTy5RV7o!+i#t>+WrWl+7&E^CVj%TH7?yZR5!J z!@xY$b1j`h>kkYnaNO9#7bZBH*DvOyZ!F;m;5YxyTqG5V$VxP|L-yMQL=o3-<&u-~ z1-GyZrx||;h~{?;5K?FnzSWm7>l(cpKLgFZ+cdMh0!_Y8f#An8*=?_GzH=j7-g^I> zV6g>|~eoJwvNnkyU)w4qI43mpFSGZ=_4Uro1t1aWeyI0Tyu?@eovUo23}wDwlTcHkE-h1s{Ye)d%6Fo6Tss;#z3h( zj=Nx-HOJjVPY#ZI;3|A4y%feCCw(-|^fMs(;DeI^#0$RDLAJLZr$b!jHK)UTUk*-3 zga$19l<{0{y~k))Jsx*Tn*Tf-zrNReJ&9~m`=qEs&2RP{E?oP`LR*UB;)l1^SlTax zrnt}Y=H7j1Tp}Sv<}7ubmY9yMwbq$Ds|g$lP$3Y17XxNI|1O1W*Zy7B&&0Mz;dtTI z|6Pftwh93TY&I~s_%N@l^)xv~G{l+p=jTmAS2z*`9=yBUE_@;IZ>Qv~*VkPb6#W{& zg(5J!^#cMo2bFIb&|remx|^eKO;*>aw~&Ho;N0@@o0Gw}R?PqoJT2^WQpGw5+@j)r zcfw9n7&PAFzx;K7rBfjCYU7o6O$$H;#x)%RhF5DFV4sNkcw+|A$ZS8~_hPpvU$ z-aiU}zfUl?_?Tcq{CreynZ%#gRKWWoW&w6A2_pcaL1{JsS4$V3vQISSxeYFAwu>;* zCx%(X7VoW!9I;zk3{~$6p+1)aS^sgY5XCByhDp!FwO}yV=L0b|P+XDn=s2ELk@Fd;71hD)Uj$5A! zoWFEneS)v1?bev#{|N@E_$&Q1hb*%|lbvPesuxP~h&k?@k@2I-$dqk;^7)7Ze=zq~ z$$wAZep_V61DqUNyg>;+9 z8i?K8GMUlx#I=dU<3oaQG1Awz>5-J87|^@mREW*#2V4YNwQ^TWU|BEoEgw6pDBaZc zs&)~-C=!ndDV_GU4&d2AD@v%KvT+M3{SjyoQ6U=9tX;SYb-9pjMSo}vsQBpbMr-j! zH;D&R$(-V5v^`*0C6M`yE`rtYf!ioo(5nx(BDV0&FF)!zY${U178G9$OMpC90WvK# zU{DwhNeWDP!nUroXZkg{*{l4$K5Ad=>kkMCq8h{nI`bPgOr%57P~ueIBDW{3-w1$o zTypjC;Bwh+(~aS^?ux-?GhdnoK-mU-=H{w;c33)eI@HwJYr?I^BQiA-Ulkyd$3!tf zk8A2qQfPONPVM1@@>%!}yR?uoW~7%Q46zgcV$8-v>hYqG4>9p7Zq; z$_V_)#3Yg!5KSyqtj`M^aYUe5#TkgJ5GH9$1wTB%MUwEO;kU>fUZuM%*s=7bgls8EP|i{2|PtI%qdn+)0F1%2_{RSbuP_dzmj-!^@dOEQfynA?KxEm>VC9`?yt!=cQFep=BSl`h z-yB~g5eQJ`RWLwe1A-8(3_!%?psofHVkReb*?r5P*X~gB9S53uG&3$f8a7 z^TnN)DPBhM0wRHK#C*8KD_~g_Gy#R`5=dMJZEp?`WAmAa%AOm8NBvy_FBvjld>J<)@%LaJ30@JN`B~8O?dID4` zfI22|NG2iU+hG(gC~cAOZvOy0Vf)`rPeChCycJxbdQd$&6ko^j7ao`p30AHL|1S)X;0kA;V?ZKa z1;`SD^pfLB`9yIEL8#J)9L2El6i?iyv>rfUkBLc-!H6_qL?@bgM-mqf zWp^Qx^&w=j0a4gMaMHjOK2j%~xF9&_G5Ws|jJE>yh}Ba164QsLF{G$1h6Fht!(c*? ziYI|m^H{PJVDCaa;Yl1@XP{Xq5+{vd9k8XKH0lh}a#taJqv%yi{=5bW zf!0TOw8S^RjU_pT7}et$D!;&T0`b8F2sr2w286!?=?{W(+JG3)#INC?KpO)EJZ)^i zGnXflYC8l*aG(irA=Qb-#ekSFFqlu`gVIEp4>&{z;LyRtL&I4)PHq9I+zN^S8vpSkSyDU9liVVqbUm<$4n0$lWi!5=1}iblY|Ra)FJC>w)&|Hk=U z8J?;SK!OA)aJ0iR9b8t5^Ua(S1QqEJaiAe+ z4mk%j7?uV;4vMpf<3kGx(QhP4R|p}Pw=!rbXFVW@4sYcM|7Jw0*Q;M4qKQC46<6?K zNT|0zpnnWjtOptW#Wmn07EA*^bK;p6hAAVVf^hL%9JL;Uw8cT`A3v2op80fCLSB6a zw*%mjivU3YR|Sg%(gE-WKDd?~Z0du=_kkE56L`U46ck_;IAPyz^qq(#v9hEo02V+( zeT9G%CCD@q?;#w|1`Uv;;e2=jDAnhHj-i<=;PZDlFa%yYQc1xFLKX`t_JQE*;0PSc zsBYN(W`}bLI8sh@D#AMKE}ZT@FL&FRkEUBHefcl z1UE%x&S7}0q2if-1jl5kz?ChtBbdXdnBFu3(u`6h05jD?%Q4UgtrEYsqdmElPeo*I zE+hmDP$ukhPy3TwwmMT+{;{))t5#j>fetH`?GHPqvE`8qtCQhKMu{5qC_dx6)DbAFYc4lyReYum zMH<8b#!8YLJQ?lrntck|G#hpX>;|OOwMoqtYEYBXB=zqGUhM7}4fgWQ*cVEv>;@0| z>c9LKl0R(rf7GpCDE}m=`tBx8?U0~)p_!r{&g}k@Z?8`9+BmYe%z8&huC0V{s$^Q? zGgYtp!hD@7fl5kjJ=uqP6%kZ&PQi|WoNar((!+Dsw(l90k)#zpmkc%?c8Qrtye zz8573m480coWiD8A*r?Xq-8rs@g-Y}P^G)tOL^52X?3M2?Vqw!b9E8{TADws<2EBlNbY(MQ|EbhS{>2X(n-`amSM4q&(JHRd7Us}KvejT+ z9TR+0fkRq39IJlQt2HzbSpsRTbZ90ewfeQIx$#LoQYvk+&4wsGVF&vohXISuW)Zn}7 zuGwL@>tit*TQOp3a(zB^(_8ZU_eESeqM2)b0HWXKmeNkM-*J)BIk*3`q2J?x#_P6U zC+3Ua0hO=CfR`>v8u|FqkAcYB0W|$!wDe%C#h^>_Ktk?d6876*^5S6X?O+=HP`dO` zrp3^k@S*J7p`33+xr;;jw?l>W!$s1=B^JYF;lmZV!&TpgYZiyuZK-DfQt2-?23OaP%RrE@)D7?C0Xc<7C>XF1EjROle(ghmG`$ zwoEgl5BH*32EPrzNuNwvnhjF8!U+a}uxp`!iDZ zwo&GyXj%#RiC;B{y=YoWp-K1>Z@K(;rWBTkcAQO%!=e#%ToKe)MFOk24*ebDlo) zFNx<8@}MCj0P7_9KiS(Tv+&7sp*doqC2!$t`@*-Sg^s%g48vl#%wn(QV*lX+%Osff zSju-45KRm9XSH$Uc=FwH>1V{!kG!Sn+NIg{rDg2W(#qJ<+TGGR!}3PN@>bsRX8ZEa z*z(@e^6}mB>EZI+lH{J56KE3byxva-SSn~B0V^a(b_Hy;0*ze3&0m3atPm`(fR2o9 z6(O|J{qFW^PQ7yW&~J1C%BDY8ALg&p->)(neenUfcQ`u@$=V-%Vc_Y0Ib;=4R^66*A*u}OqB1pnnkG3qsIuupbd`MLM#v8pE z+x(ZeLQ}VWwYMY2<(@@uN8fLUYwrYNkCYOYx3~9;Y9E80Yup;E<#n}pwH$UeVt0pC zHgl{xvSc;ilI*<`*n7XcndcQ*roETXxR+bES8=~v%eY^;Y`(>7j8hLKOe1|?4*hMg zLmTNtPr)hQt5bo_Q^DV-LRh)8N7iS;&(B0&orx8kNq3&fVo#Z$KEGI&7Hm7H zXbV7QpR0DBtNcD!|8uU1J=bHpFnDlbBzK|BbPjn%O5t;|W4=E}a~aNiX(M;(WPR!K z^wRD5rF+4p2lmp7>96PSOCuFI)<2J(H=Y_>Uzq&<8;<=O#&i`ac!id`inqQJ7?#Gb zzhD!L4>~`S`FNJjbe;L&`iMNK`nmhPTJ^ox zIM(Fh`r*q~&;9=Pg<$WMZ*f>g#@s94bsE|*4`Ne4P;{p7 zK(033XV?9?2Jg;g%eLSnZ9`|z`zv>qs7B|H<@ets!mfU7b`~%d+(+D8@BbN?uzvm= zz>-hOfgyZ8$Xg<_@rKi8N&K=60y}Sc0^U!@@+1( ziNYV$9ydb0N6I7lRz|8Zw|<(SVIut~!PcLrQerb6YEdUNnR+E>^TWqT=~_jf3F*Jk z#!{%b5CD>gtRSMW0L%~rRWK)bJ;cTu7of+<9l?vn+0ONQltm(aqOYS+daOaB$i)`T z6%TYlS)5ciVqwiN43w(sY6ZeX@1w6}wXk8RG%Z5BD|#-H`AN^=m0^%t6tb5s+H_RN z4)n02kPZBZ>SPT~ja$J2_Pj@K18{Kyzc~kf!zW7|mMp-qO&rdOgskuB#j<5>#t@p; zX~zeUBtc^0V7PGiCJg|#xTNY z(Ua07S49bsnr_K0Sf~pWL{@>o0g;b;Rw@s=W-j&*a+(QP71?SGcAgK)x4BL}2NQze zEPx%JGzm})5tIdZd39ij><0>$g*I{R!hs_m%L;;8_RSL-JMv#Q>u$EQziSqzbLoh) zOi^1rbxl`?KUqtHX-@rG&P#oAf3rp%KO+3z$w!{o1pxOdak0o=8Ck@be@^D3lssiw&1Bxg|$<@Ks28%~| zg&I~%@Tg`+w4buQzraaz{iHiFE)+AYBkEcfrR70Kf0K9#RA zCbiXLz8Ed@mt(dge{rSADzA%L=ly_V@|{!HQTOGCqy=Ie9Wko@5*Fb(JK8a>B8o1! ze-7Dld@hZWc!zGnuBn~r?Kas%0i5tNqfliBim_?3j8yokgk z3G=fNP+g-s&Afx4)Q}o9P@5~8)G=O~M&5z(vG`kFW=7(*0%PT-G#ZH_+zD*7!no4u z8<+hL-xkX<2(QVq*A`1c(^W@XlGEjfq0CYl+^;opzN06I(nJp5DY=b5;{5!xjDO;d z22-?S2qnw5Afe=VVJ`U#`%jY$5B}-IsOz#GyKw|a8cu{ci5S4UCkz@Zb<@(hQZm_A z*r|sY6IcvN{Y#QHwRsSPw6&QL((EN`t-|Dc+$B;<>+KpZkM^4_O0pN4}t=Kg4%o zE8yqJ7_5>|%+321&=V63S-enO?Y|Y^Ax#fnyhecZZA&y?NcY1!p+tsUTb%#sK8saD zlK!m??YIz#KifM3gn-;8DYZ4N3WlvU+mq}C%gf}~rIl-Ju-;%zFi5M$DA5`_#)r>( z@7YgZJAqzmH#=&JanHWW^SmZ?4r)U-QFrjV%Bi{ z^T+ZUcSWkU8H`mk!+VBJ)0wX`{nMX6q1%{(#Id^8@mv;O0yj@Aaj4RmYO?Vk-^=Vv2$`F=}ZEw&z) zKO1GY^3UC--xhjHHW7I5UzoADO-vU$nG$)PKrOSO>KyumyY74%xwNZaF4<9fpIvQi zxopdu{w(FUKRr|uN=0}M{*hZG8V)-nFSC81`}+_=!Op5EZ;2$ zW6ms(pEHH8;6D%P;p{kmsUp2j`8#A#&gwL^JbZ%}dj`=H%B{I z{dwq*a>k2lDnpoaa${-s}~7Y>Gtan@nXJ0r*V~c~>I4!u6+nn7^mUD*}`+iyR3VfCEG=rl-RY#qWHOM`0+MjmmAkngu)FTt5zB z0v`Bc*MkET>3J7v32`GbI2z$cQ%cMJO>fC3s1LGdSx6~p63?DyV1pKQAMbR zpYFyhWcHDRNI_VHtp^EPtYSH@=i#&H!SXot@O|R5znpdjy|pb)FT%t!Fybqx=wMa_|Q}R{Ghe(B;j_Aif zUgvHB_n*ohnkqq14khXS^qgci3YE}rN}D?DxjCEx7AlbjD$i@W3wD&n{Ho6?Rbu%1 zc5M8DYhh)_< z01P;)ksvwz1Nn7z8&@<=y)1nKAR?5FBNWX9i-sjck!Q!kchXw;Uh9}CTGglyl&G=^ccq3z z6`Us!)1YNsVs!q4tXFEo0ceuMC=PML?>u8ul4H@My#41Nh6vPV0y2glbpiEsofI)( z6TsXAt)dzux`P&-jK(tJ1CLEm%Av|>8_C*3FB7X2{l6(zhHGbmA5{bN@?9~)a5Rhy z#LN{VItzlf#PHJ)LR8To(b}IE8}fHJyeay6>0b}qC1wKj5EvwjJDLrSejpV4jR@d@ zMOW_tc!=>!Mba_#64Ig`uAitg3!QUeLWmCVEf>5~h{mgr0wZGB#H0ST#==a%^odb4 z2(6zYV>LOsYnl_L;UiyYbr6295V`d9l#~CL&R*_W7pby5 zd37P{W3>@w{$A-v$~xgAYW%O&MRV+=D+SsN-P4uB!_^I;2Dm9bf*KEE5W0?(`cnkN zs#?llP7PazQnvm0NxOf{oTqls8M?)$+QyE0N3cy~ljPFq`&&*AUlUz86c2sX5B{8L z^u6%QkWuJTDjTtp9{aTW!7u)W0cz090Fm)Gog`=Wueq7irlC*UPHThvjKY2?ZJjH> zJDtIrcp603R^QqfrN|gNs3!&Xsd--*h!U5=_;_D*Q&HA4d7C%) z4>m|a`9@4#D>iEen3~JG%M_N>VHGiX8EX2Xm$#+RBu8}qFLKJP&s6Ph4j)w>MP^#5 z#5dA4<7GLohx6$Dq;dU4Vl@8)0%UD9G4B=EToYwhiHt&>o=#n0kD|kT%U!9{wTaXQ zzpdHAw{BQRAE%Pvf({WfmER&D>vcrYLOr{{wS>O6JU@0PobL5C6>>=8bzd0 zB!eHBbS)-R61(;0`wRz)K_dhriKHv9?OH7+)%9ok4B!4sC#9LMvj<33Gq-t`?AQsh z%eCe{-30g5g1Ggv3_~AhFNCYLteP-H#6Tzd2Y`1)`bM>xv(0LMY}x*Y)xnb0pF^wT zO{;z4-+w57pUPODYFVEdTAy25N70bOX`*%)T0W0h)*p-9j#=L=S>GR8WACj0=M*y9 zfCX$IvNl-a*HBgTcHZyT`(m`m!#Mdi1a&rq9X3ScHpI&|Bu6$6?rq>Cwxo=buT{G7)v`9*onN+0%eJ3yY?-Ge7`IlLW!I8; z?bxi=@(ArXBG=OO?YQ#SGBWIVI@Vq_+3_u}z5HP(aBr7zW+%kB9!qZjNY)-3{n%c_ zYCTflUM$kS+TTt*-~M0i`sep;q%MHWvc2q)z1+P$lEeYU=pZlPpdjm@_}_(Y<)G~4 zpd!1m-h}jWZ<=DJkjIy~ZdKJJkxB8PNZHxY=y1>?+0>3?*6%mCCUwM_-QZoKoxs^N z7~e4Da9ombG+Exz)!x*LbX>xBG%7$zdo*1LGr0lUPr#W--kFdN@D~7r7>9!d$O-kF1LL== zL!5&;2%d>Ki&t-l2WolCtIevL6xOy#16`)vH&n&dK1mv3gq61mO?(dB zcR#YHelmWitxieoo$0KvPB{zw_^FqE9h|IDc_)gi%u>o@sb8IZ<2fqfKUNYgFL>zy`|?01m~15=A=3UtQ-SPtONHr zPR_wUzODqAOmhTPlCcZ&t)%+m;{N3b+q$kk3^rkH{^7IztzQjIl{(zhY%Wvbin+&{X&wSgt+1n zphhkHITtF%`ql?e^3vvVWOOqIUNJp=c4cxMrgHuEFaDe7=jpGmb0&g8A|wo)YEWXu zSfS~C_;sNdmuXQ*5_*rBHb4v-VHDp zUH!u)2;-#<%ZG=tcy={D4SQ;KQ-r+v^6HrfQ))?}BBS+pK|i0VV?v76u(gw$m)Msb z)VH0Sx0nYt-72@P?LOr+M0zt8`X8%Xr&yno<_-V-Gcu4pDp)thR634VKJhjMj7kdG zPRx>#m-DPV5Krzh4&Q%tI}?1@2)>=2xaj?I*E0}-Et2~u1%gM@ENtm0yMLyTQNMnI z=LbmKPpd~tt3=-DMEX3s-?F~nF1X)uzF+mdpRy*nA1p>~Ps=hGK|fmb3eClp3q(j_ z?Q+gepJFdxoc(ov-YtZ^`Upoke9ZYQ^-U?_@_eZj3t0ROS` zL?HwpCL&abM8kkLk39FzU4KA8X;tA|=RDJeiV%-OGofnL46&}S6eH>EbM<0V=~*sD z9%f(MYnx@RsO&A;{C^O%kGv5yP5>K{i6F4RF1R9z8d4}kxv!ch$Npa;dv>6f@><5O z<6UEsLX;KnODeb-S~m{Y!EK!OjL&t(-Cp0y_06Tjcoy+iGuLtTWRVJl&B-Ho7eokY zHo^%H6gmGY;x0Ivlp(n>oI%K9;tA{q~l9$9v{JSP*iKtz3C zA7G#c7z3I-BtJX7v$4pcqOoRYnEe$-rSx}EWtp;m-k`c`>zyZI(zJ~WZYT|t2|;9w zZM0}0Z0$MVv}0?g%$!vanXIN{h#tSDunGJ`Y*d`Ozd8E@&7-xE2IBwEO$Q^`Y%oS) zSx;6{_d&Gg-dNos`yd{HSUVqN4wjSZ5JQ%MHff^(R z1>i*!>Wu;r{NI&HKRp)e^V)i{a}E@nX72827KIx@If00c0aC zv!Q`4u0i?61RjIQ!=aaz3IUiQKqn230r7Gnkfap#8On5r8wiyrcqPmU2<~GWrQj;D z+YjMZP6w``MX&glRxy4Aj=`hdCf9n-Wv2gDEyLQEdr-9Wkx$<}CNT=e0UFRDgg(Mj z2acI(^kAq1))y`CY_<@~Ykmc!5QDS9R5TMN^NG2j21EAKcU=By8YUTo5Hf0ZoG{(i z!8dH>6Z)~2s+4r^B57DY)(V9_IKfqbFP#z(7vwfDU7A~=& zL{b!ZHr60vJ*k!51|;%n^#BS7*?HJNLK86iEQK$iY=!t~014#R`X|9hNwJ{ymvjG+zfRNHh`Xf1wxeoh?^9~0TxXC}tvG`94O z<8_LAp%L4YvVB``<)~|mM_Ds!n$eE$nKE;k?IELKW_Y%jeAzK+G)gt%A|`aujjWOY z?s+1LbRexn1TQNiPFF*Wp*sy@^B*^h(B!mWp}CGEA4J+UA%zadG(Pn5i{0s$kj26_ z^IhM|Yd^>oliZ7YbTRc{oI^u#s`4#K2_LVkPxb%>hXDxkYt$m+34R>hOhg~segpsH zhs$rT(KE|c_FdVg6ygTONo@US66fo3J!>5XRpKV*D$}QTdzRVSmzW$M?OB?`#y|Zt z)$e`#oR^Ca>v&fuf_4%HC(rkA} z>p+=W(}H9o0!gggU+RC2AN}y8)(P_Dn*N85j~h+|5&J}r`BvPx+Q254;$!poe9Su; zf%vrn@0^xg0yD#=9E+Y&NJ{dUO_a8uL)7p zi_{f^xn*|t`vtY)(Y`PfNvp9ZWuX4%MRx4C^KbQe z*|o2dW0N}m%cp{5ja_LXJI{g_EH|&4HS*Q?UCP~yIo#uh-OK7kbi<6oSVAWj@@k9{ zF9+p{@jE6L-19#tTl`LaHtw^$pSAn1UHz5W5rI^+_2y~QzEgmPOR>-(+*>eU-OJp5F2rvu1>F~S6>O+ET&)dJ$a#ESW5=2L~00u9itv936I$=}}N zO&^HKYZ}F*o9C2TEOT){o#*JzY%ZfRhaxzc8k!D-lI^W}v(%$fM601weKffcB zUN3KMaAxKxTUA^z{c|z-yfa6FkF&L(FXDP&$U^q{pT#};+P}lU@`4(%+hTa+b7dNJ z0*~cB?`%j(b_stwf3rU`MpGWPfR}jAz$85_P0e2c_xbOHh=Z!JiXI7J+NPznXJ$=X z5;SU~m%T9^bIbnMLvIf+zplq=wD_U@m*&AG(i>9CIEI5eFKr^sLXLMteKfU}PQvL3 z`}5vOt*Uj-#}r;Ow^X4Hm`BjMT7yE#C6X-}uPl|{1hPnW{)4DI4^+-@JY&9zY#@EE zsDi(#4VuJ&=!pQ@6}PZx%f;{?fAl|GMlSu%$J%UJG$1R4?*O;zID z%v)iAUNg?sW?2CJvgONG67^T#r|8m9oiYM$6BAN#uCK@zpnPbA@2n;}tb9Igj4E_@)*fQdr(1BK)V za_t04qg4uJW=c0^YNrp>cB_QPGgT2YnH>aC#G;ObuobaBVqv4RV^LmXGg@P|V&QON zVUt~Bqbg$8TVqi!;uNssbSvV{U*qyC;woa{ZMNg_D&n;&;^|-GVzFZ-SR?(nN|-|- zcv&QP&mx3dEJR{YcElpg$ohz*_>lnXW4dCTKI_NI#Uk3QqDJ<@R>h)D#bREpPdHdb z?ChV!7mKH|O3)2Fk+qj7E0(NdeUfjFYG9S_FP3J+7E68oCB4ilyT$5o_d)iuSni&c ztcVp!!iMU$mpQUWag@l%ucOo#>*p!1xRMZJn_Ec0O z+0@>Y=qHy*r$U*0FL+8Fk zhml>ErBs)LU03|_uGG+p-Po(t*oZyt6Pjqlj_rgMNIFceN^xlaJG+4@sOCLAm#ulefTYKNe1ZMowQ2 z&Hy@R-+PWUA!Bed0NG(Tpa&or3^G|=y_8}uVQOy9A~1_nG>`LHS$SAhUTFVzSP^IV zxO3PvXXJP1w~C4v&oV$B0I-3MaYfqP$G?@Je85rh-;atP!WA(BT(M#`(pm@o+hs4OKgT5GbuH=r2WNogLewUQ-3TpmX z+gs&z(EI`+mAIcb+?MxiWu?yI{>V z&#TwWFs)XJ@MU1d2P&ST_{t*2y&?{tV%e%i+S3w5o1);{9S*{l#nli&X)E8{y=f zSyMjmr=seny6UgZ?q552OWd%8F}{|sQ8X>f?qAm2TaKzbF5Nrs_hU?ya`dW8YG}TF zE__;VX5iSuClS(^Vdr6Jmtk0@%3BP^qcVwq{CufS9O!_cguS8q}B|*;Tujr z==nESt#{Dxdu>DBD4Smo{@P2i^c2*l_xe$Y2gRYs)*CrMKeX?CmuRCa@ z7?E913aDG(5{S{%gVvx35)zRW!+;OEO4X`rmOx>H|3e^8h1j3xef+^z8%tC_oj_IJfMxaXb(y@0dsAJHz}qrzQtR$K75-+>YM(P!xqY zfaimP^5Fvy`*2m`K=eo=aSW|c6!^a~sdU%gma4=2!(ZC9#O8;@Gd}A>!(bZ}9%dXj z)|;Uh;6h+AAm}kL2nYR_VkCD1*%+T=Cz7YaB*qOSe{jyVM;DC*sqqe7_>fEpfSeCq zQS;#7KL#0#q+>vnWGiQz2wfc2m_vEHyh_$2g%}@yTqA~Npidq=0D}`=0EJ#}S$y%$ z0pD13wu@KJjxR*Y@57w>G|!^_w|e$hX2vw=8;@PQ77%$X2-K2Bq61=~k0X@MCPodi zcM7$>@f^ZuU>i7PZNsx|o`fUN1ZWhr1SL{~T0&qXuaE@i=m(>dx06U$WF_DB2_KUI zRajnST_Zb_b+9UkDjN-ALqo)S@QI?VsgU?B7(5*XVnqyqKrX2^Nj}A2i`<>l!=6y~ zG)bEa_h>2MBhdJ}2V+S#Phd0z9ZhJYtP>!Ftl_2CW4x%U2fEP+)~ zdjmzei1C9!EuQaf zHyTd1dz*gz^Gft{#ogz3W=aN}0x7+p?VPz&K2WR84B2g8XunW1d5cd)+WgKBJNx;y zYOZZ_)wuhzt(*Kxpo7ZpknVej3^6uALhG0BoZq^xSDv=EH&^xhyqa%7hJE%Tzc7CK zCrEP+?@hB?7*BSbnEV2h`NzP9^nx#<44&0h=IhNq<(K91mp0Z5ABq14aB?}S2-(R6 zzur?mL(-E*e@VMEtX>XEmNp5}{~LsTd-^&ss`X2dpiA%fhOn+G<@bNh^9Mt=r+ZJn zBozIfru|}m2sNB}65(uq&NgAgeHA99`O~K|bpM5Y?8@BrP3v>3{>+Bb; z?~1SAmA5iD{U3Yp8P!z(?fb5^Qb+@m&>>*xRSXD-h(4hTh=_=Sii(I7MMOoxp3qfP z?1-qLh;%})YCuGkE*%S@cL*I4ASchW_kZs_&K>u~J}=HacZ|cx7`#a!StH5sJHPWg zKT~n*Z`EhYLO?Vy+%a@OeOtj54fLPVi*F}?AGCxer|g8NFdg)z-{?g3vcxSWN!!Yj z{xV74U6#Dhi80xNgy~nS?&bt#RLta2x!dQI!3@8P?QGJIh+mt9XSbbk*ojcF*$9L$4DV1 zWrz)ps%-GnI{Hboi#t9~HS)P1IkQ_C$;u^Va(QK>RSulb?a$9sBtA}mI_X9*w?G{~E^J~7WY0{nhn44eF0D&J zS)AdKMeB^I1@@FSZ^L?E`QSWX?)RWw8K0Up)u}G+y`tXgDk~=xVoLv64 zbiaY~iqEgv>ja#1gIQPt+sy##4w#pR!qn2%XYs=K?u(s1OY%CSgck=S2ml@~j}itJ zW|fxsTzxgPi6Jz(yi1J?YH45_e{KHSY~0$c{+T7X88!USoLH6POo$BkZ~xP`YlOdf za?+r<5I4X#ew8HiGt-HdJPKwlmLhvq1|Hu_qEE5mkVTX{muzC%U_3+HA;V&QELE&^vA090(M7TEJ9s1hK(W;BsEhhe$wZMTT>5Y zH12WV>ZEO{RiNV-=R4J2a%rNbg8bztpzlAU;7}3Vn~Y4MiQp?)o&(KE6V{Epjc}bm z^3OKyC5HoW@8Wy>P5Xk!AI?;L%Q%q}v=!9o?XG*<`^M}BcV+gc(A!V^YY^||P%rHV z7`%y&vi2t5MjN@h(VDhvob#y(Wts?QDv@nP5M#OmDaeoB=$fT0ZO*vGUg9q~|D3{4eN7$$~XJAvHM@aaU9vS+Z z$;(j;Q256F-HQ8aeW^Lts%*i4sc{VJk)%Bj08US`K112oF#|boi9WlLJM$Q{Co&B8 zrzE^e0Ei?TYgSh1rJe-j@odFG5JJe5C8(PNJ|C{QVFBc z;Xna36}jyOrAitfM)nMWI}`n$u>VDQ}`?e%ZRO7lIX3!#O{$ z`%p!d5sWI&7H`qt&Pa0ePQ;^|hRG`nxuf8*2k5p?mr1d2%EAu|4FCk##T;l_oZsg} zbPxR+_>g>*LGOjS-ok5Xeqtczm_B4mj`^n$v z&zTuzPWPnE&TOog@;6$zTmlvXg;4+u0=a8S1QamKgWza@%b#B0DH7oThcCOr-NNS^ z5<&C^KWKd1gtvAB2gfwlH>=2k6O&rS6a7UK`J`6ABjjfeW_N8WH6Bx4ZvgP99HRIkYMAG!*<5b^gsCTtW)qGWJsMo3fq@7)& zm7BV`kZJYuk=Tx1STjSk<6g}6Z72y0CL(S{#BhzUNAyL=IS?~#PR58;?6{G=21 z>}kZrir6$?dU9N1d_#DAbaHJ8#u>v7^bNHSDz?|_cKq7>dtk@FxI}Y<`v1x?^nV}o zuPg8mq)1$Y@jpX~j4v<*kRs6W-yubtyhy%!{~XA-RK7V0AVr7+EX!|s$u%#H_ok39 zC92c^6H-JK)j0Pu-`55bj`lj9&7UZJK;=ds(Zp+;XPL}yYqaS-t1&DHbW2! z-!^FXBGCo@9|y8auL3@^FuO0pQRu`mW=XD7%|rS8XSk~u2kV5`XZ*3-wtoA}kTE}o zmzw_hBXwVfQG?0liT3ORqBZxfne{c7AgER!R@HqWtO@q(4%4l(12s>iq~2^d4j3rD z6soXZl;s3Z4s8|5mfk_1{#AUNFC}`b;>uJ(uGogo&gJRWxEC(Bv7}q;E1$+jmT#7= zuFb?C$M%u9!0a^j zSJ&r!M_yfDx|8ze3^K+{%DaM+VveY1sJ#uh)*4HGdg#p9yI8OEv6T2Lahh;DIKD>W zo{}>S=9@A$mY!KOKAyom#K(Z*LZ)GK&~PYyBD-Q~d?JU{;W-BE@vCjd!QdH_dG$sU znat-G6Z*`hQ7ki{$tz>3=$A*JrjUpx!>f4k`C0#*ST!=M0KFP8T*`9507Z|F7))0@ z>c6+SqQPUFRfgReu;o)ljh$v?J@;n}i>IWMSsXilH0?9`1b2%C?!X$eQtWJW_7|+^ zWNtC>lG|u4A~ZU;Rs-vKF=capGUvPSSGT#kxt{ozdN7}q|83hy#@6cR$A4XF_-nv# ztl84#Oo6$KXx73H`=1$eE%y6%YQW81rt-dTQxq?3JJLC^*l8stzGQalr(ZyGdfru| z9*4;2z#nSwHN&vpANf0in!|U!cKm4zYt-rlX_U&BQE%fH+Z}mpC3ON)4H$>aytHdcrE)53lQ(#GJJCj4;zRbgB@?a8;{WY^m?z8Ocz~2 z3r|N6Zh;P90Qlbk7fZ4b=o5xhau2n210cUx8e9!emyrdpisNDtTcXrNEZIUwYNC7UHT%3Dj#J?pzkeAqF9^QEFmN5zlx64b&EWX_~ontMZL9y3!7QnWjE|OxaKGO4qj|` z<2dueAvtI2mPEUvtV;>_(;Dwl%N{6vuBH02AAC-gN1`3 zem0o_4cdFV#i1){m$MM7)I*DQuJ2yoL725WI_%EN7IkDWV+^~W?qU=j%i04zc=zY6 zQC)ZAwWWN9@aEU4)zIaZgD&Vw8bpktwU-qYGH+)2ox&dNIQV0!u()B$FKExv-`wZL zto5vb(DEZ4*-IeC29<-Ug41MFtd6s&Q6H&F67e<&hZz66MMr^&i_7I~;ha16i!L}T zPdMIei-q)T)YH@#RD)a_>c6ZHfzrYPR6r4o{YPnSYybi%a7_N(eA&b}fWcq{1&0v0u(7_l z26B1I8yk~S;sQ|wmQ4*N&rPOJ4B|kng$1TyVrYI{mdDdsSi^D`U=U8MY-ljK^+)+6 zXMOEi`Qm(cciY+$R#O$ccnLi>FCG;op+W){RxSDKLuG?wwx%M9tqm}7;`{f?$J~Im zh0XK4t#gZ}<2>=%1v&157;j1Tb&AB|npWp8xi8<<1Q^QojgXCv@`AyB4>!Qg8Tc|W zy~v$M2@B(};O4)zT8AhJ%AEM)dF{sPy4CdRfwc|ej`>AFkaA^djk960uq3=Ne_&xj zIel<+dP*l_c6feibLHRwXXP+&L7BJa*4m}=p;~?WJ}bL3XDZ6n1zbfnJ?(Xlqj{7d2hi+U$LqzO zH5CahO}x^k4(`&og?TwmtyazofBg@nunEA6;;;nX-1OAU$RwY?$Q}H~ndU8~^7-%h ze5RVA-pXQxfY_+JV^`gm9@g-f-ey2S&-mL!b$fk7b4#7Fn#PUSFP}ssPSI{$yc4;| zS9|wX>D4Q2{9~=fC7YS~!>jXl0@mc&Yay!~{i#LUj=Fun28i7Ql*$@XQ>*FnGBnNK zG%|)A8kNf^5bGP)oSfBW_iuZbusu7|l0BkaRIFg_aYDeI6ks1;mwrh9)g6;x>~!LI zUiGJ>y6+j)U$PqN)0^6!f2;kQ6uC0I#`hbVxy)M&Ugux3_4L^t7-;Wxa&6;azM$yH zN_|jK7@qY0U-Id{@%vvmNOv>vzv3XHV--OdLImaWtK^Yc$U_lv(*U;n;BEv)n&$4P zc*+h!lW4#!OU3?Ge=Xi-j9lsPfGQzP`cE8WU@8zI_BRgF&?7`hntn0*8$%mJssuHL zq4T_&-flWv9p7EJIh5*h{dh&{<)r46;J>Yp&e7I%f%OsLIt#kSM&0BFQt32|u7s9b zW=yh#2nMI5l13$mg}`-CH=>wNE<|DWp-j_gbM$+nDzzG{8;36Rm*2cJ@uxwK)mzC5 zg{5$4)C)i0F$Zj@^gEGgO`Vbh_>)3!#5K*G^BvW{hg=eMb>){BCaf7EbbSunw0w(0 z#GaSDal}0#1dIG)sHFZH2%6yo$kC_NDhVI9g@m4ay!EbgRy0IUDqy}%Qpdas9;&k6 z4byFjhm4gpj6ssPMnE_MbA!n;AqdW41R+WfG{StGi}duiiXnLXrK!SxNFBbyjMaD~D+3x!xY!|T-K1C6NKo1Q;PXz0XHy1ZqNKU--%+yh7hnPllgc{s3r51kX z>KBIfec!=TF~P%W&W~=$#)20Pt1ipzw%5VatuQ)d6eyNSHM?`iEiV-D=cb`qEZR-l z43lo^UJLWGr?Ma^SI0kaNuA|q`)a|<@82+M_?Uxl3n1^7kfIh_TCn1R6dmD0DT5x1 z35sga{z?%GBdWsifS+SjRoVQp$I~}u#JGDQv}j-6X2aWTSs8iHUwLPZLWg1>a8S%*f(b;nhfz_clhy(<4=n@Ko;TfOATdW#rtZnuZ zYLiVKpq#J6y8ngSx7!>keOBi(4S#_aqv;y!7y=%ZV=s2PM{Zu~@_cb_soPzdM(aHL z=-S5 z@v(dy7EeQ{zwpk!apIMFGJGa?_m=gAwtKqQMw23suPcZraTouSzuj`}JRfSCfxfT)f< z^zvd^V(c_s+Wt3Hx3*H)oJmfFDZ=-ALt(DxLNpAbAj0Da(G*TNG=2h1L|TX&g~8MV zP6`L5zG_YTd}eS!5#r0`!GEAK#$uVO?We5FhhVVgEy)<$ z8W7JUdBu2GHz4e3#IMnw`un7)1}XR$DMpIHg*4mqS1!Jq5<9lplkv%`<6?ZZj=H*G zgu@R-GJp!GLQTKqH=NIQis2;3nG%f6r)!|`bgPJ?#wPW_T03?^T~k~g9NitaQa=@P0kbtGK28GuPQBgW!r`^BR{*u_zr zoCBxjc8^nXh2ogzZksSf$w`>eC=~~}Lz?!Ls45l>2gQUVqNz|*2~`)#4kMANC@FR& zI$ja-5`Xr*%5vQQY25Z1Ma3W#!%PTr55xLV6K(KxQNI9CEHw*teP|5uq#z1~$s*FR zBThe;9ZJvmGsH;p`cV{|tPT|;FHM!EPyi)3kcBd~z3jls9IJ$p0|8LZm8Iw59;qCri&b#7z%7vPHyhGL6SYHe6n7y*7WE4()$d-@ zy>8f%oZBDd06oT@JqEPOGA@=jGwHkYp`>)S;_JCp0oWMy0r@a5$y$I#4gndA2gpP7 zaW~I4%7!?|B&gN`H30)4`(=f1$E5?u{XS~<9%xR4QRCmodRuLYYiMXYY4(Lzr;*?F z!{%gQlB!S4F7L7*j6Y&22R3K4+rDhKZBas=JeJ*l)ug3B_ipC)*Jpv;>GlsDhHpdV zGfv!&>(a8c!DhQPdF|kJH~LSZAKvv#RPpR?ZY(M){;(7Mi@l}&!6L|Pn7a6i_bYiT z?dxMH|4&p9Kl-4!;_YV8+Nu0^K9LHRZJ)Wtdvy(_p-7#b5(lY$i23#6Dycsozyg{Z z{I6P#_=0jb722rJ8~D+51wa68;qHycdE5o;2^PQPZm8g~quTTWUvcwyyqo zr9heZ=rP*hz-TSsSTs5RVccaOujl8+Qc2T?>7XXwAKu0?OY|cra^G6N9Dk*D-^aNZ zO>4tDdY{RVtxDeXUf-X}Flgg{xSe;Kr`{IE`%sJ>UHSai#@s9Z+UUMd+|H(rrE>l{ z=i#Tdk$rrwz-e7+`n0j!#NXiY`G7PHGN!>@X~e*SxQ3_&hiJrxXbDF4yFzqVLMYOq`o^IKuAxRz=Ns^s284s= zL@1a1G6r-W4W|;t6f48LQq@)H5+&b9Sd*#rGcE8ExC?>96GQ2Pe_^~R+& z+4QznWffq4NuR$l1Ow!<#)i%ZDs}!=qS1w)m6ty$EJ=7HyUKIh;GN;EUu|#F=C4|R znw{+Kj!_Z^wmUjyFD{QxD1EQ1Ut1FAZzOH3Kb@RRnw%sZbU{sXbS5SZ7Z%~m%b0WC zQuAv{^Gn(*OPj|A^%qtQR_2wGNBfco`U^%z-%rlI@90WtZYpB;3h?bCBcrUT+2!Ts z>FMe9jj+<;nfCVfjrGF2*|~S#r{BqChBKLS8?FNj=HVG>YrKmIbq$P~FKJDU0*d_O zeCDIXUCvygCSo3()ddJb-}_4IS*9_7e9y2p{v5JhD&H z{xH(UTFAK-C3L%Ds#xTnK-YDH{rNoHwDthsha#b=SyVx8KrO5dBd)m7?P9XopUmbQhLmw-=y z>MYUYEaFNq;_@Yt|3=yIf5u(^DSq$(l`X*N{s#+R^Z^-fRtZ4}jC)(`{^&O%vB<2^ zckYqldRU@+ETzvy-BywkTc6Kh5wI8vdA#|qI1???1s`X4J_+9;jn-h-1`bq)I3`I( z+x*SK7Zo$maC|~@xqm_qkD5QV?< zjbTR#|MeF|#gWr~_D8beTf1j>3k7{&Tp`hhHJe)_fJ}SVGTbkGK@w2W$RtAx7y?tI z#?GXE!5GMV%mkd>zfF9RF_v;?Z7cMKHsKu}+$}Ag&p2}G)L%Z${5ro!G0R#sVI=olf?C;$GRU9((eE zug1Y667Fo8Lqx3jgA??Fr=QTA3^paZ>6V^8MOBC*B^;2~I%8>jtETJCtKVaq-Z$u~ z-i-HJ{FmciNB3Fa@A3pKx32^~z1>>tSut`3>89GcVQu#k0?Eg89VEx7euvZ7y${T4=R_Q2@-P zlIDN}j6B`~4dU>u|0sTpy6O;=mp$CEprxMyUpFsz!Yof$iNR!^23c5;`LruPX+pXy z0v5jiN?(+~yoEX9JXr^Dgub9oKXw1rp;+(it9{3V*5QDVbn-THk-$Hz!~YaNA+77I zff#L-u(1>Q{=BJ@6K^g7sA`5=2gTyx_33JC)0Lqw`3_eBH62qf)u8SEjkz|MBahR5 zUSSDfVkwnqF@ccVvn_S!&85<}4{r^7h%)IbVy0UFq1!pP%U4hS%-PumGp2HKgdPDy z3qgNPB<#Hj*ZH-yR$Ls0!e2*6f1kw#v(`Q|ToVs-hl8EFkVH$xg;q8atG_Mp5&pJ^ zTpwG~hqAg8PbU~8;P#*_BxE1@D+DV3_KPyZ9^dCLLy{Ba|Lmxg)Ut%$=l6*=Nml0> z=0=!$o`ezRsx)@BM4Hzp;v-{?G;cN2ZJqmOwQMT2&s>Oh3zXwu46f!{%|^S%AC)bS zvQSo23A=nfiR8Ufz1{9z)BzkrZkzE3Rgb1H^~t!!iU>0zS1)uuUs*yZ&9Y!h#Lsj> zcFO(*1{3J;WJ{nl7+xK(p|3z!wVLAU|NnKF}M7auqy7X3@bv(ugm9%lWJQe?kI_;Ubl zloA})93tSM(S+O*Z{!zL!N>tvb*8)c+Y)o5P7PZ#q(MYrQizxnjdqMm3lj4&>rAE4 zg;;F78s~^8nFjcXxJx{12K2`QLWt1?59p*Q&DN4~aR!+f-v#UmUUtgy6_^nvz`mUn z8j;F?(z~dD!buPl?|$RNqPp!9Et*!pJ|JKSz*A_U*m?+331-3FC26wp3`nYLqEpMU z^}4x|*x_IR^0@%|r5B#{gQsdNc9yzw#GhBj0`}fOryG?GZe~&?*1Rye+yWH7gbKI< zP?Um1o*I^|4B{)a_*51#H5RUF4LeGP@A84eO90vdM_Q3>7od|u zrOOOHx>xFk62e?OmLft!yJ~#dq!5FGx3M5fFhbHXW~($FLS%D5k!%{^rr`l-2D5O| zW;jv|EBCyWmW2xC==8;6|I4Sw;Nxobu2;;2stlMEf?Evoug6cJ?G`|J-4|1ZtSVuL zvm9hI^d^r%mWVkL{tj6O@t@p9eDrVhx#zABL;ZrtMTk1tpMORrS(ixM zw0F$zDECLeJ%dXr(PIwRxvlp)7H+}uI~`wf+fvnzs_=`)NIF~EnGY7d2sRJnKhLQwXFa~4rxG<(}eg{f{1@^Yic*bbJaJ)pHUPHmuJ=J5F@VWj)w z#gt$`2zL@|5E@q{)yRq1vDSz84(`-)hbtK~I=FYHs&O%)Bx&{lS+ulvx5M1yS8IbB zgngyoT^i?}-(CYi@2&zY@n2yKK{`?$I3Q5T`~OZyLR>Ca5Xs2nOs}q@1-qhnJQANj zRy5NgaKv+`#+aOeRW31YTF@UDFBzXspPtE?5Uh}DU``5jZ{-Gm77GK{cuEik_&l3O zfS{HZLB3K;7z?Cw<^{?c4Ps=75K+KB9Oo_al(=iAvwXRQb@3lU3v709gNk^1^NK0k@KR^HvAIzFqPKi$vgw{y6nf>?;O2(Yvc8=sT-(WdorHvi|! z?fH4_wAmF1M3v8dm|G&PZai*lZQ58ATVDxXUyYud<6Jl=bB9hjdJJ*$6h1#s!OvG- zNd}NtlyB`)IOR&3T~Kj5DKXC3e)JG*VQKr)y3WR;V)xJINQj6+3kx<&wJk*bVaJbg zlun%#8JgYdbw+G(WXlL&S64$QWBzC9bOU=XND$ssQUu{#Ri;Lo+cL>psNfT44S8qz53nbJ`q}`&6UB9aHIzzI0vNDRM^Z2HiYOu!z_sZa@PPDy#2`Z$1>CN*EBN zA-0?$Y3eI~eIm2hzaW)uQAMYms=8tG_r@snU&)RfMhy&MO5ecQ1*Yy#u(_wUGreG} zMd+_h6%-91p+4i_g}*mOu_JSI%kNIfUQs;s^3*>YqoykJA*|QsJ;m9-%g=lF3(}D@ zU9qB!>^ zvWur1n0hDf?>)LS(NiLp)X;ErdFl^qc3Q;2ZDppvwq0ajquc82aPxWHhYrWM^W$CH zPV95-qb<*{KmVPM{8+I%KiZmcqUqKRL`0O7LMlG=A&5lIP4qT>`XsOhkQ!_nT+)Y4 z-*|@qd_COIvKIm1$%-K0?9&%6?UmXWLAo;9_itegX(9^%)X4ksp|h%%mSN(L1z`-R z-e=&x@tI(y=(82=%>?2Ro0IpqOZpBzvbo}_{D^Q!BjGOS+?;4;M8T^7kZRh{b2ooY zMUk1khnoow9_Y@OJ}KR&BYgi3W59fEEMswL&B-qVhS8mI(&J+zZ|yO*&}&RzvpORR z`Q1A)I`O4q_#HTYQz+3=uw&x>#akuazahv(?~dvjQ6Ls^{GKqotb0T1wY=@kRgI*=*EQTxL@KuIuR$B}L3ixnCBEybCGXHbf{(+1qxCnUhkX zr=sLKK9`3(otYbha|2MIHo(#olJ6ba3M1{In}w^(QcpJN)nJvf4a;?aa3>}!1Sx6U zmyb;GVVI##3Wi`%`vw`HI0>M@kcQSCMp$oYU?Atut_JtIt#S-dk@$cQRS8?W(4beM zVy*B^W8#}^e3Y`bD;s`fKqlW^gh-D!ogTanKvA?tdGb&l`4rE zjz*&ND$ZOokA?S0HXzd2G%dd$3rd#MT@k4V@26o9q?gLrW|p0UlNnMoO?Bt^JF-4| z@V=d5f!Z;5^eyqzk7}jFq)PNLHywxWr@XK^EPF?If7Bi4<1vt9*JI1Zqn=u~w<|-Q zN(j9>G$ACLhQnWa-lXG%B;lW+jj3Qmbc&HnEQoNv1at)s8-3lLfx|K4M53rh-@Y{( zo@O9NomoJ&Afup`CNvWE4US~<>8R$`H$cOFq?+Sizs9W$)R+CD73e1@*Gr(eO{(Q- zl`urLC&04@por})51yx*qiRQ}q?i`4?MITv>!TRdHAzF1<~vGOs9~RyP~s{sMeJGg zO&bCj;qe7_rG)5kiHo?!UC<)9(nO6-oUhbGfq}s^p(V5w!jgg91$Z6+&xC9@1yEv9 zpHXamIs)heWjLWSnSWCfR_mw^pB$o5*UpH9Y9z_ns&yeuBW4H zsgQX;%g=ky&z|c&OGPD@ryx^iy-cfmS}v_WtsD4E z`}e3*XKBal>C1%~zbCJ_l=j~A56;MN>l4T@`rcN6R{rN^dIy*$?0@E<_KEI}ZAHuB z=Wd-SKhe2VT*yCtj^?t%ovZ)klhE-g_>%43SUCJYT}vI{j6jds{8!g<9lOC3V@^#m zr-nDyM{_xYf?US>#$4|BeBDf138xk&&|QnfT*2BvNT9Xm1c{7=HLF9K5rifd*JU&2Cl=S>g2kW&ESQuao<7^Zun2zt z{=L4TinprO-C7}#WCG2`?(f8+VHi-Dx2n(KaOQb>i)$+5lkB87vM4}ohBH(;`MYGI zPf{FM;BIcM>u&G(zPM=C*Vi|{s53s;0Ef^WKX=S8iX~0{US9?$SI~1yvI3=KWd&Q` zxIQ}mXJFCmPgiAcZ|~ZY()?5hNd_iI06+qKZediA*Ik(X#ouUcU%c5c|LVmP)sB|Z z#@gH;^@RmPzlO#Pc=PlO-PW_6dK##qCEt5Ii@j5^4c~SoJ(yYjo*HIY>&&!MR z8|o{5_aszRFmh7fd@gBf`qtPhh@zymbKdj$QC&Ta1B2Z&6YaGl{dJ>Ntg-HQbAqj@ z+^p%LvZYAedDI`l_30y>%K}VGTXNR0basKj*7WC5!^g6 zJ9N=!FTqC#)rZGa$JcjEOlqzy$WP46AvTFDa?rC=(CWgj)iqb%niGHR^5oRT`31Y7 zb*s*GyR{j+$$4`bGUDAk-Ca+y&SVh1rQ%R^x3@#nFKfTzP8g7Fe7vkdi+XbH~#mx;{-8KMK#UcV zn*4aT{@CDS>s{T+G0qM$s!yFvUV1*;eR0(jx~35pkH5N3!94;D(uU*yOE@;qmL`U7 zAzK|b#5m#}>Lav98DWw~QXfXBrH>{`8QQY$iD+^_Av=9RI5t}0jvySXAaI10G|27d zRX1dT_o*o+F)8UqcB$`8`}wnY5DkovXWh%YJCU7nMTUi=C>0>$D!h)2GMg(ua7W7)E?NFWR#bPViOB!-_t)OQt^*vv;2J%XF24g!Uc?NtChxs!z! z^YK|7MB^HlVZ!1}`dI4QkCpvq1Ab=)l}1-sfH8PK>W5?Tew~z2OW{9 ze02?~+wzGve_x1gA=KljU?-%~OeMsz=Gz&P-{^HNc zW<8ch@4y&`s|(sxls4_JgkukYJq)+49&84wjkbGF0I=n8AJB&YqzJ}UXc8W9aW;eL z#D?heJ*gQhGQPJK4;-I&K&T|YJcB$)F@vW>m7-zJH$*$@fm4o4&`>K;N4=*Z)9)i=M)=?l;i3$p-Qtx?>CO)=wghNp+;&sjLu(O;r zLn!UOtqu*|AGKBCoCjnV41jhgA)?QW42cn;79|ZAi&jLCMlD5~J4^j6-BGZWFUpKr z@@^4!u)qBuB-^IAhQN>#VMeIi-LqF9@q z`)KD3a!=Qs1+1SJmmQCDw6)+s8Z|7?T7`uqP+)2mtdR1TijX1AQdU}=PxEmO*$q#% zR{lYO+nuAh`(H~o-jZiZj63kaT9%4oN&~{ijE8nm4baG@Df^B33)|6$oLI__cg-9> z=cHk6?g~Ug>{mN^ZjTIN1Op$Hg590etoWy;;WATRI16W?hua*6N((OQCH>$Sh23x3 z?t`h1A$9+NC(uda34Rc9zl@f7Ys1uO_xnGdUP({h_gnl-Q0tF}OOl78)1GG3^UfUo zTaPJCWWi3RSxkNJ{KzfbQ|vZMmDTF}B)i0PZ%=ne{AeG%DX}L?pvQ*7Txw(snNI|I zOiUK|ff&E_N;u0WvdlHw{$fF@M3x8aAW)yOR2Z2xX?G0!vxh%-ut-X?Qc>fy)=%#9 zY zRmaT8ww{=Ajm}Gw(DVQ$7`@(DcK{~@LHAP4rj&N~6Q9Idp{aWJ?BYF+WOY>+T+EF= zYJW;PXQk%R=L^wiNdrQr>>4Eo6$-PbZK{if%n!{*KeIojw&QTkb_bST87s6np${=2 zaR;@HMnkxlenwJhv0v?n_3z0*UJ6^|TK$F%%U{Mc2uSoV_tPK+pi0W6Bt)*71~*}N z5cL9B+88?AFtZXAiDk)Gt$D!>xGmlf3X)WJdKoYnkOaQ^=W&1z)p^40V`!*7ln|#& zT|lZsVY*Ah_@Q#Hz_l#Qe4-wScB~S;5I|EgYK}n1_d}Nh0Fn_a0$tw+osXqS<6|n! zYPsFnx^(cVx)<&tnf&h}6$Eq)fnY)R{;0q-*_lOy;$0D6gMjRc8h|@XsvUZ{M^8b8A8Qgs(EE(_x;iboxn-1Y}7qmO_f}8+otES zQ0W)tPqnJQhe;nli*@&JjfzG*jVE}VA&bjGvM2&0No8?eT#f{+E)w3ok{1SL-X@V` zKvY_hc+wk9qwRp60idS??AVIhZ7;doQqs;;C@s@qix&ESr}F#%(f<;NR2Upjb_6Qv z(0{bn|832@RTOfIq(K*p@fAf<4y-1C$-B|UvX1xwGjkg(NzO8cY?fS!Ro#MOxF;m< zc|_UyU)Ic<1d{jPRoH<+XdVo4c!Int3%?4c*k(Y<)~>!M-?cpuw~wo?Ecj>5JSP16 z1&vPB>0(S_GvhoggQ&4GC0CS9%OfI%MA8ps4}6X3J!G)fqKt?O-#NV4rGLr!GrjW2 zm6wOl47R53Z(Vfj96SxWE=o?XwGSN*y}CD1HET!VOz#Dk`9-YUvVG{CaLl1^PTpO} z#`Bww%NXT!)Zd_=?Y$MK|F>zlgTJKvw`sUfJ@G`-F4NT|&Va@7&7VH57tPE}^#1i? z7oWd8B*dn1&^B!Ph)fhagsoZ24rOge^@Y8+wdo7LcsQyrVkPZsU*yC6Pg(yy!IhHQ ze^;mI-zK<{?n)@S3rxe|)PV=4OQQo1sYuPi7)#000XcC3l?uXftmG$qcWIt}>TK>i z^wj0houTJ~S2y&+EoAI;tmgyYlvo$F(m?>LW6Og4%Fy1g>>D+`<1hEGro6c_Y&-Ji z_7ZyZHGR(4Cn1WMp8EEl$oJ8t2O@Tacn1-8U+{(3k+GE6i|M}a8Mn03-zP^L8Ba|~ zxjUZzz9>CC;{}l)qmlxbrckqrdjul2Y$cko-1`z#Xln^riu#m1;|eO?6Jwb$?S>g{HZFQf5k%My@@Qb=JB(y zY)!77D=mgHvsrKwsK%As4i}zD$vFRE?n?da*QIMD{o2p{ zJzgK-jQZi^7aQ2=63Qo?{F1F-?JuR-IUEMcG~fT!E5t_W7<{vQ=(o^ZVO`FG!@4j- zuonG5bHODl7>VeH!gwHuzmuKX$r7o}c_m_ISi?fP;`hD6Q^egc5x#eHp zky*=KH}3I21cB;*#Z;kX1Ke3?|HSz71qg}*3wAn;Lq)k1;3Fh4p0{Yj@!HJNk=M5c zvEbxTf9~k}7Z14O>BVoj6Pd5xtWM_COGcXCFC&;gyA{9)uHSG1r}%sur4*VMj=5Ob=oi| zw5yeY+Vc3r5TXifIr1dCMBGTzJs^w{oq+Q;u9}i(qhK+xc&4E#$}Rv5bX5@I``T11 z$zF&sG6iHJz9!#L)v<$>Kx+?dzGxjGDD|A(L~>%QDOfij^1%0l*)}!$PLHl*0_cww zn0gUr44PMT66w@vC4!X}xo=!iK{0@}ojdzbENy^wO_F(i_R%exeX^3&<1fR7=n&bA z9~_Zy6;?;|AN|?^bm5*0b|hVldVxDlLZIJg3;&3GEB;RF+o%~(@a>Q+Ofm%%^Zj7Y zT$Dna$~%qluc(f>=Pb)avfNi|kIUmPD(zEH=SFS(&W)XbQB(8{`zyk31U$-WOV*Q* z%-B~n_lmtXJoihg@nT%-vw+7$gHKm9&%c>}&4Ig{j`;4}JFFMnSnzbm*f)ODEw0#` zhX&6S_=QckWecu3P%6#%Y2N_m9p63quJMV!pTZ-a#5W$G%~LQRV9tF)q~EDlU&d76qCNEf(BPeWeHK- z??^?n;Iiug_6;Rm${0-1uhj%1sNr(aWN|Zuw}s}#AIw8J&_h>qgfjrMCDD*3c!cm> zDil5qz}`AiaW-TW;JFCc2nr*&fG}Zd-#f3Na~CQH|*k4{>C=k^HjCQXQ&sh^RS)E=BW?W)!n zDzb3?&&#nJ~RJZ=H<7MVZyW!qFL8xqyV1Val9G! z%#kHx)BI61kP6=ZO;xtTM~Vj1kgtAbFM4Vddd54&9#C{Q=^TX=R1Si%T>#)5028ec z71c2Y93&j0dIgErYq1b=@#oGB>*`NG_rj6-VAx+w2222oK&4VpHWdI0vqD3;Q=`!_;7M0tx_%4F-+KA31;dDSI;CLp7VD{Q3L~xao&)2 zMHB4aC=DG#u2#-(`iuv2U%q+)$~zbHud3qBUUt^oyGU+N4!re8D44N-IZX<-wc(O> z%NpJ=rxa2d&7aqIKRksg`y6yDaM?I6Qr4#DeYD}+JMErbo&8r^;O@-Bp=|uNe_hus27|F?H^!2!8cVX)SSq2K zkdQQqQmG__RAWgJn(S+heb?Bs*Vu__WGPWiQrV3)OXa=p`+lC^v%LSje?7B632_D2lGYzRD<(q!C>$WoV?@0Y z*guS|FT!xy(;!t$^XIhH>q0mV^=raO1cJ@P1~Je{t5RRiWE2Xrs3D-wWlzyeJg7qf z_?GEhDn1kdAx-yAeA@Vpc&D!S)RCp+cR}BE-{`--aeL|U^ym+xtvXg{%yl_BoonVw zDB7C|1|19ooRg&o>ct={$KO*9Z|a9?Uayqh{5?$(Xn5cGd<7b(UpmhiNTX%U2aoW8 z+O>PS@(=wKJTm?1+8#hk$AvM#vxVOB z={0^HaP`loxCDemfCye-Y28!^2`+94J$N8cF*}R`c<{pTw`fc90>#r?E1Od7ON@?% z(#FZfrA?i@g@qi>FJU2|WaihG4J)_@JGrbewIv^ZU-0LqQteVrTbD}jpa%P+ar5Hy z$xYK=OU9Fb^e6u89$xlc{>Areg=g~T5o1%xcpumOaM7x##L5O~106sZ6~B&zi>DQF&bx+yO)6pA}_YJ!oX}WdFwH#ZCRUy{c`UsMg6L|6rhb>eaU~ zofoZpZhI@7xdvDt2E1+naAhFS5B+)RO5^k}2EbR(eau_!ZJ6$^UuXpZiGisSJ{(_L zyIS_j_nFN@FJEe@De-C(0d)e(7iz7o za;Sl#knEAejQQjqqlX(to?fDz-(|!wcChi9~&&35)A_uTu4{ zPW5(Qhuvb*9UeY7z3FM^_EbBR?^Sw)8C;1Z~Rg2LpE(zbif65F(@gOygbU znZ8(KspDU53cN%q35M@fPeC`9K72e`v&-fAo!?WUSbr~eYq;<>7wg)2HkwD4BE4o8 z3`Gkl>U4bo%Kl4wA9saAA)V*Gx?9qsZyk)jJ+CgVd`j(-Dn76l`d(ZwSy_eBqoesxFzyUIkF^dFg(fj1?Nbtmefl&&7rT705 z;`&-RfIm#!%LE~*2vCtoGOZOUx?lBMyd8{EFcU`u=Daewbj3?N6hUT!TjGW9DR$>1 z0BM1lKEQ-eht!(vF?8Wa#(9^uCjugkq~>#~WESF%zu3izOu=aXOw5i6dm4z;W65R3 z+efNIL*^vXIe?_5nvoc;b}=RSVv%e9wjhJ4q7qBTDFD~FrJ7MxI&|@pS*{QOdOki9 zcqv2kkCR|D)(t2wL9oK7#o zpMJS50WWKK!ocfj54l~bq`Wrmkck@uX1b2y9?`V4)D9wo`x?sQFHr?1`$^|;ml@S6D zVTtd3$n#RPsoKjY5rM0FOjug|CEp`HtxA=@#9s11pyk7;%^=o+8p1DcM>=q4JKf6y zBNZ<{-n%J7fzVQJ1h;-kg=$djxsyq&{!0EMNJK?R7s*o77gbA=sW zBYD$1MxJ?P}+f!LZx7q=LvM zSShwA^o2NfX%D} zSsAY`yYNOiDUk#r5GN0~5#sP zLaHtSQ~`O8GGMe85uDiFf;sr!4eqs>bpLS@JZbWLL24rwYe2Fx{p?LbvbWnS*GTE+jVcaEOdufLYuX6qEF)9 zeQHZ7c>~D^ZWh3!0wuDR-3wJ1>X1)N+;FcFeAFLo`w9lRYAEGdFjSTGwKImLf7r_E zVSHM&6D3cEVgq(>QL)y58^BjU;<6-Lw`%~p)OUFR5#Tdoa-pIN%(q(}GnUx}m`+%y z101RtBN!#hS7>o?LqVP|lb3&gpRF5^BHd)Wd6n87c->A+v<{hohEDU^B~wEFNiRjewpbjD0io!0;F>3y*yfVTFlz;I*! zBS<#`9{)=k!QIA+=>^6tXJZ`$HyQu@SudW4YmAeOh0h!7!nG4C^%HYz8h~K~C7*p#gK|lcyE^caVE@)3}No@WO8U3tUR-*WM%&2bq)69lR z(|mu;!f^TAkBvX)8)o}p;8R$nY=FPOHUVyWj+BZbLYf~@Rw9i6u@}zstZW<{*>thB z16-_8j<(`!Yer{I^FIIns|=$F%nN zw9>?s()_ye(vlhk2=RfE03a?a&26kDRI>cu#87l$Nz*`&i=YB5Z~fW33#qjW82qSQ zR3f|uKh(Y2*ZXeQEgJ4)DE;54sEZ_~SR$Z6Y7=ZmyBiBO@y)Bg(6)AX)anBUjRL_Xmbl#VAZvx7qp z@=A+R0hRtNRD{}o%Y;JP%ww6#A0?Mz{-blglPG8D!cgUzBwZz`<>F&SuI~~P)T!s+ zfCwb}xFco$)AJomvb_yAh+i71jy!1R+W9Zd!Rvc6CP|gEWcfF_V zEk1Tn-Ss`;zC_E!nJ^6H;HMi%{qIh`O2|VXid*D@+aq(?Ld96Cohfc{2ljHiLpG+4 z?r|p!^xfl6Y7Kv*sqryERE(11@Fkydq8S2N^&gZeSQ^3XgCCE*b%|zp9XdneMyZ5D zvk($V`;Zl-J2jC_`;tEM7VVsZ1HWBT5H2w51%2Z*J@`sCj7&<^o_Sd{t2-WYM zo~>c?D3&t#aKR9S7*jIi{TeT?OfrrB}=cjqj;M;a8|rNg^?TS%YB91mrEX^DtoJn6x4rf_v;AUDt&pN zrnh2{a!+P;Akp&D^?Jm(#?o`wn%UJs7pqGqr@{+oecxXFae4Rfk?gI@H@f|&cj$FH zNR{}0JcV#sVTUeVUhOaWeYyP8Tl<}w9q5Nml`Nm)lKGGECo|NG6{9G1jrTiWO$|%u z@2z`NCj=Yoqc8XFob6NQX+u<8eV{+e1G7(t{13TkzK1&lCWw{_90?)eRZNBOIGhRE z6HPwIbzcp*h3tLGbF4$&%{DAN+5{XxpZ=d!$j<}rjyVDiVMvMHFFYkZq%R^ zW59t!V~S&%_Q@ZSKk5^^=b+>CkMjQ8KLAgdV@RzMYvq6Q$v zpEQTx(_1Rt0a)NddEg6qA$!)Hq(vrDi)4CbKN}RrgY&R*Ts3AxMl2H2ErPhXzbshE z7Lbw!P#WeGK5?21`um!ZfDV9^p&Umzk#nF)|nFMvz#O&;nAL`ipL6A1mkbB?h5G8 zLGcNapfwX=%8U1}OZIr;|)vL*1OS{ZEz)f-|>qq*?YR7mb*PD4O6{s!voi5 z?TVf5W?23n+Q~>=Ikv0PL-bzY&@-2r8#|p<4d}HM)m9K=7 zpu7KUhT=sRnG)A+J?}gCU-M5G9D1(xzvnK3dZnN)K%IRp&38T+kB ztfn*iicjt!^`Kr-T_LIrJc2itwEWr7zT*qGIsMcO&v-rB1ECO(+smm>s^TNIapzE7 zmOkYED@fn?`2yf)P=7y&rT)X8IskvJYFGf-Fnar+6KvR?`V9-Oza6Ub={eYvs+yZz z|FZ~_wKq3~U@=xcJHD|Y!Gi$m<_G!~GB%cEH+~cP77}ab`(fJ(rh5wU09YQ_i6Sij z<|&%nT-X#g(1leQc+i}85FH zz9=5HLcskvIVtGp25FlxaOR9i>B5MHCUWDCd*R$7AAsFlBQGu+Mcx-iAo+f8>IM1= zZm!s@Z)(G2sD|~7v8AgoCO$PTw3Tx{7A?Q4n)_Hc`@a9D_vkOXv2p#G89mOTLfPyZ zXG3FgMdQx`ad7GO#)|dIhULodldDUPE1aXBmjk9})rwZW%uXJphHHceD_H1r?>~mR zmmm-pCKMMd6B#RHss$t2WvX9@XBJDOJkm^jq@I(9O~{ryd!B!BYs=Av>&g}GMzn~Fsu|;1sbvl8m}4RWP6Y#PV-@s>tE##aAzV zi{F(|O6SZYk9~a$S)FNauNX?b6x1)v!Ci`-@)Emjif|(G)YD*GlE$;QDIb2x5 zC8)OCwKGc2D#lu(;#+r;!sg-48h}3>eXiG{oJ3^*b6oN-4QA;386~Cb)9YVJLW!PE zloh{CH37eN@nZM5I0txteSK=z-M+i8D-+MYFaLTiD|&mP_}Q496%J=34gX-W zA-)-)`TS8)H&Qq<=aC73k5&4|o=R{ySD2d!`skC;F&Y=z1@APGm|~~UbP{m#AJXUW zxm2C>$^;5YHBBc9I>d@*liFlU{ zDu@f}nqu_oS|z69bvaByVPJZu`dzrn4iM+?V78_?P@jZU&>&yVX6HR9t{w4vPzICz zr`(Yu8tl3Jh3~v-4FWi?ozEu|r}CLdVeHe|bZ_>Z_60Y`?cijzlm?~;7i?ra{ z^G3t9jjTMX^;TzO=6Z%P7Zu`t44qo+>0526tZz_*0Xjt&4XH>Tm0~LTV)zbUE|Wd@ z<{~~)(ashP+n~#-e(`K7!W6lssfE6y2QRcpn0ujdat_3`d&(t@iwa84)MhUIlKabD zP9w83_goxs;i+EEI6x!~zQVvHxM`7iWks?`Xw4uTps*iFZ$+JoKh=U$J!^dB-K&3o-p+i6n zvlqbd=copA=~UqmAI{!nQMv7`VvuMtm@1~|g?OYo8`KLO6WEF8Qo;fPUu+*k7G8xa z=4@_L%p)}Z5t;r$$Y1C7Joo3Q*ms2u!=KXK!y~8=wpWQPMksUbIbvt zJVf9^3wT-YF6sc7E1bIP?rSwMaqJhQt``N@y~N~BWQ3s$3Q_W1RKj-}Xp5x?JfJ43 zgp;@gnXjl;=3^i0bDrrmzqxr)?WBY>OLfttXTPt|X{KVhsqzu;!S&q6-a?P*EUynyPd?!7>fB5_->+=ng`9|N&^U+aEAie9G z(a-fQ>-*7kU^i>~J}v`cgGX!-e$UVwIm8O*Q9P`;76w=fR$e!-JFTT)10m@w+NpT@ zzDvvlhrsH)w?%Stg$e;7vTmB@a!!4elMs^Buk2izMtqgj3$dY89wuu0qR7i|%YiJ( zl>)JB_eFm^fMg9|ETW6-@-2_kM0?PCebt~?oKBMcN->46xYbDq5MPVWbJ`85H>nLh zs~;?to|tsZn6j0%2=UzYve@P4UuDLBG#Hn9w(@&w8MoKe{))&*q~8B_Tmsuu-ET!f z+bmUp6-j-Yx>{9mxb(jqmpu3ot+%05b=bK0%8eeF2fkXv)^&c@shd*Orm?sT}dFp_FVbeGN{Ha`AWK2$$ zPjiYUCn^?ZN@f>eZYTU{U%W62^Z7v}H%vCHpPsH?S^}{`xeGG@H>!SS0TL9>U0kgH zGFCtJt#bNX`M1fU@vp^G-(YxVN<(A)!fZlQBR7QP5f*OvKHWSqS@M0dbZt3jcDiM8 z@x|Io%glG{Gp+z=Ue95rKOGaHAluisn7Cu$bf zq;{zD5)_2x2~t|xSZNW{vuE>WIZx-;gEP`27*8KnS4A-!vY$7E)m9hOH+C;A4X>@{ zjE|MB&GpRBF_&lP!vkq=`W|<+R*bSsK9A>q95uV(p`fLADkO|whJYXtd^1u565=F` z_F6bNh|0>kg}^&M=4c5?P0OP~LXzs1Rv{VmoS#384w8+I9MUG+l}&$Uu!oNZ1=@IA zwsZGr`ux?-*5Rz4J4JOUn?icsFNL z5RK&(liq&7L{rZ|-PF3|_lBCKx!P_65fwFIWmS=#+Ki1kX>Ei0(c!d?Hm?WKKH*_^ zGM^;0Hz&M#nbX>l)!k9TWL}7gO&xgi_}iDeH6`IywZU;QaoOpirKQxe^1$-)Yjk>2 zT~%~Nb;Pr}q{@=wuC~&F56?aixnB=-yBX+m!NbPS`{~DbjMlE|fkDQrfy`c3e&4J7 z!QuR&e)pU3zu5m{U;l_HalAi)Z6d`PZdx@w=y# z)<_wvXC=dx9)Dlz{$09zneq3f?%y!af8Q~&u4Q~_jSyCM=@l=t2qSQtKgQNoxb?*E zy7anNqVmV9Cx)T2JL-KV`g1h*3|UaAz&pn2o|wZopUr-#y*mB+)ysz zJ3xpBf8uda-O_hfiq)OH#s(|XLzO2!$7D3D&aq!S*m`3}yzgqazxbURrg#$YwVIg)#S9>r|Z*FynB zk^J3aEuMFb$66XlD8<^s&AT`|SA8nPLn6Suf z0@?L~d!q06L)$ZOE|`-cX8hx+K2_h&tK5!2`?E8D$PY+DqVf9QK{v|{k0Z&lOcVHw znyQ+IsyaZpiHj|Axs>}d3GUxP7u14QeYcXybj0tjtWtGoJu7r#VFPcfw((*59y3p+ z#A3mC%_$n8M-K+#_v!*%taEG*(t8LPzgwW*tL!>K6q^|V{iK_O4CxF1SJ9yhsqY3)k9a2CUhpu-WS zh6XcCK`EWd#PMn{!x5>st(e@N0B9mBjKM417ioER=7p;1=GQRpX(I+xUyf0E7nqv1 zDVKOQRN(o{&!IB1-1HnHn|v}t`)O%h)Q3(;sXh6d6Aw9u8vH+4SDfXfr&Nr&;d$zZj-;8`8|^H1vI--S-!94 zWL;T=Ix&==#~j|!2M{nz1z#%PXaPAI_uE$b|#SSPe!Nl7C#0geZ%M zB7Y)AXlhRza!tRX$1mKz>NFpl@V}S#ZYW%7uhh$%u`_9wy2vP#7t+^y~&>VmB@3c-5$|d#<&!>SY%c$3)nH@j#Ho z<`MS*#3pcDQbr_z$Ag4(V;~*q7V zCEntBys+h9gq2FYBN%t$&A7?@9h1?766H0??~^>2Vr*quK^Xgu8RA1-Er3+~UFpTO zLy8z26EcN6_^J270-WWX_giC#ZsC!Y`e;y*i!8sFk-RLgn7CS~w2bY)cc;fC+{Uu& z>u~=anpvJ}Ky6My!qh>iE1_ZyFvvH1G(mK17@7;wS9lX3;<69f|>gPs- z^KaJfe>rQJl(KKJ$o`De+l-1e`g`GmAgPfLl1~!oF@$NnZM+S2XGO`}OO1!OxE&B* zvG+6FlcNh$Su+{c5s(yx@I-vKN{gPURB9>Wtdcuse_}W625Vu$SwP0+77#{ zoG8oR{mg*XYTuvbCMVm$eXd8!RR>l3 zOIA-h8@y%4+**#hw(4j;<am$x z29f2j*w1&zX6YAgPnj*A>q@CFaoGFm?#QKOL#d>ig;zgbIQQ129>B16?p5}>BmTrf ztK!jmpil6xM2)LkCj+g_OP*TuYdV^|>b>-2r75%2o9`s!@z)jM@nApC=Jkw$n%rlZ zFLsby>;nSFW_4bt7XC1*@aSoYycrvMXm-O-w{2HQBWnMz@1)&DZw2HUs!(dX_AX`& zi0S}uo=dm)Tpww;fZoAe?Df+Wo@lys$J<^AM}4aVs@1ytvu${OKK+vs{4sxh>%onT zRxi2f3Z}H~(MP{3^ID~Te>h)NQUvY%hynmU3%S+ujyJNOkM+G7lyy}I^cG0|M_b?_X3-2gQQpY9Y3bJwhb8U#Oz-XQD{H@?OhOk(97>U@sW>W&o}J> zCAntgm1#l$swAiObib{W)-hKTpwI!L{_b zF{pI)(h2*U%OPvJ7xluu>@nV3?bN#Q%l7@U0S84(@`CX=zzGmtBgktLf~FD(Y83>} z2z^hzdm+b-uTF%Q5Q1*#DTpqrUzs3?`pO@IG_HytzY-z6%N5ABF%FBkcYBKvv=h?M zvAyTze@|an*&lOXKTc8chlr^>4v8l?(f~YJbpMS=0}-c|e2w&oUHRgNidEzT3+x+Q zZBGf^%ukMpEI8%4rk-ExXP_eFHL_OGqvEqUU6&_K~Rpe<)MqXX_4w*ja_0ZUF z0XS!g##cnUS44kWi#~#~`=qBjY7z5gO?9j*`YR^p^Lx8PxiJYs57`qjA2AQ-lVegs z9;&0Vma9rCys;5?cXlb8hhystqqwWdyrh~g0$7mTh ztn8Q6yOH;52JZdv4V8gJwOzsUwW8dNSdHP>o$Ikgi8w9&I3340-GDf~t&}(ei8yk3 zEXn_lQ)aNKe!RJ3{DFXYiYhiy)2y z7K*@axcyi%0zov?BLhdN=1{|2m5@Z2&WDo)4@0oxw3lyS8@X{ggLEz{0eK>~F?Uh_d!AL9z;T!^p zF#uV{{@dCBFA3v42r3eS6zCBMa*p5DMbU0e6wGuHXCdyJ$?EMD zvt$ zZWwdHg09mGZs8z`5|wHtM;Lo1Ob6uIc~~!AJ}*#<1s!4|4e{EdY~WHP#d#~K;$9vg z2V-g$cu5raKNG;xARHSI#v!h;0lG?Jrc-f z0O;@+D-w}4hLE-?h{vIkR0JQu^`M>$i$`w5HM#?~Yn#V@Jpcq40FDkKNLY#)P?U{` zfBOta-m8amYDH8Y&ITrhQNkQZ3a=B8h7_bC1xW-W1}f7BA&Em#SF5Z?+m8HdBTKj2 z7`59ux7!D`JEXTeHMTpCw!8dlr$~3W8g;licbp6A@JR2t*x2DY+HvJqhnIAxw^65$ zbEjWWr+<29U}I;{Xy@%;omA^r-2|A@DP5m#Dm2o@T@lSdIj)=31~71>RyM`nJ5eyLNJk{w%psOxap$0E)xVV z&Pl1CTc3eAuc)iV)kD(|E5Wg2fpA4L*HojT}BuQ4w z!xe-xNM4o_A0D-L08qsp*+zPDa0SxM!tey;xq1PDi~}eJYE50CY?=$r0Cb7l>#y$^ zlsbXn^gSjaHCad`8-RD7ZSW`&7P`BciD84@M3x8uFA>4yKR^m#es59w(vQ?6@to0C zI734x16b*dicImhlh=1B6G3IzQzt;7m}h5%4&6}@!QfCt-Xjl9071MqhE+Roap${e z++&_a)mym*FD^@i;D7Y}c!3A7J$n3advs%CvwUV2zJOrNa7t%qTP7!qIkOdu@X!%w zVe?PL!feCDw`;kFcAkpat|ym!OkhXC)77L_ilEvV(MGn@-l3j)=e+K z`$n~6UwGiR`fuY6lixsI!Q$!hZ=1hzXQyFE3?wAPD=hMIW+txXdCB-#!?($n$#3yZ zjji7&TgJzG7MFsuvMSaVtCly+>}*>W<}6*$7JnS!5s^x5Z_Q|W(Z9alwzO0^Hp(j@ zEuyIS5$+xCH4e|pt{5GW*3gpG)RI!yICklhh?;tKPjB|4@OWRdx|40qfq>9LR?y*>f2QI`l6JAYVO=PqlbkSlYBbbkCfOZBqNKGl4%?r z-A>wnOaD&}dG6ez2RVZMuJ_so9Q$hwS|WsVS+3_O{tS*9?z4 z*n3@*R8}Tma^sWOrsrVqS^1aay31Ea<4Vn)QO^Jee~7%q%e|a-|16Ct0UGI&hMd6wDb)s7k*$BN-6& zQZef_H^1QjwWjI6*`svIe?NsN&-&XQZ4?JcoiTg@lK(n|_%D6G!=e0F z|CKc_`iN&190LT=%KO#4CT;S_8ETg;MK2B%9nE!Vhwag!($m%9D+Z#Tj^*bYQmZ2q zcMR7!elCk{&@JlA=e_%HGtXv%Vm`n>_UI;(q(}Pth|dpxc`a0U=2`pFr{22%1~NpS zI(slQHd;>oy*$uN9jTQwsx7@qy85~C#?L=ZBQ>0_jiFMf`GeLuW2{HQC;k}KT_1l{ zeDuX@BZHqaZ!>MTI_H`U*5d-w!6sLA+78G>|K2OKrNOYUtv0X%-KL z1n$x~5DXyLYBP*Bu}c~SC`BTZM@YmRgtVpAXR8M6Z%#)b-0;EGqkez&{leAfYT;GM zxw?tG;<@^nXK>$-)1f}!xIA=ezG>}y@%-~&tJCu@04@y<6S>V3#(i%u;k01)%y3$9 z2Q?PjL{4}vw2PlFxmJCKXW*I{f>8CfQ}%}EWQWR0A9gAa54_ThsO_!D)ynr=GKUhy z@l^f!lFA-^M5!xFUf64?4_Ds31c6#RsQuOr=}fMJ5oBr)awuwfh#QQczM}}duY6q% z)_P*Z)7Pq~r{{ZDMiAhG?EY>sFR6a6fmftYhRR!v2S`1BmfxopZW=J^wT%iO9wn1Z z1o4VA5Jkhw2g|{$EG7c(VRUXuOava}w!J6RDV6KSbY(5HA$~Fp z+Ky++XCX!CR1>NFczOtu%Z(E%aFkAMRn~j^Zes+K+(N}FF*xc7p*E5!D5}Q+(fnT5 z0IqZk3Uz{4Lq3@Ik31Vd*R&h_9zwaXOt9C}*-UVBnmNeB1{^U|2#Xg)NK>$@+|A&2 zPBZtf8=+wO%w7`K8`N8)Ua& zgu0LzYi6YO<1t=&4@dw*1-Ti)7(0t_z`_f`<4NCpf(hfHNiUKgMbRXLnTT@~0>vE< zs$op{kJwS?cW^Eu#8ZI-$Ef4O;YdRv+HZ1z_J%Y-`liqaVwm7I3ks$!>N}~!P6{I9 zc}tuDZ3$e6l!a~T3GGy1Rjks154id{{`-fEh`dJku8hg}bD!d?mH8xM%olp|_x}9* zCVA<}Kc^6^5Xoga=5T@OwwJ7MgXK&dd!;l}17E>g5J9PB#o*l5+uI-piy;$*tzq-Iksi-sR zgKeg=XrU#anr-gJK;9A2qJz~Jj~7ZFFR>rYKeoF z4A<6@bGxjDU+H$aQ*4+i5P;km4R=pm@jP$a;51mVT3r@h`sSCDL*v$mXXi^_?eO$f zANkm_dcJbDxPqVhqz?_CMJ?<{kU6h>{{k6CmtD{0{W$4VQ~y4<%mry`RYzwAg0%=G)T8uPAc;?~okuU4nmKHPZz)7NQaRZ4gD`H3dgm#0&t6=Fl| z;QLU@vFianl+UZH&3xg+D>tScav!~F7JN+%cWj`SyRRNRoklfTK8r(<=vM^Gwy~B!>rrS$`6~mhDOn$i`okPrd8B--;;nS>s&22an4)&)yV1A z)&ANh>d5`gkK=py$oBuPMlnV{F1)@`drAAM*SpP6ywsYy_1~9$M>a3a^4C89eAp}S zsnnM>-5ZTkbMyDOjK-j(8_ipM*X~*ceV!;=Yu+`t5M?{c2DaX;wVB;+;E7_sk_)s( zU}+S~rAv)$ZRVxDRfU3UoguoPlZexyR5gwfz=u1A*Oc@Ls_se_lLqtA*#Iux_Q2sc zCzAE*_wz>j5p!SFGp&87+-p4ct^(p#H+Lr^^JFL*?$m<_QZNF~p50PAb}(Z%q4CG9 z2P2COY_6kgEmD6t5l0)xw!K;FF#NMXd)PR>{pkA3lYbVI-~7r!R1LxWn$pXn+mHDc zt)CHPUI?}ux(ALwX?!GdE@X#s88(0UY~H1BjHagjJxXYENF==XqOXB}j8rQGxN)4{ExboxCUnF{qz01`I%NL-^J z0I!3gqG*P~;--L>%K5bm?R^>+Bz|!Upv=KwSP(xO4FQlOjf?0W$Q`S!AG_T#R;4ahZ8%nSJywG|Zl^?? zj((i3Dr}EB#_0#d84Sl6t;ZQk#5c9sh;w{xlYA(#j*s)>m9i8}z6Ox%;$=Dlj!7h7 z7vqnsChRava6F{TtEKa0Tp4YnVA3CXYBGV=o^UE4;bKaHXF#G;N}|_rysoJYg!k>( z4T%#8q$}TDUVh4($`ZG?x*CXq$tPU6vz7_JH(ajK`_=TvdVXA~wZm!q zek3harY$Jw)jOtl|43?+NUy(;)?JtW!!GSrq5R6%q?!v-&Fg99{^@THrLXj7jC5xZ zv*n*{m8XqLqz`dt{7}uPJCyOJFrzg0>TtPh6(U*&~cKPLI#;4PMKnXnc}ILlJ%L=A2MY(GVzjGgrZD2 z3Lpkt57orUWo9vkvUaMSPe11&s-Lanl&u?>t(Tf@P@iq|A$#vecKc$MsX@+tdH1Nk zi{`00mLIlNbYxj=&&$fZc;xf`?Pi`$SD~LRFxSlWlNTg8I+AXm3Y#*ZZrKIDc zK?yu z5elG48h)!oPyw_E5eXN4bz>njbCMYeiezJQsGu4Nl=eby#}gnTMvwLo zdm)M3qoeGFvVD($L2u0*ZfQ0m47i2H?cZZ*g9NJ8Vi9(fg9%}vJQD$VL9HAgUd3k! zRRWR)bye;W!ox4IrkV|OLtG{_0)~b(v#aUx;oVv~B;*AdFoEZIR3a%9p3dtc19I@h zHl=o>Aldr|U`z$>u)!zekO&QGQiL=~;9d+*S@FZK2}a^9Ld_$R6Y1QYoKB_sd)3h8h`{DWA=5vnJ zi$%j1%O_u~-h8pf`=Vs&*hi02F*lo5kJ1k+?lKOQMUk~i$B(`9D8&SkQK6S&)Q!Y1YzB2PqXpX75lA*shgxBMpmq=kCOy?&S3D)W+`g(eB5;y6Mi{Ti4|D zG;?k2FDVc~91#=)z|zK-Po;axjCxA2AkGVXHu|z2+fz5%)8O1wGt*P0(Np=W=V=tY z-qPEY-dl?8?P~0K71UcC)gwlK*(Tjn-TQK=@l~@CSUdBoU-~uM==Epk*JGZq$Aex^ zrN5qudOg?pdVcgZ#|Zpn{bu=>x8k*&5R=?vAKv_#IiHvQ0y1VHPqEOqSeOhJPZJB< z#7f?HgOlk~HxbuV>l2%ObJ@UE;MOG)15v!thnIOvFn+6e>a8;0Ti7Qp3n;`m;fUlD zUxquhjQe%APW9{F>eq|zaJNMe54!Tu?sC(D-kp?N?t66L)PTj|0n1whRv81h20sR$xBgTOYzj<}MG0{C{UJ_Z{qvY`%WW8p8qmr!;>TmyovYd0<@9IlziF9*#dX zoOo+EIb%4rX*m7k@MD?Vx*<-F27?IN@A%TJy1iR#kK?t?v`U(qEQKDg1vWRY#K`t* zZ;0b>Z0MX=Bh0Lvd7gh_p-US>M;@Vp7C1zAe*Bq!T|(&YjR*xY1v;$&S~Ec%eGi6XST4I(q3fN#-irU(({m%4t) z7J$PLHa`a?M~8TE5R(FkGP#t!fE{5NG!bP%Mp}eKOQFV4cnE+g{&)RWN;bIl@d47>l!Vp@Ub)0e&_J-*d^b0ZDkd0FP>- zfeJR?I`!~6_=xfrq@MzCWBi-_cEE)MYT&%M*bp}fYX{){zbZm?9!Do+@V+}Cq6*Tl zlB8#M;G_tNdlgbbV4U@aZ4USY zGyE91xX0g#hZkV(5Z5-;wgI96v*9NBr3ydLxSU} z9cI+9gMbZwh>HU3!7%aV2lMB7jvIluyw>n+$LMDl6!XeudHylr^UqkY`QO}o6Y~F* zGa=CZv3m74?yg;1hXTRSOwY$(zux}Xfw(tBzd;zhb^S}{$_fO%A>v)PyzqW!r*8gz z%j$ab(tOeSYU|uw(dtU=`*#ri203{l#69wL0}X(k>t71{dJ{SyQ-_D)JbX1<>rhZw z$I6mAH3>oQiuuLDsgdZq8W@H{<=C;>`Q`p~X2r^U;qdUikiw#jj*i5d z+Wekpt>1Sl=Vtp>J`H`_sasp9eLGz<`nq#zzGZ8x_5Is}y81^?8uQA^95gtw7-e@@ziB!*@Fl3mK;ud#3g#fkZ&f&Uk(khBL-X#jkpvOT>7l*l+o#%3**)Z6mcQzb74iv|a%y+g)UmXz8?^5goVCmj(_=?PCd z^BbR}RX#GgaPG9TLvlmY{|HO}2luA@TgS@iZ|-fiNWiwo{!;<8SIh4&VLa|~h7~J= z5QOAl6NWf3{uPK1{udW#?>}R~UloE-9D=eMMz68ZQ-Q(?6X^IsxXTdCy6+PQ?)b;b937w(HM+R-F9+#irk}wQwv$_38H5@ID!M9U_ zgRpGdG^`+r_-`GnzkBZQF18W@poC>maq}qN6)DJ-_O1Kxo_p@;$1Pu1CTg$!@$zx2 z_X3Nk$1a=s8yy%5ji&s1`Q-7=cjo)P+&{93ONeJO0UCHB@fKnOsqh!~_J#+Tze9=w z3IGg{RQN57ca^$_#8S?pB%q5aoW)*Y_P2|Z0wOuEM8qNR2r&}(92)Q$-8upZPeD38 zTK%_+Q)VjSax^Ri4Gs9n9nA$4xkLaDq{43nkdwUg?~WBT;B#+jK9vxrxRCaz0?4)a zzY61jD}es&xd(iM27I6j(Slo$U`C;PnA}vs{Uz0s#R55(bA<)ubAD0}IAp(P7G>Rh z;S5rOw#%Zpx5F}S9S3nF1UEo==k_aocWS9(kd;7mflZvppMi1A=tLzJj{`0O8stk+ z!Wdfc1={fPDjrtajmJt~_aLHJ$XNX0%Q(Uw@SrI@h)V>+Xh(6Ce!q5PDrI@P_LU$F z#>tyxp^v!Yx=1`id_!eFC(-7iFUS*v16qI(dI(}axt+vySzr)oTT8({54O_B;*sL~ z?Qm`#mFnAwg<}NRKHlqD`}nyKQhM;Cg;^pX|7&+D3V|b&4ssFa0e0cSMZ6e?zBvgH z=9e%-@`w{VUya&0KI0W}7IqxSx_PWaoW~0=dc~sQK?;LwFhT(yQ=&RtJi=V3w@0Pg z5aD$S%LyO{WA2uS0lUlr6bzkr8_ole1Yuk;2S^i=ZxnQp_t`yAEJDz~c?rk)7Vk0F zs|3-*qL7z_w`6MumgkMZk@)uFh*iBuT}dFP1RlFKnt4Kr4)^!)&}Zo&nisE*i|7 z7}~(8zHIl?7lYnAQT8i<8N}fOgh(b)zus3qFJ;9Y!a-ByJ=c4J4ieqe3-UM&t{Dz3 zbHCfoFOuR+E)P3wn$Mfs-6f~F7HJ-n&tLM}#km$`)1NQc*!^su-&!<*qd@qo01&(8 z8WZVmiC~+RR##%PQT3#g-?)~x&6Hxr6?i3($<&LLrPw{11(@$mC9fBqt-DB&W#)_6 z8y?;>rfNWVgdWK;&*;I!F1}KtE@>SatZKGBBlj^WLo7aA12iHcD_n>c3G3>alP10# z2_Ppq^hi^G(LV28NcB>IcxSM+V3NGUwPG> z&6?@|a00%3hA7HUfsKARE|4)8`0h^LwyCQ=yQW2irdJmK1l#$zo|EZ58wFTM0dzz+ z@nOtHp@LbN$puTkkff1hTx^-?Rg>2lQyaw^17)YZdtYlDC@fO7Mw>sF8VcnYEj18u zx8(D*Dmorndd9%rDqGa5c%OijS^ctAy{&b{rLWivUzg84o3f?_3Q#95l-Z8=jy3ol zs=WDoz-M_#&?5ZL0UraW@uk&2J63wz+wrsLZ?p(A6`QMWi8uE#{(ZpbUll-o7xp;w zQ)5)S&r6yM!jk6e8{I3fJ3`so-IkPw#sSqEH?-^~mKz$LWPiL7+-LWO&Aaib#HVYC z(Qn?1Ha2zryy4~FYX9N1P}6AW&3i?y7ne29H@lDq;c7IXHb*U4J7Vl!d*7vRvty5+ zgnss%pSIn8*ZbtB@27yTb`HPZjX&Mm`za9l#sRiFP6uCpA_~|OP z@%VxmPLho?TI#hrpo0BHi_kNj<;iU7QaD~6b+#Yk-c8SNfz>gWP2Y=5H$B&QQXO~4 zewLdmbO=s_DaG;unj0HttL$KWUm6iD3F(-ZWp6uqJePmOs$i+WNQ$r=NL%c^WV*l`=up%~buw&+EBj}Tp$ZQW= zhPfyoWzjlL_G^G?Fn~rBz>Tmv4_e4bp0p0Wt7s|KSqw?F)NrVI>~4T(J;+KSB7!6E zT&6&ru@O36Ler0YDo=6h%Om zF=v2st|9Zd2n@e}!jQ6!=YA%lU=|5Ky`kj?jUc(SAcdwN*-}wCVfWg+ zAjt`mgilb}S`ehDCm`7MEgTQ)Tb#Ee4pOP4!BH_n|}7 zHbX2lLbaPjEh9qDbO+m_LmU*`9VbGiOYz#+Q^sFG6Ja;&?jW^Iw;Qg(`-R_D7sM<7tJza^Ao?_O(y!b>~=%(AYgX zv2W0ElM}Ji8ga9mvE#yVORjM%5pi!z<34xCtu4mAGm4!zdidS-;bg?aozjO#EziBS z34mBP;sP1vOGc-Yi@(QkOp?`fYzAh?yhq~|cw+f|ZiC*y;W5|Sbb(u!7a z3rxpV3@Zk%MF1B%`M4PgIA37DV&VaadtZRKw{fDTZ=zQEZ|;3uBuV>d65cpT_d=49 zZ<2{yl4*L9S##29kz|}3D8+=HPYXR48<3z?xUMwv{m)qN(Ue*q-(H#HHW$S6cmOt< zjPrqmoO64sl8-c=OZDA?VaDav|Ns(b1<-O|V!vBmZbd;f0K1C>DGnDi@~2LI<*EjCHZTfh+6#>qY(6g= z7e?mJ_pzX7{xPgj<)kao;0IIG)i8%;RKwC|41cxrvB^f(UnL`H@befh9tuo~08TZE zlvKk_Jpnu+PkxUqZfI?#sieHM<)nQdZ zpxrLCYr_CAgWw4ORSy92G!9C>k9Ke=f}mXpx*Q}UPS9BtF@TSi)ZsOM;0+TRDysf9njm-A9^DorPKvwB z$-LZraWoFWja6(I!47rsHCW+4E>r$vESOzP6*-mdr%!ogD9Lgy=kU51Z9HdJq=t9U z|LsyPa!y0e7&)Jw8*k+~AJ3}DUJLA+>#*sHv*MAZ)w<4Gf5w7W0>ti#3V4C1zKO8m zb@Fw?Pfxp@5vw=Xs<*VOxALz)msxMqT5qWpe7Cfo&{yvy*5Itw;9}Ph7NP_*zvO-a z!%ho(ccjiUQ|#Pg=pFyYmNh{b6D&mlVMS0L6HhXV2x$$!=h_tN-xReHUP)?-Yi)X% z*_0sG{QawAc6B<74oI0d!Or9ohf1#4*|4F#$#5a~;Y>GT^BAfP511 zi*c?$yQpLvaLe(Y`0p>qaKkiU*;;VVboo^Ho~}Gn|9Gx|CUBO#r;CMh(m$Z%MGh>Z z)1dRDas_$FQ)bP#R-{!LbCj~57i^vW_gL^CZ=QCWtKG4B9hI)>#%EF!ok#}QJd8kl zsIQ(4el(jLGFvOP@hmG<8gI^u!oqoR>~+ayY$LW*5Gz*fzf6Mh0B{xzScT#5+a1-z z4+Y#Q`ZQY?6qP|-XKlV`FQ3<9d=uyJTAlFYvP9>GgTHLJkVto*h@Vb9eLfv9=dv59T04wgS?4uMe<6HgNMSf;N+@?2o5lz14>!2O!FhsgL|a$Ll^nr zLDxk$WdP$Qy!#zMm-%Qw{x~B^8lteC0|1|l|8#jrjPoH;O+j^i!D&$?mo2`h;Yvq5 zPrXQxYP3>PpSv7)STDHHUqDnvchkG`R z4{nwFm4D3HNtY25qa3zO(Ec*D(41>p;U~M2TYV!zOO0Zh@1qp}KIW|b>{l}uQJzv{eq+j z5FV{rU$0&JII_M@g$B);A6wVgAu9Se51o78x;zh{kr4NUAnEMRPV@RFh>F%OFQ7qq z;p)oApTAn>=V9zT&7amG?wQ`!_S>K^zf7H<19=5rd|87Wn|)u_I~JCvzHUH9gtyx} zY+St6U$>}lrV9G|;u>m;=I4U)ihVOPht@wOx3yL-EZ1#*znPK9!N+sf$%)!GP&@Ok z;Pvo9T@$awq(`4O4;!1r(>pKw`d^NUx)PNb-P$UBP)$HyhC@^&I47@gd0x-jKA^C` z%+aA?>0RBsHv(c3y`Mg6nOY=P(ggNMw@$yQf6L$y!$wwD)eMg$P%E=XhQ(A4q;+&= z_4edj>>IJ1zF6O+&wuG(_`rqX7L=Cc z#i?0)`(Cxze~oqvF=>VXSxF6TY3TDW+)dfmT~@$d>U#4j%4enjM6MU^Z5!RNz5 zY=iEbUUySBH$P}D;AnWm>5SV|ldHFM?HuI} z>@&RLV&!lpFeyECW-NPbGHZP)Yh^aM|9R?*zSP0Ktbw75;g`ijFKfmpY6phOUp&iM zV;1%eR=wzne%2LPRTW!R8&=!kNJ;X@%Z*7dh-_$$ZmP>_tHa95{g05)fBhx@S1PLE z!Fc{pF?uY(dr#Kq_lzbaOOS0=oA3YAJQb;iH_HT7((qUcbXhtXFKO26Rd%+>JoDsz zrFx}N>e*V`(WpPoQ_WF7H4m#y*1Eh-$@bGBf_#FQDK7#!m;}PnDj52C0EEQoFiDjr zNQ@rBBX+vqr~2|UvY26@3iQYN5)ayq#rW2Kcu6_Rf-(gF7~(ejOVw^&Ah_+szt}(D z4g4ua_hmOKY|#iu`XCYiw14iZ5{SemQMTd7T7*aIOMlOr2Yg=U;MlaP?9luJ&fedb zdj?u4dK(~uExpV~MeK4NeL2hagm1R1Fz(5$%>6xTHx zM2H2t&PFPjya0eP9WpOsZ!ttg)tASd{zZ)b_d?O{S#!CvxdhY0OLK|lC;t|s{~uH| z$j~O;^`sHq;aXtoLMCh<>OaD$4MQfGHZFM3~d^1v6p zy+WK}q0NrEJCx}v(X&zf(?Gzjix?1%xDK5(rTKT-VQ77dql1Jnh6FHYL{zfX^ucxn z<`|8=ksHwc1RrsA`iPU)07&5IafT3wWRe}MmW8%mnZqLN@q&XD4gGIIDU^hO68vj) z2SApDM+W#{@dz#)A++Gpc6RK4dB&b8iVjq)?;{G z7A{$cFY`9-^#<_(H^%4kz&Av8G;+*M}-eEvxrin8cg~)hFpzzJNfE@ z5<+XkgD%I#oX7L$70=KyEiSlnNbxk(4riU%#gX13z3KXwZl=T*180vB8UfFK>KieZ z03hsf?-2Q&Xn27!!9iVtJ!Rs1;Nv4n6{jvN$|y{~Uwm zTjO?mK!!j|6#i0`9{|s-;`JcGc`72rkvI23ZhH16>mqXF@dI1sTCfQs8VjIS`1=Dj zJ4XP7lZ4>Xyk$sDTmhSr9Q}>b2{nf9FF^tPK8^DIRZ?#<&S|6x+-8RUxlm-(DLTar z)9BCR^6u`G+-8R3Ir1^P;lCG()*_4`D!TH%gl*rN8NX+Kx!h(K&Va|)s$w>k*IWve zRRC@TPt@0y?xl0k0f!MXyUBZ@ns}a5*F=d3UIdYaPExoYP>?cpp2PuSd8?){;8)?I z^H4(VCoA4=O2bI^cv&n;0e^4oEYb0HuRBRUPwq%h&uPE)L<&cdf}wG*WyX3^scDhY z`3t?LkP9*5Ok=~KSy8rZbBiFwG{7tJMf+kxYV_7#2fy@FPXN9H9pdM3u}Ax_e5y(B zb}m*c*y_J(nHY_r7w<3H!Vi1gPJOWCl9^!K?_pA#HF|8}Fg5bDr{>x0XU-qA@{S5W zruABvl^FwUnB6+Ip5^~G4eYA-;8`k6SU-1X4q)TJlAL_4T(PR>jQHe+6B0HGWz5Qq zt)qsMTk48%SISHsG+(C;ZxkOMa5M9cI-9dxSAy3r1NA*Xq>Yz$P1fEsDUcXlQ$Rj0 z=C^rjwA}VRdx((Z}nz?55v+JJ;Ae|MBMe9lIG+YE$RkkGGTU?B5)2 zZ0?uX=VhH~zsyC|jnHkkIL`-|N4Q&EL0aB5rDU&{WA%~jk9-WQ;e{|FT!=ZIF|s1_ zgjNpR(E$xk8T_#=8L{tpBpt;I5I=uQHB`0-1aSyJIC7DGLUdZ>qB?mKziAkFfe7xi zFO<8P)~V<2B%{+NW0)P^rEt1B>U{sKVC&{HTwHa`RnzyP)0@vVURK9>_rI6i5jG1L zj&{3AlS2t3LD>lLToj%}yn?j=Xj2dKE<3QruvuL0WHq$V0-KP9n~ckzmLSC?HHnW1+iyDTytl7eK_&Qvu72qfosQc!!6o zybN7-4Vx0v?;!{cEZ0%yNv^;d)(P9qQF>%OJc9nzPRM55pG4=wFo8=y7*qGULw7Yp zSLbnz5f&o=)_~8))KvzZp}-NY%;Vq>(q;V~r$&F77NKJdHi0IxB*$38V^abP+z2^{ zAqKICI~t6pf4`;M72+Jj4pVMAg(hqWp%Ho`et?+rYJ+p={%}A>n6xO23({hh>y6mu z#TROS64#ZYy9c=ANk}})KAGkD5GUWhM;y7v=_kDuQfppj>b>=UQerK}&lvn}FPi`3 zk$PqC`?ZwQU(4U@MBXx21sc)iXO&)4#qoy?Xq~y1B!yh|o&rG~pH#@?^6l(_~9DA2drx}SV&eD(8_|LzWh`|0lHi!;C0Gk1S1o_V@G z{_5AahkwBC8Yl?|?}6GIyT7EtD4oL3JU@1zfs{qewm0U7ydTPkh)yH2H4!-`h+LaQ zj4+9J!eL&3DCk2H_OW=@&Wp4-FGz$5Ff61sf@E!ib7g_H72?goD*I zg4NN%3S?21_KQdotaDi6axid0IHZ#|L`pY=6(54P36ZiS7*B-gE{2$-g%}El8g+*l zZHAmL4LOSrHFFKMvI)`K47E%Py{Hgo;~F-pA9i9f)V@jRMro*fQ-~`%#Bnps&M2fp zS3_>lCXycz$ASfFhZ9Mh*4&L_GdExNubx~V(5 zWg?os8QrlM-6b6JOe5xbT1>~B$u|MxA|b#7Ao<<~6AC2+@dR#-!;tm)js?6dm8h%^ z2ml244dQL}<1sA2&u>H*btk^fIHvH!b&ZD`HV?n~JlsrsxZU*d$Hc>5n-8sEc3+Cb z)8+j!dgM=wcm2RUV3*vDAYtywli}lvm6j(W+vUD`c?O<$W}&Ix*f7)2ladlS?G)mj zsfNJK3b7Ke27&R{XT8~p;QcSqwI9b%L5J)Hfml4qX)ZA%2dkQed7r<>oPlF-ta|~( zUcAC({B1Y@UZrzbFhFi|*a0k@wdbysF0`I;!ifP05y3~$iI)f>p!7Ebz>{I40C=CA zY}W{wHK0T~0SpEP#bRohP-P4ij0cl(>~QFGV~)ht#Eag;<&gnhJQ8Zex+#JX7$Xg` zhERm+i=_fz2nl0gd>*3gW1tBckYu1KGQb4_n}9AT3{SO96@n8`H#!0KI<_VcAdASx z#RSn<#5pEdrHcrU^rmegxy_L*c$hH-1BFc2&LR zc;O{cR&$m)8)ILag!uDko(4G}<0S+!%1B?I#PbqkLznJHpt0EasvEcf!tsPaeU<<-6Axl?=tpg9sVHKj_J~&2XjZ=Lt*COZY~HRIXsMh~ zsvPvI95JEJOqH*HFO7lHz{|W(M8%FaRWU^$ZOMzR+dldh#T%?i{ND2DhZ6B83jx&* zEBQ_ce32tSW{E|fv{(*D0hjW_g=SI!4KyLK3-;^aVN|Jj_W>ZhuuPCC>I+ijCQn{0 zESi+U{1_3cbRwQKjAu2EC3v9`t;EXbz@c4$z|BC3jS#DNt~f05eNn6BP*CEf`+$V~ z(mQ!7>k@{2H@ID$%-kz1wd$?x>d*N@WvF`F)_VKt`b#_YcCEUr%}Q{3PEeDsYi5JH zmcvCM>CO&$Z`}X^Ug^r&6ZQz~mCT0EcSIeIKywBx%1huuhGc+hQ^@y8y)gBMPwE%teFoSU;?3Zpu`)#$BG|DcGf-$Q*{$IzIOMf z1-mK*Eb;(%QP8J9m=;l?fWUE%frK$(suXxM0Fr@RJqBP&fy;X!O*UIJzaLj-0^-y* zNWJkq9qe^vpNa-zX^6btvnbI77>2^hK?V#MAi@JKm3dcL{qe6F1mWC4UJpQ&0Z*QV zlP}8=a_zPfM=tLwp2}DhlZE9^fLf z^f68>C*IAjfdP~Qm_bxvjbmOgE?|a3u?I*S1jQH#KBAZ0RS9&3$AjBI+_fWIgQ!z0 zz@tX&<;wsU1<6AICe2}eaPSxgWHCo`k?+`zAEyn%aF(#s45g!Y6!iP$9T{K>5wVxa z5}*U;qp%x!z^>3$Z6hzfrlVj4)YfZ2gAV`Ij1C#|QK-Pu zbJF!7Y|Xgon}NcIXnb~%LNYIcE!|kLt9n#QGt4_G!Bg>COEW>Mx6r<~IH0#QtGB$Z zx8hB2)sJ2phhn*7H)lk8@9lgPp+}}guJ4P1&JJ<+wRAZM?qw2%Yt+SUfEa*;l45;` z`EMeLzkdCySzW34v<5Zsp*B91x%TbXuleom*2TrjPanHhRv>q2&DwAH#`v}gAlN`w z_LjN1y1DldZ7W*;2q{Yo*VdpIBAkPF6=HW#oN;CTcSvz{C84b~tA79@Y%LJJn_p(- z;DrkO)zfd-K=_-jt&GQQrjCyEl{pBwJ!h^_=jY+PdR}^+@^5bm8pV^2wotx_SUF`_#A1;^9Ht>(@D^$Ib6%V%l0O z28Ju={pi!qNCm7W9xUeX&alppVpv&p!%89vWE{I(AF`q zvNyIgA7Xyevb%I6KK?;&F0Ysro1~Oye#V39>ic$+c!Y;M=AZV5|Buwpn0n3KHxqD?b@aEM8^Zf{XPZ9ZH3 zjNldL5)l$nkgwhTTErN4@+Ugpy5$@abekC9aM#Dy(b0n7YU_E+{<_!Qv}B)P@~s?7 zKvIg=!-U(Uuxsh5o-r|Aq0y=a`Wo808ioe@P8lE6Jc^Z3l02rZaOjAX>b^4$E~o8n z&vpytel6r`Ej+6 z;#w>Jm6-hx{``M|Z!S=^{5}04T*7nJ#$(PXLBUMaD&6x+PpX1lZ&FW!oN4BP3u7a` ziC0gjX_3D1Z}Z8&OgtXXYwfOH))#`+anJgvsnid*Y*_WTsnq(Bl#rxNU&DVimEPqs ziM@a^U|BNKw5X0h$ zIxGm31V6td@GOK4#Wr{8AJaRj7x6l`KsH^D2a$9?&-vG#(Yt%jK=a@ekj@lE!2?n7 zE{U|${X1^#1Bl-6{_{k%95T=V02U(u~o(J!E?!?21AAAqZga1Fmx8JLT z|1px7bAcHANA@BVN&Mw44f=mtqU6G|(>~>yB zcnZm?LF{E$Ba?&uFdOs`9v&l05+{HmhiLE!g9wD#CInhPzbgY+L}J>d4{;H~K@rG* zs*e!F0e~c@IgW)DF#&*180>nP(0&grAzI+o1-cxs2Ze}?ArOU8j>32rkjq(z$~m!m zGKfnN>QKOWG3LRn^7=YJ(b4e>z}~S{oB<+DA5TPLWN`&O(`fQNP%s1rqWRi>gu}V; z00g+ab{zq@z`e>^GzLow29(=A()k2z=p^_JQ;0Ec%7G+SK%Y+M6fuVcOZ+r69vSpX zkq+ZZ(jfviUDyuP@ltaMG>^*Krg*MPA_%{wfzf0=9k30eG&Gv7E#2nL)InJKSeinm zCg`hlI1|>+S$h)b;!%m1F1PB$NRfvC<)kpht1FhUUG z^J@kCkB`QHsM-*?+NNZ^tX^jy zFuo}eNq|GHGJwRI!@m}mpUB%ed-uDl}+zE)rII4}^4=^T#=DcF9^U`&j?iNa71<9z0_$#?`bybiDid;g+>n5Bt-`G-1O- zjx4|-B{WKySgV=Sa}I^kL4>^q5!*wi<(72BY-cb^T+OW9i5MRC1<*V0X)3RDE+p&@ zQ9wWHNUkLvus7)amE?J(*mSSbdEef1<-^Gp0Yxg8jZfK3S*Dcs{uN2gXG?CZm{$ol z?spVDo7SyTjMLk~zVjmDK};O#xS;|*)Z{2}`}Ltm>1NmcYBQ%-i%XxR4|qhq&SHpP z)$DOIyDQjhzNk{7HQjUi#>>|^U-d_{zozfLy6t&3=jX=4i6xP8k>Lm!J@SkW22ZNo zinQKcdqtJoE|2&npUs<0GxitmUB?b ztsB{zP+rzlf@`b+T(YlW03a9(ZwyjfpDxa88 z1B%?OcWp-<2fkLhKfY%7!sL8~=DF&7mCCknO(vgbSXU*QtvZWP&p);8rSdNlQ9-rY z!QxP=X!9KGTpu*O^R1p1TY3HJDJYUS^{t@^n%?U~H9F$*H%?wts2g8~fgV^84P(;C$rsaqi7}#`m_xy?w^{N7FW1zCUKhe%6oK z5!jmg{$%s+eoszMfYTKKe^2kQm@;5un{@PPT98mb1Esauj)|j%$eYfft`VD9@^0Cx zp>Ig&AS>DXe{|(=Kj=;!tSL5gecoO4|l<2KQ1QR}6)5SHB9v_!&1-%na z=Iy0Zs>1qZL3=!KEW*W@ivipFI=;uqBpGEj!U9&xzpyzuTqa6~&)^P$SdK3V;#Y_~ z6AHT-tfj#jk){O*v?8E;XD%ySmIA$pT<^d65^po|;lx?&K#*jeCxY=oU+eEGzS)wA z-R~-XUGb5DrPKbutN8V$hGxqj*#Mi!wX;a`qO{Q>HmzvIuU>fmA)a!1@PS%RdBSDV ziHjG;20*Lssyn3f0+5X62_0$qUV+e8s?A5%L;S#kNFOYxosS+jxgBP$DkXf}H57sA z%y-bzI?_FbM{O`Uto13JY(^w$X&l;717JZ7>L9F`;4v~iB1*IIj+`JuC&UuXT42HJBD^TXgBk#et4Mg_HeXr7myg_H zI69}?c@oSSE5JbjR5nl`F3taQy@j9xk_KM6cpXIe5J37Uk<%ROoD$M@LoT#kB->;i zY;j#e%5Kl=M`@Rvyn5hey+@{Fd#y6njObCp)sF?O-;u=Q zUOcKlr)ckF!17-=(D&QooE>)RrABtYKIV2|_7%^(9k<>Z;1=6>I_YiyTHw><35<2+ zr=NU;pQVdWMVl@X;w5GPRkC=i+Jhe@$~`(jX(!J*Nf`7dQZ4jF@#69r-~`5>gd)W{ z0jd~4o=z0628oGg(L;LLBf@f276Krf0vNs~ctTg0IcSz+zNX(2piVPUa2^_;<4QQ5^HbV)* zVNM!h&Ng8#K4GqDVeU;~*C)c9yQNU(pfXPMQnk4UMy=RMA-pEM=)7N8e)xS2nE>I4 zAe)Gg&G3-!aN>&ALX{ zMmSd4IBW_0hHs8}q<@2NfCw4Z?7d<0JCZ2OBk(DL3`G)Ie0fD1ESiX^7T zi#Gp`BuZ|@W1&dm(FEBG339#(3h4<-#tA2I_Me2~WoA$sDG~o-Ds4_YHko*QD-kb} zq`Q@<5hR>%V9zE1h~mI}S(V4_VjMuSVoh-~PPw|2a-%2ZT4aj5NQ$RhsuyeO9oE!{consCwq1FWyJ)DuY|FcD zIVhAj2*RRdq&Ya5C(TZ|x(iLps2Tg5GXfR$J`TA;MQ0yCZeej`5Xr=&%&$<-O3;c`bBFX;jAS5@B!&h+ z(LTw+-wx2GT^B%*0$eA6CNxcYP}cBO3Fw3Cc?=kaI|`?uppZ{e0{GG#9H9G9nTjl> zDq@s7tb-8LbE#zjx;TK93{vlEn?NBY3=3*A;8#I*3JeUP0K!oGm;$I%SOqX>OTs}m zGDr5EY-poVSsJ+Q!44lhfbn2$0Z{q`)*_sV01ZgwgT8RUSuX<;_(Qpj!&k_M;TX8h z;59Y{brz$vsYy^D3vl5%Y$<>ilO00?IVngIun$Io9Wc*(+31f2zyO-2FC>`s0IeB- z=b$7f8C3H?Jja0U_~L;h2a<%?c>qpM4A*5PtOyeU$0YLsT(U$Y`>qGL;+;trElbcW zOR_CX@heNqD9dOm%bF_7*)F@FZuqeGA zAkJvWDg#(j__!9R%ybSC@e`epgwC*vYT{Bfv0osi&_w1Q-hs;l;G?^*ZWXdIomtFD zrUC#OqheQ3vcQs4nU)j@NVlXvoLGZ*N(rEeE^*7){E^_}8jo}oOg7jat+_wij(T(g z{pi=!qxF_YfHG}6nls+v!^8WCO1LapY>q=~Fl zi)GRtN@J&Zh`~J3%23aSOUmh5#_ ztWLI)^^_kPU8`ZH)t!dQj|P}WoBZYwe52Z%BFp~?-w0w2PFf8E<2+{m^$>isu?P=w zv?Z=Jc!)K6YBhSO#wv?sD&4g*4b8i_$R2!9m`gkz%1+wM&!p zy+RKMwZjzyZ|XHjAM22{?~n`VP{`^~YU@yW)3NVI2d+XiYBRh<%!9i-aM;)4K?Eso zxO3--`N#Ais=%Eki!R?qq8Gp7k<|c!Hg+l>7>dEhcPO>zOIFmF#U_LgHOeDsEIa^G zXBIi^q;%fPz}EgjAgrp=`+yl1d4LJ>V?YN0IZl8X<8v;Pv#s#}_65?%(ANO+D3IYt zvA{LjA(Msx>h3ICG6M)?rZtd3I}ENJ25Qk*?6AO59P%-Rg@=Fwb>SFu_G_Z36Wx*n zjhY9s>Nn+4yL?F5L33doI!FNA14yd?5IqGk2bB#0aC9x;U3G5>3RI`Ln?Mkh0Ln8E z6&)}hIt)ud^?D#jDV$t14lGngItJ4yey(Pic95yY^_`QGDWYXq#P0!edT_`SL7(@~ z`yNGS0P^G`=W)o_0A)18|B)JWS!I#P4nFXHkx9RaU)UN(3H8{TW4FZ=nP}iCHsRe2< zudc29{MoU*0)b12X107;uUL9tw7Lq_tRZ!1Jp?zuY`)(3!Y?D!wy+HKp`k8y>$@51 z{QLa5S?a=KW=q?ft?kzJmEKS5cq_|-tuGUs--=e|+NR%hzJG7#=*)&>O>A!u%Fat@ zst1smvaR*9wfTzKH>@C{e)jFu*RRx`fxfkm1)c2!U)HI^uX{eOi0zf@Twy{=(Yl2t z2$kj!JdY`)3hb4n^!JLXsr!{xh{`IkvU3I&l~rzR6Z7)?Gqa+~s&ihygfJ_Qm;?^5 zd)(T(b78r5Ys1R@rj!4Dc0qo20TE?geT0BW6166|XQ2MgSi$R|w5Rms&Zi~g17URy z)XB+$iK&=+YWcIy^8VLFFJDJhR7`!{GIPED7eylRtf2lf~p%SiH--t)D*?!l|LPf%KE&ptI-MU_2Tn*3b6a9%DU0TC`~ zd2tDOS-sg2oYtKvGaseaf?L=#2NUwIQ>! z=V4Jv#)r3&rA1kF^+~nWl`V~Not;UQ711xdshvHE)aJA|V;&)qzA^E4V;>Rr zWcLlaK74qeT7ADXpBR@A*jOK!6zdru7m!2o%E|cuqnUq#OK~F{@xSR(7aGwDes6|H z{p}Fd3$&j+@KhUFxQbUZdJXi4ehii!}2ZSZq7I{22{YABurxWrL_b zcThAW7!;yvFhjDrn-WebODe20;Ad9V!g#NsX<#Fa$VWPGAJUdSKqg)LRJ51?B5d-H znUhdl9J*$%+(yuQ8es}$?8QdRA&A;Nh=&ianh?QZ)qo`c8*on-sc|fg2sgsufM#L~Mt*5$FJ%+Z-c-2JG7p% z^n`I^95(7wAQcva;T8jc zs8Q9gY%0Lx0b?mY2;mznNsvQI2SJ9hxe_fYymTZlwnLCjRz+oH!4vaMAoZ}4l zO?L%d4YR9<4$kHMm(<{Y>QXy}ho~v4hAFzQDaIl?77g~7m7NvsV1;+vJXbAawX*Nz zg4>Rr+_%IGZfnNFmnZiA!Z3n$mjM4ZwN7=Bb#jDhp|ns>_est5v*kgBvbT$j40V>{ z)A|eLjx-y=vd)~z$*$l6zRAxELDwg$~ z|Fxvtz~Q1A9(l@%tv0Rum`lOA=Za_57=X@_4xmB@V2htqgL~yD4XhG3-D@)$KZ-RT z8^82Oxs$bEDz7=j+T+mj#ex}7B5NHwaA)dl_ILZM$G<~e>cC~btYoK$heT+p?@SNE zHTeZ_-aY0QHIq^?H(VhZ-B6Sz|2djyJmLCinZ@mm0!dCcLqj&p1TL()PWY+OT`L>P&F$_cQ!jBU+q~Ewt%(|~aMq^UzGfS<=OLU^rLo;ZNheWk@EHDX zW%>V-8YD@35s$n{kAgPCZ3?{%r93%__VU-r-InKSlC`_9?2n#&>3OdL&gyt14Kzz1DHr>!gFo=e$Tnx z`9n0|JfzF`2dA~mYL@CL@6D`NxVEF8VW z44OMM*3ZW3eejZTr`4{8z)q2RSakYfD{amPVJ8x+8E?SmcP4M;q)-bsYUhtt=K+{oIR9zMeyli@mPSx{TeG?^Ks$Ix8d`;3#yR zu`=FNk^=mZ&Ywj17RiP|=86r$wElz)4a&IYy|mL9RTn~1a8K*O(%k3v;5qjy=ea}|ak-iMMF_fP`*ryBc6Oz&;vmDhJRP|_^rXYppN*#k4$Xw7-Xu- z9g-(T*xU>QUCbDi#iy@}j@m*d?l|FiBDC3%A}pTG3{YX?gn$xWq`U+5f>G5vY6Aw= zTS%Q`$E>2VA^+|Oz7RjcbjS&_C5TCW3Xa_GyRS2#-tbUGx>6#d*T8Gm@!i&|N-YU@ zsql&PLnqfNpj;W>8jZGzb@pBz)Ae8Qxk7su_4nWs*-~%&J+pgharn_+twH%--Yc7J zOGWJ~&&@}lusXlyPSCx*Dp3p?+~;;a==4FR8qWmvE^Fy*_3wz=(d_=kEXu$ou$eAL zCZ30~wFaDlBA)^=gnUb7?yrxKa*tSU4Q5BkHAg56M<^|*-?fOK7)PqgM7EJ5mHyru zl+D)E-7W(Y(UzB_aRCQPeaJ4EWV3kk#vt;h@~FcS(FZJ|eY~Q*BcjEI4pc~ly4;A~ z78F`%6yqNe?cyF|l^x^W9J3)iCZSHwb&83VK$oH&AD;MoaG5Q;2P?ONCWqDY#_=G; zBO%NIlAO53w7Br$I6R0yhXj{0%fV%=W_+-1d_s2og{6h~WaD^Nd3?Nke5!9kTz7ot zLcB0zYl83Ae3^tCs4U`u8cdbF-xAOBk7P?1Le~T0*hehxsO}&v2 z{=p(@k;MFnWC7}I^Sacz?Wu()IHdRS0m12^rjsQgMQniCqb#hX5f21M+ z(bXntRJ%0&CI&$1h$TfQB=q z$wZm{$%~sZF6cr%47YU@568v+JiRD=r6^Gee9f@3IOZ_j3CBMv}yb~RHDUta{ z#&eqeOfJ;tReD``#1CN%gkFo&jIRs*I;;hep#1|#>*q+#5;jrCDtFFC`zasnp=g;J z=nIUFR7G6adntF(%_N5pA#An-03c)ncOrC%sEtG!7`m7^Z+$pX?yI|rCL5OEphS>v zIzX)0s0y~hRV%a@1tnL8?gU|PaEdS+`?w%*J4Nw0dtDqGg9Hn^nVLsAMqhnTw`747 zDi+0ubeY=DG#D|Fu;}(8oSd)S>gzd1qBLlgDokRb*epF15o;KbE=xyI*@1Wf&CZIVEj3H!2CrJBZl28Z(*Ok(HPNjX zGbFXcEg;_;+Rx-DgHsg2jME?4I-`+_%1oE@g}GuhRx(3F>FdR+ zh%BW#m_(BihS!nXm@D$?WZLTFM(Y%Q)+x!?Q_SjBcGs)5F&ow&RzX&O2kX~_)~}Us zpqe%4%Qr+Xb?L)2-17r_Lvs$>KTm)AI7CI;%4&C`b!g+3yhhu$M*Go5$DfT(^4AU4 zX_gsUHSBE6*FSPk`?{y_^}VCl89$e|)K;SjgP9lNV_0NHdeoB}$A115T)L~$(X+O4 zc-c!KZB4hziMUkjqHyt|s#-L`Ka|TU#_0z0}^mD6=lD9@z*%Rk;@v zGCRiXt-RCoCgfW5H*^|$cCHWWG|uldz1g|pMW=bSKktP3%PuY5BNuskORh z4>43hdcYN1h1e)C52J*QqVQ@o;r&H&p)6!(j1`+iJrEGom)Ix_Tlb0pGeJFgr!icJ zB^JR4u@oRf#7YE+h|ytrE@UqNuc=rBVj#{ScnZJ~3eaQ{BsjS90`LMjy;yN{|A)0= z0ACPcyb{U%sJJjXB*cV#>6;Ewu+l6D5K&^*ungU{-!EK4^`59;tr6IyNvk*_o0+|`fMUc(0n&)$fm?^&b=xKQv1phDzrrHG6o zM^GMmE0MQ_CdMAr8u>1Zk zIQlQ{udHP06?kK=Sm@Q}3WJq=T5b}~i~~*616T6FI0f3kC0r7m)J?u`IwA7o2PDD4 zoARZ_IglJRmv;j40vinIGPb<+5_H&rRUahcde$AB4bs0hM6})FzVgU#m31=SVZD403@<`Mgq*LcazA-x%J&t|J)a} zr1Zq%&+5s^;e{Uv?vViFZwWpK%gQ6Y$%d(!&WTCh?5vfm3o@LBNFq`SYI52-o%3_o zM@Ezl^>j>3>*p6r-oLTl<5@g3BrHin%PELT%M|tZyZHNePfsB%MkM)UUb$L1{-Sc> zOU2xRPgInDLQ>c42j0iI^fvB#+ieDRTSy8@)h|Y>o(&Bze3c~2!?M!$-rgpzdph3C zAl1x{naRldhMuvh^yOAnWMi`LF#SXAL%(C>ZG9{<=UQiQz@10$Ay% zb23gB6ku>T99AN%@XEGh$D4l4i6|=XK6$F?^N+SCPo6G(tsfmi3ZU2fhgyc8mVTP6 zUtFkqJBw_X3%@LsPQ9snHBmb{-tuay@9lK!*z4`*Pi;RH_E_q-R9Le&p^Rli+tM4Dq?|4~g6p%CunYS!uXYdX4rf6RPSOO<@f!oU|f& zmA0sk`YK~YPUvX1%?8oj>N`8@SX-%EZqc*0*0!}dnwFY-wA3rGWyqiBgmNED^Z(;uO+)PMb{;|tNQF#TCxtU>C z3(v4GpRcV8EU$?wsYogG00!=Z;)H$*Io*q<(UE?BS3(q!@=W*G{T z%i_^2BCCY19K1zf>O8CU=nQ;7xS{*J#_QIxjXK|ScQ^Pwu2mep@o}^*;K^XjVe;|4 zEvN4+N_(!*-F++ihx)zHpileT_OHORDDBY}DbARk?o1??K*MMm3XO5vZ?J58-ujx{ zFaATfO9ev#r@tOQ8@7wW-_DkY!dp(Vg5BC>TeG_4{Ga>10 zEcb)n=17PDJeTe`F@Axe>At*uj}Y|Zm-3f=SC1>1`zLb2NY?1^m7apFBn=zKQ8wy%g17okuwrk#{PwV98ZuW31mevv}Q#tnf;Hr(%9RN zeTlgXt->n#d(W~^GZz{TmWn`Is{b`|UX=h-SWmE0#@TN&{zO08#HwEb60H9j{ir?7 zjwbt07sRVqP8TMvpP4RVZP9*LoW9flT}k%A%6Fytfiv&Q{z-ZChZX?n?3|e@f5H-t z7F5;Ye>j^E9k{2a>6_^rAbZ+H>Dp~_XtA0Eo>)@Xe^8SvQJwP5B2!3{T?iC3*$1#s z?YWRD-iL@t6x0}(Z`33{{m{BnvmlBf@dCua;?}Hg5vk%?rlJs?-bv7NReq1FCJ4AI zw=XcQ38_7;YZ|bJ15haGVOskkO*#>S(ype^RK>aiHsd9REV$cidf66a3ty^(5UP1G zpbkr&sL_`;1~4S?q1^&DG^TgJV!zl-*uj_5j*}1pSQhm(CjtfgI(+EA(W}kHK6cmJ z{1|OaOQ^TDv9dzCq1f;U@&D)f4uab2?DNdp)d*lrbj)hy~Hx$q`*AI&fmXTpBjKy1o4aEW$-$$N?su z)k8nTst|hw#91v(XA470XoF6CKEjI3z1OI3sYxOVAk1rwS0X_*z-nrX0hn#~--%{G z$mBahJWL(lTb>DH8BCHj8;|C2fnin@v9VVhcBkRGRhVKjJhxh*tpgjjUndp<8 zM9pj_&X+BsKm(XF!#J5Y1uABa5@8E1JFQBleX$w z&^lKqZ3jZ63O1hv@ICDblGP=vRZG|p-q@o@mE&!!S+@kD4K4%~E?nQBhzst*>@a&{ za9k)?H-Tp6RDg&EsBt1h3e+-`8$Q_cFtF7itH$H4*;|uGK^<{dJ~x&zZ6%lF!ao^Y z`JJw@;lP<~VREP0@WyhB-wARtQ*&ly2Ebw?m7}Eig)$Gyw;1&fq=fv1ezdV4OwIiZ z{pglEnBrrr`cLRb{U^j_^y8JqFJ-jkcd@3Vp+dQ@<+fXAHs9z$M$TU==*j;WIg6&d z{5f(yQ?_!ka(U!jzecV4ATn}(Cg*zbbbL(!f_^;QThQPC6+u59w$h$tUu$HtEl_B5@^^iTm{$79QrJ%{h^h{S0)J4TO#7tXf5j6j<73 zVytPX)|`@WnFqOeL#ki(lh+bi8h4b%I0+8<`+wiazN>ccbE30?H+Zyg+vvvU3kPm` zf1i@My|MK3#c+j5A@Yw6W*??VTAmL+N>PNbUV0*SIp@iyyVW}`%QDejKUJJ|{-7s$ zGNtyK37MY@b{3Q84xud}&C5AU&VFJRS%6h-ecQwt)1RTAR`S41)qXR|sTBDm6(9l|VOT^N?pVl21w=4i=wr|p21+UD(&01LLv0B> zrhJln)Q*mNe}v9NBoQO_Mf2b~P6tX&@=DZO+c+_q7zs2$Ioi`i&M!IA(UkzdAzL1! z82~V)JJwx19|pu0P$E0mnW076A>nKWdV~kz^2gfKB?2EDJ*TQ@X@!zSE_g>cFghN> zC~A)Jq&bn&9L7s24*Jf+&M&1pY`lIvQ!|VhRW7Uy?^@|8-49?w5Wws4A(cClGxb@T zeeiH|ecPo75NfT#yTV{%-YMsNRzv$C7(P^j*9tj#?0OxzTD{3!`CWkg$S zaE{9;bM7}asCqOl(EhEPb?Bkw-Rzo5W(6{GKKtnBtDk>-=ZfDJ#Qk&6GR#J!YT|*B z#L5BdffAcL)*7m6d3~Ybl3NGBnX~jIVa?aSiJN7DuC0Q;^sOw^?Hjv}8D=)bz2Pm7 zoEMOf0N)=i{eg^}=Y4#fi-9ut05KAJGbTF_>ri};DK^X`E-*=62xSiVaCQJ?*5P;KN1SBjww3GBjbo6k(m5!`H9lr%HZo?8*;^jN7>;@P zl$u&+!fuyUJ{{{XV_6Upd#pM3cy{bbnYh#VxIp8$v+i+0&2b^aals35elm{242b{4 zN6DEeLx8Q-^1eLfU3~KA=HxdB{n0k%k?qC#>69P%i{lF* zT@MO8DKLH{pJbSN)bg0ie7xQ9e@XSo^$&GUEu?3B!u7? zAfKtM*awtY&=DHuEMH{71-+psVQL(#qk#ZEx>f)#A>0HC-kf`OrvNR!>zuOM3E%zr zoFofAn?FlHZ0GEYP=!)G_Zk*p2;v^ccaCqK$L2{hlpFrhHeXN z2ulLA5zo^atWe)jV;u!;f6QXmaV`iC+dsp!yg<;_I} zdx`6rO9^2!mh|6UYSs1j+tW9y#b)IU%Ssj6YmfUSOj0k}WmtO@ZwV>3MU+Ra#f~Gz zPKfeIuH@{&aHEPtuw99Mj!usCx{`!Ty9z;y8c~91XCx~(ro2W>1y)PEgo#$XhEYAx zY60_Ag=K*uNWVIZ^n9F@20(>+0#mL$(zHB!(do*-RswD7ShOr=i4J9;Lwm|i{2EMB zwJY+y)_9z($gR|U@U$Xd&N9QkqA+)Fjz?v-e->+|;*x1)fqi9JWkt?nMa5!;#UaNV z9#u~VDo6AyY6(@>w5uu;ooF9rx5U2wsgll~#VMd1X(V@TeUNQJN;yN~zVp_o)43e|T=Bc1HW!2mjj7xwUUi zuPyjr6L?(n3oiW9dhNU1HTdT>^aaijQ_ge<2ivEH5#|u9IKL{d36EZz3^7CtfNTKB zYImE6hSd462o+k@2Q)6!Yag!H>Z{itt=D{CuV>bvg{a||b~oraH0Xymm{m0x{;b!P zZ(Kjxu>MaY{1%-?8%;tRw&`4Vu4>$YSmS>-s8BFj@d@ER7m%K%XGV>S z$Bl!bH8L1>u&9!p&);O&J%O;~ZKdt6Fjnx8%KV$*Cgx=-fc!%1!H<$D`v_ z^hnjCt+oG(er#*IIofvnXIrxl(zClRwaN)Y$CCx%@~o^xX{OJQn?CPu@_yb#=#LK$ z-{K(v$f{e9`))nIaBFBu`1XL#?PtQbk+$VuiRENf;ds^UH$QKG)VY=Y9T9IsSp#lp zXXu&N8b|kXpumMUa2LMI`WJ!K!0C(}IL@}JaY?L7g(X|i<0q8%EGB3?rpPBiT2!UU z6^R;|K)J$B1fWVYH)?7p7S~xzv+R!EIJZ(Har>7vlth~TJ6Xm^6ILTl+cF`%FWgAT zmsIKaAu!QWq{%kF%l>B9KaB9Y{`WK1(1Z@p%ogT1`?u-qy6MKqM>}<@rwv4l$p0jG za5Hu7kRcB+ zYjctN3Cf%!+)2YUGFI32tC0c-asr^r!ToYIMe`22Yypor1XUJJ&eb}Yhl=2ckcqs` ztc~b^0&(It4gL{49fmmrTJ-)c=e0gzfc|k@E$IN4o{Vvz)Z$EMyn>V?7Y;d4QUuGLPT3^0i zZ)jz=?bNZNg-^DjAVYCbR89}6g65LkKpSRe6oI^aarGlZoCl9eUcah-I(+5fKhrV~ZoIKE*Y2f`Ttfk@L zqx?-5#J0*cz8ffWDB4@odS>QXwO3op*3cVApR zLC0BBQRodxGt9WdH2!KdS)k4Z1NMDfT)Zt0GLo3S*S=Coglmm@2`Z3wzzA49azsPcs@;taZJ)@l+-^|Wq%UoQuI z8?$E+k)W@?)fsq~>5JN+LfZNnBEfNyCZ7)9$Unayd+>kwRr+ zG0gTD+@(Ryg}L)8lnB%|!PF^8w4aCi^-Jge4zvZQH$N8>@%!s%CaUEzsWMesT$+jf zY{h?vr7MUA9H4$mV59FmUDu1$gj=;9Vr^_YNV$S&O~(R)TXzS!^j=~7QKG8c9akWtOToMnN$=C+y zt*(Yif!%|{H@4?~NSZQC6WVs<;e5_;(p$6n=SxgDp9VR3iP>ZA|MIyj_M9aB&FB6g z{*+iDDatjSB6DkcbxgK(^2sknD_eYRHfeVyAN)d9SM;;9sC2nhFIBQu)X&~-W-zVx zOR;`(h0Tf9$Cswk%cz){t>Gh&v&5d1t31(E%UUKl{@=sRzY`pv#C6!=F`6u9ojU(d zg5$E+W|`o)?6t9f_Fn`?xo4#TlbO<6X+mlg84-M}OZ?Vqq>DLx&-B~Bcx~jLkK3~0 zG*7ktA})~*do~-ndx25cKJc{l>Gi7QqldjlJ)SQ;{dS}AZp~4*yxpVU$W3>`KOS2S zH)k@N@2@)+5Y;z2zTT+i(Vp5=If>}JlXXtnq-S%8q*Q_98|~fylh6H`$mME4SxQ%G z->&gIiCs9Id=lWVPQnrUX(>iYCqQpsnO00?D{b&6)~rW$@8wsg^2>yJP`qc|0NuAZ=pg zre-!lf*m1NIFN|%w;)fqV#Uq*iJEF-s8F;@?ITsDLiZR-ly^|kJOF3}aQ#N>qp&`L zNRwa+99k|SQ+8D89*s%pXS)`P5MwXy!GN_0Jg%`Fx93*}v4LvO9eiq0{+~hxfmrOz<5(*+iNNj03Lh|WmRoqR4X6lQD zsRFDcqf_4q8+@jg^_>J=CbLjliBj=gVjBZ@V&RUcS0u_KthHoiQdn9eyyQW(e0qi zwf%fBM3hW*K6o@JWc$_c5C7HY{$E}jYd8gK@jBm0Z&#wV+O5-+yOY3n`f24pv8xbq zJ>QctTj!Q?YzhnXESc!9J-1Hnyna{@30xjnu5OGz{@!Vg2{b2^LdadUc1pNd->=DD zXy?pj2?cISkle>LYc)g62K z)_m%_l1}MndFtBoj8m0wX?g2q_i#yDB*R=Zm+j5s3yQ94F_a;#r!vYag~?&-!SxkD zfu}Np2Ztw=SFAesb~xqJeL5w3%7+YS92TRh?@oZElfCjlKS%)<6 zh?_G2=n#*r4`ATU2gOVX3m{}Qxu1?Y4YDv4j5S+cgd_Bu z6l$gpEC6K7*0Tq&Iu)Eik^`zaGH}cYK)C|Qhnkc2O!wB9kTO7H7^r{>m4giP&nM6l zT>J(~+REozWoLrg3eIQiX>j)kUN+K5IC#MXY8yN3vK<2uQnFjcobieDxohH+u2{y*a`Ns z&Uu=KPr9AESg>cmcIni1=@CpRLr&I9uCx^^yQ97IU~8%WOleclh2xc_ex{|~y`_Ps zGDqdgf?LZj4U}C}E{l6xdMu=TVzX?}l6vXM$~^~i%Z_-Io=+@2O(=`7uSk`X%?&BN z5>lF7S$27`TuQAp)4!CRSmwQGhhc-6?~y_j2+u~9ylyi7=p4UnLesNWbJb@K54sBJmA@BgI6K=#t-_ zaKwIci1KwLvpT8W`wU$mV>;)Zkw;>k-cFA6-dV6)xgJleS2wHI++D8~x}0q4{;b!L zZ&;(VT*q9Ggqy|=4W>xAnb)x4XM?$X<3_VannR-qEphh=FPs`TW8M0l1 zfDX(0Q0HZ*W-x&VlDw2{u3(pSO2vv88|&uT*1vZ#|2`sje`7c2UNsve{Xr;SD%fMf zyD45cF1ITA%t?sDh4W-FGJHE3=ALaI-1CW@_NuxLr~E3^@enX+g#`|1y%tf zL;&kxnA4l#9zl93>R4-{DIB#5v#4evJ5rSKx~%7w#j z7GOK_y`doMe1&otO{AhH<6vJde2b3O11OjQRi4qp=?1I*%E-$R?t3etxuv;;38T3f zBF#Y}0F|1Glc3ACcm=x^;3TrZ(Y>D12PYsr(J0LsSlFSfiO@r!>x{5y8E8bmt#6@v zax{n$0%!Zc;!N0t3rmAAGa7t4GS5$dQez;0P9QZ7iqa6g&t9v;0mubNrztqG^o+Q$ zES`35zHoJ`de)@Y+Q6r!_Xawzc9quMyqSyBT|66}Ozt~dc=MqK@v^H{-m^m^BDx(L zh$r$DMw0ZP|4>9+K(e}-cMTr|%go2w+4;pqWF?IZs9QeHA%(+^_cKqwEh5ZEB+Ns) zh>sVRnU6?ZH!%O@;oRKK$%#*Y{2>frB&chcoIse5NRtq$AXdMhtbQ}WU;I(>5osz; zAq(r4*^g~szNFo{36n?-^NR#2xpu+)%f-czygVz{?MPp-eezA++jk8wUQ~~c3W-Rj zc6B|U|KbxF>9F6YefHztvw?n*F{e}0^18aJCub0WO2NX%${(`@on1&W)HN+A?SCL5 ztEg#ViSQzYVBrm(yCSZz+s0m<$;)#*8&oy_Bebxva`sJBacSAJp`sU~mv1yC)-_yv z#jhWK8C6=*_G+SJ{FTl+v;OxV`##QZKX|xv@;xAmBTrV3$dEl@A-;);a_Tw?x~ofu zhA|`=E%S|oKfhnSc}HH~Am>)6-Htt11s^eTvfS7F(#i4SkF%zZP8)Z)RE@vt6?|@- zdwcWePXjC3)-$Izb=R#hF%&hZKf+J5vT{e=IK^i)R7xufBsY2CcE z`s)L4KlLwsJrW+>H#?=QZ}9%>Pxs@;)E#WnuD1kd78HD6-bW9AnjiQyH}K{2)xk#+ zstT=lqGtV8dwqN7pvp2M8>iF7p9$XnU;HosYgV^_IH)7Zns_2jC88%yb9<#{&);k-`G3#ql4LEJio$p^IEV;n zNIwfJ<^B%`_4UdpRqhS`FMF?7J-g;9kC%ZO*}RCAQpWDu3~qN*z(nt5ho;(>Z9(%h zFZ-IVy}rXl3BRghe{{iU_lt=z7$5>hDM(TRm|DydSlH)jlI;AO2U#YE|4?Xcd^>P? z^C9fzkn4U=ig#Z;`?r&GZyXzKIg7)+@(4OHem#65^QGBY2zPi?g)UI$ z#za0778i8?x7{?7)h!nhKgG(+G%NAjak$af?_WQ-J~#^IM(Yz6dbq6LJPqFGjKL|%|( z+?4bSLP%29E`u^8LIxyj3M7K=nx%;%%i~BQJWPONjw1~~jq1b_Wlp9TKLQ=rNMWwl zyh$rWpN(h7p?l2P5je4QFUuQE+QbMkRaXjLLbi7Er?PbEDS)*HG=H=OkqLyvvn4uE z?zAjhwEHlkJ(Xx?jX~l*)aUJ2#R6z}+x)_I32|c{z)9PF;G(YM*$^8SK#jhyvw`vj zWBGW$W^ZQ77n;%z0jnJ)3cwa&O1^?MijbLR$buQ*0TqFp#Gx$PSp0g*)rnX)?&XbVMv zeD1`nM2PilVMpk%_vNGEH9%k~9+k~;SRu~mbFp{Kuav73CV5yQOgYgF>37##>rxE^ zxOfRyDnZiSXF5U$Ma!~SQOS=4YthXILJLub%5l9I2DbtSKJc{R9d48e9Oekmzh;{P zR|}Rgrkogs8Jt@s_~DB{T%7v)_YE=E)!z(u2H`#a(B2bwzwcZhzl2|S=N!w%5bVcC|&DCxjXlk#!I-GZunIF`P z#~h=kZf$*+sHW)<-mKc|&^5EVB(X&IkX@h0$Xw>%9Mro~im8E6DfNxMqs#BP?3i~Y z`dK}QgZgn+%q}ikm%)q-E7O$kDP7;x^Wa#>d>;R%?K)A?m4Mv&{AtHB(`P+f1)TZI zf~2wyZ(A;%9Gt(h&|hZ$*l(%#+~WLyv#sP*?gIvm8fmI@pHUwlp_twPjuYP>wbE@bw^FW(ZimvwV$;Peyu(AplZ+8#Amk_uU})n zsbVad4s%K0kRsv{uN4SZG>HaDQSr_oAUe{KtLR%&VB!LH;ofvz{1U3JW@n_GNLWBj-vluhYLyhWeVMNF4&Wr zgu1~fSZ_({^iJ&`ed?>C9U0^}znXc6paT8M&vuj`Gtt#rOz}H1j_yMf$$#2b7Vgu; z>REA)lPdB*x^126Q?vRf)y;nN&{OKuFD2doxFHsZP4CN;U{fUQ9Q(fI>Bp;WDeUnL zthsc;F%!Yc%U{S@vRW4_Ry&+JbuXsn-bJ5Jc^lDNAii?i;a$Q?Nh_*kzKL(~9X%Dt zkjkONkBJwbMhZ`LK=E{k+C^s|4WC%I`E0iyH;+tEVn?f|v!&GWv1m1ZBpl6nV#4C8 zTLb0?t?tL7QW8fa` zY%9tT5ZO#IiY*P&2TWAC^1(+5;5HPHwDT5Q+(2fs1}8?zc&P%bP@rdF14xA#pzN0} z(X_>=cp-c{ia?8?0?vt)vo~?O+@rBvVuU{H!KCI{q;kj=!muMy`&cxk^h)o%pKlYz z45p%9?*D9;$Tv|Tw!_WCr^|jGin4E~{l->EndmoZA%p#AKT(R;&3Wfya~+3Lbu#6y z{r(j6sO{DFhu?4i{Qa3Jev^;ew$LH}hai62&2i~RgqPgo*Jt5Bb8O?_X(q3zC_ABf4LZ==tzJ7ZHDr8@L@5 zrp}xZp+?@Y;*B&qH2e>?mHBN`AOR_tzpxF&=l%HSA|jAk&g#(a%)e|a(6p==2TY`g z;0ji*ArWq*2!Ph$k)jt^Ya2!NjWTeL zG7XAan;k`DM6H*JGM9-q#z&iJMsHb&S{om2;~s5h8@;JJG$N@cs{Ebuld7r(6#1b|K5hy2 z&gSY=v!}6#B)-|&KPO8(59z;)JwCxmE0(Gw$qH}ZRD#REQ!pe%RmwsgXDRPw8=3Ei zZ*fu5G=wHbxWqm}wX+`%vJIEU$SD;SB?jynm z4752D>%#-`jp+4o#)2M7oT|N<3vW7!lHdUkI!X+AFY|N6xB;443F=K2sYPhb034ve z5-is(M6BfW+LY%Z#qWR+A4mxBci0B8^jr)F>%&KEJJRVtf093Z0I9~|8 z1mKxYv=SF9K^4CHBPdNzaWe&SW&$P=5@JIAysm82*S?jlg>4tg@jWq8{6k;Lz^5_u%<;rMrlk2W{bubdsgKoRzK`QF)R~ zaLKcJUbtqlkSbTCZ(3yNQM5j!$T+vi)V?S%D=p=5k+G1~sz_yB?Npc@pu`ICJ(HGZ zn0GN~m(dRy!hT%+{ebmC1qqF|5F0j5I6!2$k_+)}=^HQatVJs!j9lQ6Y;5hDPmf_B+)K zGnx^QY~pBh($D4#@+~PkEiAK^%-t>74lTK%EqQq@`9E8($hTfLYh^pM`bAl2p8`Sw z6$O*{x3Mg_9xYlyiSG_?j?N{trPtE}SiJE{M)oE#DnwR+gn1Tq^%6)n%uT}SmoA*O=mS8O2LYytB0rHz(otl=AELm1iB0A_7|lm@ zkzqv+l=lqcPz>cLK%9YpFb84;3~@xbLcpZ2u#Hdx5W=&OpkfIEv<@3;kcG}uNsbJ(@RuOfF64}}X}TUtquK0bf)!M> zuoOz10^1~p>{=3Jsqj#EX2`X&pgWs!04S0GMurAI%ax1%;4D-MF#bsK~hveLaG6L^p3}hvEw*7Hs&Y=GNzFC6CqtH zk|>I_xZR0!^M;xDDhhI2#N@TYMaSa|UaJ8$@f4EM25F`8Op271@t=l?5x`u9|Pj}^BPfhtUnC8=#@s?a?1IunV zI^!#)GyjRfo=!i7VMnO8?wJOGu#_@rjF~&yna`rtcCq z_H0?3_XO~DQKNxRu*zTKta%VP2SNd;Zq1JO~HLyzm<%yiAp7xwld zBIxQDqXru`rqwm1R#k@<6*(UE_c(bbIya9br&v5R*fIG=e%<=|m!oQC8+7gL|1a9! zJF2NhU)P;8jf5JS5}Kh(5e!wThN1#C1Ox;`Km=4&R8*Q6iu4jddJDa4=p6%C=mu;w zF(ADeK&7di`F(4zwb$8qpL@sMtqcu9LF zkA!5w)^Z7RhW>38f)WGr@>toi)c5Zp;H`RWDxtlxXJ-BxW1@6+;lhN>Sj+rG&+KgL#B|r{ zT*dsCs_{=v+uu$6NDh8MP62){cf9p4Iv#g(v2eTMN3D2LRuEKHd_OJSB_hN`JO<`_eQY_5?2^6!&Ip zc(Zb_T3jClsEzMfLG$OjcRHP=2@>B>L6 zW!LDjbhOJh`S3*DBXF-kD22&rzV%yrU(2w^m6td8PrB%g+!?7Bv%Yb;Xw=B zq(SaI7S1Sp1$^z&`|^`79*8vmaQ{$w`>RVu^Mh~W^^aIsj@m-m;`8W(C(ov9y3aLR z?ak_D?A%%Etvo=~b!cZ{P2;+|Cn^9ytS$>{@#WhT;_i>-Q@x=FF8}e}`FZM{RrcP| zUw?KRlP{BiRV%zdTo6LjesVW39&>#>k{!rlrXd!zU*B3RWanb>0T6{H(J+(8@e_Jd zc!yCSze1fB38QMHMb%cGxDu^0<(3ztxSo<1dt^$$IojZ(rL+6VRdjx=l5(nZ?5Pvo zUlWeWH44HwG6Vn&q~o57IX<*Cm2xO)K|IwZBHSh6dVKe6>a8@*uW5H*8@VRjdmUbs z=~JgUo9_MR;=#0Q9kTOT!LXjW9RCiD`ON5jg2j1ZqD@5rf`}!B+xk#*0f3=NgdL8* zzF3?WSP1pnNFk+e)R?`GizSs2uS?4cORq1LKVOuSe^&C^N4}zsbF7ToG8=J-TKmUj zx$5n+GF5ouQDNmq8@S(8`&pgQ>G+{{RT8-{+x;^ zY)pCH`g74%y3J{ojrwBar*GHXqgHW$a8(le-N z&jG`|49|D^#~!J^H8JP-F{FF>=8yL$_P5l2y0l+GZTL!L|MyrFef$a#= zjeCB&x%t^^u3~e-Z*y;D^9zYZaf=Z=Co%;f(2NIwfP>A}SMo{4?dhjhw=}0=e53|| zNBDiicyg%X&U}9It(~u_w)`WW>wQPQ{o0_PJpB9nd#l^Oe+;`m|NV3P;kVzLjL^e>wx*MB|Jj}|dj4l; zx&GUqUFMs^d%wPay1n;%Yp(Uu_3h2)t&d9AvVoH1I?Dhz5;`~w#8;A#9y9z+# z1--A~;TrjqZhORs9pXC*hG_b65h4S_jm5JIPz}Z8$Y`864P)$K$R0?N6|K9$B2x_K zB#QweS+B#~rpF>vuwnQ^U(rf#M7TH>eZmlqAP5lm6X-D9Gz<|0ofyPTNhlhC&?o34 z@8UbN3fAJhZ;-^2@F+G<0KrBeBJM&wsRteggKo3IL_o#Q5rJtSay1hIk;M+|FT-ds zL$sdJX#6c{jn_y|>=T?J4T&x$NiPQn$kf~fk%ZS$l1vn*5fRWYrm=+)5$7Q@Jz)A) zp&l16(x(rTbu-+TWlTbQ0=n=pBA+49bHb9u0g#EXC_E^UqL13D(QhWc+UvhrcoODZ z41*oTpMn`tSj0#55Tn#^R(G*GoHP=A>KaMZg2WCfZeYS-`{4I`=`arxqL3WU@e&W? zlnFrCRRSzDJPK|q#ovVwl#tN_1|*5_6CRuwelFXy@SLPn_LN-gSE>>4m01Z3{^(i}VMX ziaJ$u^>;}FP!B|HZc137)VT=P9;xPaL4Lr*fOO0Pz#KYd2a{vMt@@2sjhZ39b@~Yb zwQgOQEIT%7QKk+hfPWQ`6&S&0NdUZr0Ui*2>!i zoEi`KwP>a*_v|jRWAv^V-hyfK%rjN;^NhMI*r#B1|KG-B-uxQ}7}*+l$f05Rc-}QM zl@za`*mf=B@G&@0Z8P;LtWXJHF&|3X%Z-D6(zmEEG_WV=MJm(;xL)zXIHu>?F~NAy zPFfV{9CPf&D~~@us9euX8N`94C!o^91x8-1=iyWVdfuc}a36z26=cId$;YI1n{ z=Z|aK42ItN1oH#3VyPF!9J~MPn9M(%jJ2g!{fp-2c$M_Vnv*VPmTbm$J~j;0KD*s7 zdv;~#6OFTu8hU2gF7~AKtFv`g$^FYNx2JEJ-l?l8Icz3G&&-(mmbo+Ee8zSswg&3kHv7MM*6)4+xVDbJmf%6k zFhCuRcGy`u3E4F`$?>@1rNr4gVYYr#`=4vPKJsiW#`V`%VV1@>24~mf((R^Y_6~dZ zoO`yORQ+p4{%r%=3meGH2xg$pli(KlARFJv93)U6N1pyp$!3{9ez1uio#k0@pmpIa zm)85o{@-&BK3Xukt@W{J;Cq3=qa|~e-A`qrKZ}wtExK+(G4#;~HT9QPEKX{VH;ZoO zUirMdI^y7^emo2CV!%@(2CnbJm!YVoV7|Ct6gsw`^Psls!pi&yr1hRpwbf41p2c`w#?)N0~q z=8;DWmv8%6RN8MoFdNo6jda-@NM1Ysf}VGO|I5kvZ%fX(wvQI)LYsU;8USd0 z>XbOsJ$hH zX!)RMyNcEA1VEi2k)s^&RYk5($^bzzyWJ@#+I6(HQ!^_;`(VmZSubs9&v_26)A3bv zQz}TsOH{5)<49Q0Or9f*1RmA+n*;O;HcAQpcMi}@1DbArV(In7I^{18&|d}MaDW9$ z0;EvjF^vsLf#!q&c|738(BDr5j!{KC)F0c)XoX(^pr;l;06R{Td*Q(riwDor5o~yr z6oBL=ff7WxZm077y?HH40D_-@9Q*5t+^K81Pl2^z;djjeKPtMY63Api4`9?EmUyu}oMx(o zxFf+?kgjs)9k3MYB1jPxS2Z+DOh|+u)R~GoG4l;RF|oMP zpv)lhEq_{Ur?`}JIEou;1nQRsBowC}F>nTa={G>E)nlpjYVRYu?-W^?{vZudv2;!y zN%u?8;A1-V;b6J<)4EEIa5n%}4FADd=+A)BV9Akf@kd&9*hgd*^*w!=>5Eyj-dXdh zS&NNX%OhE<+gbm?0d5~;BeOiBKI~h#0sEBw2jhYIgl*W)M%YkbuHpbK8`VT%AH4}5 zrCNEHG zC&=+DkLIch=E^kX9<flX6^-DrXRPJx49p_5jjvrVCkPoY~{p<@Kru04Y#2atI{zPlriCKf%= z0`5l?JxnX|Ybx?DEh3E;1?&_B+7t)-Knr5fo^x^7UQ=<*Xfe5`IDV%%L9pbhPsxK( zIV>f+EbnnAPDPriYT;y+Z&O<6Q(Bx>TG~`vK3e*0r}W%4K%4>emPqaFhhZpSIImFM zP?_s?S=m%sJ8OA|P5Dco^3JsK*QMoMP2~fl<@BENp`G$~f)($5Dn6!Fd}yjrgdIRr zWc#*RK_aLzeX;bF`28Na`KD)!qt6z0o-MOJUxl(ot>-`Go^RPa-}ZUFGy443&huSC z>K{2OpiPBhezXv^+e%KeTC`3LV+*^&$^==q9jQM5%ofKg_n%T7F3=RK(QKC$wWglq zna>eBZ;SLm9{vh6%O%Na9}$14Ubgo&u37MsiV%-luiothb>FJ$*9Di$g1~XdM15`S z`1v4!1X5CKIHZr%ZSd%#Yhijp8CS3#Dp8hYj?>)WIksABp;VdnT1z3Fi@yI^a{kwt z%%f{U50no~Zwsz=<+w=$QuxO&WDf&|68>zDa)<`vo(6c7Q^c;gu#F&^1mh;N6+Km=^aaIIR$ z?`1jtr`n*+A_PA|!vii$h_R#sC+UclyTDz*q+Z^@!xTJ#Kg{ES2r~r?sjOxmWEld? z7;jZUK?pCNR|L+&2<En2srM3=irtr9$zbKlDF59>&m4KjLhg@KJ^1sjcyH49B#G zcumgAd1qzGs^hXkoB9T?y`R=M%gl99BjgWDq}v)qrA5R`95ItT{7d5g6f{FDW!ooS zcsE(vTCr#O=gx!ZNxd_FB54#=ByEb&-X; zhs?2WJu@yv)@8n{8Eve?B08o9!6f$D%w^J)5(~Ygt~d@brr*dKsw;K`xS*vc5{9xa zD#U|t$mnfq>1`SBZTr3eC{_u8+oq0bVM_DStJi57~^H#S5z*B@5y4;JsA z4ey^R>3@Iv@Q7Xim*xI3_JOa520pv@yLI$`Iz2EaJTQM+dNE^Qxn*GX^xJPb(rc%s zxkFso7+_z?V^$CFF~9!v0MTm4jCn^oOC~+SR|x%?&Q{UDdWp`iJNRskzAsZyph8G! zh0fnUcwl9ahhs=WVTk?a5cbTVl*r)0{vp{%gJLT~xae0>dpGGzcfda_*{mSA26LrE z_7O$i>+8NZy!8IWqxa41uKNj~W`BkN70XHkund5c0aus-tTI1XRD7^*{b2w3gG2uZ zr{5p0hz&`TTO-DVZZ_ts@zqN3xP`c>8btGfSJjjXS0-sBaQD>ipw(P-xzAKb_%rceBFJ83^{)HZE0F>U;3 z`ZVXv*#Xz`N#G-{(w8Z&ijuY)nR&84V=p@EaCFwme%9H4)+KA!t!?)D#H{ z9=D|3Mns`I+wKCG;zYlkDqpfbm%=~qr8!SJJ0EC2AGYT|A8~6wDr-KvZ9YbHfqZl! z)_x)W*1}W&g|w`NjF^Qa#VT!CfSrEh9$7SeYLLl=<95em7$|6@9kGU`mYRU zt&Fy|quH6G;Z>)_|oH$R`AP0EY?iNA+898|qw;Y6G1!r9$tA zjpqjUj(Z`m0(qw3 zDJpo#1H85TI>FC)SZ+RW@J)qtSv6%OBhhPZfk_Dk}*vP5@>= z13SI~(gc{$o`;4!04Me#QiHFUKyPLYmj}722Tq)ZM@fgXAL(|4j zWiJ%+k*PTbL2L(4=r~XcNeCD_y8w+o)0?EpQZ8xpe*S#EaiXG{F^$xbaX4FRS{5Ll z3Df2}$Nt+*W#?Dr$_jOvS;|~n|MRDmxmvcm21#VAnaeHnvz?1e z^wni(>I#G^;%n>BVW4Gw1w>$=YYN0=*DcPJFU>6f`O~?Vgq8s_BK^jrG#$X-Q?(>0i6?EiD)}-jR(B=-g7dv4ughm(MIgClKhY0)g22 zHg*}!Ey1N_K{|A5YYw0-q z_~i`_ow;(gYUq8<=h2F(vAi#gXYYpEmzd$DrDe>Sz|735tqrft9KXEW_?o)JrjGQU zZpiXb*wRwc-9Nayo!8xaB{)!6Oq@?rT3A*=%fejS?&9$)m$5iOBu)^HWhc{`UraD+ zKTqjfUUGO8P`xnGJo%-p^QDD@i}iia^WL7-??#&^K07?{HNN83y}CZIv(Yg-FLY2I z$%likNA#`DiLD=vYuhTuhVp94dF!((Mkd1AT7t?d5~`Zw@=7szW#O5bex=1OPr^Jx zf^Q~1b&iU-mYx~a+$2dn8j_THSVL7+`rh%-YO8 zC@?59_mIAx1d*tyckGCPamnsF^k%eQLVn=q*29?C>(rvvcmJWxZQvjzIgc;v!w! z+YbW6$Cp=bP~sm_a;Q7oyaXlx!cqxE#mnSak;6(oU+23QW*_Bb3#lG*&q)a^EK6Vd zn)Q7pYy7=)@T1Ik9}?@IxrWE*k9~aJKV8dgN<_I3Nm8GEOglER2*)EhyMb7to+M1&e#I9s+dYGip4+C8g& zI}}sbcIMj6v+f?nqo1nA=$pHnvDGy<5~Ke=zpOwv6*!b^QXL?G_rJfXtW6<8z?sGS?!#p+uX4}WCRNx}-<)g{5lUXQquyVekZRsswrajHgF^kX`sUDSjlp6e zVQg678BKCV0*yxEfGgja=xeN=drL8h6g|^av+%Ciyv)A8>Br*h*i4>2^AXx91c6(i zxX-u#+XU?~8`oLChPA1#Sow1UevKQm^z2iyXCFbI-F1Z%Pj-k|hBe${+am(BSyJ*G zGT$n;?NR@CrsHeZy@}sD+e@xf$+y4w?d@%M*Bl`I8GQKVu_}if#TO%9O!4Ow7vKeE zN?b|E{i-uWR<0Jqe;3F8mz^uV(qza9CWjS`*7-UAHI|5yohIv)hLTWc&f{sIq58sf zg6Rp_g4jg`=>RDFRhvn&d$2H*tTI(6f;wOZ%%-{(mbfHa`pW>|jn}es8J<-Q)|p=a z;I$X#vPmep|F`1U!qUak^18+AC8yi=u7JktiIA4p+BM+T_yAC$_$~`)riO#TvxcFvJKmDR zVtsIt_u}m+*lA)o64gNMWaFpe5g1Idm|g{!FJ6zQ2}=luRI?$=uQxay5|OYlLNr3L z63dPj!ZT=?)257eCk_opNGI2Kq8`^PBe5q?75IcG{T(Y4P&;76)WdMLOp{>soD3Q} zci%4;IFGfX-dL{29zFoUTfEW>T!_O_y*fq;ijY~Adi~|5mlqX z(5r?CR0p9%Jn@0-Z(?qGRlyk1Cs1%idwV+XFTI*WyzUMpxINi{DC{Uegs4qbA}D@X zN?8v^FKzRoetpEKN3?n=lHjpM43fa%dG2s{J;FbftxxaAhV_Fuo{_! zd?drb?14^wr3op8wEG~i2^Qlnv#a0$Qm z9vHn8eB~^ExH5t@(%LY^S_-^vCdOyg^^!$AQa25A4m)$S(vwV&FYq1 z2kx}w;$&VK<^I6{fC6&zNtP<#%TLh2BRtHeOF5x~L<7-48vphtk8JlD5dft0^&LDz z$$eS(t$BE$OhJY7>c%Gb>o0>r_6ra+Mg1{6;a|KqB#zz4oU?m%QeT;j9sCEc zz1a=zT>bC7Hu7qOF86=96{3p`53-(r5-20Nzu;fuSfq&YiF2@jievRMyZlmN}uz%dX&dG95P*VX0E6wsOs?+2%uGT}|;5g&UWJMnCRB3WwSP1-CoR zwx3_`t8e+Oa5G4LY;vcrq3ihSDXm}b6Po2gjpB{7Ws5~>$ZLf9C+izb_Hi%a-d4Kmc zbzJJZX?%Qv?uG>?T?><)y4QELt_N;I0PItm{@+OlqzP<7EhV@p z>yCY%q%g!G6k9+F=|I}HtLz;*l9v{Y@@InjBnk@;Qx8WW!Q>lq(Y#^$aP|NgyN1}4 z#0T-fp+Tf#N(DS91pv>IRP7!S(Fih8jqE^@m?sHL3EnFYec8^%q^To{L8PGr977dA z@#6KVwKSxj2gvRSt+8k}E{jH=guUHIWVy~Dz0-7fJ>pNAvdJY?#H5VR6vnYOo5JAp zE*M@f68pp>QB1ibz>Doj7iC7MV=3^Sfz8cy8qDGSbFGylZnlfe&gwZ3zF707J`Gl=0$P0)MZVE9Um!uyf9VS!~31u{CmYC zwt0N+>}J#0f917fIWP~}d)>5wVh?YEyO+RBPl%``z%R5X?yJ<>X`15~MZTYBW=Y(D zCe2~WlH|*?j@q(O7&)uMbsuBj{3w6ix_srF@9>!a&-&-Os}G;=PIP9;G;$sN_T<~{ zq|l44u7hpscg_J8C+?(0a1do)!z=pyaQ#nDUzIE4tXTHlO9);%x|jaq?QiCd?D(0z zKR-Kf`>$7D{yqPAZ)-05&vy2K-`RcqzhA{ZR$IFKYt!m6DDxN|_UPyS$0%zOFz=7) zBC#1gMi}`|oz(bv*^dN(* zi$YkSl2@QwexRB~Ai*n8xgkgy9VD$0Bxb}<91hY73sRQ}*0&B8NeMdA03q8!23vvn zlptBRM~CBJ2ALk;5V6Y)B8X=Ie%pDza%PYjmI^?=_h?_>J z%W#NCN~o7x=na9;Yr~-~#i6$v>^$7mgS!NJpM;&S481!X=DpVy>bVu-)fIM4AUx5{ zI;ks^gboiJ4u9$vdOrn3(*ZH!nGny2?+6~2L2jPPh_bE-uE_`?u}HqPh*ktogI6Sr zUSu6Ql3gzn2S&X}iL5q?;tx1?<_?df+J(O1sDUsG@k-OT5U*_%En^lvoDyw%;lk)} z^n`}R_*V3kMvTaDu~VSWd`iq>L(KBuZUskIY_Czwck5X0tLG0?ng48v{ncO=A}Rh` zfDFT#NVQw6@>oxf~w$Uv{ppk0f2&PIAX2-@+w(Y9>FBP4>E&?CqWG zGm;!~ffwU}6z~FFzN#=~ctxCGRosAyD}TeClqE-geylw_4%T0!pY56Qz4E>sSrRG% zpY%-O?+_3oLf@$5TUe~L@-1-!Xw3sg6{U%FI3cLuGfgZ(I$c6P{V^ZF$5d=G79VqT zYTK4>*A!QY_RZK%W+fhKHivgE8 zf#h*Ou&9DP0Q@2YfP}L59r%{4)6oQvJPlBg1h`Y-mmL5TisUTSH=kFu7sCI9+{dIQLr!;EF|jG6#7`C<+}8qrxu|fdnFOmyx%q zAqp8BI2}L{2FPcMuyp`ru$&JP;G+)!JlSixAu$pUiqggSXe^yXK#zfb83bG;!v&xk z02ZM|$ewRVgmg~4beK4mg_8+`lM%v1PA=%;xJQQ1hp_Sh2w4}e=SP6g0E-14YOb@G zz6V?>JSUvs`le_Oy4W!r{(BFIEY6n!SepY--G-B!0U$A{1x-yha!Q?|J=J zIOA!tx=BA56z{T8Ikid1&C-V8cppQ$J&yZp=L&KweDtXpPOBJgsu&-wm>7*|+|G#I z7URbnzrAP#5|5uOUU#*(mc0>p=Nuu`&Ii}5_uM@R&<)Rw9ToM1JQ3KoSeJ)w9@L3f$irVNUqQ|m=h zmX?gu`d1{|RXF@Ik_M$;X|}g_r>nVG2?%F&dpF>PJH&N5B<(t+{W@eaI>g*t@@jM6 zV9EgO{ptwn5~h>BaHp#5*uqkVoHIg;arg|ivo9PFA;Ed^uzdv3l<5(n6v4&JlJmrk zDe=pV5n*`DQHhs6n?ODV2{@oGyhEEipn{k%3Ll&e3#ZZr)aWQfBI-Pf6B@HRiI3oGB4%vfhW>|Py#r*M@1blg-Vsc9nvig2E5zjc+=oR?+^|X zCxDlRNsL3ikUgT}Ai+yO6eJ)HkbxtHkQ@g5P-m>@_i!-)Dv#xf0I(Dk$VG))(ETh; z;O7YNGkDN|j8W2ps}j*GKlPVw9yUOhyaWJRrkZjhoa#^!VFFJWfE2yI62SB_ImXBP zrLbrtI+3pRQ1mW_llq+30kS@Of13ini32AIU=X~l)|0XPGh zY7TM&NHZ~*Q69_p@v_Sdo>1ajR;Z2U0AjH42YLFHb`R$((K1Z%+bHW#Gi84K5pkj> z3lpWqJR)QI4B8Zsc?D=Vl2MY)LXSd4QRHl?Bmhqm@?@5;n`k1i@7bKeECOp&C*r0H z$5iDzE${$1WUuV#1?Gx;Z$GdVXYaT3@OOK;MgIYQ^pVm))pFjEk{-o__${o_O7i2BA4FRzOhlZy-_eT z)iJZsF+Y1RA<;KIofUw`RaT0rYa#dqo4$^-qS(rMdMiG>FB$ug|NdQMVVRJqxUhso zaAjrY#`0+=CnM(@gR9J_vZ@m1Y#8;qfRwzL*0HCwRvszY+`is|$uHR}3#DJj^4>zH z#HswTk*0A*!KYEYykf@79#Mi)VsB^d$cUJTcm zxAmP*Rkd}tttZ^bJr<+V1)baecW6VJbCabY6@ zsXgewO*Zq5sCjP!g$yEujjQq@6UBM|Un&1#qR?rKhn70o1x&mDm28^S6c6SZCCFX+ z+eBeBNl!7!o23DOs1~6?jc65osZ)+`>HeWl)tGL7-Qth#BlQl0&k`fmS0Qi2QdL2E z((_AIkAJMc8mqf)-$~jOJzC7TaWaUDrf7txR6!3=j9p#1_r2NvMC}`Y#&O@>`Y2~E zpSWc6eQ_|u;KkXMG*9=p<+rm#6oii4{!r)ptx!Q*gE`*eTCW)MYwO!+f6g)2TNjCe zNLK8L*FN-4B#11v-4iuUZ2{KdLwSea+W+3!SozSI9c$mVy*sy39r`WH|JV0FYem_Q ze@`C7lTaT+8UCzop_c>LXY26+@T1m~k2#$L9D;;QG!A$z+@y8tjoqv#0VrVyQ5bjC z)}&XW9`*A5+3u|=fAzGJSE5upWQZ|S{Ve%jY7lxAr!RhSI@(ydF+b)gXXDpcllA%h zL{m|3sYF|o#%zc__aM2j5nT#dlKDxDc+DyeQo4uDzPa?dMj2Yh9m^2c%)9Hx2Qz(k zQs*)Q*KzaNL8};B{#) z;RyhMVkZ(|;L`@84-5kkqvtRBy5`N#F60)^@idj>EUmjei_CuAv)YncdZQp}tBuXA z#p0*!^XAR?leddlLPuBI7e?iuw{Leef9u#*_fyb=37gVnq>?;H7x1Bn*1IH=-PgNi ziptk}4%LsZdn2v!pfkpAdA(m_u6$!aXLEU@8!k+y^-b<$ZVVb7toS~3y6BK1fN}nC z6M5pu%^x4ET`Ow45dby|VH>LObJ#ig=FbtgqKcoR?)57_$2{IBZ2li;@%^{9Cc_Rs z+nS0xvihI2`1VYS>$C0IjEAe+bCl3q8s+(yKc4?o1gGN4^^Pg*ENSKKvvK))SAF)) zlx1N6h%25; zqkRjoY)s&kpPy+UCh6UU_lndvfbijE4 z5MxI?gY}{*j#~#1a7384h65~yN#ZnRfLvjYqML4=IfETYH2w+VRZmJVuNa{RtDRK&k~EG67mHnOG4nD4dx4TIRrVYPdu2C-wiv8e3LZK~gHn_$=IqAXMK9 zI9QWi7WJAFor<&IsLe310If~Mx%O0ny3B+Mj0qpWSz~d$i|v_5=&A83!Oe!QGtcfO z_m0nMZ8p-QS3ML|6mb`5V9R}4tbL+Y@~y+i8Em&L)ll|pf#6s3|7%|gjmiJ*5x344*ujPtwm++n4xFA~ zHCJW6(OcF>f|pu>x&1qKP&TE zxnN-&@3$Tj|0t1zerbzwUA%Jq=sNj^`?S=-i{0mLDaXaJUzIzh*>j=pZc?hBv*JBm z&t=p`!mHC)l`miHy}-Hg^h4B)a-Qa1tHTfxX+-)eJeH~;iVyyyK_(sD-F{2rtfBmO zlUUz#4pRY>z8TO;DeS#V$HH0Pop%&<3_xg&H%;GpUwpRq^y$Jy%jTUARR6ASr@v|O zce2g3&mQ*Qh-du#CoS$Iv^(7O7cE|47VO^ii5^o|BO;D1fA2gx4AJ6T@%&}(yJL*i z+WLZ7$hgcHXEXYn7JtyZ``^&w{_n=%m)7dwx5%UowJiqvTmvNGWrk?~n#9I7ygYbz zEh5rNMOeVFzU-ze3rV2itBtw8q;vKT*>3vAo*cP5?#TMnW99=!u`sqLBhXYY3| zU|=YQWjG&w=r(8VQoxOD7848B(!jZ8w>{f+MN@GdXbA!*ac;-WrMmgRszCReE`&ZzEYV%AbV*GPG`_Ogop+thq3E-#!sZA4!6P5w(kcAjzUD`c z4wY&l*j`S-U%J6CC2wP05n7wBINl<$S1)p1S&hhfzuI!peh4SCRmAv;glpu;&g*)J@66HrhyEzr66QU za4g;CMX`V+dDd48lHJ;0^$2c><~m4~B%n-(L;YHLw>T z!XECK3C47ZKg|Ix%ub`}xQJnuIc~^`AgK2QaF{b1xeLh5Xr-p8Oih}Pic5dW_3J-* zx6ms>GYEJYs_PJlTMsa^z8aZ)FtTkck|q$vs6!f`cv zvC5=U^f7Z^a-7mfFBNZoZ;%eU)kGgM5S@5w^En=VUnb_DId0tGAvp&y=8If3QZCB@ zTCT!2Qk27rkk+nP2|)angmj9MH0&Z7;Z268l2IjObR(H_gpBPb^K6rOaepP7Xm4%) z#yElQxP9AkqEKx}GahdoKf|qxCBVpW*C5m4F&JKiC!t0>fm=U8T{A&r?_z?ccY@KB zg!XoV7VfEz=2N2aQ~kySnLwQKUGS3L_0*q^&x);}Ni2(tiI(1p)~Sg$jfr+6iT2xx z4!9&I%_PTbA}1KoUYCITB&5tty0x9;flI!tne2Hn`GI$`S8B4)ztQ487!R+>r^5Sh zLA3bukB-|ZH$Fb#kH)3OYo2OgQO|gJG2^v&MptS^kGB)7 z21x!XAQ~#(TAA^$WK;UV(GO;zP~o)@48YtoGHnU~4mo8#yqmR{nzbCBwc42VZ6u4S znZ157d(AuhdwBNG)a+l4*?&s1fzfPmCmUu%LHJPM5m|ZXbzmNFtt5nfjzV|?)HxC< z>wtZqOzoC@KvqH-yKC63YX<}cSM}L0p zrDlTlG_p|{jm%6{(1_q4YRH4#$vYRsuiBL76P$PA?@25(tpW?1f`8HC1<7Q~9y5e- zfs+$3ZC+3)0bIw&o+wp9&^Y_@rPH`!+zvW`Y4DXQ-Fu~l8)240co@`qK$yY+bx6ah z1S7y+RD(F$@nd_0qNm}OijX*-2to-6i~zcMoVa`s#!Wy%VJ#0C*>o@!fdxI>jD+!E zuqqoDjYa?72}LF-4j>@K3=R8e3>`Fu2UGMwO9H@S%E?E7HImT+baWgE;2;F%8KyEE z0XYDWpJpc$0b`;KKLa`K0mR_p`5Lym)8&q^fV7-*w`piJ9y|k0SrHHv5B8BOz<%tr zr`J>^ixrHYu#kwrQ92tBMX8;MJ|G3CGtr47YAkd(7n3b5j+F~QumDIdD$BGIw0MNn zBC+!^I1-J?C@PBu9gc87ULdN$7;r^E+L;2*QPB?^z_W6xvilVEoKki7FbS&i2bJc_ zZ&!)#RaJXk&DAM8h}{q^9L^n(Q$%%05pVd;v=^8P)tYJ7TG-ZF`qo;f*V;7K+G#7x zV+zj62c)ShIz;LMrZys`$Imr|2OhaTcfJmqZWTdQGuG=eWX1NGic6ElSr&4K?*TS6 z+llvnY9>HY;3Zcx5KUHSFiAZ$MUjfffF5wJ0`W{^2#*y1?S?h=b{_iCND*rKXR>Mc z;tK9Ech={e`x%Z$sY1a^@6T7X9J)yQK?Y3##wi#d7h=A5b-`40#Y|E>CY^Kn!z>AGB z0P?^5jC`?~{^D2ji{E80ph>J&@fRnaGCatt^H3rjpKAXmwP*R zR6B1U4O!kU($|h}X~!OFPizM@Oq%5sd`4HYUw3Rq_tOkf^#)yK zGwHHG&_P@JXYn;Qatz)iLdEnU(IjWe30O*tj<(7pRG-bdT7SX^df@=!mC%}<_i@&O z=k9F~E#8&U*VEG1H{Lh!tB)?+KeX&42eZ2l(>XV)MN^5m4y$W;c=Txw&NR(x9}T1M z1C#+CW|SyBq#ML~qCKzY%Q&IPOwgPJsClrRC&SJ;031ZX!~=}LBgYbeF9goy90Pd7#|INk%@$nplv_47A)MIeA)*K@1PBi z(ACn!2D|sdaBcWgZ>v!P6w^Rc*pUycQdpQi9&}=wox_8N@hV~fC`dsh$z}Rnj~aCX z)ajtYaZrn*yAT0}^C8FH!9@VnJ3MR&57G%p9wLW012xYCo*A0HP0>{+nD7+CJ+}aD zT_d?bSgIr_0vItU?5Uo{iOwkR0I80_=yrPp|5#>G2 z`q&hXA(l{z!6a4?)*yJ#AuQSOF_wm+$bnoQ945B7@MtrPDbbYza<`FBANSA=w!q;% zptE*(vYU?fZ&NG0Z?tyQi6{2XSk)G|!|4xZrB`w8*G1;mV9q9%=d}A_M;Qov2Fjm- z&SJ2(G1w;tftJ=|oz6l6!-b(*tw6errsXwA0|JG-rE7m@yNk2Uv$IgD z3!ovh@J#2@;_~m`P@dbg{=Hyn5oF`;U0TXtUmDxp?OTUvR(NW2^Iw+XnZ>5HWmaCk zs*RnJv2kr13wA-Fvf0I)?(V#$>BQEin!gMo(;W-5FE=)x*x0NcTp*MJ*O-B7ItP=T`Cx#PdPe?YHO#q&`w`=5|mf4 zyW?52Hr2bbrf+?*aAob~+DcyE%Yvz~jF+8JElo|Ir-L)I^2f(&CMU?PHL3JIxl_hU zMuuW|JVbhO;{^51&M2Qc^K$kpr7e^Nr>_V>NbO{ehCvkvyB+;5oQxOM!zdBet*iLD)v5MM#xQ0|8hZS=S0?*?bT zZ*Oiw<7mwG_hS%?SUIR!BLWOm_%n~RC1 zt(LK&B+*dmsGhW*vC_#CvPQ>mJq~lcch8yh=vqSJ_2?*j@B1chE(UHlEbe<>zVB=0 z?StFLkKHdIDk8$MUyMZ$=HY_#umgO8n0>+sQDHGf6^Vn&Qb#nEb#!GkwDuDY z<0PcG4nTi3l@2Iq;1pF-Tk6uQs*5w>vxY~q zSJ(17Ix@a5<-KXk>TinZf0gxVD0`sGFE{rFImM?u$3Hjy9y!+gX{ujFR&aQ1Om1#S zaWSc=G(0UO>iM((S*rVwNEe;Mp#AreuAeoX@j4d&&qx;wz|_TDq9sdnG`UMoF> zK!DI&DAK`DrKzC^h^RpkQBeUA5d^VN?4byVpn!^iEz+A9svx4FSCyhjQ=0S^I)svU z-S@utdG_9CpJ$x&etO?A&R1ArFjkUv{jYh=`I~>ih4Y(r&jtRwA}~nORc}mB`y7hG z2e9b$e}oG=RYgedE6(XEaBq)LAE=<1BX^J?LIr(>Ru+Ip)Heyw{`z>616wxIf7@Rf zhE_y5%1NAPDooNgw#IYE|aTca@^fLO^G4fzspy!nu}A0LI$Ua!NAJJ?WBkt$)Qmwc@css0d7HC{m~6e_jLz$$K+Dg%nI> zBa~VI=cMuBL_l7Nb_$HNWPYgHl&@Oc zIhggxi5sba;j#`2XgWR710?UO^mB$X9%PG6CrdfYM54 zS7~Pg$F3d*`nc0~l7Q|5t7xsU#U3mf$r9Q5xv{IUmv3;&Z@m5b`j z1=xf2%=1z%09=WV;1AD$%adF09kNRjd81^p{km<`WypAn9JeqtY>T{Im?9;3-tyq} zw#P}2Q)PW=Hs`Ec6S}{p>6VZ0zmj!0artWc?wa$|TZZ2vgr21Dev@ggt^y);9?PAU z;15W${+@MwDa+ySMPUDARz+%AS+&{*;-uPx{vniq|h@wV&))iyaiC zV1(&RWaH~Vp(&=wy%Gv?rUjD9=mhZ+W}k8W=tFME%A-;V5Ap%G5uDJ}77%qC0M18K zB#D?xcpE^IqXAc+)MCO9k;0bwm{?&YfXl%*3m@_t1=NGs3}&FbQ^m);4$Mm>0**gA zA_AmTgsVh{!>G)w<=IRmfidJN9S*Tzs`Pe|Yq)3t^6KzIAugI>sShB4{h0KQw;DVF zz<2Co-NjE;A^je`#{W>F@G@AL*G{|Ida9!Em6SlYtIu#pRx6N&G??540IoY$Tp{Bk zMF=-TIFL=AMMT4lHeG}`9C7pXhT^&VjE5RMYoAX6+eR_;#sKwq^`GnEuYNU_o^vA569i)^Z5e4+u7N4>pbu-U)SqiG)z}Lv}lan7W6U2ZUJbhX|Vl{;de?ZvYTm zeLhq_U{1cn%TVVfgF{*%yyfnhRp6`$Aiz*RA0Fy4cGqe3uCqv(&+6T?4q+$jLjy`e zJ@vybc7|P63Uw6;_lge-t`EDj8s_I7>You7ToQJh;~su9KKxvLct}8abZ1y>NqCe) z_`}Y7&hhu2Iovy+AuLM2gMSUEkbryn5jmX^xvLTX7A{=23QAJ}J|=hr2u3)=-fJ1w z59>4sD0~@Hn$eW~tRzc6tkAAc@Q982EE3gg71h=m)sqp`;;zt9AN4&TsuvSAX!T$$ z;6Z=I8w}qeSiw{!kiq%+)C5t}# zSGce&=qW3rbT2k`DmVZ_+#`JuR)m=f)sCK0FWU85&)n?j*Cl{DlRW8l@=M>3%6R1tCtw54{F0C}5QjDBEw~85V<}p+yNWG!2ez zF_EL_{eBG_3c94(|H#-NN&a|}!u2Gj#3YsXNow8y0T<>Ms|y^LBV1EViWOFj(jt^+ zCda;0M86hOCj{Nlv?en60aTFR+!;9EML#g*Lb@;x;Zjl~d4)eA&=L?^Mq}puf4)xj zQ#_Y)l_14XAGs0(C6m2cPXqm+D9b=t1ga!*!a4)cS%9}G^=5baZFV|MEF;J;Bjk8S zX!pVLB}wihFa@Yw0v`>%OPR5TnU9ZW#$C^hPs~hwpZUBy^CdfzE|!&Km<0hq64}rf z4|Su3rr>@}o1MiF%g#56?70b3Y1A*a$Xr}}tK?e(1c#GF5hz`Aq3 zuyb0({xYk6ov`Dxg<)H)mVdnY#eUN-mix5&v1mUw_xLeMrWNjL#?;@6z{K9p8&Zib zJI{Jp^8(W8@7`{7Lx{M4fD4~s+^LX;In?Itasz=`i!P!1g(Wa=*B6G~8JAT0ksP z7TQTszzZaQtSC^_qAg1U1(`g%C}4gIFlP(KLb4nny@!e>QxS<&K%NZ$9Sx(gQ1t~d zCwE9`IB^L(=>a}qNt50sqwp45B|hb?!8b1yd$P z68kaQjI_RcfFd20brq}VlGGcz%N{n5Cq5<7ae;H`cLuO^5h*Ykm zXk;?S2lk7M3}L}WJkbCh7T4p8puqg1{WmW0e5z5|hykve-~l>bi2}b!LReC8YBZQq zKk^h4Vt&V+K6e@sjU3Q^x1TAwdvuN|7sn;lA9T4hdr z&z@x!PfT~L`F1Z|{>gT3Zlm-rU--?oUSHq0wseTYY5To$d~)e%RSBuMeCLlY>6#W? zR?5zgpG35G^A{H=)YZvoZHF0bN6HEV>f3-{J$g*0+WazXxLcV~E^^KlVYLf${*r*V zC(_bV!ogN(za{rsMiGjv10&J=cLM1pf)_nVH*ccvhU1JWFaZ=nk^qQ+SS%?0 z|4v)_-&g%#?f@jb;W0!JCWZE|!kbG~AWFccR|%3V{wBN~l8p|MKntn;DZFhvoVDnn z5D^LLUzzwnDRIb4Y5T%lhg<(}YP}$rv{Jo%IK?6`8_55w)$2cmHz%CVS`4YFHkglR zJ^-Kt-G6KKTA4f|$1QK;LpKF_0b|F-lg%Z0L*>ZF4t)JixU(ggQ^rtAe8H^@DO61( zf%oAhhZ$}~lchzIKTZoXmSrhHa18nucT1yK@oe8)94Wy^20a6y$6%+wd|1L`cn-+T z{`~OX_oE_x-)_q0`;}Q&PYP#;vE+xfh0|C{JZXT0T4W9JmXg68u$j4q;G-l8B?wsY zP4A;Il}R9+gS6@oYML9Brmbo!4R~(IU|!P%+&bffu@)HvVd7j)uY*W&ox)+li5W?! z1pUGXBFLe4W$%#=t++&QgLD0f;{pp4k>RuhbZ z;W5|HTT_6Tgffv*1MY-T!lZ#QAB?9yo#1{)Bd!F*`$4me9B(8Q^b{@0qae0jV1RPl z9{Y@k2Or>c!twbai*h+B*18^sPI+B{BOz{#2Oo4(3g^iebV8$Wk(wU%qMeY7Qi1Vm#1SMu?rg-9mE0h9UA3RUz>gr(i%-Drh6)H;Vl&<%rtmA$Xh zWdQBLXc>!^^KB9_MFKjcpaDUL+a|E2 zJ3gj(MB(4ayX#YhKfKqcOGY8`ZmuewDX_ym#>{Kc_6r4$7a`Gl>Q_en?))e6?!%3R z=9PE0lz%k%w*yk34Ui5kL2K*a8i&2k#%`?hXS3!DCZ;DgOyH0`9^_(7PZ!P&t+T}n zXXgqgN1^kithsS49LOJEfmWxLH51087)cWSF< zvhm~a+_&lU_Q^Mm(kO?0W zkmUmx7hs0!fRHS3Xup6MKRC*^sjAc&-83Cvw$IH}c~?l%Q$S73>=~IL{v6-Y+HADA zZXgGJ_Lab2%bsm)-{-*B7U%AXpUtSnna((xKP&U?+o+?*TDmuVElQ-X%lPh)L7~lJm-+6EO zjEs;aQ^OOJq`^^DF==3YUVoCKvay6*T;f6!fZF*56o{;!uBaaFuAG7n+@w}kbQjiS z=a!T?%W^Gqk)3l9auUG&)b5`7M~%~2|CdMX|NiQKdI$bI4I*Nyng7LUkg+?Z>OW3{ z_C7K?@NcRn|7lVB2ZKK~+4_a`KUGcs$D-uko^`S*E(4nA1{6=|u621uqNK?<57|v4$kOlAq+6;1ZdM@YMlXe*pM;FZk+#olKg%mWo>R zN3u5zl#!=#E}2#6`9J!OCX-_ZYt}+)kwh^*g)g+RSxfs-d?sZpxOSjF7;Z#h^xR>m zS^}6V8O&3F_c_A?G(h;!gWGNW`@D6X#w5j{G9)6WwbQ6&4Til6VMXkKY?Y7`jcBs|0Zdczh6t`VsSiW<{!TG}!4Bb*r!sLcM3Q-Q zEfDJHgujqjGXQf?j+4t*?kN(U*e2qRdvTx1^dU35zR1S30o z#9ckRtZR;W%N#)noKgtK9+T>G zcJeY|lH$-|6UweR>$3L|*uFQ_$-karVBrK4044m}gn}TWqKicMtR$I2dmK0`YSh-3 zqbIAYK8jON76JYBGQtjXXf&^rlO&NZ!yhuXBls$WuRoNeyyR_qcD9|iP)iZD($TWW z7sc2H`Q8kmp5V1KXI4sNT<0-tiVtP`kAL~Du=F6KxaUIIZMxU$sGbFTzPe)llrTItq=@q;xq#$7m9TX6$Xd^PM6;0>>zfBgCl zrA3mZ<0C)Uk2jBfY+$8qu=N_}GUgYwhc*nSx3v4`G{+a^C)VXU#q3zr9)L7+7R+I0FkDPX5eb`S^6%?ARt}<@c!R(5Cs++QFZz zu3gIkjdRaS#@0$l=F8?wrZ#N8EQBqsn(1f*>Po;)eeBMiAW0r6g9ijjfQ%TBm>^+H z0WY2t_VDKMyrANFncwa(VXryC(t`W2Ei5pMzqUzeVs?9fuPzD;)YR!VH5>h!kQklP z#Pfhjsha=O1?hjU|L@;{KNfESl-&O#ornF`E*Au!2eF-+To)qprI2#tNg?v9T3&j=E$tY5zy*;xqaqIlD>e1Y@5fWsIDHJm%V2nyy zQf7YDMLRD``qYNPQSyL<65)qQSV4f?eJQWJ?MJ2gL_}KDXbWOozGjbJ?tk`r9JGnh zCo_WJa5P`{1z*Rq0IzmX$l;O`WS+(FxQV>-?)B~yL2?1^Cut_|iT-nP9Nrca$Qkto zchiCJvE2PPS=N2jJGgv({d$b}J-XBS2nOD-=;UyF=`O_+pr%4%Bz}x!>n0No^&CsJ z91rGot3P^-UyJ%0KsjX$gv;&G9|+@)&2ZVPaL9pnmn*zvFp|G$OgdbvE#r)to=W`S z1B&Ula<)oZ~Mr*Q#y?H|nG?di5ILmlYC>@1IofHHHeZLW~*pFHRg$ef`+{ z_RZdt4jRlbj9+ga6Ck?NM}SawnkjH(Q3jMSM`XOdC&kXt_PU%U3UHk>WD9@x;JKw+ zSNu}{P1+?DME7am#;)QH|M%m$chPl|#R+b=?+@EsR&mt*yYvqm=ylZ3T}T|b9J{pg zSvqOcHTojYRzTU=qqk1|eDu}*Oj_(YDYv@P>mQTjAKd>qIC9nBoBiskSPpx_wa+jW zfLCqNpGRu@m|Wx)_cj{7RlyKXvooOqzlu0KzXGhEhh@Uvj5C)f8z0{7MLAGrPlGVW z0kH6USePUFi>*i?yw{9SmCz8zaR>}Ylg%(?=g-lARc&UV=v3Lk?k8Y$5RaO9D#GL- z$fZv~sL{6-tX|Yf<9mhDYi{Ff zM@whAvL`oYH}H$Agei`)vNDDX3rO$*thJqk9M#sf!0d(I%E>Q`x$cs&8AgsmPuKRm znZeSTwuY$>J&XR$b4BZ0qM8k>}6Ef`cTk_@e#%U;#8jJYDcrs>-Vr z?I&r1p?B3HgXEq*mAQCMN?8M;vkgnu0u`hIK|DY}2}_9rwnvdij|rc0M(uNi?=nOh z8{&+2VUu(5Q>*ZCj?m;hFxY1R0-~J@cPrOkHnOtn7az~h3V&OS_%WZ5Qm{Qgmt4z~ z%y~=5W(X&xDC8|RboR=8?GkQjmHO|m0{?sEf9DSTZKJDCr~hk`y|tftUj%Cp^`0fy zJtPUhl;ZP#*9R+_{jt$KYyL>Iz}$pVkoK>(M*#&3Buq-g;m;)dKW=n&ovz-CL!+fI zN>mE1EC0;bEC{durmN8BXa0+QN4*{2`!9?XsXo2<^WCi7@ZPptidKv>6065|6@OD3Z8x6x?Z+2(_ea@!`UTeJUc(ukj?vP z*Ut5o-auhJ>Z{@@4PJ}rk}5S5|*!8p@;dI-_NeZYaS zboAMod_j`DDW2k083W{rE{>f`%hi6#?qeqO^l~+`z-SNzJdG^ zA;49cYA+z!3n*nUY9U5vPUsga82l)e1OPFHaUfhupEAj)7Q$s^Xe$xS5CFFo<(}mS zkEz0M_Tm$fAsLNR=Up_%nXryf)!aOtU6+_#WfAT@;E@NDGi9&Z>Jh#fFYWC;L1y;s z$MCjJCYY6!WtWBi-85T)IjuVMiHpF@evcwJ`BW0+rnY-#;+4)<2>Lg_{REtA_PW4- z?UGEoYGD zk|Q7|E8@Ta#rj^pC~9?`Tv=|5I73G92^Z$UrS+_Q&;t#6w<@w z1wgIa3;^YG!6^_S#Go-2M`S|{n)O`HpXzt5zB>bE!SpF6$N*CM9xDpMTi*<+0R-{{ z-KT;5;*+OPCCsx~d|fAKa4DHUz>baylMCMZ$Oz;MKZqZ`^0MY-aY5~enhUrOL~#z; z38iU8!hZN z63nvu`M3@z4-({0Owg4mH11U8*hK{?liRqHAnTw0C3|_hdE6*uQlcJ z=cI;C@=EEKDDNxjxRVps@7{No=lZ>A`Z?w2U-k<>>-*HM8|$MBOG8p9|1e$=fmvw0 zvixhj0vXdY>udPj8CJpM_~zDT!Q{f+s_FXrvsBhr*6c#w^myCy?GjdF>C|xc>_pZK zdzCGaJ~yAqn$KoUZfz~BuZ!o;43$jIKw8BbTPACMG;MyIB!}c9g4#+L15>Vz%^B!0 zd}G}j21knU1M_R5g{;OymICu^!}S#%NKq&mpU_r=WQ>hfw)*_4vab&?HfB7xsmEaT ztu29u8sOCGL1^YGo$T7;v~V_u<~iJWJV-Iclga3rmHmaRuO;)9ta+)g3-|jsY^Pba z1Dn?E>`OnFuWYeBKF!t-thy~PpV*i?ytpjOT9cVw)A>DWJjzk%**eg{KK-lDba~Z) zy`oLe6j7E1Ia^Fd5iax|&hI)`LcGwUcp*74?oXfOKUVU7`lzd*fGPMOSy(KWnxXSqh z8k&UKKkK!&$jgW#Hn*M-@W9VL&5~O4|IQHczt{X%cK{l%a72BQkCRCdj8DuafFV;A zhLclyK1Oxf6G6~C-W-r8SNBld3?{NS_BV(@3lSZBw1ykwRE{M@Vi$&Oo@tyN$;o^) z^7*Cyt(lF60;SeuvqxMf#R`>M;MPdBb6``XXrklAk*9Glph)hcbIOyyK9{|l?PCW2kt!*f z`=ySwc;m5FvM}0`yzkZ44SM77w*t?;FSphynLn%UbEFTRDjJ9#ZqGhFD={&UKQ+|! z5c&datgqIb*m+_1Cl05*G)(G`R7vmcrXsigAa0MEzN3P6WCtX7B%uTIUNa3!mH3VQ z9|U?*C|ZJI5)yHQ&b&deCy65YsFX7ZuHP9$4-5t~Xb+9II?qI#aqUfcNSP0pkFiiF z9g4LS5|w{^*g7-iiNPTz2uGX8%fiEKJ6-{}t0aoV9*00?;-BM{&z}hNj`O1s0)0(^ zXFpM^8YAdKsJIqxU;!YJPIL>womK=U5N)9{p7Pk~t9Eo=Ob@k%)r3^4@wZ<#Yq zki56|oB?edNgjWVSA`uOlW$5!vL+KYoA`68s+T7dt#>%fIgu^Wd+6 zkwuP35S@WEF+2w_9zkgNY3W8cbyO;<*rv`tJ<$k-=EdkD9;W))iGJw?pQS6 zwH2keH~q?~jbFKkUzE+f{dm2!vH+I-HlyLj7r(){qft9o*oKBQHv7x-oe;Wr>)JaP z^xO63=$Fx9s2$OK69O7O2!ag|YKf=t?OvsD(FuTM&33!}$uD}$&wc7FS3ya~!?|;v zg2+}*sBKPxT+4)TOKuuQtp$c}YYE2@F8G%hSTAYpFot)?@W-fBq2+x-_?w&I{)B3I z&J+O;S8xnL-Ex-I?%P-PE zf%sKvkFldSGQ5OB&|%aN5ES?mh|z9xxRV}$ ztAJ#LKCrW%8EES|h{!m!JO9N&S8=64ZaoTCIzR@%^j9@EJJpH019(;aU{o5*5&~{} z9dJxmKO-2d>+Xa*=_81>fy9vwlHGkD5ceCnH@f$${k6l9-ab1%#4>oVL|=Xk7Gbj! z_EKP(W#0!-SmT5ChwXd6jV!-E_U>HAgb$+rEHZ3#*DR9aGCMSa`?;5seW}v&DX(if z#Y^yj`(+?l-(I)&J~Q9+YkhEiF}Y0aoL$<;uIR+Y z6w+NqQ-cTyfnNAJZ1QMx$68xr_cvEO>o`)!IyT|gVmbw{++;{P9EV!Uu)WT( zV!D~sqVYo&3bv9hI#~|7nbjLW8rNbrOr37Jx4^pNp*0<)Z7O*EI6Wl)yjL|FX41XfA}dx4Phx%-_k3CB3~Hm6J;<3Y1hUJ{F-1 z$XU_J_14P;VpT9+jULF)M=J0pRp{=n`7>3*h*D2+VudwZ@51HX+mnM-Bf&J}``-mXRfc5_2b_L{81}=;3%Ri%K9J2D^Xw*@(x=4 zIbLmT0nm80xq)R&%t8}W!_vd4HEJen71Fax$HyV>M%LU|{se1e!wd%pH=s#sX(?-V zK6`#>Y0YSGeIEz|a_9S@sBiwn>f#31;5R6pUwmbK&ReB{3qfwzhY3 z^K5B%&zt$K&8?dwQ>H_UI+KfhoOO-GErsPxrKL@QyorE;{3vo$fzSs7SAGPZcEajY(Hbnta^P3qcW`QTRR^kn(iNLEE% zUhiNb>s#{J?3>S@)8^*V`}%8_AJAUs24$spO~!v+4qD~-K#|gtrDZ5?oKV4p@~V%D zK0U4Z0EJr%^2NzYfUXY6D8%bp9Z;w2(=b2su}Vrx0#;V7`o2+IT?yQ-$t8;iGt)_W zN8O-EFO*vK^OFt0M-MB;Cx|qa zOK}#J7nZiQf8RU5q&v*fo?cR#o6#QK+}YhhL1FlQEZzpVgh!^1H?4aAT(c)Yq3=!S z6_)tmEMa6)d5R<2Gq$a=SyX@zSX|_p9@#a#r8K!9J2as+JESr=V(?$hEdM|HIW%5j zF%njce^#$#5tJBN$drU||4Y64duUhbus6{mM%Ln~$dSJqW~8u%2p_)mudgV6#imQAfA8KM5wwZ`j0b zRH|bIlirnatfm4XPgG~G<`Gk?NJuvk;|W5IxoEMpn}yzf2~UKU#EepjvkQN)ai+>^ zpLS>7U;_zndg~b&k5q|1UYiq7={H3n#&9I+*W2am%dEbphX?O`++?rLPJZqCh~zhw z7AX!D;Aah(!!fP^a+^6xrp^gZ91KTziTIrcNjW=A;3P+?6zs%OsuXD5ObFsar(_I9 z{6lEBt;9q_HGpA?RK;AP;Kg&I2T@XXba;%z1x6r2DuiGf>D8Z+fb`~3k6Vs zNWF=%G2Jz6GgX z;UAuS%S5S8LF$#~R9-#5s+%At+Jebn7?SXZdIgPFoijQL%J01Qpp)C&RA)+{@hT_l zj7@8dh;yjtOc|^8hS#eso4g~~Y!#KaMeNJgwx1%jx(_A8XV<-x1)Gan0n`~))fD{G z`#!m1OX72dyt}W@l|+RSKuZMqgJ!L$fU#EbtqAgSK=#$m3k?coj$X+;H=Avnw1ja5 zH3o7$>2TGB-YX0v-u;&W9vwjIiv{O>LCbzznMd0RP06JL2TyycRqAceDQe$yXXk}R zll%MaI@|<4ySMF2$LG|(d5@p^+J8-br7Qo}wCZQ;K2FY#j%%EsZC{Bvps1G@w~L%C zxES^1yZ`-C=8JO&KGIMowDW5)Tnfb$*sjLj(RD<1>tX`Md>(<1@64=#m+8y_0*}yu zHJ=bLzxNeD(a`&R((`v&&y840mHNqy78BB$U95=hQVtX&grvJ^1&`2%?fSrJj$`pS zs78oDZetLbyqYYa0$vc3P!9)nv`h)|+@wYfp*m83=s|(*&2ASh1iBI(_(KK;qede& z9O%Jl?tX%t1A<#YBv=z`b1`M%*?6No1{c5GhL=$T)29YCI9~)6$EpQG$q`~y(oNyW z-tM3}t@b4iAT>OYw{bBTz32i6wNSP=4g-{fkxsyp*&YR_`kimCT~yt#Bc4nR2$G@p zV>TR4&+9noCAP3MJf~U zaXCO2mrS;^H)L(&IuvH^n%uioW@SLvjM|%wSHu?Y$$bMLW8}B(IL5cvfC7qO&MN6P zH0-ywM%n=sn0*3GDK7R=xC9O7(9meUYdWr^d7FkZrRm7T{8J{kTQ#1@xNPHC6;F_kBj@3T5od4uobDG}SJvL`}yr1=RpG&JufnBthPaL#K*RRsq=heFR z1kTC`ti=Y@q-uOhp+#G{7mN7XCVXGl4>iQ-Z zG$=tP84jmpjV%t1PKz6)=K1)Xxz)`1-<#_KOB+%jrrQf=egV+`G0WQ8TEf9$Fn|ld zVsoa}H#X(-r-vDn>+9<(I=Xl)j4NeflA9Y$_)w;yiW1|8aX5`gZkPZZ5QNSSaeN%k z^wK)^Y1xO=xkY1rT-i+1))E(l9+_J+T4(P);d2#&Z7grX7uGG7mcXBb+7Jxm4RmHV zF}}HJxwyrj$LcoL!EciSnkEYtmyGI`UU4{Gb8MCJg_#fYOUsLGGuk`g+<*DzlS(%`-r@Eo9ma?**BM0sUa!JTdaM9%gz&vS08^W`ObRO zvlvuApItp&Ryw*?J~Y?7@Fah2iNmR>TUg|9MxZ@=-RM{5!iT2ux~j3S@5YwXm->o( zIzNo}7R_{I)>c6nkECCHnV-KxRFyQ=dfC{}r{U@J@nObdW7^{HjFFM?bqm)sXooZS zt6sbwXLzXxfdiH(b1U8hw&;WVxO~n_KEJO5PihZ&K82N7#ac!+Gtfpw1FmE zZx{Ak2dU|cQDc){-J7Q>`xYggZv1&5=*x~}zm z-KKTbQD?*lWlgo$WK_R|94N4X`r$RbXF@*&uEXE74Z z$?HV1_fX}F_2OK|va7QbpPPi=_LbjR&)rGB0)|TLb~UeQ`CT26Etx{_2}C16l1-3^ zNEwY{{uPIEJgL$xH(m%D3$tweD3d>|oy#8VzftVfRpL4N@l6?Y(pPrn1}eo&ApCo* zDZab2l@g|mbELLC8f7YqFaV($3sRztvpUFD)_Tw$~%G5yFAG6Y} zwbjYdPY-|HIKh(=4r0-YWP%y`7ay~Ncyo%c3!9n)1c}`(Pygoc`k5#m0H=>6-1#L* zjSELcyAOsd#l;WaQz@<=ysuh2mJ~_;;+`B1x3dFaXxAU+@*17Y&^^Z~&U|pHgG(#? z(N#KJAg4TZ$a-6l)p1M7v~2=6hVCgGzb+lLHXL^5dICMc<)x@Xf=67bLgIxqWkpZV zB6}h5rzRtjf>P^`vGKqD^rt^M-f#3;!HZ*~{;+HHv_oer(gspQ?Zw7ZAG>&*PkZh? zk(oyK6U*{vKB-~C?y?QWU|CxI9`3nu96zNeqOoGiVVi>eudj#jwM@Rv1}8lk)jXa# zjC!GGQ+bVgO;ZJxvXrNT%6LZAq{nPUy}&(r`>q$y*IaHBkw{_!kx?K-`xFOuH*ecCax&f({Seb&{L!J zUTsgs6Uv28c8l-VY1=b9me8U(Ezu2_;0n9LWrv>AYokv^j(&IQ;qnVT94jUpF6Hq- z_l0n~(DF-pGsB)9`?slcy{Dgwze~AR#qsigalhl%T-?G7e|6{F3ja5StT%3ALs~aF zbd$=q#tUuqU6kg(dDod2by;89^=`D#`^$;_uO5lB$6r1g8~+v(l(Fz*`-1qR2X9{7 zGDt3db~1kS<&CF)&uBN?j=PV?q}@DsPWEf}w-!j)^i~w7-U_;&`%eFuVSb$VjkNvi ziCt}{R!?5{J9v7|UAXvQ{LeuWb7%+Jfsq-$xJG9Y!auE}!r` z8nnDEFTVHSb^i#b{jTYTo`JQx^#zY$=d|*ZqRs}7&Dni+Je0G1b@cc|LV|~TrPOq3 z*xe5i*#2r{UdNH}om{A)&h2IV?#bK1i6t)K$6_K0W9jx)KJqR6@;T=?rM zE@iaLaCM?%1n{;qPU5bjr5OKyFV^Ftdqp_^O;x80(ebt9Q`7s@=1+2j(rT-Jx)~i1 zr%zI^&=H}t|yqQU?(Ea7~7Tp)+@7{iMWD=ohPf?r6maRULq899ES;8T@-qFJ;ta;R?EcP) z7kYV5#tvQEX7Q8PQYtTLN{UOzxV2pYe&L7sm6e)^=-Qh)nc-oy`a_*(+h24Mv$$6x zKA(DWCGtqy_=$_~HllUGGokCJ_hPN2eI@O0K3^Eu6~;(k^?i8q+Wl{uvxSfC->Zi3 z6t&r@>hHNd7-d(6{d)MxL~ZLDkF#LK;CA?Giy7youg&^%>>C}2xJw<|FWD@{Zj}h| zrG^OJ+i{`iQlPMgy~@QGTm@E?)cT&6*7=V*hSFq@iK%@(kGVIlouJ0&pz3rjv+R5_ z{{^FonjVou{-+I7whxEd9#HX#LK}BVBv@x13-xl9sXk46li2lS^^2a-jah9uHe*Me z)@>8{i~3J8UbaLG2MNbM=H^>f+@BR1zPur+r+81xG@|y6!i>r-g}dqWY$PRm% zr2Xu?ke(&EHZ7j=ESt;Oqx|~q&I~cww*Bc(tGBURIO$TSCUr9P4nMiv@T}pHEc)Qh zQrO(Fddm?Y!_>=d9B4-`4E%eYd-AeC7U;Jks`s(3M`rdQ`LpWK?Q&<%`{DZ_Az4)XT;hpGdOD}VtqrsI3v2wxaIg93(`QBtsdkxJ56-oF!V4r$ z!*}+?YX&l!r*G}O^{jK|%d3pJ_RPi4vxnEpj&SBzvQb}V?eiv%YzpZ!IZs%jyp99B zcl4R-UOx9uIQAj>c2q0pUV5<5W2S~RFfo^#kA1fBn};K_W@?ptIfSkNk{^~fpOd-* zGJ8jKzLtLR&%N?|==rEN=i2AM1B)-#pO0B?XE)o*(b9}I{~z|=JRHiu|NB4Bb5>(8 z_BF=Z5F!$i#!^X=N+qd=Hc8ShZRgmM%9cu`hGdUH+0#(As3@OORAb+nvCfQTey2X4 z>$*PIb^mc6$9>$#aet5R@7uo}sT?)0*ZcW;J|E9Pm#DJVbm!@;eG5ZwAIrWJe>k7{ zR0r7q55UQ?;e+dc15S#btQ+-PYU8uMSn_$Pjc@MDXzpy~+>h}q!g4lle1;{x$O)G( z@09+?tKD;z8yQv6qrQ^=Zu#Sh`yc1o#(De?zYuWBY{h_3Jn+HoMTAoFYH<6=j-JoxpM zft^UX?(52_TX_pZXRpt_AGa3H#JryC&}7dKY+Da0FcxR>ek}|gTR-2jQpkV(YjL*t z`a=Kf>%7@t3&OA0K!@uibwKIGRaR4`8?YX|FW{N&1}DD2lJTmfwi8m`beREoVmsa8 z0)1ILU7BZF)eYxYt;*VCvMuhiUP+LCTaY0y$Vef0m3gqKTd-L`uz7s2Wl6AATd*}R zn5qzBYaU|n7P2uQ#34S!u_VN)E#&WjlidNKZtcZ4P3kqS4X1Hvu*(s-!5_kNmTq{ ze>9l{4aA;OWGbqX@FfgjH2@GecL?k|KNTX`=8=88JKYYELjjQkZIQ!nkz@6dF2yK3 zj8Q6$QF$06!vGFZ0d1o_QZ(#qB=^)7qgNXHC*VXFAN$h*d_{szNCG$^3Fznqw~+4| z@$XU<<7_iyd)$z&1EUrBfPFOD?pvHQKh9bAE{z0<8i9_TAc`g0h5ya0&W!0C03=)> zq<;m)0j>G>d`j;hyC>%f$VcDzMVQsPah*JLP8ane^}$8{1Gphpk__&60m!i* z&>zM}9FGY;eotufAiOj_R`=l@T~e6E60=(3TfA335S{sukr{vQxTG8@Ax$y<&R)64 zHzN^d^$Cmk&NB~lEfNnZf*9Jp^ofTrN)w$$5>wO@D-<8uK1_&eNT|N_$Z+q&bvqL3 zzdbV8{3u)T;RlN(X^})m)uZ~&kusYfd>TxUWC4+iNp-?OU~O}x+GbFV4T$k$R&!!F zZApydNsSGO-$j5e41#_%R7Z*|r=ed&Lk2E*BLG;(B5Y(qi3mGg28N&5CX)O!0Iv(6#Ey$9Q^EaI z$c_yFFu{ZY=+N-L@Tl7^=-Sf6dwU=0mc{EnBy3=!ggj7z3?Y#iT?>eUXe&(6fCe#O zP@f8lD?YkYD#IE~A;6FcJ6eVfXpxByEYQ>EnG6jo=3w@)(N<*iy6Duqmr}cqr`1M_ zh`J+xRA3DZ?()G9SR%KCK%@x+zriu_Ua5?MWnvHh*&Tn(b0*lp0L+=7u>};Nhkgtb zt6Yc*Y*anM6IaYk`xXhXfp996&L;e#KswEL049M#ieyFO4PcRcCZpOSEp>BJeOAmh z0i)r2j-*9e&W_9vmd^oZPOjtgddtis5zjviF}}Wg{z3OiJ0bU*V0~6YPLE|$t!3_@ zQZDA3B+);9-?!Y(tPS66P}7_9-XBklnxOEq@>(Ba6Fq_cW1uI2`Tij~u}Vpf@f4q! zbcC~>%(|&=M3mU_#M2Sn(&JUo`SIwY}|DcAi_Z7))wUQ?`$WZ zU&+F(Ob{*9n!DplJ-;#fElfTha;B)Fue zc-JjE$$drSzV??Mb1x5+zufmQ_PAmZ?ROiWcX^S|T(p=jwB6;!hU~y?v(SlV0BPe3 zEHD1gHoo#=z37sYr1R(610$6$Y*2m~v*P8Qxsv-Q&c`Ufbh)AQ7mxP0F%gW)*4f7q5%T*SK%M(a0EX>_YhiK9L>Dt5SoLynN>&m;Lm*$Ex41ZLrY{l%6A*dl<#==cSl>9; zdUnx*FLX$s>>J{{2p4)}#gMSJsBrPSI38GQi~oaruXJF@(u8PfB|1M}I5LG?(w;VR zo=(q;BBLJ>Ab9hZ(+dt#C}3gUH*0L%%tEAO^oMY2tq2-dJJh^oBeD6zs;b_BY2h4l z^}2l*H#e=XswS$U1T51)BbK0f!HQX)`WT0j&RJZ!LPXyPVh@{*2{qEV6Wl5NLB2)8 zGu0uXDRl$x*b(5co63{f;YH#3*K>EbY{Q|@5~Y(Y_w9HwDe_5|@YawZ8C7Je8x2BQY#6rXnsgDhm zw!v&W3z53n7*i9{%MkU&P=s}Xj|IP#zUe}4R*e+Lk`M$t%t%wd5+M52t9hBK0nZA+vE z6PEq0Vr&qGc8H66)0%BD39I*rQ(YJ~!6LLbateR(XpsbR(ew6V|8D2-W>)nBNqoje z7J)`aV-;`;fi1Og=Nqh?!tO@_`Q5eAid(K(S^PF;@A-NAVPW5gc*$GVx2xaZ+GIYk zo5m`x0&sXNar;?K7zRqt{)cnu7u2R7Vf27@5XjBc(W9@m0V>;;oI|h5XUEyUokKfW z!JBu8WPM!wmf!~#H#9!k_PX-woD`&me|n8vwZfbM{5o0k;~1Nc*P$HnI}30VP~yZ^ zSgaH@VgxB1&FH*}!ot`P5~NM@gM7WaZc@&q?}KC!qyp;t>Si0d?h=m{iUt!;;9NQI z$u(Hr)G$y*3J)zeg<*X0J@cNsE??wXY9unPYPW{l#r<&}7x+KUlUiRs2;CQmoVMCR z2U&pkk}>=5&Y{fy$5& ziMB04@=Js&$L^4ENhD3Qo5OHC?#jUu~973S}yp?wnbmF4u68;QySt^0^ z1}EVH*NH1eGebpYEN>r8Jz?aT1YGftreak{_i)FsznVVxjVSvFdGKyCf|VewrGh68QV8xt)A$7HDkA89M+1)3ctVeNrlFhHN(gB z9(E5EC*D1NS@-ze2q`@4vb&$~`|%$~9SQjzY1Wp!s58T2|Ew5uzKf#bS6Dpy+M?}( za=L$|G?7*|E{GjVF` z`0JSa2j-`~o)RwbHYrhY1kSEX@$`330GtC0BJ_h2G#eq)wsQ0tTkNC>1HIg#s;hq6 zdMSshnfZSDgoPKbyzD2u(VNi5u?Vlp^&2|5mA$hE+0s0vWO%!2dXJAVH=-=jES4CZsxZabW?0b1+A^8Qj5w z!9k%gGlk3N3-Nq`E@BQT7@C+^pzs$YCj{!9^Lvr$$meU74-O(nY-D62o)E#j;^&Ep z?2-9G4jah>FD#B`4=oCX?Fi39FlSmiz%3o>oDc#-LIaX00_S*v1exX+Z`XcUH7c-@ z!T?pH?>gCfZ%2O=_X)fE&0qC%zD|ZuFDNa{iq9^Jmk#%p4394^JVORX7k_sz&s|#? z!72g4AyNYVNwbxr$b?2L9PG((ulLJ8$x-!!VsYsih8P7OcRaKz)5+ zn5&UJHrYR>*EOY|I`b=^^WzII;Kx)zZ|^1~J=MYA|CN7gVd31M&}d}RxNpI(n|Fve zf6Os3HZET7X1LDv3-X@sGDnUmpE!$o^_o&$t&E&!iYm#EACq5{%NAv=I(R`z1`<^g z10)p?z7`&X!=nkngmBT^6tJ_#IBkKSE`-Y-=AKc5Ew^DF;%-vMM^f_O9yrqhG5lB)V8M(TE< zBsIr#4*AJ7;j+dD9+entZn{HWA2BuH&uE|%0g~Ha{Pw@BAP7cE%l}g<9sG}ZiC95U zc!hzRQh)K=1E+fIAZk^v2kE8n-u$C`!q%0``MMVSd`=4$EjDN`zA*erY~P--c8Jz6 z^h#NNlvWWSg2yI&THct9F?Ca*(vi3=%J5h%(cHxCeZsn1*!TR&V+F};vp4P!G(Ew{ z+IA}JWZ=w}uZ5c$o%he3=>_FXOE7^_&wmsv5hw^os`O8%t@EqEsf;g$YoFxo&S|}C zcVmU{L$qhrhe?Fr{`&MASbci6d|aJ}+?8J$LGMvxW7Wm$idvgXNsV0d$>H#AiAMolu{L^&hvKYj-84iz0zexLGs+rPs2u4n zd`2mLjg71(n)=7zowl`#ERArZW;zDr)=UTGu0(f0h8ZL(B;J~dTvN=3GM>t7MZM}qmh<8iQDeSn=ei90%sM}(fd2>Li_Q341 zvJ5Qw4di-`#mW&+Z5(^W(^F!}$Lvk0LZ|et;IPihWp zYx_#)GtJkf*A=3#_>$f#O2FWEbi!D$P1NdHnoY6hKTMAy3j|h+M*&^1ByAK(lZ*{xE7D z#;&_fJwr9=0B-id+K(8RPmOjc;g*1q+08UefVT~S&Bog3`yJZ5Z&`~JnQr{HO2moU zDtUsWrx}Mx3GsAA$L1TR%qX8Lg^4nf%XRJfSqDs{@1=G*1TTX=9LwGL>$9)6p7{iK zPt4ArJ?9jvZOw*)15HykI^$~dpP!D2zOs8b#k75idkP)7PXny4y~8+cozZULM@C0ooZ~;41rq zT-S8ea`Iub)1wdGI%vd6ifuuxAjJ*uE4H3JYD-N6%-i0dNtk@pYfm@74u7~%Hkov( zkq&5(om5zpk9lv?QRYVMZHFD%yDQ(NQ*qy&4r)KZYiU2P>B^qjc+ z7^2djYrJcT{N&^+BdfD9l#f#koJy5EPetkJIiC(>Sg*PSj)yXGUC2aDys@JpO!5h8k}52BfA9wE2e-4khu25f*yyb z#a}Q7L9m$9So>CIVIjVm^YC5cn*NEvtWg0L6d4#@C0yv3Uf3xVW=J7Ea7FOKX^e$A z>M581b@t-HJ;3ygUFyul%#5R)9B>_8emMMw1W2eHX}%DwbR{zRCQReqZ^kkCL6O{WJ~zqC)OzmSRS+__v=5 z_aCf$`$ndyO1rGy4%wN|BtSw6xcmC0aIO|fcfaPmdNax@8$tr^!m#T~?`J}z?klx& z@6}B(9>j`IFN#OrCYH=jmChFZ@8sUp*zcAdBr}uK`x%>URgD=+&&b(S%!u;|2;Bu;keY^oX`P`AAKLRJ=-o|(_cSG2s z5PqMu@`N?Z!gTOs>eeUNlY!?3n{z!y1K8*6W8P(YX7655q8zy=O|~Z)byuOVL|46o zxmNmQpKxEf*=Cf^tJn4o0~SPY>{|5jRgy4 zN89W2UcbJE__S~|cusNvX|B;wAO``TZop`vh#P~>+f~9q$>Y`QRf$e6wxHSGT~zcY z@8p93Md_dZSEX<-!1#+f>o&qqhB5GMHZEK<=BNwim>cb2#B66qPpp&KAR-cM)a{LP z-Q95b+NKB+OU}U6KfwVh5v-QpeSgXS>U`-?!Z8gpiV!ctf*}umde`BAzJG`WfgkWx zzz8i#4?Lp^*8}jM{@3pr(iD56Hv#>85}f)wy?r^Q9)~7`Sft3{;jE#ooQ;l}#4!=! zjcQb=@Asjlc+oCk>y%LtRQ50bt4{U^vh@60yr}JH_GnSZh2ha+cG#c(*Rj&(@5iuL zH(`++D?Xf|88KzSrefEm+&T%k>eFnY?X5Qe{Mkory0~~7?glPUi?gXx;9d^mk#>1V zLIF*#f)p}Hw&HGRMu?;#nM%hUGEzGI(o3Io3Q&t@R$)wm(@&IDh|FN|+2hnrP*JYc zb9GUMgDs$v>S+T(cM74Jv&OgSCWNF)Kg>Rc~w$C|+UJE?eJ9d(zkZsl2CU)8Z!0SmqKtvto8^Zk&Z% zInQ}3e`=mvVnzkPiyE)>@2t_!o1b{UHqRGmS(&$hv)LEr3!L}PTfqFde99N_4u5?G ze}dpz$9E5nB&e3*V;S6I|lnq7k1e z)H&3yO5oo1b~;2XOtBVA`$uWbru%;l*Hy?z5~3*3km33#MvN~27Z79Qk}I;B$2TtE zaF+yzp%H|avM?{1J2sLzFpxjm)iHf3lRLDqIEjb{$e_&|N1TwntT8SU<>d$rMF@ak zE{Mn1%bMsEMFUbG0H6pb&nolyS|uZsrGvwYq98JKQ-%ko=M(`ENdcEKDlk!&1(1lz z)HK8wY*?5f%gBK9)5g*SU~b_ygF7T#?3tL?C>U$cn*5nF&@(+vDg6B162Z=TGeqnJKp?;yTh+I*R$4lb@(NFFA-zOqU2D(bP+>-8IF3&+I{L;&F z?V5LAoOfsS_J0`a&X^fw^-Ll9|EIY#9h|dmLTc;G<>J1c?zs(Jiw@7Y^XySu;auF; z>Ci=CqHwY3=}_nM&dyI$ck3rp-f{9;`(LF`c0MU8t(+)|EiY>vYFJ!6nOoOT&K+ir zy(w<*$f^5KI^I1$zq+JSIw?mcF=};Xz4r55a#^Lq{f8P1LQ8A zk^1t>bXX`ox~S06tKZuvH_8W^o7L-U*DlP6wtQA>{7Rl3mYAL=x^0(TYb|SSE^56V zSiR1!cfo>UVkw1^K|!*BDBi>xG9jb%P4GLNF=LYk13XG^pYhj}9#079cOpPvffKm4_jFU(++sdKY?MOvGH7xP0vi*sZmU9bN+I0k~ zix#uGuTpB<+j!UDSZ;-4VfP1y&DmUiMbC#@mIpRlaOEO#%hYWvAO3u@g=q_9FnJ=qT z(+ySE#;G})H3d+j8Q>zyh4fY$lyPGKh@yaGcg+Tt8sR9NA(DD94G_tNJ%i-@!jnT~ z^fIV`JR_g(2pP!!;e|@|tPTg~wg0UVPDA!klsSQfGG=r+y=l*GvTBCkdbH!pUSds-$EE|~~O1N=y4^mqvu|1h*_(b91BIZg%? z&e+)4zc(P+%3%rL`VmFJ{SX}{?6o7kS7*YmWb>u$E~ErQ>p4esy$I(JMIlhm8|!@E zkY<;efuK>c@7adsw?Y!HERpPPpBqg|od~ah#8}^l^Xrum~#`dT_949Oo9xVsS zI54v+$M7-6k!gHG!N)u$P9#lbW%YC&hALiC`4FI zM;jduN(ZPk5=$q^P2YhiZ%Z)!@nz%uWC1 zR(G7;Ps93U*7#pgRUF}wWmS@EzW#xXxl=iz3l>P-8Pz-5$||< zXrjLl)CPM}?sz>qv}{%((-fjcp6k)XaPbZ{W!%WqhczY3kJaD2lohpSUQ>BPTH!`( z!|fo+PUWi`d}moptn}r(KnQa)zMdS+n5U(fGHbVfVjqv+(!1~h9kw-WJN8Z^!|-B5 z;{gE@E@`5P1#fQhQj(50DzH;Iat>bOKkikBpi$B{zxQ#UbdsXju8`n7*ylHzz@G0l zSvk|>d7pH)o0x8CLx$y=X?K5Aq>yq*7@~W#ot)KPYi{P5kJlz9pUhe{i?m$&5G3V# zc(EhhR{EU_oO1Sr0lP|}PN6oyIWEze%u>L!erI>dVwnz`96!Y(*+Zq6jZ+?-s=H7PalP^9iO~-9qpL9GjDC={wlI$k?g+}KGjyn^u|MtdTT0{Ok zY#`B%{GlPl2v9INF}Fx8;EZN+IYI>+c*`807F1X zBzt5|6ofz&rf_hsYK#Ihg7cGv!k!*UG%zeMLbjMLf#au1?$pdSQNBQ{d3du2BJ|X0*1h z?^pHo)T8pU*jFsUyk_j{iVnd!fxvWXN-Lc=IlN$y%WeNU89X&d_BurLJ*#3swKLkb z^~@=yYe^}O5|qyQD{VV?80msl)Y6s&#U!OcB_k6PZG!bW6j>G|E2EoR^;^HGe;6CC z?jJB-DN-}cLCRT0L8;Y7;$pG@QWm?o@LW?xh1K7KlO$-FV$(+YHm{X2-{ETOBw9N1 zvxL*sGBx;TM=Vn5TKAcp@syG_HdQ~x|2}hv$>A6BxPQ#XzT%81D5%$tzecKImnncP zGqZ<`Y6M2&22)rdmTuzStOB3mWRnj+@n8COA8GLD@aD_w_ zS=7j=-JEbVGgtl({)M)w>rWFTgo|H~9wyDqQRk=aMtL^hCON)7DnDm@kP6t*IjhcI zlZ14M(FL7|8{(c3H>P-NH|}u#B{=963Ja$-w)>nMm^y(}$tLppGv3uFG&fa_esJBX zQvR(2Y0O1xagp}il8)ZoUtKQy#q#rI4jn-4-6a#2n*5o|L&|88>e-j0Wk~yMLOCm% zRq_9Dt@-`Nm!bRzp-sukABLqx#8VmO{)eQHf8|65l~qL#CaI&@(e?g}EkO{Ts6f8k z*OXv>YUo9S$+3?~*1^y+L1Bi=Q+qoPw;jpxVTUE~45l3e4Jj*K+t2JgT7w+A!d0jF zpL(58m==OdquKNJm#5mRlU5Y_b(Ejuet+Nibqs}jhrTHy;}itjR#V7@{?uw?)xCO$ z5uTsc_gC?v_m_DqYSH7>j|Z8N-E{^(rfs>g@m1i9q0hN{-#8o0y&U~sa!AyiSyfe| zs;So&z<4H(lm+Q|gk!v7=%R-$W#{$FET@Mb+nmy=SL$)c{j>`bs?jc8;d8J}w>IT1 z5!!mb)?Hlx`qfolf43Tmw$;{Eq?kkoS4)wawh;H6(!~THyewc0oYx2p5Ek^4DFCrr%R7Kpk32VdvG{xZ(sb;APd#= zgDq~&z?N0pZSd$Rpjyf^#6QSXiVfox+~a^xDiUWblEY;q!+XR0bOH~B$;EC;PK|MP z7)-o>)G{;ep5M^%^m`f+Ng$3$?#G}Nq9JV$6%Ixr(p<=4naJhW6kmw=>C*^-r-}gPgNvD0J;KN4I(H9wfpXVWF_mHqI*&Kc&FN@~@%DVQbFNDhu zoLZ6P6gm)|#MK+mow79QP38PFXI(ox*n8@r@Fq9TWWKUF)Xz@d<9F% z`wp8WhHYioXi!w92I?M&uvt%UUfBDv0-w>l2`Zzo3mU~La;QzKKF=4tH)^yh{9r!r zVe*kG)Sr59DSz@D%3=BQsZU$#;Bzh8<~j-`(>w}Jxh?bONCH(-G*CjR0)dZ%GNdX9 zllpw-yKnL6OuK)b!EDF5;yV|>i{(idf1FtD!Ajn_Sc|L-pqrUYOh>ormC;|Eljr^%ey)gy{(cZ@lljj z1>grb7kk>DA+=*8#p8=}oVu053!s9e+@wnQ%2z#;v&gX;AhLxJIY_Bv9KbSRS)Ju9 ztR;s|3Q_Ah=aLn4n+^8c9Yn9GuM)?S&ZM`&_4sBGeDpDR>5cylSH3*XC)DV6GVz$h z8>R1@F!QEA-}nN5llI^r62cqxRb(k{ILTB)>VX1PdlmQQM!Wfkv4lEfw9r@f-z)6qf4Zbf{7lUpm8({7h)7aU}yl_8GwOPbeKew*B#q) zTC%8Sj2znl@L^EVPSL@I1~f%QJS@Rs6z#DJx}KHl1wM+|QXeWs&>{un>x)8VWXPyP zq#DI$qcGxOqxfvCFcktL2onuMyIB~FLMgB^l?E!3(P9oP!r>zE#AM7x@U99NF#| zYSUq*MyHIEH@0|uz)~em;;R517+5C8AVg{Ao;%rICO2|oP3$`<{j|m(pC4~S-w6O9 zooMq~(^)`?gHbAPJWywwi*aaUVZ>=5SdohIR1a!v4d1s~Ab)28!?})fVuQ+VXEQwV zoS*KafuaicNM`;a%dGYZ-$7EV*i-?QM&~N|Vb_ywAu>Qm$MfD&obx00GUx~rT>(98)Vz9P3$X#lt;UE8CxmfzqKSrE5WOlx9s zdiRHd``JXfyXF>GCE|he^k|F?zA=JnKrzih3EUPEHLlRS)y62uW8HEtaxBV9iy16d=j)uSzFQJ_uWImt8Fu}x%JC^2wVrv0 z=hGh-XV$#nwwkZRKN}wCnA_hrd%Au4QsdmIcK(skdBxhkuD8RV-;a&<4amQnn5v$d zc{g0sFp<_cTJfC|@yAeZ^+;XySoNNrYG2z{Tn|NG4I%~KRNUn*wclOA+XowP5gmO~ z{za+I>l*bpEUDZ)N=BYo{xjvTyipvWh6jirr|(QmleTOXE$f>hNCI_Jj~aP*T((Pp z;3l?ngFo_b{6Ad4{yY8Fe;tfmkS;>J^xx3<3S1xh65p!yVz6bagqCZP<(bwzOyx$Jfr95Q z6n11|&GW=FV;%H^%C1dtY9rHyex=4vGFb;U-Amn@7DO~0U<8rO z6g&^c9zTE3&22;29>2IhbUM6%Gj+-9HXS&x=qUF17I;2D>{Ro}sXhzc7A@ z;C?x^E5<8+^XPcFYpM8KB{TpXV&l$2pX;FNRpOWDaH@%G^iKh%R2G1~XTxNn6|IH` z0r86?+&c0~6+neZ#Zti?PSJ0G#}||)8jb3R1?e7#frn^CGEgP{#I`ZNiHb9rdIP>N zy1@z&;jo&W){MTOKB+YZ10hoe>$BUjg;g(NoJJD~drlb4v=QtQp)2M=Tajh*qo{#m zbmtx_W=rwO*&ooubs!ipD;%Bu1>+2P>=1cBUgxUoCr*&4!#(8|{Vg+AC(~1NMNg)Gy7s}MF(tT+`$B)XF?T3DFB`^4Oj*Gglof)n11TK1 zECWYf+w~;3#YRM{jbVt>l4+q!>qHx(vGV8Gn}+I?b6NP^q+|fMnaP9*VXejxPJYT5 zM!FvIt7Wu-RhMT&aPTIP{Po-_ygBmaupAT-4HG^{Kc2F`vA$ZDDyc>Og0p2~z`%Dn z1s4{^kwX{%K*Q#n96(`;gVsG_9HW@qi$dlsvO+Y*o|S~rXVJHTfV(E~5d@v4%LO=+ zl2z}lt{_f zWaD#r!~40-^$x775z(2kN!-@yviBA&P=>+Mu-HWE-aPE1QSqeH>KT0-1jMD}^z^y$ z8@7d=i7T-3P~Nw}3kJzt4Try`)pvdMFloC63 zr4bmbifCGEErCr`hN!VSb&n2NWNq$Ln)ykJ!*Yg64T(lrW=iI!pyY-CWBZ zXrd<`9biNBiiWF|W|-kybG(+8Nz0l1=sP)wmnXuiQvlvAzy?Kxr6ahZ;6B~@!&icp zKS;r+(lM;#dv1OIl6C)O?p6ceL+$Qgv?^zc3TsZD+>_n@_51Fka!jt@^)36ly5!bC z>a4>Yl>386`v0~#`Tc8g5c1k1)>m$T>R$em88)CqP8JUV&0-USD=g3(jvB;Ilh63K4FySG&;MzZ6ac7 zepT5Jn>T0qj+0q4_Bw51Vq(s+Y;b}%0V1IvQ5j%{XLt6r%FD@*8mj2Vp=ydIn#uV& z+-aOSHkLNo4}l`X^J`l;52xo)NP8fX={ezz%Xu!(8h!U`GVt+JGJA3JkLfEVL&MiD z$RamGj!^k4-v`O=>^lg(?i;Qg?8)yH3=1{KXIAGf=;;)@ zaJ1to?_2iNuWt*x-}3_ng4Htu?Pn9y>^Zki-hod3?$2{R9kXXMvZ2p|>5ZKHREEMe zSn|Yi)wo2ZhfxaOJ2YF`wA$J0I(iIW7Oi;wTDj@x>JP0e_IoL;Fhl99f$LY{%=A%6 zw-8dV2!L8@%7h&*veeB4*8|c!cdA%eidtLa5NXcdiui57_}f&lV48q9s+(u%#RCGa zP-<8p(mNwr#VP&ow5$A=`n&v7g|h)LxW6q<4*4lHHz1PEId2zgP$c6XU+tQUiI4;3vwxf!_Fpb~?q2Ns$A`BLlS8dptMiARm99DU>-81XoGdYb*;ySf zvckH;-1tz&S=kG&Y!(5HH+9tVr&Za|p~vfQsctQMG59%SXZC^jWk^fy6YV&*2JI$* zGtqOaf4B=26ItgMG6<#GA%JKr^55;nWz)ld+_~Jg*tsDbEuy6*gc+I}_9uwQgc$A6 zg6BX^_wP8)!W<%0|N8hE2~Lk;$WO$yQW0MLa*F>>CxTN8gdH!%QDK?g-kqUKah$(E zzCPwu;3m)C7Ls+jAPY)ZQE1^tfA%B5MSFp^V@5;*7KjdzTx;kG8jb0BIK%T_o6^`34}{Q|ThUZ1s(RyLWUg=9G((O~{Lc zEkl5nJtO?`3HxRi;i511l$s)%T(5$1f`e5QwZ5mbQnBnC1TmRaRTxQM*aj_qyB@-X z^)PTaqc_wljLaDiAJk=Ujz)uquZtaulh3FEl;)X1GURx`wh(Mr@d1vwG_zWLDEhXl zHwzfm!1WR`nP5lm%=w(^ybL5Ods+)^?L`DFk5~l`K=j z3BIgxm`T5EcNm7mSGC!IL_hO((_cxso7G{+D^k68NrmfY+%Oajq(1Ny3}&Q{rHf}h z9kSbq-IdI(eST`_CvG`=W;;>o*xvHdG07D8(kkwOvGIpkUKL8bbpz}5Wz8q^z#59% z1Bm2jxR9v4uMJQnkvK9MH1dklI|J#63TGq^S6w8Kz^Z_C%}t97y#BoFB(#I2s^p+? z&>|LzeVW}$+6|O!R>&r&T!qs+o7Z3-hZ_sq3l5WT$Z45Hp@QqH03YYO#2T|di zZzC!krABWDH)3~Fm(;C#02|E$oXtPm$+!Sn9lBR!OCXTQsx>S7htsCc@;f&&py{b< zlt0?+ofaqo!=TZQdz?oxm&E;9pj<=!M$3tq=-a7U%QrVTx=+N$H}z;pf2&fp4bf>Y zZ%tJ}T%=1KMykkXBVyD!i_GSKxL}tc`~0P}> znbS;8cfp{5FHjWnHGWNALaK-mMFXkqC5ZsYl${lt*H5HR@HLS@E+S|&a7qxq7V;W@ z#i>Q~g43rJfATyl2l|=Z4&gNQ^2KEXi>n70Er&S9lR~M1QJq=7;b(z=_nhOq4?4mb zi}s&7Yp6J+4Cv#`Eh!nKG7tT7bf}q67Y8K{dWs7WzZ5Y2l($N zAB^y=1v4rvZdvt6)AWSWn~_gFZ2gw;2OqePyM#vV+>imGcGgTw#`NIR2~N-Sv8?H@ zB@=JTxsBPwa}~qw-v!=(%w9o?a(~Y6XrH{wUa;+(w@u~py4m&)R8fcod~G#sY&I(_ z5KqsQd{triG(*=&AK0=}{QEFcRE*bEBg%*YJ6!=)2_jhoo0PW9@ANX?vtoPpiLPHS z$sLwnw+gbh#-BJYH!Kj1xT_W#A(D_tnh^lk=}PTGtFB#_{Vz4N{(tg^`8}J_)c?4U zIX-fT=|nzcrI4DwnC{xhrRa~ts>2O2Iy+N5E)_g;e4u~u-R;fNI-4L7yoVN<@tXqs z_o%FC2AG7pWcF8CZ_EMH=$F}F^Js;tPArBE2J3;~f7{{V+Q)v~g1EUNzx`!?I`zr3+&~dpd ztay7}PKU05ZhK#ffiMtS^coIlSYgiXesfoOPb4C0^ff=+a@~3zav}Q?rO7htqJ|gV zzX}QC8>y@q{gYU<0$@`G&;G}3z77kApFgn0-Q&9^Zd)pNfr(}c>|kQnEaKQSb5Mun zZNodSOCbaLhFV~o`VH};l$20yONSIlv*HL9g_eniQ5d(Dpb+_91hQ{6GteDH#p?D% z+sj$F02WrwaIDp87Z^Cel80mdGU{BCByXl}he5!c-2;M^>AerV5u;AD@U$m@5;vk! zFRh$UXI($B9&D<}<1l14?-B=qJ?B2DG2-xSz? zx?nG7QAS^g*`9bF*?Kg)>t%;(=4f%ig+_xCcEno4((ehEMSwzGJ`Qf8^DI7^p**tg*Q1>fNE;8ji{tPTm^6mjnnz4 z_$pBCPPLG<39a)esp!+i4&axn55?$s$wf6~Dq6aUVXr7nTm@i*aAc^>p5ua3KI>0* zcnTQ(49Fka;9sqLiE;WE(TW1kh^SIXpsKY$8LPPS`_;1i+^idiniUA^)t|ra-dcQl z$4|woz)9;<$0{0DY)LLBrWkZ4P3?}-zbSd(<3dQ$AW3SFkBY(W#3%)lb7?eDHAz)N1$_$LVq4pbpGS{6_Kf3Hx)|c_O5HbC|R+q zWn}hs`nfE3MfC1*qttAOzz)U}lhN|w_p#C1Xm6BS+0nl)WT~Bi4_Vp57{F10?c(2m zM`ev~jDa@$j(!Hf9@;up%Ow}=23@5Z4!Y`;s!@18U5BQQ_PfM#P8fj2 zZ!=t6Mxu1qG&DE|PTXAxl0a9o&?<}?1Ch1}FoXkBU>ks3&mxH0U<}C@9(%qw@J~frq`OEAQ9FpECCmqfWvWT^I#72N(FJ>LY{rpOuB8KqR0J z?f{qSeVHSp0vI`NW?B2%;Ul>9+&@f6NFvrl(RTM#_77TKNJI5GtFT1Vk`t9OU)h`EGb*cwqq) zl`7?qK0}N(!@boL6NT*^FZzb6dj?%R3dz?HE-F@{c`Av1|A73D> zBvC;bBuU1;d~v(1q+^D!p{n+_r}xt1Cpq6ct|c?_NBAjK73c27B^DGGw0sCkNh#q^ zORK0!YiX==+ubnKZ?|KII8g>55orN|sjq78zp8ptU76b3EvKTbvYeu-y_~G7nOsq+ zZDNvCQJ(qngOq|?a(xX^S|;W5hvW|}CBJ$T-`3oJgOJ!&Uv~c}@B5k5`YA9o)pD=L zo8D>5Elz2?Ats+&FhA$&ee(S6Sl?TBsIG1Y&!6`Ux?-@&$>VZB@|BhSWqK8A~k%gMEzNyPL3p)q1 z9d1^hw6(i-7;d!JrLNO=+HP#`Xk=q|H!m-&ydt);C?TihX6EyVwC6zuxwrEQ63Sm@ zG&ejR7|Z_Ln)dB`LPLFA)yt%g)}*iBLX(niCB~gkVVu4Zb}jjF=;M^&jEw)vo5P6ru`(CC~m===~Wh<^tI4Sn|gE zS26VINj{T9KN{C~A+S%NMw`b5wx?W`UUA^|OdkCiYC8$fDkoO!76@z(O9(f0p^jL}_xcg24^#sB8ZUFy`Stl%#teGh)Dd^Pu<;~weM z`M0F+-+j6N`4kUx`?U}3Q13d0)(7A{k`$LOH(yCM+oJU={grN)%d${+pmRug(|kgX zg|~V)4IKeoE+`z4Fk->3+aR_Uu+`e)NZiidd!NO*tfD@ubb0v>8@ zM>KC+=!|5DEr>HRq5_X?9b3~aV|FhE`okeWuN;9a?MB>$*aTe%gJS`l27hCWuR4k@USG~B=|(B*&x$bau={28-2O0 zq!a6sThZ*ys`@4zt5kA zlhEf>ODpFvYk=&vex*z~IT*iL1dz8u>f-1)jQ1Q|q+dL;bi>e}Y%=}oJNe$cKWFlT z)$GXRN3#?DR1sxUw(PB~%M4g}?R!0}&tlYNJDs+#T{qq8e9U0=mtC8#p8x84-QfI} z0}qxJeet^cYIU1;;`0mNeewF=k>uw-dNts*9+{Z>(}Rb*YjAIjUZx(LHJxs$YO|AgJjsRv4+ib z;uSU|jR(hek*>%!k+EwA)}!T`gK_f=jJ86Rlr8E1EAG65np*sAzxPgoP(u&ZP((n) zh>fNOM5Ss}R0PC`D2V7m1VykU2+}*!!O%N|-Z3C3T?7OK)PVG&0jYxWww_-(=iGDe zyL0cGdH*pCGkb=a?C&@0yVhs93-&Nk=hW&!D-yEey0@MMBLcKd1^#7-VR;d`lCYb9 zBx5u+NOO#yma;XlsO|z#-bYULnfvP_b;7#*<*x7&PYDa`&U=#L4}1_ywrWtt#t>5V zyObiuL}V3(eV8h`V4H-{<47v~N>D^}8&Qb{C_|@q@sfxrp1=7jp7PIePvc5eIHqqf z-Z@PO6FU=n)(6)R-X)WuLE%!u??{p$11{kamwt?7Hha%MeR!S$=3zm0`uypmnO7u^ zl~CXmhK!HIQItG^sx?FlR?Gm9JR}Oo&YNsj}fEXZF)Kbb3p5%>DzylXD zUR)s3p-9J>I0A}t$&moEYcUX8Od&BIvaddD5aA^?3PNOv8~z9}b+V4C8&Jqj49qiw zBgjP>q~b*8K>?tsJi%9bj}>&0l)gPoDOd|l5s+g)j0x0sCn!;niuf}ilSDncVUlzI zilOlVERb_^j1Vr=_mbl>RJ%_u2x@vM1qwE2 z9f1!EZIPK8(Z}QtBvyw-!gXFayPxkbg1{>lBLJz__M(0aAVGqXO-OY?#;Pa7EyA~I-qSY}u=JSD2fQRiBc&bb5#Inm6zI zw-zO=v`rjbUwcjADgL7&W|Pb2iPmp#f&+_Fwi!4zkTYs+qZ5SPf5lx zSaZ+J{oX=z#e+)cOjK_*XG`77hkj z2@}7IeWNWVNC#YZ(xO+Sh_x#LUmng3e%$y`#y}i*porgRvh7r>7s+Ei*|ssvu`Mbb_}2tP!3yS8$GKf2!vM^ z9bnPzYr|Ss2+txqc<~kq>-Q(sd0o4n@+>~%t(i3Fi+CL*<(#tr!sKZ$*Vow{&S~QD zu_q$G^|~FrlcRZH#wuN-ua)Oce)9L3Qx~fSUQ1=3cp4R}V*5!@l75Y6(fbIry3@HP zcA8y}SUq%r!fuNM{PX%MQ*OxuQWq~^qrNRfy{;bL|9Y*%?Z;Od{KR7?zIDa^2-UM2 zOHG%ESQyJFu2;xC(f9-4An1r|F{uLmeU%bNh{{~2sWJ>kbl(FCW`slq7&PdR z3qMYTp=kbNP#;MG(hs6C59)cEyuQ!agyb$E2wI1D33?#TgdBysNk(iVAI2;*AYG>A zcCa7VVnCx-RUfR)hcD@L6d#cdjRl`MAkGlLB8D&@1zAYp;J_k{snL)XS`G`~ zY2Y0!v~82lWlV=2)uD6cb};rR=`&At9s{@>o^Sw+UE4mclWa4q};RVhR? zG99VnpuRmRQz>0B@`!q5ZD@@4wV3vim<)KPC`QQLQ+k~U$jk86COt*(Rw;iQHOwCu zsvZ}q81+&yj&U!}@11MQR9s_4+-v=~HlJw0PmxXf(S|-M%^?py?&Z7CybHI9j?JEm zNqrYn5S=iVnXs*bTzoCza3=Y^q75GfxVtNaTRTSZYwY?|?2mWPfR<;_w`T}3+7JE& z4}Dr|bUdKpUI!{683+M}j4WNXY|qwbPgUkCVltY^Uz%fhmJ^e%h4RWLWr-%qW|1Y$ zBDJH*uj*X68M1pupb#C{L8SCSC)z}GSDk(w=Rk7ET5_I9iaRFd&bgGst|O#)AKGm8|A!(%QaK!seC+lryWdyWj^fzaq zG%`Vf%wF}(SA38x^C+cHO@*0r@<`erE5;jG~7Te&?|2fwVcx_mfNL~+Y@73xQz9e zwSHTfJ7ktyze`={P40+B-l$pLIEN$dR^D`FUi7%+?6*8tmd!`L{6(?+uV(qHS$Qil z`5PK}>jU|~OzvkfI#M%t(~J%)=WMZbF7a!egLJH)Ew6Zi;9%bSlLffzwgRyQ65I0; zg9Z3jo9;wGZW@9=7`6q2(rADmZp0>nDx5_-#fwy0!EKv{;J#Q;5MQKaShRb+NZqe! z|6tJ}!(vtOV(sh22Mvq$G>Z+_i-~SU`kW;O*Fod#B7+%#p9m^e6Qu%~l^d#; zdvfj+KV0q~n>-y_?jx=eJXr3fS@Gyvg@<`Xz>G@N^>R3)wcvba!RqbHa^Qx+P@oGkPRfA^rVA2lf zIz=>Hlv~>cdyCv-UenOHqc^tZtzXT+U=6*#=EG)o4O6_fSF?81ux8x6Cd1Hzm#;jh z>M~3G`GV&2#dWKC?Va1ZvH3VY6@80qzDaD$&*j7z^3w^as^$<^I@03OP9Fx!BI)yb z68tX?7s>ESBs?`p32hpmw4)_p?6RK|Un~C$Q-j7+F)2OwqE2sCH(j1h*=Erce80)xBHnMP@qAAFN9nkB znO9qV6U442x#YZZs8s$`k#@I5@{&)Zm3?ElSgO8j#*<1~u2ySKT-^z!6ser3=(yCG z1xB(~gUnQOyitp;#jAr7Z4Fv&Xs*T&)a`-(P5H{L$FDW-7@{d`JTp{k-nJ3m(-!^3 zs#SKQ?m72W>~-jk2a;DOdU8*uz*?;pcw3PoOJp-n^LCgK>VIaH4_NF7-}<2)mXr#PLvRx zGYAV>lA-4$FoJ;!C;2^|F$B*T?Am+)z#EUmUf?$pd_hIPo*6DOAVkM(BY@77i$YA~ zjH)Pe#i%Y91ynP`l|vpB6e@L=D_U&FFLv6iaS53Go=uCD5seAc4C` z03U@bZ;~UD_<&N-xhffXg#@5kh3N!i$p>&9i$w z40(f%g-G|s4kF}$VIc;)=tJ~PHN^9$CS-M{{aKMCR5x)c=6zp|a;ul2f4vr@}3#A|6gfB}~QCPQ`tgO87Aqf5$LZUJn{} ziA#efg>2qA1E2R|-6<|ZsmS%c(9+)Fb|Ev6cJb3w;5YQtTcM-;w3*X#fC9dz_Y6ET z$npD(C0S1rUcz*vKPu3EumXMNmjVqZE@99l?Dfj|JXbi&%AI4u3UtNP^w%FhM%UL{ zSqqX95{2_~^$YXNrIn$jjWLMEQkXl!{Uwyh;+d9}1}=*6eWrcdL>_Sc>dypL$Ck0~ve-?cNVqcyv! zA^lCeqNawz9`)p&ZUyZFTV&;)uP(*(ycXN4D5j}Z+TA0*eFw?)F1NTO3MYQ@_H~c= zgp}D)1eWK3iHZFaKWmRCY4aoO+(H;Otf+_-zocX{YyCCrv!oDoXD}1~`X@ zImgF53=Fw=mtu9t#oEcq^fxC;Ucr;%a-WF!+bQX8Iq9wi1@xAev=7Xj_apQdP1;tr zx>sxrE?mp>n;Un!` zSNzOW!r1WtOy~aH42JuU2WQv}1}o53NU{U%SdiGi&0ta+t0z-iBMFyV;xa>$jUy1E z8>`ZO)StDZe>^xB|EwKNHn<_C7}~K#jZMsmMs9J>C%=GeM@w^lD$xI8Gq=RIo^26C zVIb@G90+X$2=QzPNv!_%7yj{07U7SM8|5q~kUYk11j+n5GDzoP0CWxABvwGUMd;16~l0nUzg} zS6Ki|Gb`)BvbBlXWv6v~lg`Qz4yL)IvF5XMgaw=$71hHNkr*jA;4vBypUrA>CVb4J zTp?;>x8R8s6g!RN4vHF)-vg#veo$_e+4W4|fHLa{3YX&G37DENkD-LxSb73HMtC+x z9-fj{gi`Bd;}Nngq~@!%XkG)kJ%B*8vfe2Wg7ipKVWoZ$X(fP50>#bmU&=zZpiX(A zuXD{evv*tB>`FZ_dkbKP=)?9+1_~lnq~snvD9J{`YNH?ryf#9`i0*Eq{#ok_o5}9^ z79{Brh02CGg$MVbIEhrRy+%^bOq>C1pj@9J>AgcE^UN_5y4$p$h5NoluRM3 zr$YA$b#k}+DRoFGJRU?lSl>R3+hU46jMALtuiuBv*+oS`8`L_UQ6ok(Tk%;f&1480 z`~v#~NYZA1WlDH}b7x^e6q_Csk}?;hGQjgdCj($t*xf3uZ={vGJa{^M!1gH!KA=EQ z29ZaG1aJ)fh7@RGT%@5OK|vCM-AN3E4$cNNvfL0@FxMhAj)O)8a77&)!B28_f_O6w zEa-}kYJZ+@*^RIzqCSuyh6DrPjv{Jq+B(a`V|35c3j?{X{|D@nXtC=- z$zpv?uo;X`>z?|Xzz+%;B#a@jAEu34=p8!*HUVsEpf*5uzqmAi0xtn@#mP~Trp#ap zhf#(KQ!bE5#vc`Y`WFS-*fBdi!zfkhT(iN+dL@&^U3G57{1gPXsxod?b-PDVHSrtL|@v|l?K7Squtzc1Iv*y`Tbm|o<>zUS)4Z}{$xo!Gdl z@#3AaQ|amWxzTa;vGc}`9o-2_du-JE^fyo3f|$VZNj*czfr@e<-gtE0Uq_&*(?fMJ zk;gbgSG+RL=b&JcU`@sm*_e}lRwl`k7bcIXYn%$XS)3$|nmT4!*%g-7ldN(j)9~^D zfOKRCzJAxL&Clpg`1Z5a{qI zmvYD6Wm)`WOa#!odFWMzreEHC9BhmwuRFGQW7#7rl>8<=wo`46kd; zy?M8F@WZz|;h)^=P{Hbk!4^b|Vt#A^axv?#3UvFwTHU*iRlGPBrD_`R04BH&eXytI zW93Q>D=X;CF(3|VmQjh~ZB=YjGpeRU26l_zS1?VD+tXEAE|#5lO;I9)MBJ~)v0 zvte*cIe=y|i1a#>Z6vo+1W90k8(x8UX*mn{I+U`PCGND64 zT(nITp99d;SweNfGZ12vlI%uj#=mFG@$B}lXUH0#U{6!T&V)6sB=&hg`=EO^6F9Y3I&U!@~cq=P2pe?6&FPn zbJ64Kr%J6-*+KISFH4LA$N|>`xw!w=Ra$%0EFNxkKkf(yKi0tsyII=+dN8C&LD`_m zgA}EFyxgO?-s3dR(>Mcf66JZq)YCG`!`#->%-hqd-_zX1^P=gKOA4Nsqn_B?J~8!v zV$=WRHoMnF1+QCrUiWOhEXtqY&=170WVEyghHQAu`_h2iz0(<YL6aWMRzBh0K7r*vAyGaFram+^pJ+ATAXDG4CZ8BR-}t7VZCbhPe))Pn87@B0 zqI}D2{gS->sxth%a5y+P{94+B2a9V?k_hL!Ix^;@^tHcQ*NV>*>C=4d_z{ zc$*Q>-4xI{8PLHV*sc)x#wFl&RKU1i;7Dp_Hgj&*Zt!G{M2 zXz!AmP%yhJ7QD$~yW+t1{x%>=MynB!N|fE@d%}6Q0d>I`ArdkQ04{f;^cfuKr-5t- zghMbpL_|pAx%UM_HZ+L~cy>KH7eGfA>A09419X5JI0trDGDu=7yIUiTaF8UyMVZ0Q zO#=n!pmaFOpSCaImUH81ICU2o2|xvK){Ov3cY_9|C>#N^hlY5Jg_l$=fCe8h5FG?` z{|n2rHvaG_VR0Aefkh_DfTT@22vZU-ALZs}APpUmhD2mN6Sbeht_veX@n}g0nUqt` z{qx+gb_rW3WC(bEz!hME#a*BP4JvjAK45v&NwCKe28(l_ysB$rBS~f|BMC56TRAC> zfO3^Ykw6z%C&t4STX8}J9(*_3e!zJx^O-uVhqCm-DbNl)U=84eu%Lkg5JBODo6?AQ zp7&v303l_!11A7Eo$FJ=QviM0)J9zpJ~oPDQIX4sA>waPClZB4N+5ANg3?+gj2hwhSOLGuQchpFCGE2YXn(h*lZsUGTy#HeKLdgBJ0|NTg*{ycX4d9O8Alpcd z&drm-@r8G=wsO8HMt}pDbIOUgKSlA>8F>fgC85l02$QgFi=-#EqOE3Ijn)a`O3U8v-}ae{PCFl)yn*pf&6g} zaGTnL0ni<3PG34_+GI!PsG>XVrI$pSa)}r4yYcT&Oc!=5z{M7bRTW4K7D%lZ;J2TB z9b(DJ1mv$5-WmsB)mUM$P-&)6dA(3oyl4++(Y{U1qW$JYYE?xVgGK7=MOvK22gQqZ zHH(jKFV-_J)^9C5$znf_f7BCsj+40~UMA_RTZw6GiCI;N#bAl$dI?#))Jn6|+Pw6t zTdA#hDLoYI*yZ26N7DNAj#ks#5`u^Cn3uU2mbto>xy6>%b!D}psEg07dp8j%*pd()TX8k{60pdd|=N;UP$-6oYu*DF)pDzjoM zbNnjvsw(pbE9sh5h2~WSZdJv8KNaZes;b)Ts`B-%IAOb4>bU@2&IHb#GIo-8kWTIE z)g9tBotiaW<~2QTHLwERU-eUg9$JSLXz^O6X6=Z1?PzOFnTaE16cp)_5@Ck$vg^fW zi4d4s0=7zQH0Zc0DApOw@2$fIOT3XTk6oYdY)JR%Ba3+7;gBfg*iD(l1TE@> z@7Lkt>cpz+?8K5|y`J4)b3PM&AhuqSvPhAt*H%+MyhFz*y6mo``|ajbe~qt>GG%xB z=fMh*D-=F3KTQ$E0#RIdau<-ASO`Av!6tACs- z?dPyi1p~4pfEr|ACjspp462a8rzGGh0DKsM{Aj2X6r4r1GlGP+AZV*lK-et-U_tFp zvLyv2O+f;M(5+1(S1L>7l87q+1K!CFV)8)K)D;0HLXfaufP~;DCQFiJ$?3ZvQx3@x z#(UWpzOj)0C<^H&g(>4av-(k&-&FEp?Ag>1jDe05M2 zAa*Nl?zWbwek1Yzjnwxyc*!oA16^_#y5t{pDID0^$>%KQE!)r&vJolE63?WZN*7Tg zL85xVO`3}wp<7p!Luy!$V5gV7VkArpMnwVXbT^Du7KAtSH^Is?JNl%l!g#|pHeeS4 zbi5tHs|Hp*J~t@@WHKM|xnMJ}z~9M?sXvXbta-S325z#+nx83}S!AxQmCr3oN=nqt zOcl(}!J(FyGxM2q^Dt7D1zTSyrvQjO^Yau20H)T~yB6kK7v}MJ{J^)>im{QV`Nig$ zX#m4jKK%(674Z_1FBaxsEUt8|ee3_aSg^EOFgYSEC7r(T`S}-C9dop9dZL^)4_9~8 zewi8mx>`6sDlH{fJw915zuY`J(Xq7JFh1Dzd7*3N+kYk^p*M*X2Q@+VfQA&uW_yii zof%FBxn}wOIlW2*nb`Mq7ekfU*OSGrxk8U3FA(F5^9R4IZuHJ=Sg6Q9lHan0{fU>i zkFTG9KwwaCNN8C2(}>6@xbty~JmHbZ@k_jD88I$QMn)zkH#ZeRP+VG8QBhJ= zUQ+$Mwv_RrzNWFVuIN>ETVYFk=j*07J>6woVlwF4Mn~bf!GS=IaU(gA6P!~s)01Cj z=fBR(u|6*?u1qd}pZ~GCIyJ-Q@T{7GWczVCig#GYi<|pkIIe)H?F&g?ZE$&$;DLtY z2^8`$Rb(r#$>jN8RVuc4t>91iW-3IuJw4Q1G^V#1Cg5v7sb8G&CiyIyZV1rQu<%vS zAl~3@hC2$urHg~yb>G7J*7SJ>IUCDv*$C@fXImlQD#&GPSeAD|{7*wOmxedP)PenNyADx55FGF9SS z?XJY99~>}Vkp`r9TO%&p>3c+742@2UK0>KTjk#2LFD>py{hEBN#mGHm_$58{L~#oG z@ANJBYt6$umx$1QPZLU79Gae)9{*6uE`t`Kk(HTf=R2L1UfN=pmG3HcJ(~{aDYA<` zDB0yzPfus(6fb9GLL72rioUFYBFsud5|68M0IX-w=2O`lCB0Yu=1KR@xH{5D(g3U^z=u@QgU!ts@CY@BL~O!km!>$Yb`3oW~! zTikBjb3Lx8UE;8Pq9@9mK3oTp9EiYX>SW5v4#(4YAKnyFL6@OOYB$(^9WKhj>t%x^tce7&TWm29CYe~DG@Fcxho&;ulxxT;k_;IU)5v(fjIW3 ztYaSRNiF;QZRR64AU(rRByM_m(h&^sp$_w=D+234Y{2j{8+fL%F=G^vLyxt^H)G<6 zB7hOZo&jrvYA>GF)dIA^DcW%Y-|+*%R3xV!xnM#;r=P*O#qp308hTWC1?Cvwb{1s|&}C8{cL?9`$_ zXuW@RkNpjDYygW8q@Toa15_dJ(ci1b{#M?~)&o#9hG`NV;D9;_tePWoI#IkpkN43% zdAkCx#RZAK!@b(uwK*Sfr%hJsox&^4g_A)KXJsW;6q*k7-U@tdpS*>)qDf08G?-#! zEsYS>*E_fn6lrZOv-g_bv8<3AV>k{09U@PT+L!B}^u_>_=$5m23s3Xpgq3X+Tg|#u zBZ@7ys+_NAHJ?_EEU`}Ad84`YBFFBCS9`9ihG5z(g~OugPFME?sJC5F5{T;2`eY$S zpdDzYqH__jGTj@_W_{xRr=eg}N_r(=Pa{@-dOt0UFH>tucb+Y#9b9RC{qWoGkO($| zPIs|I8oP0Zj!4VzkcfZ`-E9VMe9ab|frGJhi9kwxT~o)4j{DfD3lU8D;)c-*O1Z{;6*@d)FbP89m@~OJD7`rQf?$4Ez5= ziSR060DMgz+)Zq5{p+Glqg_?)c6Y4fQqSAo*k|_oj&Siaq4U>Hx|zLAi?GUezH$B1 z`hZ_!L}^jUjT?PsgU`ky%APOXXcVR#U@s zDgq@{x}TNaROusk@;AEaF8DT7cVunmxn{P0n8{nIe8Wvd^uM9=3mQFiBuvcrM)BAr z>RCm%EBn4Y2|$}Gj1DE3KBioN6pyM~5M{Z8LuAb5h5L3Ezfjf&SMaR0l6i`vUKx$6#;;xsaNYa8EJwbt$s zSQIy5G@&uL*5T6eCxhjjyLF$aG=vBS59StYDwK7w^XP&7X0N2-Q!5b}3qV7&Ga1|0JtvS_yy-GVP@(1KCC-C#WdK&z- z_{_4(C#T@$g+4QxIW;x1xRyQ3THjpHoS)BPP1ENWM^;xGrlu-p=it?e1?wy*jzZS# z^tbQjpFX{rUqAv7z>eu(U2U29(z3KzH2SGvYNFul^5F6^V`8?E#i|;eD4!gcl$8Cj zvMebnT|PX-n4fQ3UMZgc-1_A+V`-Venw6B?QZ%=m@_7c{m3mgzo5v<=X6F90W#^B- z|F!t&3Cj33{dw_Go@YPeQZYbxG5WdqjQ7Rftoq0*m#7JhFr!c(zW%blNujzw_VE1I z;`3yyY$)OQF)jseh&wtu21=mCCp}9}Oi546OwG>7$;zeY7v>cgloXX#lvkD2RMsYJ z*~Nt=>mL(E0vHq(*Ay$|2V;3?~CO&6hAfr-*oZfHV-RkY1_X$X#|E!MK5ZZq)- zmt@@~XFZoX3IL|y1iWtx5{U@3pa9nA2!R3PK1a)q4zUs5Tn;kan3M&GO48QBx;*Et z`HzW3%Y_=sypan#p&@#O@3g`BtxwPKhir{7w|h5+z35uermC(&1P~WVHrhm-)97n$ z#R6}VFOb2G1$sq8CVcN$2@+jfw23gM1F69eVz}x&*>yafEtQVfA*?u@-H@?pwF zsfuCmukmZ2LLYtDKOT4bbH%6R-z?Qf6A#_29HE8Py3Tk#zqzSC>Haadiuu}Fg$hX1 z6|MN)c%=D?MOl6c*vAH>i6RUIOL{hx=HlMk?`p(A_Dpbwa=gE8XbDMJFmL!~Ea&`z zwfc|J)rtJg9~-~3R%yRVSH)NqcBB8W_Zw9byHEsjsILtXojO7e3%Cddy6-sEY_QKaR8Mzal zqSygpEP;x)Z9D%O51{&cRCf|7;OiLTL%NLzulfw9-KuCA!Mg5GkcUke?k;*Bb(RT0 zG(7-0d3k6lTV;jAmcTw(6y$ zkgQRJZjT)G1O5`UKPLi7=uBs8!e8h*MZvh>sA!LHGdE5wb#1(Ohdovs($6^youa(@ zFAjSFStjWQZ?nvPKkSvYy#424@9}_wlw&KtKkC|&oXlxyEhgenbp+DE+C5Z^nfj*E zHg(7@jAqPz&6u2gzq(q?`T|eY$<=QFlD+lo*QU?2>>yOX@U?z+rfiBO zD}gT=9vN9(p-+z2O-u~0EDtO#y{1}mw9UM#2B-C&ipk`+b?{%*Zy;!e!Z$9*#Bj<`mgiU{jjp} z1%N{b{D+Vb8yBDOjFy;`oRXTBoEA>&`b_-92x6`}*Gv3=X~j@R2z@@@aHzd}4BHdS-U+^B1`C_Uq!(^2#c# z+H8FPu?aW*Na)dNb&vlo-TexHXjhGAHOsL^gH^a|OzP|A~Zj_1mSz><5n}Wa#)9Uz!olOBq*LExsG?Av)d!H8Sl=2}flBIwxosE|Q zf%0>@SB~1*5>>h?_EM1C$|N`kukW24BB6l2asjZW5LL)W*n6!FGU@>Io}+pU3|H~O z6`$K_wiEIH?kD>xBpi2sXqw^S#ghm?H_rAG9UmW6no9Y9sr`wY?9>&x0hhA=WS7IZ$;EEcu^mf2 zCg*M}y*0JTUFx;CJGazF_JVPf){zgEO2kXK`syXl?nR7j zDK89341Qk+tiF^+Tt@xDOvw$$`L}>rFa=gQtH;LQFE7EeX4dp{&KFkJ!pz#ncX)#@ zoSQ0~n}^>+vzwcB^UIafGcBLznCsu@tQlDPte6=cT3uxWz${rR}|GF*whK{FnfT*WAE@&OJwl2&1Q+$%}>}C{HU1GC!SRkSao&8|36hH zueVdV?;ySQ$;p-PBUt?wkqwApE#qlaBfkDHzrU!Htgl2Go>u!$^W9(K-#FST8VjJF zpa4@M1wvv;40GYUGn6MnmN4!`_>TAR6VWF)8E-jD7b_n{UvC+&?P=`EUdkP6GQKLk zwlV>#pIv1A)R!}4g4AA`%7qYr?&mv{-pPgSmM2q=TiDN2Zk)43y#l!xO=3ZueaPAS z|2y}c-BfB6)SY?*LuS4J&-Du1iFB0+QzI{t7z60&Qdo-o!;&6a_}-3N&PD{_kn4=I z6BK5?h~W7!-o!3BDU1W8|F8*Q0V;?AB!Oi3!&Wpqo&Du=!RIe|a|^4Ro0+V|wz=8b zrKP_e$4CMJiKmpvOmO-a2<+!eJR<>WI~=L2`RB*z%Z7h=q^}VnxEgva=M~PS`};$G z73s-@!0jMw4ssI20 diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378432.gif b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378432.gif deleted file mode 100644 index b0667769e77a2a2d1b131736bdce96489b7e064e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13546 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 z zDsY*0%kqT(BNBm(Z{dBK`VNe?7vLPe|BKiA66n)B?LxJ0{~g8TRhBYyKg3 zP$wzcHIifRZzrN{{+8m5Y+B@MCV{hd%h9+wQ%#})$VzUeB2;^78q|myDmVEmGej3t zuSYf+WNy&0>%u{q8Wm=LpsW#*?#u0fj%-?INp5a4*lkyMC&R$-%hJR6jnmm38vZEL zJepR9n$GH_Psb;+1m34N6B;wJ16AYQ%PT%Esae)kglsHdjjC5F9jZ!*cHSc8cG~YH zAKHw}m6PG6D8V<&(eECvY}s5v-#*LAm$JV3=~IdoR;WGAs6rU?%s8sH2N{2mFFi|n zI+!q4)km@0DjmHSCeo@9ZS)>$No1t1ozj?hx1_3E>tX4pv!Gkw9{%ImrJ|e)n@T7_ zfZKe_)Mwk=gKfV@Z~gwbZQe8LbV^!q5%sZA6au#V;-x7!qmaCOe&?-m2y8dvrXcD= z@5%jpukSzoh;(~7ai;%GYwmR>t($E&*bhcdqsdH^B1OMQ9{%hi+hvw2?pl#FzF}Mv zeI+|uNd&?JshyFi%p4F{kiaIIX&4!iqp4j35MftYh3mnh#*k?=!q?f^pWV;U4(2bT zzMy={iTfgKJUSf130-LRseYaWT&%~7ba%OgL~@rbeB7w$lwX&)gV%w%Q~(DAVHOpx36HPmzxzq81FY6scY055Klc%eI+)jAQm) zSM^W$6}rP2U4yT9lK~&GyBVV5$+Og69_U>bSyN|!ved5#ZlfQTKOIQkG>tygK z(T0&If0EL;K7D8Yc7^9#4R>bRq}mVNOk50iBTPtM!cBL3%ua zk$abVzs4@=^e_OY26;8g^Ot`ZQ`jmhl3ua=apT6nn!dUkx~kt-QxEoi@NeUSNSE|@ z(bbo}Y0+;CZE}#<;j}3h+0jLe6LkM8zrjn~mf}{)bsyUN{%QIP))Vwz5o{NAf$TU` ze6+%$4$v-ap>#mZ;Nb1gO+8}b3jfH=mAH?5H>4zR40b_@M9-_K{ks3c3D3mj>bU2r z%dWqamQHnT*>Spm)l*}!bXUjgd?j%fxlb+s(q8)Mzhcg=P>_c>qkHBJM`-JKAD2on6B6OBCpqLy(YGJz1ipW_PE!(OJ0+4UQ@YV@2kB& z-1hp|=k@7@*XK`O|NQonEA0QGyZ`H={omH^|Gs7akA3@p9^e1(rTx=!`)6|Z&sOjM zb$kC@-~Qh(_W${`fBw=-6pQd?@DLTiz|tGwKrA*_xoQ;HHaj~5=7D)YvtdxT`Gq!} zpdR`3ta0G&nVGM;L0C!l+vt3obx@t*xjR}H242t2TL#oK(T5i2Z4hfivlUwBJ4WQQ#=#HlA|xa7e_P+rdBioX4Xj*_-Zc;GvJ7swI#+v2 z)cWM}cgxe)iu%6xy!o;EVqI{Xo5eQ}fXsua(g!Ih`ZBgv~)k?N(@;PT*~~tiFqEx&LdY$I3gxf66=XKg&B$Q&7KwG*9qiX&FuEiLR$XInJnxFjEXkgap{{ivyE6 zrz+{Nu*hVfm=y0{9Jy=^BCq3KoZ%cqpI_&-N9%5Cs2ZyCCHblmed0Y2c z1rJiQR_ph(?gs<2Po49dqoHRM>Hz8L^@n#Z$zYtRj@bcDs}9-hQ2aK=K}W&7*N?D~ zEBQ@FWP*X;=SF}L=W(LTd3QC~0%!B31BbU^OZRuL4r?3t++!X~F8Sf_=AMywz*eIPpydnkr(#|=>jHVY?`?KMEhrN0iRAPk)J zykUyxKqPv`_G4tRz0EQp!8M+ezRCJzz#pN6wh*8AXsGe_5}wzTAGxrA&bjyZS>0kT zi@@f+QxAOR%!>#PyeBK9`_AEix*eS!Mzqu7ZzB`@F2L61<`Z*>HCXH=U{bVdur;SdR}={px#bzIwV#an3C zGMRB4QL>VAUP*GK<1~@ixPUjJfC#eUh{X3<4GO%?qBH)@VYw@`WU0AzpM~TF2=7Om z71>#Y5*Sa$)U^;#5$Ax3B0?Z8u9`_dPUvFoxy>k(wKlL;5Iu<=WutX?ckzdQv)dusN&B{cUklM2z z@LD0W#-_gzH9q2b(`y4FxDFg^I9lkbcb0K^Z(IQNn!!1sF-x2}rmXF|$`MEX`IM|C zc)~*oknuI31(Cl2oO(wq9#1;U3s+x;a2$bi4)HG)WOHq)nUb#DZpuzY_(lUd%Wi#p z=`qqu#!c9*CZDfUmJpOo#XWypnGUqVHh2Nbgc{{y#@_)}XVUc@U$tGg^FZK-2(S`O zuDuWd!WB&bVgtb2TN1i6KML1qpt^XkBP`^#fW}sQJegx`A_LU3QFwY{H^g1O@+U8H zS1czlC{`q)N1;beJncXb3Wn`~-$MI)@VvbcGQqPHJe`3FQI1!23+IVdRisqu2p|)&L|-J|m6;tTeNOc92oyG{eUitV=8lm5a@8-L1Q_xH%d&@b`uQ-Kct{53e;33 z3y&K&OAMS>;yZGkBCvdb0dr|^&O%R|5L>BL2CEwjaesG(sRCZ90p#Sp)1@1cyA>_V z?IQj-DoO7-gpxa0;GU^K#nYwk8ziGaWWj5q9EEs*3i>zv24Y-Urf6^JnP;GZnWtM) zOxjlK1*!4p!?ZiW;M)iPL2}qh+n_XOjv|>Y@bZ1Hx|$qT>cqtx z9+Ok?{b(Y`z}RQZgm!@r@J?VULNHz3QPuV<<#avL!od+G?JCIg;*B{8Ao2T#or)p~ zJq3ogMcRW-5&EWV3@~iUFNAMEBd}mW+05~Vf5&1-fkz2vbSSK23t+y4r|k=?ALa^( z^n*^1w1AFJ4bH*x$YFhiaAs?N`r;N8&n=V?C%y_->|E+>GP@<2F1M1*2k?lO6zCBL z1oz18V*4h|=V^)s}!6xB7@ie2X$l!YtaE=_l!lW#WO-*N)5Wy{`e-F*JUppK%v zRSD+{vDtFna#7II6*7AzOL@qR>0hsaQozL4eh}QtBcm(_lCk$m3oFOJ_8dL4!^G?8 zwbSPYPMl~Q(Th)t-!b=E*(Iu6Fv_=b)tWF>KN;0||LoV4Tb>Int|(vg+Il8&+L-m< zBV|);lwr9Q8!1hf5f?*X*u>Ah@y``lEGbfll!GH?JQ9k_s6pX20a0LS@m_os@3Px5iuYwsB469&91@k8uWx=EhCQ>kYf_V?j zu3)|e!z!3g!PE-oRWQNwACZC)7fh;PCF{ z=1DNPf-w~gt6&@j(LjKpAA1>-0f zP{F(kwoi}o6^yJLOp{=W2JvPm3g%KUf`a*zz_LC}tzd`+Gb$KR!N|(tt8X#Tg7Fnh$YAOQGc%aO z!Ke&oX)rv4@f8fZV4~)K!4-_qV3Y-uEf{P0zcw)bKTh;Njfw)%?SC2-2S8K(|BVV` z(SI8iXCY=(Mt%RwsA%lz$%#_I5i@MgG#7W*Eo=jXvs7KJ!K!OF!nwaA`S**$?GO$NSg*qErTq=z`)+I@U)J^!^zz^#Vrea)wb#_KCrF7mu{ zLZ8myNIDf3?-ZV6sx0#Xf&}aHyKI#m1dO9uk&FlK=(|UGq!0}@?}l%GiR;xrEvwER z9Vp%3`*!mMHjJl4heku_`@!xM?SngKiy~bLA2GWQY3(SvpRp$2H$QCm;L0P;?%^(&3|G z19BD(Pv?)2jiwX(6hG8QYr6TAa*v%6t)BWjpBsQ({q+XlQKJ zvBlt1m#afUhMg4WlvS!9xnSeet7Nl=nd0aj*KG9CdJTA?iq2#xEn~ecQKFcGutMmL zwd_41eY!)w!Ka<5M~a2ber5ve%i$a&g*)>5yw&9B#0-^128?r+x@F@fC%0=YtgLL9 zuMqi%EV4@F7q3&psVrJy>z5+_V_qdVS4u5EyUS1+cWt%38gAjrjIxR=tcJCS8!jT$S?4k|9AM}Y&?8VuPj z{H+V0{=V1X7fM|Ak>y@TKL8|ZQ!j1#Q9Cp|KXsmI@LPyF|DlELXj=L`L~#kd)E9R2 z(h>Fc*SK)tW5Fx-!1*t7hCTI`ki@O>iV>5mxE6l9lG4rl{mO)6<8>1ITiI`ptMuz+ zfMU1!<8wCJ3P01)Ac zXAw(fZN`yY`VSyjcdA#QfFP09=(wZJ8ExpAoFf`~=w0v_qRr#`2}ym&4Ne9?W@4Xp zypoeAmon@aR55PzG0{3W05!q7!&O}(RYGJ3{T`2~nREECwiFB#y(8dagMAckuyC1% zt{`^{eo0sGu6PEzSw=j(t|Q~Uk5~}Kg|;{tDlAUpM%r}osCfLV6;wF|&pHS;g7$CW zGNOgeBo*R1!2$hvgAR`J<)emI$|f>5b3!fXX2BzoS9{KPJRn>01O~h>A$GB7{3duDM9X{1*rDVrDf<^q z?J!=6mmrbGDrw(&`HNg2(5WLafLZf#nrnC(1ag>Oivcje%a}Ns0ZUI34J;4hRM_6E zllODA*A!dO542lCLyiN^;FJ=7Au?-%D#ylyYO&HNRrtsX&!XW`A9`oF^TXRmP&kTnOQp6~I);%<(__(^h_^hG#H z#>J~69O=dRGy@Q=aDO>LA_68dBEHc9oaZa(L>^Qq<4D3oSLHr6Jz~4XZQDPh)5$}- z_vDp&U}*V67VP``!3n!_Bh(D9U-udt2m1xU7|9MZ*p zpwAhLvNa#!I&T)nd0|p0T_x-UDozKE7rU<{wkM zacwv!eD{sVX%E|TuYTdEv?fPw1}b*9uawM;rR>$7^g4fLcd+6~mJYp_*8#8TS~RKf z1*jSCDORwVYaOdnc|tJRHSV&|`y70$baOP=#HhJc`p53>pEp0!%J(h5@jbO+{OY$B zP21HzZk(s&FWyzFCumPzw|<%QTy)1_jqjM8(1qmB3Ks8*yw}KLoFCDrl<}8t znRW$$7?iX_>fNogqU_$!>mw_ zTe)-Xp6o9->vi9%IN>9-Ir&tc>IvL?Gl-3Mk>Ru?_+7h#UOo@FaO8BW5!fPIp!xVh zlZx7kF{qVI#`70%2)6!q(`x+ig_L*Ou8N2@r+F%5t63G$+>g8d+9u_%<13v47bAGJ zgTa}amq368K}fa}L%v_ZVswF>?-@t8P^W-U=Zw&e483SW*x|`ZZ81e>xANqDBU++g zFOR?oC$Hh^$9xUrF~Sepg!{OK9}WmtXk%I%5iPk26b>mJS-i_xRjEe3mQ74W@JDLE z|7KJ|8=)1#NJln3jYD}dkKHyo0?x_^{emScPT_x()I4gUa->mt(@`QubfHajF(WEB zAnL>4!6`N-ZjYn)6sYfjE>$vgJ{p|877*iL6?4Nk1`{T>1u-cQ^Nvld4HVlM5Zjdz z+tV2PKpOjSI<}t?H((R@#4YYwK%6uqZn!aSREmL z()iEQ@p4AOSDS?IZV5jF5~ec}W*ZacqzRZa0ZbumE5y&lCK;R+8pNu!1{K*WEBM7w znIDi>0hBg zR8~6Owa8S)Ao8G*CPbH$`#Lj+)(Yjjwjq;>wd)91GXK4y(=;{`lm4w6$AFw1se<0`U_|WAgml$ z)&jco?5jN#C_J#>Y1HK-9@q{CMC}KQBq`Tsa+M>?ZObzi`8gv_u-U8{TP&g*WCAHr zl$Fy?LE$~6B~8bjnH36XvZ5VyE-N{%C*8&cdfQ!W?FW5hV#+InB(Cb6EkRB}M=Nqy z_8@|23!9lDh9FH5!W2HD!%8H|k`j~))(vOc4;T7+B^kdU+oSt*}wlNa?DWH*&{ z&E^_lg&Y$gvJ4?JR~>B{@uosv1r(B)^TOUjw7a)qFfXHEYfd-oaDRKB+l|F?H~0XGmJ6fsex zi5ftZrY3+2hzi&MQKMqPHn9V?9ePtkQ35CgL@BmdP{A?*9R)-OYy+rcETe#Bu!G~s z^Ht`|ea^YheXr+P>;Hf8td&j@(fCTWO$>`n;H%VG}=;SyMyJMpO@o3a2I zk!OXqNPdmjx#HNPhBAKfS#_h*fT+y;gD3oaMp}K=+6*&NY|E&~V5G`QH*dJGzh-b{ zmSJ_~5TV`c)EXixv!WnlaAys>A#=NTO+~@EbDS*Gwk-FotkRDn5l3nIVbL(#>_ZlI z+YPg-lnTC?&0UM^slxaDZL+)X= zLAxpbm62(3x*)(I6up+LaYRDfKlQxx4a8RrXKV+a*-EBB%Lma1=<Q_U7BUWMatD)MT&G9_d7>s8h*a4*LY?&x1( zBHM2bA^s=~DRA!LLw8wNN(B;o)$S_Zv#_^}zGcSOtGjp=KZ@xjts?WmA4anrvlzAK zZ*9orx@U@dYmUA+KXLJSaqcMh=nPKY`T2*hwBNhZT5xVH_uNy9D-Z6S|IIUdG52K8 z;1TW%udX(!S5Lk&-7(X)L1EHYeL*kpr*-^&Ly6q;%dm{e#8AOu>Z5E|WMUanw*RJP zXftx~IA}oFOdEFTKK$U8iAf5w39`J$99hG6{tMp)Re6`;mgYzCS~SI?M2gkD@i@Rx z;83Hw)wu6iYNoOhH$eFCmuL{ehD((P8tjEg8Db9|nA-7fZxpSSGy^~9DPD#-bA)Mw# zB4~LQH>gN2=uo|RjtOzJKEK*VP&z26%)a}8gQBj2bu?`Au`ymXSP(wcgHrIN-~;Qx znluBWBiSZ>5749K*qIpIr5*GBqhP4ufD5Z)S4@6>g_cc<0*gG`#HX&5b z49mJ!bC45^_1?>2hz<>TQ6Q~8TwHT_eY*0EnW0zs&4-8cTdMQcZdI~_%D8KANOEB0 zp5?3R4*3<~b53QL9k&^nP1m4#bF=h_o6&lhu=}9G6B9_w^)yI4CyUTva~hAWjw<}( zftd>0zOb>}h^*3ACkV3Lr(L->Egwo{2I=^QfW6ZK9ria8$I^D2K%G>ExvZZ~A+vytGE zkth5|rFzjxxCkyanB9DL0oRkZxi;^$)|BjR8`o!E6<{UinxHf1gA+lGc}%IMwL9~TZ< zy+Bv|k0gzw@K@bP`+9~Dw^?hl^WAey;W@EFt*<>SuX&nMxZhT#%;~&iqPXZk4;$^3 zyW;w!WAC#TzATw?-74L|P8)S~QN;PWUrTJm&KG<9WE}HTeM9QpmdvWn0m|CmRE+)F17SMU&))o|+V-0rxqNANuC=a)xb%uBQ%*0J4O zVN9qhYjD++iksEAFbLahuLxU#FAs0evCA1Q=xVk?4$Zh7O?0lql=%K+oQHH75?zKw zmm%qYNUqC}=rSa_42dp7qRWuzG9+FLj45PAAUBebkN~-n{?G`dUmzh985s%b5r~dJECkXZkQ;%x2!uu; zMgpOc{tOA^N%|*EAzlJ`7)Xymk_6Ht5GH|C38X|I;L)G`fanP1Mj$Z)xe-WrK(qtG zArKdVYzgE;AT$E;5(tn$ZUoXJ5E|(ZpFoBL0w<6Ufp7>!L?9~y0TRffKf&#%3$g4oY1mYzSN`b%$VO0Yq&^`20pSpch(Oo_aw8BL zfgA_~R3MrHu@lIjK-vUyCjBd@kQ;&I2}DF7Z2}3Czqe3f=M+LCFm(zE7Ra$c5CxJa z5FLTQ3B*w#a{?(8$f*3c=*R!D-}t8t34>zy&pW3=l*s&R=QQ2;+s>);)2py^I@s~s z&S{#%qQ;kJrM1@z+~(YXNdPH{yT`K=+fJ4TB#%yZ*veX8+)`#ov7XtwzT(av8e5#W ze2w%HZgDyy_(Z%<9F=owS-)5r&I zb41FnQ70mkOtTO2or-<63@X)2I{fqcsOB4aV>V6sv$vz;R@tI6^Zq>9)kV=~_C3=q z^JOz;TKw_4rx{BzaAb~JrrJU#FnSgg{5tKyAD_OWh0lw&AF6tmFE5-T)}Sg0l3O*A zieFZeM1@WHes6MoGrz2$ z3{(_Ll5oC&jK&Fd#FAh4l}DydcJ6$d{mX%J^Z3I9Wr#{2)lKRTZ>5IpWDQ?`)huqP z*gC2w#%*xU7uT4_`BO^xi_;#3X2rVApxH8fMEy(EG&Vs>c>qpq{O zVCU$@XQlX+);ui5F;p^8F4rg*WlpfBN^c&RB}mITZPr;(QBvs;S5E7*NtmHY>{8Ii z9X@MaI_-4hi(}LqQOox?Pw9-ORjvM@pykTMk1M|P)^wdJ$1TE-wZOw_-YUVpd$AnX zS~1OgL`P}G-Gh^l)LgD{h+4nlsem+jxVB0$MX-!0#o{VFwA)|O&yT2jz&f`?UvC*q zzBK;IL59!nvbs}(*^aM%T65IDZ2QEw1-{cykI1QG7*jWPVBS-|6gA$c@Yi6=V@-a+ z_Fdl+9${|#%kP?3h3A$Wq|DGr*xd0|gg(u!`ttdR^48DLNU%P43fHpUZ z)!Y280=Wge^4!d)%(Re9j~E`6NsmFeVbD~>SvBLNoMMu(Fp*v*RM*juQ9F|;6Nq02 zVRHv5QfT+3mS6Voe{=5A!jB`=k~Ke#d*NAdx+S8HdR_Yn#ZK8FNuld;)e}*$*2;pd z82eInV>DObi}^KI`hRd-d)-|_x7vS>X1M_Q^pJR~YsD4!5!7{d6OdyN*KvIu?N{*t z*3(<3^&>TCbEwbI0AH6X11*d5H1Fl8k9h<9#AqgJyVu7vOlGU<0v^AZ+537U#*`H! z0ZFAi8$wdON|3(d5=|70g3c4%rAl$syej})!$qlfV)LdAqyRN6{JHm+R;wVn&5Xq< z*s_FGp$C1^@?PWIAf{0h&$>n9&CDk*(O?$qb=ZEiRiqKniG<;f$7t(GJid@XGE11J zh?dj1#b>O$CI#$`y6h8uLNTyhFZ!S*aXq3m9%V=FT&0SIFcbo|tL(#2Z24mc^^%*{i8kt({Xd=OjWCk*p9 zeBY2|hy+a-8jQ}Di}8ryJ~ZBMFdvVWpo>n(@~sd%!_*AstB}*jH5=O>kv_2}6wc?f zcKP#m;LKdKAxrQBPHLVr6?&i5N6?2zACxaf6T`JDMtLS}W}B0vWDBqorH1C+jjgV^ zHp)?HH_UipaQ;|c$Yd{#D;`99PPJJ+)XoqKw<{b%RWYfmUrdtLCk=8Eo6?EPcnQi` z%9Jw0Ji1P`k0HeyC+uYlm%hB6HoTIh8h|xlUgAZe>(wu%(Nd_`IO)tGc47`qdF6?@ zjO09(qPQMbtXuI&W|Qllz<0ZRA9`dbN{jcdUp$k-)F8@weC*PwxvRX@93N3FB9D|= z;L_HJzQE~--SrT26Qc=KM7_`|c4#6wl*szB7Jt39S&QP|KV5AzI%d^V#UF!}RaF#B z8{fs1#jC?qXpI0#hd{&StenK9-e{bBR{mls<#fj?q{6U)jv8$A+1h!-lScpM2=#Xv z`k~Mw+yC%-#Fp}w4Ex~BB!#R`=i(f!MI^UJKnvy8p`0MnZpH>|f(Y@NDXHuPA!AA? zDWU}5(x4KQuDG<`XY=qcRDV8AB)i~YK@Q*YO1^$V@TyUog?9Ov{!O*!&ppMY#TG}l z#Ip_`9ZaDsw6=xKn3Fms!`v^MIy?3Uq?L|n`ug5wCgBh<$&JCZtn6DS*_Me}X~!@}(nrV`I}+Ckc~e0_$|G!jM)Ca24?%qe1oZF@xOS>|3Ddh-A*1j(t< z=_j4S{IKxg_`wVEXBIb*{EW;DYbmBjEteRDN$5kxDtsMDVT@BG)1MX_<`D75OoB6( zNgA$@nY`2&;m)Y@_E)ny%5pn-n3Q^ZQdo+4g71UC7g?Lf5Z5ugl|}57gZY$Z75+X9 zv-_fyymJ!o9u|aI_`13iJ!0IB`)cBj(LVHg(p*p%pa>OUzd1WhJTlXzVqb*|ZyOnR zGfgUVJ-VKyvFM7+(F&ulNPe$df5|jQKFxLoy#Gfh{8~pD{`KNPaYz1?sD(odR#H{eZU{>PWJD>%yxu zeyBHAnZ`Y;4GZ72H2UX@E*}-SThW;AIhIp*PP*bIHruhyti|GN%mzt!_m{0=rb2dA z;bfznZb|wqK4|lEx>vOEi%r*GE-Kd2F;g`Pi5)t{R2^78YHxX}aSu$)IU{Fz?gJL9-`bY41OhIt5N?6<63 z%&3lw(P-)FGW<66-o-Tm25L&KI7)+PywOadXi!SlKXy)g zzGX-_C1xWjbVDtNAz*CO4xh$fJ|9DeH1t9>zF3a_ZRd1bJxrLUII8sW)U2{*9BE0f zUy_Xb){bD5rskjho*_A#lFLv1%`|SO(qQ(QwAq=)A;-5Ih&H_N zXk9r!-Mc02s9XGr=yZ2U`q2(PWJtyor)&5bb#57#L;vq&Nc?tjqE{8&OzAtj(df-k z8p{R~Pz;(CP6RdrB5lnID-GqmQsI7+m@A;{Fu?3o1dqg2ahci^#0W9ALyj4!30`;R z^hsIKJmjmwIge=b2{gS=Ol7jNg-`Hd)r74U^Cc)D;xw;@MOZU!x|$FZ6uydZ5>rgq z80n#y@ZohsTrqk5y2hL}O@VN0kX>g@Uc!I%KIX(pVtw7F{PSQRl=M2kwD zG`n-%U_>1hldE(I9@&}e7o&(X%T_#EH{D<2R-!!5R~X0@UB$}eRAt$i_*ApJoiRhU zhvZGn+rFHhp38EuEz48;$ue1a2YQEA4OSfPO*=GWWR9uQ%nXfE;afY6MGNw)?F@G} zNR0Ok}I> z+8Z?W_3pjcQEE$~ ztA9a=*&&N!!b{B2ljCE>m@}!GuQ{}fzqh{Ta8vu?PQSbf?`Dl{S9*LN?lnnT z)*Eq5sl4API^-`I=XAub%a$!XY#_ytg%^)cE5_NSQ~gvJfsIFKTg{=a_Mg3>+tX}& zDYi0vd~^BO0`-f}Y7|=;R7-K`J~eGcrTq#uukmoVmLujLSe*Oyb z2I_ zeSnGJgZ;-2feS$f!4{!u4v+^32yzF=2x16;2=)i{b6~sT8?V3(!4siQ4tfaS=%Z)> zHw2vo5Cmid<^%Wx69l9KE(C@HC4_=G6v+YgfZM?P00F`N)>mAEyM_RBz=a@mpo-86 z2MPq>izxgB{0lG#0B|6Hz>&}v7bjl^XakD`V(a<% z2{iBnP(px307PF!3n(NQCDgkRNa%upo#bh$@I7xFKLA zXduWSTrmXc13(1w149HT1n&d&1Lgxd1oi8`k_h$(TnN$%QVFKnUq%1NXU+eA{|cX! z;mIr9R+M1>vhd{gpBA1bWvgQO?SLEl(p0F&Z z{8ov-YskxTHKN%VEpeWqsFi&P5kl~>VgYduADuq!m3t1x;W4x_x1ggQJr+A zn5;`O8y%A1wBS_9PiaY815RnEH0s686r>D{SsU4y>-75_$Gnrze@4!8e)XzZ*I8e# z#}^Qh=`N106`O&-eg6FBon+Jz4GMU%5{<*d|*>>bn%jz|cFYaQv5rRu} z&%%IF%VPOUFVW4%Df$E&5~>5(;O>bRw~TtHEls?X{P5RLe>{HQHhYg4!JiHA3cAWL zm)VjFXBs!hQL@YkayEK-_u<;B)n#p4P4&kNN-}9oez^JOl!GLmT|p-e%mO77D3bvkJ&(qIGl8bozf3Z^d{X=DA9 z#g<}YORA9}!V;Tb_3T&re)O|ZOiW@uTif@hDsnqFMN!LgS|52+&eBuKEvSK_+U*7z ziN8jA7*;>aOF0-*UXpsW+74Oo>0!hg^N;7!ld3xg2kHL=L%)8`mCyF?*yG?(kyest zy=}`+;(NiSu6>cUtk1onr4{AR(q0@bo7FQ%v45WwJIrv3lv`MMNrxTV>HK2lvF2xu zdlwJr)?QY}1SB?((4W!$P<4IkABT^&?7TKCZ(<5U#%(6)ia_%S?Zf4al+7!ud$JB4 zt1iRsaEj@&=7D9u>&q^wZVhaHR{rI6!4H>ql(ZGa4^p4CmvCNXN@$yD;m0lvD4GO^ zLIRafLkAU2TDx@7f%ZZ37bop~QHsq_OIVcYLlKu|yR+ z$~Bashc=Rw1z#t*Vuo(~_4V(QK1y!j_6c&ETkYmYk1{gK5AS$BP=IaUzO&q%VkBNJ zelU_V38gYbeZb|lVJXLykG{a4>BCDFxN8f-1xBZfLtho0!L^E*T8p%dMdgx`r z7>psfOkcL(-r$Am1g}8NfbKbkgUtyVWxW82TWenjYAHOb2H8_FeGf8@2-R>`P!??! zT>>s!;2QPC>XU#*nll9))1I8gObuqeSAcEeAptW86WNtR@BmLgp`uOX38?IMa`q4c z8^u#m*QY%F^tmcmAWonzvs`kve%=0YOr*DFFSnspI|hkV97;FZa8p3KdMz`gwc-}O z7)da-CYV%$Q8UrHJ+&BHSz^8QxBYsTZG^rWYtDu{eLh1xjHv9OyA(qca;7pF4YDH{ z1VI`zwKVEkxVj~)LZ!G@Cr@m-QB4N;N%4X88ZWbnahnHQ7unylrPOXhzD%*+l{H3; z8%AhA$<<V+TbVzKNKRX>p|H-uH{~#j@EX{qu~dAG7GB9aGA>8fJlH zGWl;i#KlExmvL}08@oMN#_h;v;vzacCOx85{6g_93v{M66rPmSbF(^sG&yLTu%mV7 z?6aHvDCH{N615z=7*6Yg;jZCGV>g3|zMlFWMbyTlQ5rVaFOF3#Lh*ar%|?7+(CBM3 z1G7}F6{CYTcB~;8R6)x1KC_SGebr(tLLonf#}&_R9gbEC(6Fay2T!9J%2b8&*zkiQUcw)g^sduL3UCm z>rct`S!&XhUyBK3!%UWISRXIep&F{>Le?;HNb{X4&&yoi-sN(Mmmr9Fch~Y}i}VK< zc3*JPQt`4GZ$GbqN#sV;Gy1q zVPoh|a_cG_lBn76M%FE(L<)lKS#DbbO`r^|b+Wxu{}8Z~x)h#BvgPjkdqmAl zIkjoMx0#d6DaVPgVxLUbpa8W_j1k1cgh4 zv|igath(uP;lL}WRxZ9a?bN3dk>LcXk@OnR+q{{gc~Fnp5C7Og8dvH)u=V?~FJ$JW zfcIom=Ypiy3)6T{e-kMB7_~!wwr;SkHgoy#$M$g{IG(m7abru6(B3VYvE=#h>#+3o zC6#wFM{l(=KEH!|xn#jXbCNwGJMhujxYI|s=pQUBs+JQS8ofrPo7d2%@vjOVH*7O; z&hZ&L)BWz4<^y?!?}MbLCqAslSKE(7Ropurqwm}Z{_W6DlYh8D(L;u57kRl&685wv ztRdj8K>cLyZ$;xR+6s1#{2B_9&XiCVW^JfYkE2?!law7rNcWs2wJxk@DTl zBR~5UQl)X`GL@Ih(6M(eFh2iQ*02GIC3>-?2e0 zRFmP09o)lG0{1jiZkS!~?Y2EaofxEgclDt4om_wHhA1v5DRKPjc&l=!ziulsl_Z?( z$TG0I@CKPdi%31sP-wxDEIF^CJii0oJFB?2^8VY3)}e7W(Q)`$Q|ow&ftJk>Qx=lL zgNujHbV573X`v!qqQ;obf8AF6W{%KX4^7Y)V*!5nJQX7p(fG2($DHHqatWv7NTi8f zy&-Z=YvK>TB~E;kxR9R|$xK?}mb5f9Y1!GN*;f)L$`eJzmKprf(}I(yzDW#sldV(Q zFWA3kV^6Z{@nomx$z*8CFkuQqlALrlB{{_i!!X_Mt#0>Lw|o09KgQ|&K<5WKKhXJs z&JT2cpz{NrAL#r*=Lb4J_?M5!e|@3z1Dzk}{6OaiIzQ0)fzA(fexUOMoge7#=IQR{ z>F(y~?&j(4=IQR{>F(y~?&j(4=IQR{>F(zJ*WEl_|3KG2(De`c0YT>nIzQ0)fzA(f zexUOMoge7@K<5WKKhXJs&JT2cpz{NrAL#r*=Lb4J(D{MR4|IO;4?pmN2d9o9Fk)2p z|LtbV`}gnvKAS?JQ2H;Y7#bSF@swM)Zo!aIQ&Us_{gnRWDR3vHuCA`Vy&Z0#z`7A! zQGsbA*f`p;V@G}0AD*6`uyF*3RHjd#K5EpcSFc{d5fd0bf`KELJc6a8VZ(;OA(cgo z7Qy@x+*N_SBe-b-J4moo)PFezMv!uHa$xKTc8y>M$=BC6Ffb72k6_X0{Q2|w`T4MJ z1e-{(Xar+Na3lprkYEZ4PO-pT5{xFn2olUC!GRUH+XC}PFqZ^_NHD3?e>Md+i{NGo zj3%vEu>y8`U>T{ZstQ(>V5bOHj9?ZC28dwY2!@Yf9O>`-DKL@rZF4F6%9=H6V2=m} zkzh&buN9-z%P_tK!$Gi*1OrMilmtgoU}_1Li{S1_|K$|eM1qwhSWJSQCAgdd>qan? z^!McySUQ6FBN#G*ogx@zf`uYDp#sxMu!95>NwA*Oe^&))1QwZKa0!Nt;I0bH4Skzt zdffxVO|Z5ETSl;w1gl4|fCM{8uzdt0NU%x-$5UWf2}Y2xXj3B{85)3!N6cQ{W!Q~X#KI%W4(tk4rMx0;@3HFix`^}X8fu{ah zBsiV|2UB1=seh~qR+3;h2?ms4ISM9{`p>4o%@o*E`cKV)|1-Y_et`9VQjTZR=%MxM z;!DZIkbu2@$KlQZ$7uQe`s4d2?KJszGbQBv&6L&OZl+95hnp#0)qmeidH46tl#ZtU zn<+VPGsTHwJ@+3sQyx^Rg_2~NudL-nDI=B2Vyb2q>{-=*M#efj^V;dx_s_2Q{qFVj zkFS0`&7yM!Fzd3%_Hs=#N^=@=JD>{ZmTI`^-f?o4LzrCCj1;vM*LwRvsSQmy$0PQ-3M=fr!#xN}C+;`RSpH^vT-2 z<>S~7a>gyw-YFjtMY34d2O9^ekIXt$sV@H0;}tRpe3NwIOh`Rp%#{kB#!W3rdsTDy z#0tm5ITJr6>*Fg8M$Fc0Tkp+~n2Y#_C|{qy*1QV8H}Lq1u4XaA)-7q64+m+fH5=Go z3v;N`53Sj|;$~-2=2zzy-brq45KfO98cV`S=wD8(TW%;L^9vg`h?kBovYCCg;m~$GWp`s&o+IF{6owlEsh zx$NslO=u)%xWIeO)rl5f1*ac;iKAVA{{{}Hw5;)C=<$&mu1NU(Kry<1=|%Q!Dt*`Gk_w(P4`Zsj0%)Xf|phR8_+)b{7n6hB_ke7P)9R1Jv9l9l*SJ*L|0IT7V$;CSfv7|MAS}P z-w|)eMhUwY3z3rw{^bfe{8k~pAuxnsG*d!N5{1sF^vg>7B4M!*CHR#p4$okHj*Ma< zw`YiI(1+$r1=wjjjg zCu=+xX~tl_;`P*e+SXrZp{)mnXof&+?J783F!a(`ww~DHgqoZlDy7)lN!%VSHaC-w z+Jm)rT(@(ux3kikV;ynps6JJuyj0}O+r`6GRJ=8vNg(Kr`ufO^FNPA5_>LHN-$}2AOJIF1ogU}>GMV)gb4nG})qWq3xj8;;g9+Xm~ zx@z<#O*3~@@2I|roTJYpm?pPVXU}#e5m$t)o8wJd@7U1Ji!U2-#i3jKDupQR4sA3| zr9xIDl`8c`Q`H;;)k3`kB5_iZ`M%o%TX#3VY4n(d*=->^t4HSNMNEPt1*dKxZ$SZ_ zEv4hcT>~bcG$-sxTPkU^>Vg@=SC+1&3(O6)wYU{Y5q@!9v|{>=IIcQ@(Y>U`rI#AW zP@zd{K884_YfP2u@xxEW;S?=7K-xTE2v^FY`NhpLRZ%H{*w}21#%#Sfk!HD$@G#C0 zu$!4~5ob=d)lE|*1tZ$SbX(4&xK^8#*}OXkDWao~&AX7E-pe1%*hE}?mUxuCBjR~V z#oTR%Y^(Pr>GiF(u8U*`dg&_tj>nF{<8LMIPcrFCT$ds)5zl^VYKCwwlcCphX1pK* z!|oDsE>=Y99s85)=n~|5Duf)Ip|LPnCblbcLR3P)A3)TuT@z6|K8k5x%r4K~KtH-1Np7{5_@@-tZ#NqXM&9vOnK$G#MZr?AxO~VNq)P)xlPG2h{`h?8&|Z{lx8|W$}H8ewpfR$GE#rS z0#7YjZn(7}HQ9-L(lqYlBeaP%P1x8<&bN7Bc4H6a^@ay}+8-A3+!&gq@F~Adqq8(N z%anLt)a=aS`AeC@H*S2oZla`UYHc67ETvH1(Lc|%_eLv8hJ&8{$EaZ!PoKDSzgDb~ zQCg>C%TK(rbRP!56B*gb+a9`9y?rOZf#tYy%ZZG5Dra=+5UEWZ7@ocQMghY zmK2+XC%BIJzF!ob;HOM@m}y6deZO2m`I-gB@@*bEwcK3jAHM-MsHNQx>`< zMTRCVIV;E)y37}2buuJtW@)_>o!=1Q5>6Ds9wRkjs*|_0CU5IWCiy9GZYc?FDey8$ zv7_AYW~xN&QGE!B9}QhwZrB@QG(od{e5UbVH&c32Rs6IPw=_k4>Ynm#Hg2irYm5&^ z8;42c73FCQ9`pIP(@wkbPS}~bMW>%v8dckw&234q>oNTC|I*Ero?XaHfx9cNm#=ce z<)=c^HE;N*_!)elge~gDR_0;)$9J1nC~Ez3{Hm4hCYcUx7S;_}=`mTUolBa_ zR!u_6MgB^T5Q{U*9i~z;7<)=P4P)|h9oup}s(16{ctkakR89DZsS>litf+j+8)aHd zKCg2-7L+|)Lj-BFyPU8QZMaa2&+^YPaLGn9wB)`bA*Vyc~@?2D=;!P$mIP;uc z<^}gm8;9houyk%zjzy=!(tN)lEmN4L9MGj2voJTcp;*x1xXVAU_@?55d+D&?%=rc- zlRjtC)?`j}aG2QWIkvs@$LJhtR0ekqHY;e)%?gsc*Ze=f`az`#zU3FdpOV^uc!`-iuy z%o|GA+$tUw8()^1HO}eKWcGpmZF`5=7ar^?c6BJWXeimbd_$?jJ_Du7u<>v}c&?(2OL(!UX1|?-T%f^SG`=?(MZ^IgS?ipsNTiUVnx%@u1$yA|&b z**B;g6LwSf^-@f=G(YKXA)*Tul#sl`!yNK^DvTJL;^!%LV_IxlFU3x}dns%8%xc0> zU4A;X;Ff#IglaXfOFiI^9OLd|v)c9`E#~e{S)6Lbtvt*=m;0!qKpar4*C)h2dtj3^ zdj?yeMM2nbRlyPFVNP|)yk3PSHjn$LQ0-1%*>(aWkA=r72S=${FHVd(O9&MdnmIm8 zvxl}EH`J=Vhn<|YSWQ z+D;hDs8%H2$ifSIi%@J;faH|L=EFgc;IF>giIr=Tev*UHoWrUMJI|^-OHOwY`px_U zo3nmNRbDbbb|&mFyE0R8Ez_#HxTLW{6?^V%!MTNbB{`Mn2GtT$goGq@c-Oh(qbNbr z-T7UmS5{Ok=|b*erEmNBbv>9{6z)eBXHC8^P`=NIz^8}>3^%j%`!5W}zd$3xC@Jmd zek&mEUL(dU&cD2Oks(yB>dZd<01T? zMzM#))P3$>#Ez~R9NXZqxy~}SvAgH9bB;Bi`|2-0eea)Iv!&wt3e}}USG8Vo=bg9Id2Fck z*?Kr6=UP_nW8Riqqc_&rZ>-I!x>o)4!E_>b^KZKOH{JZ3ZvIU-|E8ON)6KvA^ZeUH_@v+{1%BOyQh;Fl5L}Rf^D*`*_Z`w& z-hci2AJ50Y?HI7ve>)!o*b3?jw`0ItfmXp-K~#ZO!B_!XfmUC>eEFB9es@)XQ2l>(Bcr>6tI0;ht#f&v4T0<(g; zW@Tl8V6s@O6DLjpn1Z5$iUNRwqE4PX8SoMKb-{uKpr|b^Eufzk78anZ0Ixv9JRT43 z%fMNgsHiA7_ySZ4KNJ9Q!a*7EQ&3BARe)Cz)zYRH{qPFd3Jx0*5(3@|0t>VXVhffE zAPd|X7Z(SX3f2k03Rh;%Joy7q6+{&X6=V~@6v!296gU;G!xR-26`uOwH0U; zj1}}2uoY|+C=(9lfRh5D0+NEmg0%M2D)6g^hlhiM15oUj53hh+`!yEa7HAlh7T^{5 z6+pKCHckK47!YJ2QP9j2lnNg9AxKvm=C?fPD-~3un zi0k6{F2JvuC0BO|e6~IHI}z#s?R-oroR66t_xJf2n-yL6-3`m8W$1lBAESZuF?wtw zzuB&(%z?x63pg>jE|KQU^$3Y$B!Rk;W6>Tml)CsQ8-c~gmF>rWXgQteIs0f>&8AnC zi#Ko5Aly{cZP&7r$=+`=GCXka`oXl3ZiBykuuz>?d~F*;dhmSMy5E{|CEK5QwXZ`h z2RxH+G_@bYD2$NH#fYr%t~AcIv3w+nWBy3Q`S7>4pX~funVCFw+vm0Ge!E&Ue%I>u z=(SHM`d@w$FKcBorWz0F+t4A6PbR2*5fd#CCm?FOXYRZ$y=!h>|NUXvuK6do{qb(D z4UDYw2@Pd{;BhVe5v!R$OJCDWu35mE-6rc5{_=2J-`q3iWP#l8{)Vr4a6^W6(F75e z3Y18hnPdj5M`aV+f3zGY>XcLLQie58xl0&x&m#KOk{Uf>^iu- zva*~V){a~{`Zg9!)DQ0VPCas>@}}S1!txq-knHgZk8O^%q`a`lT!q<5HPmjWNhpmWg1Eqo;Nc@M z#`r!la}|#x^Tp?%Yg@Z`&GON|ouN7t<#L8V@Ua#fCB}bCO26>rf!@j{QT3{Gs}OzF zmRN;1jl|aF6%Aon;0F9|gbB$vfpq;KEz7{f@q#yf4$m)%5}?^GS^N-)93FM<<+)&~4&@T%x3MEA-)~|8N(ZoD5vBh?ow1D530 z7M6`XP>058Nj%)N0^gT{nTK8;NEORhb(01{J9@NOQFu7&5l&|&@*GV(*3TF+-#>Y)@(qQwd&yA@GMIZgjpm^N=zj6TFaNHDS;}CWnUYF<0+dT&^45OD5`qgPDMCuy5quJTo z$ACj6X`Br98U|5oHcvqc*e!JUJDMkmzw*6R0*SOkb9ihnb6+@9i75WgRZO?m*;J3P~YG>07aljpC zu0TxTYM9*#6V@F|m5g~76o*c!(Aj2vGb)N__zua1x316nB!>4$kVW%EdgvqCRKC=E z$L)KGK}qrSzPzKOaaG-I{TF7fyh>~!p|KdTl;nHuzzzpdB@dn!%HzI)64l9Of>yE$#)+@ai{g36WI z@69=0{N#ClmqywN#x1fFGpvxPX@;5{(V>EyO2aJS9FgE-9imRi+(1*%Wpnv~WoG!~ zV~v^#Ueci7Hxw?ON0HM76xtJ`hujnr1zsjE&Iv-qEEdIMg2sHhy?B6!Dg)jK`V<%W z2xqD|j7W4kdF+%YRtmH-%y`4GX3704=Sq7cNX`u{T`yWj$2(L>C;2|sRw9yDicu_O zIAyOQZmvwugje!lx`OK@Rju9fPQzE7zSG!)aO?Of4kO+!O`K6HKJsi=%pzGn#qY{k zW4G%g1_?BnjSE|NHzSrSd%~U}z&sxC8HNJ03WqtzoddJ+2=b6hW74OZ@#RdjrNF-s?aUQHR8gdOg=Q%I9O0o|0#! zvbnQvYFqWoRlBqJp6~S+P8`v5vTL!wX2i+(K_d;Z^mQWM1nCl^zK6CumXT)$x{B{7 zJR7h$DXJkcy{GUvZJC@{jwY3gq|pN<=LH|vChYj+6KrF={OuyQR~xoG{VJj0g*mj1 z6*A$Zj(zmOx$mQ{M?CQxH~s1a%XhafYgex9mi2wiAsCLAu5Y1uepSBnnz;4C%S#C) z-TG+Nk(O}bz}82oBPK7VbA@uqpmXfi zn=*~R*}qV{$-*WWlQ3sFaUSsXJwa9F$V&1*8m*?Vc5@uwm zS=^I9>pxl+8ws>-3-)R3y8aw{Bv^wRh%^k34LxrTL>&8>=84?YA$_YqTb)(9k^E!< zd1hndy^q%lr-&wN>?_fb4*}bTNDMT?y~OU%_J^y%*+LI8(PYiKOoDrHh zqZOGd5`~DpvzZo8;s|ZEw@ujge1uaA#i@lCay)5eYtrhTBpE+>ty}VXe$uMwq_HF! z8NDH>CD}`8JUKIVv(n&X-NtRvDV|O#3DFiQttqK}S5wD}6nedeg9MamDq@#_$_vZ<(Udw! zwNubA-l|tHzMDF$n`+dSIn+G?7tj!q^}ID}_?t~m-r3`i74!R&vSV>kVO_S^EXUhD z$2TlzVoZ)-UQR%DPGDQk)ZSFHXcz11|zQ0zra`UOyRu1py_28UYyrC4n*l7J(E25CN3{0reN}K$8HM z0Dt=Hcfd*jO8vzOh|03RTre*6I=0xSX)0s;d60cZmD0h|FW z0to6a-T@-@x8;CP0C@myKzP8N0CwDyZuXb$Kw|)=KzM+g0EGaEfQi6cfQbNY0FI!3 z2gN%OA;2OaBPiQ}N&x}&7wJHOz?#5+`lSd63kV3L2v`Or3YvVNPvAMAH-JK5LBJ`X zJs?8BFCagFGXPT{Mc_psLSQ~nzk`|`P!Es}=nzN_fDf=we;W@dW{&bI6!L&^K!<>g z0C@mvfRzA$Kzo330C0eJpd<$_)Ne#ULm)r>Gz8SsU(^HO0)PUQ0^|V^0xtspf%+Yw z5GW8(6{r!g59rXpe7OBT`o(`~&;R$bUCg7pYXxp|ZrpG9e_gg)P4?n6e|;wLKbP$Y zDBA@MVdUD^*D$evl$>YKw+r_@BylKYc6PK|{qJSFfd5ps3;15PyDq)_?`6A*P2b9P*ERn7|5moM33W>TR<;W=v8ey|vfU&D zJo4Oa^Tq#Gwi}DJ1@@QiF3S7Mc8sU8 zZ)LktjK9iu4r&c2*GPQX^8S6Ij(d0I0-seJ>KdPsl063AyzgZ@cB|8+G5uw`!L?Af zn=AAAN7?SB54S~Zh{sO3b39qklCLqtRf)gv_^WJpQa+Z4nEhotOWOVZvYlE)+P;+H z-^+GaDQ-^(BNq|P)JBr9P{m-rm0Rd9myzPV81H-8PWD&Xu1UXd-d|zd1rvAqk>7ISx(>gt!!sUcexB@yL%e?4I92EPoUQkf{gwu+gU3lCjVTv zn-s6-7|H%twv!bncwd&&L!fMTI+&bhi3})GoWIwWIwn*unaw1fd75||?gDz+KbP&8 zhW{wrg?pneDdk()ZrrkX0|C&DR*X4Ip=_s#r>v}Mth6kbI=vodJOCQ9o zqkb>j!EJ9S+xh-gwyPGRq;F-rQpV><7W-S-P9Ms4QS}HvX(zUOuhql2LiF>uvK@xa zqDl=cl>KG9r{BtUOpEVjyCryXyv9=wWjiI5?UwbI?RE-L7?kanLfNjZ?pxW;yiO($ zxlGc%TECa=2LDsp&Ov3-U$%1{^u261zyv2~cq@nN<9un?XweRe+haT&rH!U`|EIFu zI0Mof%61FY@-1;e$e)lh<{YV`o)1FH{B}~= z_p+UfoL{c~ab)>p8l_xru&sH54HvO#&2h6v5{Z;hY^+j&nWZTbIhHO1JdB%!Y&Fy4 zud-dnUu8QizQ1gDh5oH<_f(u=_VNc~Bfq%%Q{qvM5v1YNRzz$INgXQPpMFYK=PLhJ zwiEwL*-j>sd@tJ#B&imDNd%PbhOYd7+PlxFrt-!A_uubM2XQ@@QY_vSPG#8N$Dq>k&{CjLC z!r6%a8rywoB>g$ITORJ3w{h$Wt)~f5i|3q1Xnd}is%4)teI?Q})#B`CFitt4Y@=hS z$o3XCw&N&tw|^hoy~pdn9MVz$HMX1b_t-9xZLEWh?I!*?wre1LSx#8>eQdX1Ge;wN`LjEzfWB)a_Tl$Z&T_NGGv0cvp)!5GazmM%Y zC_^YVwzI;oz{Yk{|I65}A3FXuwwwK5#&)Nu6os+H_p#lPfY2HLF}9OLs4smV+pQoT z`M0s1{t%D+e;C^-;h$qWs`!75?KJ-w+gWaJ#{K8m?m0HL>*V799NW2hf|DrmU&nTm ze;eC*s_?VaaOuB}?KJrRJ+?EXhX2Rd?f`kmKgV_o%FKU`?Z)Cf{$*?zh2l*FHYkew zpJO{KY;0Ez)BZWOtER3J1w^WG|8;D)aR|Auz^>hYjO{EaoA@LTff40@jO|SLxJWO2 zlYo@Wqj~=8*lxl9U&eO(B&uz_hZjPfCanNEkz6 zRR&v5i}dAsB(@>qx|a!_FhQIMtQhvw-W}IGM5#P%T#XP$)qtQ)ghPNX00cgQMj=E2 zAc~LyG2{gTF1DYOB(X#u##%sE1Cj)QA-J#$P&xor3y4FIS($99Mx8+Nswf6W0A@!) ziWu1y2n^V$o+OE&MW_jIMId12Aq$5A#RB0)fpx?Cy*ELgpOhv7%m&0zg)Sh;c1L-T zL|}J~l+pm!`JKVWJPs1sVh*-sO0?&v9%MntOI{raXaF$OXP^-AWPyDwV6A}^h_E$D zbWzGUEtnYv3ZrC@4acK^BmhhRj5P?h+cQSNhWf+*Rx8(5>s1HQS_>@(Rzz*dw-(q=#nVyFSmU1?l(GLwRUxtdnH)AW)8-S007C>sK9C?m zD!U*@0B!lHL_W-RM;@@mm+s~>JJOwp<$7Agm<(9jY*q)dMJChZBk?ksqe?nMhWJK- zsVq<)l4IGO<{(O=_(B67Odd#d;3Czb`3#UwL^GQGN}ji(R1|V}N=iW4la?eJJ8Mx( z*6e8Th6RjwNLSrJ?YiM-lFW#W49fElMSD0XV4MXsk|1UZ)KH5sK?P}4gj^&Q>&hX~ z1Q<%nEbSpjl_8EwGaJmPCgb8P(j7#(6Cen4>=3SLsBf!j7(YPJ8!sRP@e369@Z*M+Z47STVI_w z4ow-SD5rt+2?L2OQRyOw3*#ifvkrCEraPc1kXx(_%qVL)L+d}zo-QM)u`d&>tVOw6 zV9bVFNWe*S25M>@KoP|kDOn5Okj}6raMf_SlOo@ef|!YFpAKLk47Q|Y619*eEX|*e zxQ67j`1J%~`gsQ!*P5p{2+b5VI-?ZC60KQT1gltpEkvF#ESnUipm)frtyxCgJc<~8 zSXlmkA*v^UyWLQd279@-WeVV$7L=g@T`j1d2CObJA6+Yr6KB!IkoX8?2;kd6IgKl0 zzE$goG;E7uj7`s2u_nRh(f3iUj(GCyli_1o2?SP?nKHq7S7XP8guUTsPuM1@VS;H? zNN-{jN=%&fMM9~GnVgREW9V<8zVJryqZGCpw6)wwYDQ^8 zX}+B1eZh>>QDswP`xpbRY{2E*%16!feCq~$&&Dol*^dQ21OR9X-{npCHk_ z(Nz1$wjs8(y)kiSNt1`;wM*2S*G-#RjtH|8C4P_EquNo+==5KwmoqI8I#B3V)K*!IVim9BSgnNWZc$R#~WV)3DoCPC{{Hqd}n+S}W43oT5ctroyo zMxg_O&qnBqO6wzaXd2_S`}rCfWT>#;Iq@0^p-BoUy|A>l)|rFIInv$3^6{Em<3>dc zLlt7ALF7Hyw++-5)goVu3bBXwJV+NLe^@_`!Btj+xB zbFQ*Q;Ur8qRF@pRlxEFOC803B{|>d`O#J8csUi0+3?e{_5C>BrKZ82h?sc_9__|Zf zN*S-JnAQiqjI+nKqUx5U0pF4hE?A|*gQG!;4`u4TEf?Q`>!Ll()yRw}#B&Ir;wB-Bo^T z$Kxs`JQnx>6qRhb2}a~~TQf3<0Qcr*N@WmO+EU^;bVIvdK?lgQuXRKP@*wEp>#xaG zGZR0{8EfJYJq7fQsuTIuu8wBZ*P>6zxW*_3m5of9ULG3vWWX1B#>!jotyI?bu9YiK zgdpb8;E)_Ri_(aSnjX@9_P1QmODJ8KPUMvtYhm?3W*7^Y2@z%oxZ%{hZ?Ie32N(e7 zi@l_kp?c(V25O}KHDbT4Y8@ zFHwVtU%@xS_Xz4->2A;z?LmAD_bXqG6CwnGCMQ%iuJ!E9WBDXeU8#E(T+(bQ0830D zTT!7>&~C6)=@j3yR8_Z;1`^bH&)tymdflrYwlQ3Co8qoItW!H5Ntqe)ftvlH>XF2U znz-b*#KvPO^S)$vKRTZG=;MabkCRAAg4yWmDGV1!Rye`+Z*$Af}}=UjJ@m z3>?A3*d>3gl&U^|Z4F%-we)y}=jb11y(o9+R`}9S#$qI9&_G)H>CybOGwvzJ^oCEw zr@s!=gzOpq!CQXtmLI$Y{QIvTyyXXP`N3O$@RlFE4r1m}J4s z3pP>4xXStS=P}`e4T-VME#_G;%ra@xB+RW~76ub8`}gnPym>RGU@#7YDHu$$U=Riq zE|`BwOH0G>3npJM;qrsG{NOGBU+@-PoZbH(GkaB7fD^>;W9Ew78!?98ThbH%Y)Oy* z-jZ&M##+*^g8Q!i&0CTL0Phw~KGAi)(C4p~^Z~3TZHKd3`DaU-i1JSC*ejTWpQb({ z4zs#(f}(S)U|yY3Y0m|n?t=9TS39q(`nkVv=HRLcJro?lpfDl4&0zET2%y8_2{y&9 zo#`_}{GGQrBY(D}U#S0UOPXFUfVjVT%el=b$0mK}Eeix=b?_JekGzFR{FArn8Lc$= z{N|J71jbv)h5YOzfI9ZS@)kbETP_X#&09>5Uh_1xb3OInThcm_-+4>qciy4`>7fS3 zS5eAeyv6Z5Z!!2Uyv0SWrcesCfAW@Pr%6s2ZwXuf-+2r2CvVvx?mD~NUAPR;CKE|> z)=`{S=jG@&_7|p|p4$3654qmig~U19HH{PZtEHO~=H=l9ck)-Uqm!#y{b|aaBKxpH zoza4b73vcM8tVL#i&l9{t6K-l@wWnZeErb)Z4+*c zDg@cV4+{{Qi!<-jow6#|JTfJc_lvq|!Q<*X2q!e@)v0u0!N13$d{0Ul> z2YQuu3GYXs_@YmKg6k&wxuuA*9f6Jt9L-%U@~Y=kw?=vdZa9e;NSwGo^LWPX*MJRZ*?4>SVdpw_ zxZ{c~k+3-;XidSKXxV9k9lzP2-N33t>q$BhiKFEK-kTsC%vuA+6V!OF<5J>o6%t;C zf-PK;?qX&m)gb$V)xZLu^p>l0g3qB=g|y%TQ}pJ#$_Q|;fsm)a7#`6OEY}HQpc>*f ztBLp(VqHpSSlj@J@@Ml%c9c0l1aM3yVl>(Ki6>c4#^t+>tcsY!#1+_%9nw5T+-{bOEMFA5ub8kLR-ym*4mP+}$Fc z6M7DvTAvv2Z4gH!9)brEi#RMvrZT3EcR;L z;B<28Gso?aFMxY8O~!bX9021523s9Io*Nq}Cjap{%wE7188drz*KBSC3K4Kx@e%L4 zMr5c7C$S{iL_b$C_dWlv+7y8?ilzf|4m*9pw=juZ;U#wyz&-L>d|;k$&@S~xyD|^@ zRcXW5RTg1ZM;1{$ni@%Vy?6uAYn!qLnX2-l*m{j2t`6M;o(i1XzkQgr9<^V$fOu-G zY0>C@k7FIkI#JkWB0T=b@2DE3;W-vg#Dmg? zFcZ@=*RAj5gB3$zl;D{2E`CJhSZ~Dm0Qt&nrHARV3W~ijo2Dc59J4@7u&d`0gpxV* zpVhjCL(m{IvdM^yQf3p?W3~y6UNJSe$)Nw&@*4hSN_xP>xK-1V2;Y)3I77|A_5l7FDdtUi*VblSbisoFJ`xSTet-~P4Vfqe1P4UjE z+s_Z^y*t(!-rL~ke`s6q?aPyXmz+5YyoY*BmYiO2U8NoycZ}6x zaxvtf$I#H1gHSI|cthf1BVBGPnzN&SMd-$HqdwoEJ3O}w;OY+qT?K&0wv+cf1mSC~k z+DLr38ZnsCfHZK4Iy~n&o|9f5a(QBOIR5O?vkJo0i2`aTml`mpR)Z_fb&b~zn)G|H z3yRlA!jczQj4W^WOfdq(TDl)2+42+nZ{DJXsm zgg*zL3YMMPeE1L1}q~Ykk2~+ms|M+8!pYOkqnJ-43 zVMaY08+KaCSiLuTb%NotiX-{K`j>k57cyf!JEF^6!_NiBxOv2sy<}eOjG31Ge{0O# zDUIvC826|%?#ZV(E%S7r>*=R!PCpMm{Ze{*;Nt05ou}V?Iz7aUf9D$iVNLw+!SSD@ z@go=GzjVfb^NN>bo5K*s*$bkP)sivK_Gi80JS>n9hMhlaPl3%DUbUme4e0Hg-B7?l8B2_P%bajGPs z1?0DY0FpQ=l&MNG$0E_}Bz<9`g%B{+Nn{u39s-ONC|Lm9Ym$)w$n}P{HP}b&X*?vb zA@-EgpOs{xLTxYwBZ4$>Y97%U3IQFfNbr;CzEEF*TJp}&us6#*tkMF=7SIp{cmbfH zm>_}V0A!pn)j*qMg91GXuu#I2vNH)aDHa^)AY|xEAf`9i3e<{^Kp-V2K=H8Dq9%nb zhL&0>fs6SU#8iQr@MP=|5FK(R`<;~94{ancloUfA0^|hg>Hf3{N|d2x64a?<&_sYD zRw$s4vNN^?CXqGLzL4}?T})kea$E?*bSRb1PKGE<3(1_Ll;Rc8HZZB81|=xuhMFYE zMa)#F(Ga-pc2KZPK^Ri#iZZi?)6GbU`Wl4l0oYo|W+a*^&RB#y`okpwuX(OCn~7JCpX%C{a#+a}Lg8B)NE zRxm*t(Fd}53alc&Z6J*{l)HE!abz3V?4LzxO{9$qLC}Ddq)K~u9hwdpSZcELigpoSz(D1WtFO1^rUjKzOjfkSWOU?2eq+iC(Hf8T>-J2YgD>XKHdN zF0ib%2-QeU^`%t+@(C1V zCmREfrmT<*7WtGc2mv#PGtxM4fwHjLIGk3SW5Y*2)uKzgnQxV-0ea5eznrbYsDt8o zC@>Kqn86~CcEfSqQoIP-s31v{J=0w_sb5Z^AYJm}uVg^u1Yhmp%oe5jP_}Ckdc#}7a!c0J6pZx%dOURD+5%j(C7llw+|U>O0H0m`b6d=> z{b&1z!4Z=TYk9SvR(aPC#@Ak0Qc)RHoDv>mSy59xj+NHHluUCw*qJ&#bzyb2Yoa}A z%#z*=`~u0xWs}W6M^sHr7}$|8%NNaEn3!V1AaZIA{1VSnb|~8v1q&0YQMH9_G4ju~ zx~znTg*Dl06DZAzhW>S%*H%;d4K+T(hPH%R;>7h0Mdfyv?ondQ2I|PH8pGN;=BPzk zTUs5ZBJJ)%V2LpUcW5cBxT}N_pMj+)b8I$t!C$5_AWMA#gHbVUG8QO!UIZV=%fHC3 zd>%A-xAVd(IecKB^QjK=Y%o)v=Ss@Gl?JSM2#KF#poI=>Xe?y3vl^GzBBUW`#8w%< zI){&jW}?P1LWYqVj+4k6qaX($O~%+A1Th)Pb?`@gmFLHqHg2wk1}a2hFV$5c=DebG zA7s|TENg(+#HNpb3D}|rd?3z+XXfYz4wa5(X@3>1-o37YweTsrGW>TG{0 zP^FNuKg$H{>|(C@lIBkamMWRCwg}IKx}%CpPx~{+*5yQ!0UOPP5~w=@#QkL>-o@H| z45k80=`mKM=X{J(#$_w3?K5IK;2!T%oz~JV@*=874lMvKC+q9=pa8uy$+gtMuci+6#)nw}+VAPE%U`8Q2^nB!F0R2Rgz{sw`IOduoF_LkwXFfTgqp%G*V zK%jdvLzKU{7@7-OEmepvJ0nZ>U6!$3Ff0d6fj$|9+XnVqYR}&u%;N~bA^$9vz{>p*2(yR0LHeE%BtZLe9OV*`UcSouGmdJ(oZ3l$z7@ zF&d{Q%5^LPPMVIg){+xZmoN9X?ATdqAb~XDZH~4mD!OQi@!2QFFxu%tkrG{9FX#B2 zc}+=t(hYZ+0j8*Z3q?UAfpL$RRub7;A3%wd-tGc3yuoXd@(ky^{E}?CqcpmvZBg`n zeCr*kI+xgzZ7pi%2$DvkGot;ZGrjM{MK$Ho(x#N47Q8cbNl|oco!jW0iV3nV8-B6@ z`=+%71bSypYfl;MlCAS@$tz8287R2Ufu7#Lv_5H<@~(SS!QJ#^T~RaCBro&Jd2uu4 zsbA7Ow|qJq&hslvtWSDhs-5@xL2%`n`-f{Y7PeNl)j3x5c7K+z`ZPnQe(S zdo9h&5_Ob)X5X0G*VdbxCnPLPcw}O8``OeR#eL~J6D*coYFSuc)wVw`t=s5GjYC82 z0_QrF$*=02ea^G$J&*l*cd+iHe}Y??<$^aCS2#0PnLnF-tIm>>Xser`?{@ju1;0$M zX^v&2>-NG5AJmQ2dAbAnwpd~)0p{$Rr=#)>hpcC%bJV>pwVt%#DgD5Sq8kb zapFcMSs(Lr)}R#W1vBa@S&o;TSqg^miYydtILe4Cf`;4{aspO`0{b?Un`^%PW_+ipJdRY4976$CD zQr~8;bV`lyx)jv>PU4pLlpeEi{d?!xIf8DmN>=!5*H!<1;GC92Q*`X@29%&u(<@hP z1_oviNa^66Ec%aCWa%HTE|_YI#z_h;hV%uupxKCRRuWr*L_A6Ry{yYh0aj)p z4K2{xUuD62>5~SZ83X1hm@;~pVFA*@+bhhtO%F*R>GE&paY}16GcAO%v=#mqm8QqN zxV`J8b6|>34}9(ay=`*>IH(9NV>Y0jO z@>L21w+ilh)_s3)wJM-#Bv~lX@hN765`d;*P6OFMU&7`K&q6wltlueM7u`1?abs2P z9&h{rG!=5S*&claYvbu&i?mIUY)nQpA`6e`MkCV)hAqK?0Kt2js<@1NPtw#<0)JG< zD_--c=HOaug<#TJZNoNO`UctLJ=NgI=+~_|;uZJGqjH;RVi~G9c$NP}>3Ddvf9pB9U^7|aF zTki)G4R5qQSI_Y!H+-CcikV4mrEV`Mv z-o~)7M8S!h6V-}}#x;}0bH;o@62>?1912gIE3)5?CmR<#RM6=X#nmr1A9hq5>T7n* zM%Ix9_%Og+Y{eFjPIue> zUJNE{laNMJFSd)GYjcu{Xyp}$x7FJ&5*hLA3d4&GB%=9FSI&{I<1W8iDxQ6~EgDRv zB#L~kO-A11ZW^!rAf64GQPn7)q845C9HIfzWH$T6mgW2dVY53{l=zqMi>GkbEzkAp zpz?4a7uZMM7yIe)cH+?GE2k(4^&jG0^&gz`$sQPgr_ElzZ(dONg{>5E*x+QY*4>-* zYh1X&w&JnwM?O=uaN4$=>adMfgWAzc2*w-J}x;~-X1a(EqGvlN1h$ zWd8AAdDVyKBsx0`QX|b=DU*Xi*VWqgW$*4eTRT+{7pce*q`s;moNv|1b4wjbuC6-I ze4Dglawi?&w^wZl*hAT~r1!@5@*%?O|qm@HUyWQ@RFG&$=4 z*sKoWnGU|YfgTVXT3VC4%AOx)=(u3tIua3B4C5j8Kb{|_l!)%7U+-BdsSV9-!hW!C z8gglk{APZO)_Px+cX&m?%{N<8)pb1s{>e={)0_O_)YW%>i>`TC-10c?d|PtE<1?)v z(p%r1sJykm;BLu-kA?S##l_7b=N|_bJ(zK#(J`dld~fyKi1Y1(AFsdrtaCTMf>N&p%IX7BuIx!H-jr1BxVysgV9O8K_wTL`{D6HwVBZhe z_XGC*fPFt;-w)XL1NQwZ?DPK)`<4J4DE?2__tz;U81MV5TZQqyzq(Zz@57MaKZ{kE z;lp4b=KL_OhhaX9@nPT(vw9fj!x~nY^TVuOZEYzk>!M}Iwel3i0S ze;a{ctKr-&cBU9awx(#WiRqL_;Jpqx(UfkAdeyB8T3aRjRX@0{x^#W*zOKHi;%QFn zF7Gy@GI@&mbm!%ggAD!2n}Ilf($6d17<0s|opJ@U-B0x5cBXE)5m!*TU6b#7_FKLC zft_~>erkKZ=f7<_p7bqXMl8e z?^Ib3jj4F5(1hanDItzNSaoXI8mkoy1;QGh@Ot} zaJ0FXxvRr(nssdt+c%%QEl*M#$PrIE_A}3tc75oEz?~SKAl2tsFb@`+753%tS!Qfo zTwFa`q}UP8aY+&8&6*s}aGL5Cn5_C{Um`wOKvo`DY3zb4o9;OoXX_>{EIQs$yW@3H z(`kZZ6;36%X4>|RP`Jr20>vfJJY_qoUv21lQ&F+X{qeYYMD2--MpF+Y(Wg>FKtQPx zQ(K3xJN)|4wQ9esx>H}W{mxSZfXJZ#iJLHLxzW1U*Y{Tk+KRlsEj+QjW+JBhT&M+w z$lML4iZ)G!w+Pu4HuVgW^*FtIo%sY^Rl`tGkIh-!RZREkUAUoP=&?&ryxsyud*{Bj=u845*_>P@l-!T#e~IE803t_r2TNc)-6H=oqL*(cEp5 zn$+x^BftC(X_L%FpYEzIt$C`e%NJxdT;Dz8J#_rgu(kyr=>=7A+uEvxwK;Wuv?h~%7&&&TBGk4SQl7mfqn|&PW(=PVD!eQMi&#=%X-@8@g{_Ixi z3}M}>$9L(2!ZBgryH%=lD>U|hVBISA#LG>7~wJNaUIA658KE)w)64FdTNMgsB~y z5NpRX3>J!6}2;%YNpPc%aTTR2O z(MT)()DMCzCl3g&o2o4k_Glc_RbZq;JYimsoiT#fvT#}pwy8QAIF82~a5u5{+{iGU zk>@}SXmW&IbMNrMUb@g09kBsMv8O?)O79U_a@z&Z#?D-MO1*w^(pt4`HuRdqfg*Qad02qg&N^&u*3D8ie5W zy<4?%)2>ZR!s$Rq|I^mm`HZUzb$Q|idySS)+Vt<;D)rypD$i9e-@8>FGo_K=yHz?= z<|I8gvwwE0y6@bUeD7BM>QD(m)Aw$b;bW{@Rq)Slm4R1db0vSWqX6qx5g{u2-mMD9 zx>aFQ#F9U|RsDUh_;c>+8X**jb39i+WtssUi+}G{d7-2S*5}EgShuSBuWps& zC-9GMmDTrd)sgW(k+nESA@3q@r@=`B?bs!*`e%QdA~(KjVOXa?#&+|7?cBWv*wHwY zjX>A!sX+J0CoqoJ8|Au73@V1g!Hm5pw|6XoGqLL6Dw@Jp!9Fzs%%AV|I_YGg*sJq( z<%EVa_&au>=~EO8Jm&`VmZ`H`RE-j|6pb-s^F=<^C*@74Z$t;YIEy zFKvw1ZE8OQf3(i7IT+-MbeDB*YB62j?m*||Ox<+%<>C$Xu{txheQH=rySVn#Ucarx zulAhV`yQkV&r|lm_~p5m-9%G6qwRkkX|dee94-r-mXNdBmN+5x_os(XdSv~hTlLvy zWCKafK)4aSHA=5@tJB_Is4{!5PtZAK!pkBH#_Yxoa3CAMP>UNkgkQNb^vT2E!`t>X zV8TypJ+|X;jlRKDkMF_{FLa(4HtGEZm%goslV5xney;lj`b3uzeSitS@?Tw(7X(e4 zAHqfP1{=dJh2OUiKp~&_=z!h10Y~Me3O~m}*2rp@b57Rt444HFpkA;e4x{C4g zh9xE8yYORT!jC^L=G_Sa^W;X?lbhF^+!}n6*2tPNp|E6En>8KLtFsN4!=uGa(^nP;%7SC&xWrU$kHKJ{TXsw`WLAOcw2iK@XGR+5DlNmpIad zloK21CrwvMH?^c)mZjTmk7@T#_N+*o>zzsW%XH^tJ$Fl)8glS;RD!@ey`OWywk6@S zEbD+$cF-^LX;e5609y%?;D@ni#1;TUo}8WyZHEADFEkXws!zahC<%M7$I(EH_hEr3 zW;Dat9WH$fYXd+@PszGctfJuh- zDuf17pa4PH2!o9<8z83DPzkh`gNdUGL|^s2{$#_(k=S`g+_N-*YB-TlGQLso^#DV=jI5C@{4H}h(#M}JXFdXX0qB)lJ@LupQ7cX1Lt18K(R{K z5>l?-VQ3=3oQvEZAVwl!33A4>afirfmPcc`CXi_iCQZlA^FsPUkp*>di~u;W5tam? zAjM1tC$izGT9l}PsIY2IO|^*#n5(nr9j^55DQ5}K>MN8z{*WO7GhzVG;X+;@z$$21 zHq5Uz(_^guwjR`4d!{K047P%aydrxE;F5~~8%e26z8(sRDlB6rUmsODM+U#h0ZpB4 zs4jNkD+$<@EGVs%my?7AL>0^*gll4eK2J_F0WwOi8NaTal9Cewf7?-(=u(2y$|myasJ_);sD?+96D60l{+DK$ zV1G&EMjMK$NXW12_OByy&%k!@%tZg?TG$fJz))nHv3`Q_6}z4!s_N`S6PcTX?0z@e zZhTo&E5B}!Jg-C1A;1xwhup$8Il~$)c^6Yb5FpN|J|@!))#XeGIoxxUw^!b`g51Vp zh8pH3mIw}C9;3Z{oYce$0D0ZOu%v{jP%JT zclBnGa=hx=XJfF*6j)12+I-}cx<R z`PJmjw2n)&2^kv$lca8np}?#YoLkG34TY@qk(!1!j$+_dhMO|=Nl3{^NYa!VS^b(8 z-;mU4FB#u%WW`QTC)Fre-Wj@_j4AyYJ#LxZvSV)^#hNM6+x_X6l4PGaDbm2q4>gj_ zeyO;dnzl6wAY*dhxqaVAw`nrXThoj;Q3{gx9b21 zDBXqeuwXdrP@ux5BUVoh>>ck9Q5E}NM+aRRV^Ml#yc$G?b{$>(V9)F0H;Brg29S|2 zU4`qHY+s-IWl`47n%k_9+io=vw`62dZc5s7F6q?t)IaWdX{V?TNS^sBXg2}*V;9v-jw#Zbu@cfj*i7g#2$`+m78QDqfPtG$9qV`K zX=(}TWQl+6OitdCE(GwJp%$^^*Xn~5Hjw9VaBs=Erdr6%ZZ#9AOf)Hr+>#%e+&5&a zasz?0pknKeQbOH@{*h9>dU=844Xas*(dR@x!4tpfb$uj25SjIOMI|9z)dT_S>szzR+d}n4*niHOXuZa$;?rEgRvx zw;QWrYg>N*;arXcQn5TDH~BYXkajvdzV(c!JK`jSrmBleKqaI3H8tVkYhxKl*i`RsA8!vYzi9((oV%mUwzZDZ3sao?$0$u|1EA}Ke!zw|>VvA%s&^cQZsz(%TIpysqrC0y0Yhl>1~r%5pfi$RdF))&j(`rtE&&*|BK>oi!1lAz}rIfOpE=&QSA2V}L#0i=_>tuqKcuN-Fxq zt-y(nEVfu~Ez$@6Gb&vJPEZMpaFNY|WzV9hxRpQiU6$t)(%skZl3CZO~N|G{MX_8x?8Dpn}G_*~T z2obu8ma%3TOj@{F3|gq}<)&P%^L4-9|KR(a^FGgWp7TEE{oC_;KkgoGoHb!>kO$-s zfY}!`2m%XPt>NS9w{4RX-__QJje-_htc3&qyH+|sKfh4o@%WjU8KqLWX3d)P^z`B3 z;fjiisi~>Jz(6{kJ~1)jur)0pH_^K5$l&ar{%Z)!v&PL`yk zrln_OW@YD`IGKAYFTdb);TdUB@!50dFI<#ex?ECvrR-{X#kI<+>gzSNH|pveZvJtr z@pe=5oxAt$%UgD%T0278L*O0=h7|pM1A`AAE1y0ZdNTZMXJ#Yv_=mhnec;yON%QEzB#`-RHkMnXJW6xkc-OU{t)U4o! zx|JmlmY7yZzVmD!@T`_@R$n`JO3$a9_`f3l$7&N zyX7!8e2ulzz3R2n*}&F5s_h!LHpssGiThA>=e>_4jn&j0rh9w8dS)e8kAxgN(EfYY zejBak`2Az2Z#dLc-D87qzgrBuj&Gi5BmlTI_5)7$jJIAmxvk7?1Po@;0Rz{88J`vg1Fi{+$aM z8@SlG@p$XcA45II;LFaTqI^ucOdU?N5%!3*GvP4Fd3&B&1m#z1kHjdhH7xDw9{lA< z`iaKwG|M3IuFQg}uFDLYdw7p*+qKT&IoZ$COXzFg(VZ|bw-%u2b^-uk(mpX{`uwrE z4VKG>u`p>HfUK!9B;SI#3IXbDnH&wsf>Kl$DHOnTPOSx?@Kix(T7qj&6>ZctY=J3} zwGap@+yT6{jELpu1F>9&Bb}d%6du)fUCO3DKT-;Cq!}(jo7rZ0DgS34C^6@goQg7R zW%~$N>6A`+f5l^Y89h7m^=aNNt1Ea7lJYGuv;*%CvbAR9ur?ovAfTxPg;F@z34;~T zqSZ3sH?uGL5_S`S^(6!Z-A+Rk5I&d&L+@Y#DB>Mz4mVHf-^{x^M-<20Lq7D@EcyAf z*If?3cM`M+O|olEi7UL^+q8S3*mi-J*9~LJPK8^iQDsZ)gUBS!Iz#$NFSl;XEKyuf zXqBRFkiaz0lkE8aH$9Y?P4!thinRDb#P)z@kp$o?sC#qjw zcK3;%+S{0usCljCr}O*ky>`M6_Hv(fyX!~$xBuOQ>pVK0`a}Esu2!9s-zGa9!j66{ zH5j-P(eJ3<@oCWEWYTAM*1(;)?%!hW{M(kSb7%f;eogb2TP0hXzuu^yZu(Z)cCzXF zl}9U@eq5Xwxc#$eHs-cEA4PkG9_GN-{Ycs-+8CM2!G7%%9ZjaaWCS`8d-}vNZM0{0 z($(68ln$RixRX z#(O1Qw)8SZy5*+vt^&NRWr8BZD0#f2l(*8_O_8bHHs0Eh&bFZ_vS8H2{r0XEHMVbh zv*(;A?mTWZUp?NHV=perel<^DTi12MsoS-%4TxC=bN6`=kPh=taI5er@{%zOkv76?$O zR0~q@c)SHT7F?K|oLmq=E|=42v;`?bLqj7YBNqfIFE8iw`CKlywzhV`2$@XQ)zy`o zo4X*zf;AitXF(8!LZPp(|L)zpv9Ym?jEsHz_ALO^+SHeQJ%NWA@A+Y?Y#c%&vqwxjg<){1B8kjttPugKZIeX)HqBwaU zZVNvS6|aTmQ?Y&kI*h{NCDI+C{N3l1&PIreN|N>Uwr2u-JRni17=4gXZBcqF3^~>u zdZF?D5lT)#1>Vbu;*9FfC$-6oE}v@-f3!16`Dd`6c6od!puE@$L9o_{bny0&|6fxx z+l?^(RvI1gl)6`oO-TQUUA`plJz&Z`ph<@~d{rI-RZ^_^oss~cg`538<*N1UrnljQ z8B>NNW3U=8*|GG}O&-|AfZZ7W!MDq9$%aGGi-^zq)bYmFOf-MYd#jm_HG|{}y=cAS z7%To{U$*ypd0>6ii=La6Lp7monWn}o2!A?743rsi#}#7Tm{&+Z3`@<$nBOc=zmKCxxd0(10?1YoU4a>Q5q*c4T6>4kk3}qqX6tV;0l;>4?kNgPg^;3 zwpt3ENy-y?{-ztBtc^DiDn(wMMf!4IUFoW9T+YmJlrX}Ie*&l|%Ot=Znh{|~C<3*6 zu}WM?!;?*lMoIu@CfgC%;Sh9H#2zH-(YwS;HMeZY(RCma+i|teU$)}cI6FxPY7rxx z`-j!WbsFU82wkT`R;tO01YIE_?=~{gXBn7u<@MaJx>-?!J}}s10VX`8!DFjIPX`0W8D2N&KvNsO_%@g2PbhgE%OLBd z_YX~%khbifmVRG58l~79w~`%pAv9_B@%ES>pNIF>{Fr-w_#`ek5V@bS1D`GUcn0S! zXx3YOBz2?p^s+W4*(kktJHB9l7>B|*mx>w8H#RE&Gt+wY@{0y4#_L_) z5L1pk^G6^u6Im_+T*Yn`|Lc2y^4G&ypiLnD_|0=QmIgD0G+!fW`W~B>KbQ=}U_B8K z@<`w+LzdzkiNI9gJaXgR4lH8&GS3pAnW}Aa4U_Yld=U{Hx+JEHdsLQNZsu#Y=R{>I zYT+B?C*$E6jUYzJNeOJX2tzg(6A0#jyj#5z3`BCFp<8s;WhYdNXD{kGFt@0}TW<>V zDjxUMbCHEdQ+aZnk1nJ^o{9sLT%0yZ41!f)Uyvv0|AfG*r6|)tIhH1)p$ar1%6u9_ zlPlJSD)Ujm(*KWil z@s-GMd=E)oQRQ4uWV3YE`#>KWlxa+2lH76E+ALlmLQHGC z^t7|X;)zlO*Q|0+EG6d~%*0a0!&?nE?V3R)U^@kp)v0e|65Oo25#eokInIs+=^ z%GX9#>upP9!e?n!sLPoy_G!NiXmdJ&x~qy|)O;)8`4~wb{I&h|R)@9c9zw_eRLecx zj^149>*Dmp#Cz$B1`(#qS2yBDmXQhHR3mU|6DoAfw=)0(&w3MOh5*%m82T>Ff=EI* zlPE`uoz66xe7C`9@as>JWx$#zPPiC4th02}FJl-v0p?qqaaC=4vgE`y^JCcS;~fx( zjEeeDzDBR4ea*2pT!IPm*;R!E<3*i`pTd|n3;`s|M@tIp;B=baW+wO`L!M1t8k6mq zsiP$@C9c*JIguM@18J(wtnVl4_sX@b5~+Fwo(v)gC+9viV@V%)TG5sm>8kN2<11eh z2|^t^#e)qicMd#!nblC*wtmX9S zBv@+ct4SoYMR!fz{;6hOhDNoE$wmSYU`4a&^>fYqdtzn0<1zwK&ei%-(OjrT!-mvI zX$R*OoEek^^f3u6}B+Qb(iP)pG>^jf)S_sL+r zvr}@6CEuxx9r{v=ztG;BI4*kIT~zKYnd5JhHvS+&=W5t@G>X-+aFG z{POdobl}b#hk-BsM}N*95%d`fen|o8+wfmD*EOV8s+3Nm4Rk4I@{ufLgK`bgpmvl3 z=jK7uxKU?z12*8RXsmy+7M9rpn~71e`}!0~jUjsQuYq--IjTutAgFWaNb&a7-SZ~|c6{{Y^5l1%^r literal 0 HcmV?d00001 diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138389.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237475113.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138389.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237475113.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138375.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237475123.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138375.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237475123.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138387.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237475133.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138387.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237475133.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138357.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237475137.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138357.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237475137.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378410.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237475139.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378410.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237475139.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858381.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555149.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858381.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555149.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058512.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555151.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058512.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555151.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058502.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555155.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058502.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555155.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378440.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555163.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378440.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555163.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058399.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555165.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058399.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555165.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058413.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555167.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058413.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555167.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058395.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555173.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058395.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555173.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058405.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555179.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058405.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555179.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058480.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555181.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058480.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237555181.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858429.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715141.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858429.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715141.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978349.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715149.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978349.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715149.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858391.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715151.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858391.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715151.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378442.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715153.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378442.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715153.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978341.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715155.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256978341.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715155.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898518.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715159.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898518.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715159.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898506.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715165.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898506.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001237715165.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138349.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238281067.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138349.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238281067.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218478.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238281069.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218478.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238281069.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058429.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238282783.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058429.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238282783.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058506.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238282827.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058506.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238282827.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898490.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238401029.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898490.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238401029.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058441.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238401031.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058441.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238401031.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058439.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238402745.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058439.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238402745.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218444.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238402777.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212218444.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238402777.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138359.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238457271.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138359.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238457271.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138343.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238476361.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138343.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238476361.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138383.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238521019.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138383.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238521019.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858395.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238521021.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858395.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238521021.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378398.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238522733.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212378398.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238522733.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138353.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238522783.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138353.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238522783.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058437.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238537297.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058437.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238537297.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058478.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238556395.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001212058478.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238556395.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058435.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238601051.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058435.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238601051.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138381.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238601053.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138381.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238601053.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138377.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238602771.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257138377.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238602771.png diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058427.png b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238602821.png similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001257058427.png rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001238602821.png diff --git a/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001250678457.gif b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001239788885.gif similarity index 100% rename from zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_image_0000001250678457.gif rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001239788885.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898484.gif b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001239925031.gif similarity index 100% rename from en/application-dev/reference/arkui-ts/figures/en-us_image_0000001211898484.gif rename to en/application-dev/reference/arkui-ts/figures/en-us_image_0000001239925031.gif diff --git a/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858383.gif b/en/application-dev/reference/arkui-ts/figures/en-us_image_0000001256858383.gif deleted file mode 100644 index b8a7961adce1b592b8fdbce98966c70cf1da68e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45011 zcmbr_XHZjL;5Ybt(?}pdsL~C+caW-vBGOd42nqpF5l}%(U^ zCjjXCi0S+p8*2kSi!&+;N^lUmB?ohB=XJ>Kqr3k^!00>(C&2SUYm$a>l4yew^YLCp4H#=b6-S*U+(Q6c$UqZ zg}1pC&IC2B09 z=65S6Hm;@(g!b$vj&1bq97T0*uIwMW7tUvot=`QW`SbJpy^2|t&{+}6d-=#Q)z~?` z;0BqvHJ#XLf#6B4zy|e4Eu7JtVo@)TQ?~e{cT8f244(G5rL^~K9t?f>tw8GQo!bhd zZS=0}M>o!lZvQX|%8zTC@8ABR9@6=&eWrSHjXP?!dj3!4%-@RHABItVRQgu(z)n)% zO5Er{MBk1>@^Ibip+iz%`|{rF?R~>|x_{No-r=5m?$~kvUY#fHkE&;{SFGKtSXBt> zyjAh`@7|U=1saMb^`w<^(H#%l_mzYCZ)T6yt^a6S`X>6YQ|3W!;q32*XVJx_LH~rAswSzKMaz_8n=I`2G+N2{5l=k z#QJ#gSk#;#smC?7ml#$PT=6of?UVn&`jdg(xauL&izRaFnnCz*Xw93a4Rhq?IZeuv zWmvUiWQ9lJ8)D{&XJ-HPyq8un?N`fI-D+0@>OTe+4m>P->tFsZZFrqJx?4H-RgBc1 zJ+PVIGhI3|pZ(#F5amCbb2_NmABjmxpT$ zM^lxqj%1nC6^&k=r zS%a)~sT12>@ig^{nQT6k(GcyK0jkOS{Yb3Y!>WZ=zi%7kqYuAbZt|LO?GI@59!Cp2 zCPgdf86ZJU5wqv!Ewvv<(^NedgS1GW8Kn$;*9h_v*z$1e7gHonO94;_VNW^fNCI9p z-`iXqZ)^JYo)*HyiU;5*RvYibApl>w@%gwl5V4eJU2f&=75Hl@UFYlEQe^ZI>xIYd zzjxPOm0x)ExZ~H)rvAW)aic!0gX?AL1D1}i{-*0o_+ZY6shw_yYX9rq-q;gsOCjz3 z$Bz4O*?V^*2W>67RSmr9Sx@lilR>fAg$JP5@i9pn15-Fd&JFe+sSnX=1NI+cPJD{^ z5U2J-!V!54L5HK{iG*&HvOxFc2y>NWJx+hk>-q_t?mQ$ULqKt6oW_IUkEy!B>(|nB zd(gbB5`M%Gb|KSutC=3xw&5&lz9bmseg8X=haCEApL3qvjdXP5v)cwy_emDr>XNke zHQy^079bjCgPRMzwD@2tEh}nWIz2maruYsgL1K=~vr5-zh%w)FkGOg5sM;7SLR4Zv z^U&<1kl*$hH;QvnOcm7k>F;D;w7gd4XXPxo8NzmH=VzHqo*{67A^*=tc`WI{=B-fG z;PP9yIjVA>q9#(*Z@H-Sk@e#h!VfmvdnRb*Ui7R+jTtbBjB$Vi zyoy}%1%iIWc_jDt?B|l5AG6!^AKaDlO?r~%m)nn};q+N;_e3bI>Q9g)riZ%W;H!A) z%I#P3s$OcZoexSB>23W#L9~_)VYtgyC*>`UYdat>ML1L7L8{cxqb>gG56|S58GOA5 zdr_yy1b$xRn^)?cNO4%-?{x37*BBD<)Xeo6u)PFBW~Wwf-iS~6%!|r!y!j_IC8Xn9 zryL_O7|?Vhd|x3H;`DUI3&vX)liJP;uL)Zd^^otmqJl7SVK^A{7M;~NejK9Ieyu(> zGF(!hKW(b1>Dww}Aif&FAbb#iOFXd`DAc?dmlUp0DqJ#xa6;SOa3@&?A^8Ph5>Y}R z$}Yrmaq`7kxd$`ZEFoF4uAWc48_ZI&48L!dfwV2kue`|&7c=g+RUwAr@x2%&zfoZ$ zoQmS*LS~+7fJu`Uy7lpsvT(^1${qk@Z6*SzFX!Vz(EK0;P%kr#Mzs<^*C0Hzbl*i# z`rTR4ORVsiW-_ZLg#l9=!FZwBR1MX96w*{dQ}vVzWqw(d%i`glWVbzweT~+2U661) z-AY0a5L4#Dk|bVIfrqY`&aXAE1DkRQ-@f1h1ps&?Mi(+X>m7#1b)$p{*HHg>NnGe) z)}nR-n=T&4P9Y*?jguH;aN%g46~DenvVyUN%KZm>`6pVPkJx=IpBvIR==mQ>wahqJIEyA@q6u>AQiB;SCUFhB1dheK zjI2QyGV?gaVdK8y{x6_b72H7g82&-n9whEn6`x; z+O9gR9GA;#XdKM+U=HhgeH3>I&&h~t_yO4)y< z`B#Ukv2}^Sc51tuQL5VHG@5`J;|;xP2#gd< zGmm`HBN zkhIJ+w{U+j0KpHB5F+-v^oBc!K1$SA=7~7-doGb}PZ4mCnS0;Jo6l}%A~5-vCq^V> z8LS$D4U7R{{DqP1bdpxl+IvQ$>PW#QTJrk^7z27cPFnMhr!2RC0f%G7uYP;HYEg}; z2Tf!|HU%-o04&r9mLO1>$swBA9r?JcuiVjXEW|Wn}*4KC|QCLC?Nm=KPe6; zFn~PWwn9H^wD4d**EE2w%42Cvc43VAWAAP7$hofLDNK=q%+O#?s{cYWW}4kdd&6Tm zA8KwOL_jjAEybOSAo7i?u%NHg$Wl@Uz8Na3H~W&S#8Osj}7Dhw3s)EnlB{jPcB%2g~lWbydz;LdznM!*_`Rapc|2 zXu4D{ltx7h4&6YN5y^b^*WOSJ<&g?BGJ1)WI2@yoIxh_4HN>;)rjSuTh-B^p@0lO5 z-&x;WCnGJ1f{h>2id3H`ssc-F@%{l*r#)smY_A}V-QkY*1V+0leLyWj50`c?f*noG z`KPXj0hrTGfhAT^?-0SL>d^EA7^Bf~!`?7r3f_xaI{(0!kFNdBu_uiA z@WiSJ>te~t=WumjD(2EKO?KCU`T9IfCXi;pq=0uhawUG_s}8>@-kl}yzRWUctdHU( z!x+_~1c&MXo~pc9FAYvVH>c0H_1}Wc*8;xFwdi4WDMjG-*Y2&|DMv`{CFZ6tyD|#R zJ?v7%r`*%Ja5eYto9U!nrZpOaCrJ7#VHu1IT55~KKj9|8|8yg#I5aW7_CYrHK`QL_ z5}36FpB}vFga>4l_){c^KR&v))SO(jfkzWD&v00ZHnw%ZEkX{4D|Ub5RmVNr%D!!RWfE>1BYI_kN_R7k3`5tetAZniWnR61^4jnd|T zNzmbP7tfr;@oM3W<9t9}0D1TUth)i4`D*vMz+N%N*|O}hxuQE!{>NBOa{Q5Xe_ zbkp)LQyC)7?G3xa_>Wo0)Gr5#s0!y?)WC8_96$RY>8&eP3J@WJ3-o9uHt;L~){>}~ z_B}#~D>B&1u(r>2>AUK?RWA$m=x0S1GZOq_-ta{!^Ddm4aW_*QhGQdo$Q0aZ6r@qqAVLINn+rl!~cHZ zX<509;PuzKq;|P5Nh9){MU#dW9TZoB{~C%mOlN0XLiDK_0o+8jVGZ~7 z&rmfq)l3}!C~}wEM;()flBV$0-qYn^Y`pg`w1ApTE_!y_n@0nJ(K%{(YD5>}HHk%d>*USbjrkv1+)2 zlIr1dX4g8~4ZNVzHf#uPX@9h4zF>6oQEB?y>1Xt&Q?zSR_)s%qFAR;aMV zC|2VKKN#Kro<8a)OpPosZ7n!9QEJ2Ea_U@=TrR9LB==ZhJRV{{eWVBzLHRn z;vk2T5Rc-pvf`GbZjm|{F#J9!j%OGr`nqp$c!Ka)5^~R4Kx z#%3#CmQ{%2Dn*sxge8nK;Aoe?l};%i47+|RO2Ign`F_Mn=D zzlK?-24_~oK3aVw!wom9p3mUEF;au)uNBd$6?3eW2&|RLtd(i2m7A+oIH*JI;MkX{N^Z*V#$mG+Ug}d0Ap))a_lChs~8ZOC#IZS|mTcf8AZhEtYod^KcopN5y(>mQ( z%DcI-90(eKQEG*e0Ti*}?OZpzMI%hFfw{UzzoPAxS;v?1o>!ZI>u9f3R$rK7uLijT zt&76|Ef#HEfH%M{hr=v&+L{3vN^hzTAc_UxwEBd=Ru?nCLJrp?i{tR_*Ea80*@5l@ zL2d1JX25B$=D-->7C+5yv@=f@XMdDAV6W3OdeCs*yxjo{D9`s}x9eH9`~BoN&@=#r zYtWzXwUBLa%WO)$+~#}GoYXdi+No!2A9S1Rxp3H%95aCP0vHIu%glky`O(h9QJTP5 z&zHKJW25Pw&;%Kq(rF&8=ylE<<5zAO2^v(3sU4OZM_P>4=;CIu<4&6`XAj4hvsxFk znui5mx^0d}=(Jo29Oue%O z0CRRdFBXVlYJWA>%X4(45shmzIcSnT7f(G(UjOO&=n2xGL+Kgjca3D}@1~4pjX~;Fo-5LlutUtmI zGLCiHnKjfi4gGQ);P}!dmerS8)LQO{3k+=jDKH%#4QMkDhM#LM4eUfLPhM$%6MM36 zh^dQXti^e>c|NPd>+kf{t+sNrZem6I_4yvFHlTjKsV{m0vt92Q)XYHZhjjy4f%Whj zpgyxlXMWa_c>tr^tGCdgsf%OBH?Y%Z7` z+dXq`!TTt4%5<~gR$EWxT%&>9e1>j+!{ONdc_3S`KlWUcOIdDxZ0C>*ngM1LcDA@KQ zuQH6Em)vvv;WG=dKc{HoXYDT%R5R(7wF~hD7sU_=I_o2jg!9gUdg0AXBsj( zs=^^|Ox7R>e}^A+06 zX8X&3jl7iuJ^wai+9v!QXTvv_ftZ2jHh^gxV9;$j&pg0F>y*9qHb17hWa|_6m4;6z zaW@^m0!pCO!A$MTo*}092alRPFAtrYYiPs{FkRU&mT%PT?6uu&N9@qXx7rI>=(qn( z^v1THWa*f6YH5=F%t3$20Dgieyocou%5C*KRn(s~e`g=`ZT)eprB3VCv%`&p*(=9f(@FV-6m8}O$){{5Z0Zr-^4ul?Vtm$pbSth2wl z^VJp$czOXy3>=+1nCZ50`ZNB-U)0@xI5N!56;a0QZ;i_rX=*X3plNTDoP7P)j z4Pw1loMReT=tCSAa9#X=Ce3>44w^->cSdBppN=-)$^6plNavvLYdhh-#`a&2S;bNR z=;(r&?dJ8^?n^<<@dqDK_-32Ohj+aIhi``wOoz|AXqE?Uu!TkzN>lJ?GxiAhWANp0 zW$}~yt#6kuHxA}Bg;fpae(UylJB%eROU?iFl?5ZshZo|v7%6{M%>moWwg_e%mJz@k zZi~ic*3wIgVLIfw)ZqdZSrT+%ZE0urE%L_XH82 zo7cl2ixKf&0zkt^6-=-jK2g{NBPsu53PUP>6=hj?zR=;#hHb^AhT9)!xkwXH#QZ41 z*_4Wl^*7&CU7LHm<=E^~{5-|+-PbGa{`+4)MyCK*%1B+;k+RL-T>2up6z#mycCJ>% z3129>tX1JWiWI+dvUI9$YCQc+d}kTO3!cO!s*MY%6+P2h9`^Xr(N;Pzj&k+k{?+z< z>B2L1X^+PzYp>r3)+FEgqSbcI6Hq%AA)bD(dh+=wlZd_X?7>eE!z02&oXP{yELftL zH@-Ur&hSz}iAL%MGS5qjS-e_uBmWYZexZTJ`r$#iT_O=c;dzLfNV+wvDB_1TYj7}2 z8jbubIis48&PSwx@R%s24p0fU4S@XzWdsJ?<#qC(ul!Y13<|xaBc%8Nt5!P1A4fv4 z<7LTThYlhQ3rCokP6zWTk*El~W@LLRp7Ko=?qo$IrO@G266m(FEz6B@0L+21d3RC{ zx7UP(I3}2&3&RdwfWiM|5b_l-xDtbNM-ZgWqZAhVh_PiJO=^W6!|5b{#EjW6hgQALcY8$2>fBZxPBO2XMoz8+eVgPC`wqJ}QtCX=zv3GaRgSTK@P z`S8A?iue2W#WYhgSV#{t$f>ZmNqL$&aAius|TR{ zHeMO@rjr?{<^;=>RdqVq;aiA?H1H#Y^h)|j#2SB+$)Q>V@l`z9xpwRkFuCfROkC1n zatDH^040+BzvR|rNwj|QHv(GzJpQyh#$xGYA$BzmToNErfy`@(L>Pq~7dbPhB(bJv zhSYu|c|bZSAH6@fRnu|k^v~?=QK-^XEuQUSVj@YMe6TC2TzsnR)Uo1~cP52HZb~wI z%oPuF(OiW)mb)xGzeuNYKW?wY&lzr0L7_z8PC)SK8vX+x_f%`QkS@2%E|Fb)Lak{ZEfrt$6NSfT3&xmQt(}qLDKz6L+s``%NHHR?pJaV$HZ9OUvZWD31G`BQoIo-_YQ4plsv0ax~z%j`Yo zX(I`_-gl8cfkpTkwY=albGl|d0Z8C-;BHmY|3qU)m-fV;$%S4;Mq1jG*|II`nFX&| zGmq=K7cl6KMrsW6A97O5u_p^2A}np5w{m1lW7xvRdM$5foWX6RpAESfnwQLDC2{-Q zg&?$rDRQf*`s|eiM<#m$oR6mXUCC07fo}X6wR?(rw;1m^ksdd6HM!!Ww4GzYh;a5w z0jxjfNe1YOEnOAi_EtH>G)0fECjEY^5CL%d{iUPQzF5ZXHguf>r-~XawI^w`} zh??l$6<$qxVCr-vc4U&F$V&ruM?ak~_-RDJ5;7auUu)hH83}HGg}*$%cwR#3eCQ!k zPfKQQ_Po~lC15DafQ`tmo_NaV<#y^Ur&HK~mcXOile#RkpZG^h`&Mzu9%$O!i94ax zTc=jV4o6;ttqnyFVXU6jZAI?TBHNo8S$NZN#e@OIoqXaGmXTFOpzPr+CJ;1 z_6}*;i60Acevg={*G-o2?29h#Vol>WCUT)rduEH-?9oVKsYpYCM<7-Kbv4fIz9LSpRX)=Z}t)$ zRB0eRG^%ykHso=AJPhWuM~ybgF*RyhB1Mb4=o*tSj5=)9?3H_+=F9 z5zEI!2b;!F$#2iB=B5J|?;0YeHruY0z4M;By70AP9ppSI{LTGAj)Wk-od!>c_+cZ2 zG^d#s??nPkNb+wP@l%ZUbl;TB%QTu=B;m{aX-VR9^nRmAqP9tB^Ijc61ap?tM1o(r zzG(IoV<;fUBd&9`M5o_etXnq{Jse{Ei}#GlmVbV3?dO`OzY<#C=qg=5%7357=RtCo zu3WUxOhYjrooT9yHJ$Y0diPRV-au}1y!k|4(VEZ<$+P`#B@Zm8CfKjS<{&?LtNy)E zF|T;I{wtHO`)v4NddQ2~3(CctCCFdj#hB@pK-j)nRv3fkYUQH0kfG9dg&BgF5#Vt# zSVxbQ8E8qtJc%hRP7+wVhRqOvIPgwhaE4p+*YYi~Hx={$<~?Kx$*Do=*MS{+asT9- z#GntT!4J>uPB~kp>Q5J(%i-j4cwj)d2bRt0o{l=T;bC9i*Rr_J?1=9e*Ik+*%57gbRqkbz)eY+dhtZfNrN^FFxcSM@(ShL#BP-E^jh-XG`|T# z-u9rT_o%qNQTsTyGA>d{*QQVCGfSc94!0?&pRs6QzokU}`epuPqr0uUBO7Y3k8E%q z-F3omOGUpNwBKFQH_}ME|N5EvS8cl{E@0f%;j)y()5ITD;XPr}AG_WA^8Kcu34JHA zfd64dzJ7}bqRdlDJZk-G_{-|4oq;5;jUT?ItKCoC(^{?nG-VXIEq~p5xg@guQ+D)c znaOF>xGph3`TJfXW`2l(ZhD_j6A*u(l3jg8_EY}t@0U9H``(;psI=nSzA~%+CG=-) zwu0n>_)q2nzqOS`bY{~-0Bm;geb5kq5)pB_wv`<3Y+d!%T1VEp6F8-Y{&erxwrbRx zBwFc+{#i@buXFdjXmjY>iA(25u-qGE<^vzjG_}0%qDbj3MY(*MNNIWU%q|Np2LzwG zG8dHXDi&HeIlvK$3=&#sM+35>zk zw4R3V<&0_*ke3N4F9Jgl0UblYWDyt;C0710 z?UPEvhZ5SqSKc^?N-8_eE(WY`(q zdX=ZOq<`(j!ImfsY`ENwj>CzFU)9+faFX7P;Aj%N(bj9iKtO~yB5;M=Itht4y4dxkp#MR^mCQ4t}i`Rco*AOmHtb1<4 z!K$(z!>F7e>z>kBS0^0YO}WG~i;E|iqMr|Qe2-{4;h!Ix+hKhvf<20zE%5jvZ^SFM zg2$P)=O$ig@EP_dR;$fO$d1%Lb<8vS!Ys+pZM(^w2d^yI)*D}{E5Wn2j&R%$d3HlO zTBZywY+CUGSL)kZRQ>FZixP(-Ck*Wws^k!nKnf7D0XD}Yl zDNyO>Z;X$KSQOJps~Ov>Y|$9&b#fF3DIu{Ks|d5#M@acZ6Zy)fP3a z$keOt8nSNKa`SVv7b)H7LSyiHX39bKT? zTfc=?7{{}%jNtVQ1~(GqPnu;ORCg=82xi_*-AKRyJ^VAfs%fpP`>Oa}gykrXPcqhO z%mDyXtYqaY0$loJ7pyvKO%?uHDKT3!?oGU4w^j{fqTnZwa({KG-mYOs?G;X%$KxdDaH~e7AO`7Nc2jX`e(`9{Xn~atWk}&JHpT z3+yOY8!Swj+#A%;*32qTkyFn#<%}dO+t_4B!7Z7iYB6lemW(0C8$NI)o2qE3_t|{3 z(G*M)_GOn$8j})bWeDJuvYNcyF=8t(0USiz`>IGza;dbGY3!9hJXAGxpX|xA0VWK@j;GCNuL3Jf zT1zZGdvH$dZG`^M@^=C1viuHbM)d8U3dV4kvohpfJUR-rk3JL0z%w1aVBe(jcG$QY z=4BsuYqIx`Y%SjKk?D%*Ve`PjJwlcC{`lU_s116l(Y?qznOCu3nzD;^az7I= z9Ca+8@mvq%VlF$aKHmQl6T`2H1A3%hLWH^lN5Z6yNKI}V{5k>UPxzNoo6%WnssW| zD!f(}DH^r-D~+d2FaB(z&|=73fx43AUDnvL&3LnZ$I}DRfRiWpw6d9Y zan1hz6%49D340N4Yl=fF%Ibb|?*TU-W z8@9MBa6+D#1KKrFby@gAxOAGjXVfmaLuEDPg&XjuD;hpVxrG))I>chOyXs=VDW z{&K38u(phXgsc(OO+{J$tAIk04o|_E7S3zoLuRVaIJLFwPUzJM+~s-a_rW@j@stbt zo16^W`1#sjeQ{FJiy((_)wR8J!NK|_S$TYX`sniZwKB|giF*`gZj9ggJmc{9Fa1+) zid=Si@Tr?V_fy_MHeZv0S55tH!pob>(;sV&yb$8PMxT*Ftk~L!kL$V&T9JNiX3$@J z79v#mVFH!6sA!2#FZuj2rPYkLSYzcFhX9A0(Ol*{bfT~tvMJEAAcZt7I##X|`9({t z`=&h~^;WHt^|LD~J?qOQ$5NiVKkn1cbift-C?)ma>wEbWf;Zy7kH}t=dDe`jvS09L zt3M&k*t1b#t`_&DR=zxj`;wQJTAe$o>)%BEgU!0eXu;tGFoQUd=+%q7)r8|} zq|5flmH$G>X)w=4{k1pQwQm4y~ZTzomw~bV-SjTyz@m8Vw9-`rWQlAFI7z&A4-VrS$exvvRueKKBnb9o)C1ct+KYGloeIbOjFpeGwac6xGS! zC-SP+_YLM4e~%)pAXPSw4n8l(YS; zl@d`(rl)+CNPKEs%XNIPbzmJCC6rAciD&TFUDh}8_e~Bq#2QJB)TAr&W&E@DJN-K1 zSdM?sY)%SkPx`*jRBUJwqhZYKA)Uw|MoBc z{_XwyC+*)R5;!anIHG*N2I?yd2K0&EZ)kx~`}>RB-Adu0*Ww|Qnh#3Fed<>B|7P{hTgLWq1x;}I zkA_u@Iz-lq2ajq8)anJ*dZl-q32!xv=}8+{4r%=$Ozsm5=rj$jNo=N9PHs-_9BMso z_br%o&8Ax?^y=Tsb%zT)F|YiI zXYQD4U}fFg4ISUw$2D`AZ4*fyGf54jhd=iAe*8)6m=0@s z^SE_6uhg@Q-2c|!Fem>9(ELS77 z_iygE&284d*)}GXduETGhDrd$aZUTxno#`x@W3m%D7W{pJg)rV&>S*)V7CN zEq2dF4BcbTcqbBkvK0KvRd463+^IS3S9I=S>ST62YhICaTEYw4gG+nkn}?3wYCC@GMMUdzXw5`u^ISyZ^!37N-|}hyVtPTx zgl+CjYTtryLU&;6Zb8TB!>-N86?FgVH}`8l1OGoRsN9VFuiQ)q*%^)h@8#w*PZ|DK zxmmO)`hS(16LSZXq%NTBX|)AVxmmF&%Oq)O1j%%DW1hFJ=vA_A2&4S(I`=^Ug(cW% z*RPKjnDZ;BneJ0<&&}?1S4wQC(EvkHdf9xd4Cv@2O0qTcn~3D zlLplc3_MZfYH#W`sRzL>>onF}^I?!8YWBRH2O#x?$-DVI>xEzGU@LW!1IkP=%+IXL zoyJ=mHs4iW9evKs50X$RQPhddPq}Lma!6wfS5K=(PPhcXqeN=_{+XU{aEBHYu5!g* z3?1Q7Thdp1N(MMG_WnTLU7eULcRtFZfdCddt0fR{$1$C;`f_xWZUBL`e@nVMD*sL( z5G~QX2qI{yv=Ct&4rH)Z`k3@#AXvQeY|dNX z6tmU8#k0*2A7CVN)0c%ugcP%It$qq4)~>N$OzkX!sr{LAo2Oq=(I`U{y_kG7 zl3Jvy!Z`?Hz1KIY5?QDqXrJa_k!f6-*!^s8r%Wylp^Mi?Na8(g?JQlCdY-UKG=6E+ zlkg`b)v>gdXaG{FG~DdQ$X4qH(v%FpYtKgDi#lOwz}oo8*g3={*qs;TT)LUw#nPU7 z$A!@=a@vd8it0s@V^<2kQXkdu6!!Z(pFa9P8|&KnO`DESjk-^w!C3(!2yV0vC=RwO ztOF6e#%v!;v0S84Q2sNfrWbr11Kcb9o9+c;)kV9$s_<_W$MQDuiNHiODG}hl$bJNt z*)Ur&^(h<0bHs>SS7=1+yN*)?tnJfH5=!CVI2P``t@jq?4ev&Xm>=)Rl;Uyb^F?WGNT4p>qFA=ZySy z2CyQCNuqv*U)w8|ypZq|Vax_Y7#1l4?f|1uwEux6sKV2>ERU$ z)oThkz^QqcPkl;&g$KZ#OcP1n-0Wo$%S{##AfhO9wyd{r0y|=!R>nFcN_xI2!eQvqbOjN1e#nW!4h|aaY{+7=2A4+-D)zw`H~qGmVbxy=F21M zJrf2Vl7z?5nNcYsj1}GMLc2ioQ)pLeq?S zhy>if zK2aT`dNlSlz0w#afL#ifwFm|W|0L6*l96z?Yv(}VtcMJL!68UwK-eRAPT}EbFW{y! z0YG?I^j?;z%Nos+d4#Yav3b!9GR4Q_H;J&$-56ZUy8Ty1I z8bAVR~!b~;tEwC z4%<0yUkwOis!4DZfIO?|Dp1kG&X-I~IH^W7Y43r$x9`x`IA~bDZEMmLhHMhS%zU-k z9PuR+xZXztrTs{ZPE;6@fN%5TBSEcjk5Pr6z*YBdAIZDm$&1?N*R&U&jL}J+vdnD?$NAHoYr3@p$r{BR^x6KHVO;@$b*JQQuzfAD3HaNxD?GkstA?XLK@Pp z$ox!vnK~+ubGgpP{@Uz(9_jR`H|B!IV9UhC@5kpfmykToye}Vng`m3a2hCpn@d`ij z9QDO+!-Z{>O<}k(>E_=rFHC?{525?j(YM7x3W+tb_XH;I@7J;!0&1}r`JuJrv9|`m zMDPX<_^{t1nquI1rC?UtNzX^h1ZHFUUZ3M*Ek!(H{%A2ZwAxMXk~`tT+=Jg0#~w4b zk0;xPp5np)GY&|e~HPM@(qs|>Ik5g#_QRsN{_GXXr<0V}{R zQO#}uclW;Gn7j1)kOo`GVP7FH;sab}>+r~YH!+228o1wd(fo(O8+@`b0raG27Z1Kl z)urQ^a3nrz1fBZ$g|qQa0&LKm!S^*g56I~v4)_y+=M)5s1qyRE;OMEh_!2MhiIFM1Trzys3g?fp5L-pK!S9Nn+7f~owc-*t@z2s%0{RnAaPWH z_nPHZl~6bP@aulz?rGuIc{Dtl!*6MZ>VFr;Pk@XB1_uk|(nG0-HEe9k+{e9PFYpMn zZ8$H^Fx)TVDGwM`5^)e75pjzL)I&tZYDOkXMaKC>rlm!u*@Ib9@RQz54m4z;;j#Ie zr$IdT?0qhq=pA!>9VJpDc>k>){2hPRji}t$T+M4yty1jG&E!`%qVhz2!y2Re);MYQ z$|^oFBWoPOH8FM|Tc>@@gfTnHof8EAN1TF6(0WzQ21;P9KsithWv|1-!~cXS3Wb7% z>Dt;FH#av#ML8^EAyY`0Le3OIrjRg&P9a+g(M!mpLf{l~sgOK{*eL`{Aw3G=Q;4QQE)~M3 zkSc{#CImnL?@*@}v+)g>316+7zOukb#ACDkN1QwF)6qNM%C471E;+JB73+#9$$33V~S& zkV4uNBBBs?h1@7aO(9hZiCT!7LVOi6tq>Q5s3{~mAuS7WR0xnlgcG8jklcj!Xd!0` z(N_q2LJAc^ssCwE2=GEG7J{Xa4~0A_q)H)9`yVESs40X=A*>3yR0x(rC>4UJ5IBYK zDMU&kWD40{h?hb@71E{<8vT!yLShuMq7W2?TbBJ(^I|gcpPoRo!CdFK6-aGAzbwPZZ?r_oQgHY32^x&i7_Y~Om#YSJtddD~kN@09 zupvH**<~WCB7q*yhJ-<92M)fStt#4yU?$$-8M-T;Yq^X}!q zc~37JvFHK)LQ#cEVleI=RHoPTLimSg+Mm|MQ=K0~UJZ0p2`4aezFZ0m*8v;djF|N( zgDjf9^qKfZX<{atv3+PMhlJW#ifa>mW!~XbYhD2pHx!`=%*9UGM~fT zq(2qAgfo6Bp~j`JJczv_t&h|mqIU~MNFB`x8-!>fhnXd8@J47Zw1rEGQH#% zOK};XF*Y!jIym`KO4>JV&8u=&iUg{1xRV?eV5f$NFiipTzzltU*!Ecz9w*ri`|fnP zh|YG5dFQpk!%K=C9C6fOY3Rf})j+3%cs7U2m@e8ckvdoVnmy!X(K|!utUR>vS~W== z{(jyTu#%GiA|rmxs;6JksMuZX%sraFyVxX6LOnR;wq!Uil;6RB|zxz?A`7%B&)I15%Vihhg+ z)f6OygEGIrOE+2@l5jSnAsMjvTqC6(mOc{PAi}cuF#P0}|FA`dN%t!vT_L-f3irV2 zmGOL1;%T&sjTUBMJXOOjZ=uIy=dSmJQ!m&lOiwY**ad595w^K-U0Kx60_BP$33F1C z4rMYW+rDS8gccB^4&boI!oiAZlob6ym!|L}Bc}yn%t@(kA%P)D5jRj~9H6rO>4l9~ zlUY=GrgBwEjz}DrRUkI+%z8zm#HoAWtOQNp$*Y(vJPQs^gAT*nCG}m)%%CI=;6afX z-av+z5w{2!(-ACEE+|nF*?L17;4WCfo=zg*2t*hsg@lx&T7(?}Bt6{{9SsX4&WI`ajsa�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