From 223de3ce2a1ae499cfc3b7a7077e73cd693dc185 Mon Sep 17 00:00:00 2001 From: "ester.zhou" Date: Mon, 29 May 2023 10:22:02 +0800 Subject: [PATCH] Update docs (17922) Signed-off-by: ester.zhou --- .../figures/{#000000.png => 000000.png} | Bin .../arkui-js-lite/js-common-styles.md | 326 +++++++++--------- .../js-components-basic-chart.md | 154 ++++----- .../js-components-basic-image-animator.md | 94 ++--- .../js-components-basic-slider.md | 70 ++-- .../js-components-common-animation.md | 44 +-- .../js-components-common-mediaquery.md | 22 +- .../js-components-container-stack.md | 56 +-- .../arkui-js-lite/js-framework-file.md | 2 +- .../arkui-js-lite/js-framework-js-tag.md | 16 +- .../arkui-js-lite/js-framework-syntax-css.md | 56 +-- .../arkui-js-lite/js-framework-syntax-hml.md | 56 +-- .../arkui-js-lite/js-framework-syntax-js.md | 94 ++--- .../ts-components-canvas-canvasgradient.md | 2 +- .../ts-universal-attributes-gradient-color.md | 6 +- .../js-service-widget-common-gradient.md | 72 ++-- .../ui/arkts-common-components-xcomponent.md | 302 ++++++++++++++++ .../figures/en-us_image_0000001511900428.png | Bin 0 -> 28059 bytes en/application-dev/ui/figures/onDestroy.png | Bin 0 -> 25366 bytes en/application-dev/ui/figures/onLoad.png | Bin 0 -> 26121 bytes en/application-dev/ui/figures/picture-1.png | Bin 0 -> 40406 bytes 21 files changed, 838 insertions(+), 534 deletions(-) rename en/application-dev/reference/arkui-js-lite/figures/{#000000.png => 000000.png} (100%) create mode 100644 en/application-dev/ui/arkts-common-components-xcomponent.md create mode 100644 en/application-dev/ui/figures/en-us_image_0000001511900428.png create mode 100644 en/application-dev/ui/figures/onDestroy.png create mode 100644 en/application-dev/ui/figures/onLoad.png create mode 100644 en/application-dev/ui/figures/picture-1.png diff --git a/en/application-dev/reference/arkui-js-lite/figures/#000000.png b/en/application-dev/reference/arkui-js-lite/figures/000000.png similarity index 100% rename from en/application-dev/reference/arkui-js-lite/figures/#000000.png rename to en/application-dev/reference/arkui-js-lite/figures/000000.png diff --git a/en/application-dev/reference/arkui-js-lite/js-common-styles.md b/en/application-dev/reference/arkui-js-lite/js-common-styles.md index 15d76dc7b9..52b7e4c81e 100644 --- a/en/application-dev/reference/arkui-js-lite/js-common-styles.md +++ b/en/application-dev/reference/arkui-js-lite/js-common-styles.md @@ -4,21 +4,21 @@ You can set universal styles for components in the **style** attribute or **.css** files. -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| width | <length> \| <percentage>5+ | - | No| Component width.

If this attribute is not set, the default value **0** is used.| -| height | <length> \| <percentage>5+ | - | No| Component height.

If this attribute is not set, the default value **0** is used.| -| padding | <length> | 0 | No| Shorthand attribute to set the padding for all sides in a declaration.
The attribute can have one to four values:
- If you set only one value, it specifies the padding for all the four sides.
- If you set two values, the first value specifies the top and bottom padding, and the second value specifies the left and right padding.
- If you set three values, the first value specifies the top padding, the second value specifies the left and right padding, and the third value specifies the bottom padding.
- If you set four values, they respectively specify the padding for top, right, bottom, and left sides (in clockwise order).| -| padding-[left\|top\|right\|bottom] | <length> | 0 | No| Left, top, right, and bottom padding.| -| margin | <length> \| <percentage>5+ | 0 | No| Shorthand attribute to set the margin for all sides in a declaration. The attribute can have one to four values:
- If you set only one value, it specifies the margin for all the four sides.
- If you set two values, the first value specifies the top and bottom margins, and the second value specifies the left and right margins.
- If you set three values, the first value specifies the top margin, the second value specifies the left and right margins, and the third value specifies the bottom margin.
- If you set four values, they respectively specify the margin for top, right, bottom, and left sides (in clockwise order).| -| margin-[left\|top\|right\|bottom] | <length> \| <percentage>5+ | 0 | No| Left, top, right, and bottom margins.| -| border-width | <length> | 0 | No| Shorthand attribute to set the margin for all sides.| -| border-color | <color> | black | No| Shorthand attribute to set the color for all borders.| -| border-radius | <length> | - | No| Radius of round-corner borders. | -| background-color | <color> | - | No| Background color.| -| opacity5+ | number | 1 | No| Opacity of an element. The value ranges from **0** to **1**. The value **1** means opaque, and **0** means completely transparent.| -| display | string | flex | No| Type of the box containing an element. Available values are as follows:
- **flex**: flexible layout
- **none**: not rendered| -| [left\|top] | <length> \| <percentage>6+ | - | No| Edge of the element.
- **left**: left edge position of the element. This attribute defines the offset between the left edge of the margin area of a positioned element and left edge of its containing block.
- **top**: top edge position of the element. This attribute defines the offset between the top edge of a positioned element and that of a block included in the element. | +| Name | Type | Default Value | Mandatory | Description | +| ---------------------------------- | ---------------------------------------- | ----- | ---- | ---------------------------------------- | +| width | <length> \| <percentage>5+ | - | No | Component width.

If this attribute is not set, the default value **0** is used. | +| height | <length> \| <percentage>5+ | - | No | Component height.

If this attribute is not set, the default value **0** is used. | +| padding | <length> | 0 | No | Shorthand attribute to set the padding for all sides in a declaration.
The attribute can have one to four values:
- If you set only one value, it specifies the padding for all the four sides.
- If you set two values, the first value specifies the top and bottom padding, and the second value specifies the left and right padding.
- If you set three values, the first value specifies the top padding, the second value specifies the left and right padding, and the third value specifies the bottom padding.
- If you set four values, they respectively specify the padding for top, right, bottom, and left sides (in clockwise order).| +| padding-[left\|top\|right\|bottom] | <length> | 0 | No | Left, top, right, and bottom padding. | +| margin | <length> \| <percentage>5+ | 0 | No | Shorthand attribute to set the margin for all sides in a declaration. The attribute can have one to four values:
- If you set only one value, it specifies the margin for all the four sides.
- If you set two values, the first value specifies the top and bottom margins, and the second value specifies the left and right margins.
- If you set three values, the first value specifies the top margin, the second value specifies the left and right margins, and the third value specifies the bottom margin.
- If you set four values, they respectively specify the margin for top, right, bottom, and left sides (in clockwise order).| +| margin-[left\|top\|right\|bottom] | <length> \| <percentage>5+ | 0 | No | Left, top, right, and bottom margins. | +| border-width | <length> | 0 | No | Shorthand attribute to set the margin for all sides. | +| border-color | <color> | black | No | Shorthand attribute to set the color for all borders. | +| border-radius | <length> | - | No | Radius of round-corner borders. | +| background-color | <color> | - | No | Background color. | +| opacity5+ | number | 1 | No | Opacity of an element. The value ranges from **0** to **1**. The value **1** means opaque, and **0** means completely transparent. | +| display | string | flex | No | Type of the box containing an element. Available values are as follows:
- **flex**: flexible layout
- **none**: not rendered| +| [left\|top] | <length> \| <percentage>6+ | - | No | Edge of the element.
- **left**: left edge position of the element. This attribute defines the offset between the left edge of the margin area of a positioned element and left edge of its containing block.
- **top**: top edge position of the element. This attribute defines the offset between the top edge of a positioned element and that of a block included in the element.| > **NOTE** @@ -37,152 +37,152 @@ You can set universal styles for components in the **style** attribute or **.css **Table 1** Color enums -| Name| Hexadecimal Code| Color| -| -------- | -------- | -------- | -| aliceblue | \#f0f8ff | ![aliceblue](figures/aliceblue.png) | -| antiquewhite | \#faebd7 | ![antiquewhite](figures/antiquewhite.png) | -| aqua | \#00ffff | ![aqua](figures/aqua.png) | -| aquamarine | \#7fffd4 | ![aquamarine](figures/aquamarine.png) | -| azure | \#f0ffff | ![azure](figures/azure.png) | -| beige | \#f5f5dc | ![beige](figures/beige.png) | -| bisque | \#ffe4c4 | ![bisque](figures/bisque.png) | -| black | \#000000 | ![#000000](figures/#000000.png) | -| blanchedalmond | \#ffebcd | ![blanchedalmond](figures/blanchedalmond.png) | -| blue | \#0000ff | ![blue](figures/blue.png) | -| blueviolet | \#8a2be2 | ![blueviolet](figures/blueviolet.png) | -| brown | \#a52a2a | ![brown](figures/brown.png) | -| burlywood | \#deB887 | ![burlywood](figures/burlywood.png) | -| cadetblue | \#5f9ea0 | ![cadetblue](figures/cadetblue.png) | -| chartreuse | \#7fff00 | ![chartreuse](figures/chartreuse.png) | -| chocolate | \#d2691e | ![chocolate](figures/chocolate.png) | -| coral | \#ff7f50 | ![coral](figures/coral.png) | -| cornflowerblue | \#6495ed | ![cornflowerblue](figures/cornflowerblue.png) | -| cornsilk | \#fff8dc | ![cornsilk](figures/cornsilk.png) | -| crimson | \#dc143c | ![crimson](figures/crimson.png) | -| cyan | \#00ffff | ![cyan](figures/cyan.png) | -| darkblue | \#00008b | ![darkblue](figures/darkblue.png) | -| darkcyan | \#008b8b | ![darkcyan](figures/darkcyan.png) | -| darkgoldenrod | \#b8860b | ![darkgoldenrod](figures/darkgoldenrod.png) | -| darkgray | \#a9a9a9 | ![darkgray](figures/darkgray.png) | -| darkgreen | \#006400 | ![darkgreen](figures/darkgreen.png) | -| darkgrey | \#a9a9a9 | ![darkgrey](figures/darkgrey.png) | -| darkkhaki | \#bdb76b | ![darkkhaki](figures/darkkhaki.png) | -| darkmagenta | \#8b008b | ![darkmagenta](figures/darkmagenta.png) | -| darkolivegreen | \#556b2f | ![darkolivegreen](figures/darkolivegreen.png) | -| darkorange | \#ff8c00 | ![darkorange](figures/darkorange.png) | -| darkorchid | \#9932cc | ![darkorchid](figures/darkorchid.png) | -| darkred | \#8b0000 | ![darkred](figures/darkred.png) | -| darksalmon | \#e9967a | ![darksalmon](figures/darksalmon.png) | -| darkseagreen | \#8fbc8f | ![darkseagreen](figures/darkseagreen.png) | -| darkslateblue | \#483d8b | ![darkslateblue](figures/darkslateblue.png) | -| darkslategray | \#2f4f4f | ![darkslategray](figures/darkslategray.png) | -| darkslategrey | \#2f4f4f | ![darkslategrey](figures/darkslategrey.png) | -| darkturquoise | \#00ced1 | ![darkturquoise](figures/darkturquoise.png) | -| darkviolet | \#9400d3 | ![darkviolet](figures/darkviolet.png) | -| deeppink | \#ff1493 | ![deeppink](figures/deeppink.png) | -| deepskyblue | \#00bfff | ![deepskyblue](figures/deepskyblue.png) | -| dimgray | \#696969 | ![dimgray](figures/dimgray.png) | -| dimgrey | \#696969 | ![dimgrey](figures/dimgrey.png) | -| dodgerblue | \#1e90ff | ![dodgerblue](figures/dodgerblue.png) | -| firebrick | \#b22222 | ![firebrick](figures/firebrick.png) | -| floralwhite | \#fffaf0 | ![floralwhite](figures/floralwhite.png) | -| forestgreen | \#228b22 | ![forestgreen](figures/forestgreen.png) | -| fuchsia | \#ff00ff | ![fuchsia](figures/fuchsia.png) | -| gainsboro | \#dcdcdc | ![gainsboro](figures/gainsboro.png) | -| ghostwhite | \#f8f8ff | ![ghostwhite](figures/ghostwhite.png) | -| gold | \#ffd700 | ![gold](figures/gold.png) | -| goldenrod | \#daa520 | ![goldenrod](figures/goldenrod.png) | -| gray | \#808080 | ![gray](figures/gray.png) | -| green | \#008000 | ![green](figures/green.png) | -| greenyellow | \#adff2f | ![greenyellow](figures/greenyellow.png) | -| grey | \#808080 | ![grey](figures/grey.png) | -| honeydew | \#f0fff0 | ![honeydew](figures/honeydew.png) | -| hotpink | \#ff69b4 | ![hotpink](figures/hotpink.png) | -| indianred | \#cd5c5c | ![indianred](figures/indianred.png) | -| indigo | \#4b0082 | ![indigo](figures/indigo.png) | -| ivory | \#fffff0 | ![ivory](figures/ivory.png) | -| khaki | \#f0e68c | ![khaki](figures/khaki.png) | -| lavender | \#e6e6fa | ![lavender](figures/lavender.png) | -| lavenderblush | \#fff0f5 | ![lavenderblush](figures/lavenderblush.png) | -| lawngreen | \#7cfc00 | ![lawngreen](figures/lawngreen.png) | -| lemonchiffon | \#fffacd | ![lemonchiffon](figures/lemonchiffon.png) | -| lightblue | \#add8e6 | ![lightblue](figures/lightblue.png) | -| lightcoral | \#f08080 | ![lightcoral](figures/lightcoral.png) | -| lightcyan | \#e0ffff | ![lightcyan](figures/lightcyan.png) | +| Name | Hexadecimal Code | Color | +| -------------------- | -------- | ---------------------------------------- | +| aliceblue | \#f0f8ff | ![aliceblue](figures/aliceblue.png) | +| antiquewhite | \#faebd7 | ![antiquewhite](figures/antiquewhite.png) | +| aqua | \#00ffff | ![aqua](figures/aqua.png) | +| aquamarine | \#7fffd4 | ![aquamarine](figures/aquamarine.png) | +| azure | \#f0ffff | ![azure](figures/azure.png) | +| beige | \#f5f5dc | ![beige](figures/beige.png) | +| bisque | \#ffe4c4 | ![bisque](figures/bisque.png) | +| black | \#000000 | ![000000](figures/000000.png) | +| blanchedalmond | \#ffebcd | ![blanchedalmond](figures/blanchedalmond.png) | +| blue | \#0000ff | ![blue](figures/blue.png) | +| blueviolet | \#8a2be2 | ![blueviolet](figures/blueviolet.png) | +| brown | \#a52a2a | ![brown](figures/brown.png) | +| burlywood | \#deB887 | ![burlywood](figures/burlywood.png) | +| cadetblue | \#5f9ea0 | ![cadetblue](figures/cadetblue.png) | +| chartreuse | \#7fff00 | ![chartreuse](figures/chartreuse.png) | +| chocolate | \#d2691e | ![chocolate](figures/chocolate.png) | +| coral | \#ff7f50 | ![coral](figures/coral.png) | +| cornflowerblue | \#6495ed | ![cornflowerblue](figures/cornflowerblue.png) | +| cornsilk | \#fff8dc | ![cornsilk](figures/cornsilk.png) | +| crimson | \#dc143c | ![crimson](figures/crimson.png) | +| cyan | \#00ffff | ![cyan](figures/cyan.png) | +| darkblue | \#00008b | ![darkblue](figures/darkblue.png) | +| darkcyan | \#008b8b | ![darkcyan](figures/darkcyan.png) | +| darkgoldenrod | \#b8860b | ![darkgoldenrod](figures/darkgoldenrod.png) | +| darkgray | \#a9a9a9 | ![darkgray](figures/darkgray.png) | +| darkgreen | \#006400 | ![darkgreen](figures/darkgreen.png) | +| darkgrey | \#a9a9a9 | ![darkgrey](figures/darkgrey.png) | +| darkkhaki | \#bdb76b | ![darkkhaki](figures/darkkhaki.png) | +| darkmagenta | \#8b008b | ![darkmagenta](figures/darkmagenta.png) | +| darkolivegreen | \#556b2f | ![darkolivegreen](figures/darkolivegreen.png) | +| darkorange | \#ff8c00 | ![darkorange](figures/darkorange.png) | +| darkorchid | \#9932cc | ![darkorchid](figures/darkorchid.png) | +| darkred | \#8b0000 | ![darkred](figures/darkred.png) | +| darksalmon | \#e9967a | ![darksalmon](figures/darksalmon.png) | +| darkseagreen | \#8fbc8f | ![darkseagreen](figures/darkseagreen.png) | +| darkslateblue | \#483d8b | ![darkslateblue](figures/darkslateblue.png) | +| darkslategray | \#2f4f4f | ![darkslategray](figures/darkslategray.png) | +| darkslategrey | \#2f4f4f | ![darkslategrey](figures/darkslategrey.png) | +| darkturquoise | \#00ced1 | ![darkturquoise](figures/darkturquoise.png) | +| darkviolet | \#9400d3 | ![darkviolet](figures/darkviolet.png) | +| deeppink | \#ff1493 | ![deeppink](figures/deeppink.png) | +| deepskyblue | \#00bfff | ![deepskyblue](figures/deepskyblue.png) | +| dimgray | \#696969 | ![dimgray](figures/dimgray.png) | +| dimgrey | \#696969 | ![dimgrey](figures/dimgrey.png) | +| dodgerblue | \#1e90ff | ![dodgerblue](figures/dodgerblue.png) | +| firebrick | \#b22222 | ![firebrick](figures/firebrick.png) | +| floralwhite | \#fffaf0 | ![floralwhite](figures/floralwhite.png) | +| forestgreen | \#228b22 | ![forestgreen](figures/forestgreen.png) | +| fuchsia | \#ff00ff | ![fuchsia](figures/fuchsia.png) | +| gainsboro | \#dcdcdc | ![gainsboro](figures/gainsboro.png) | +| ghostwhite | \#f8f8ff | ![ghostwhite](figures/ghostwhite.png) | +| gold | \#ffd700 | ![gold](figures/gold.png) | +| goldenrod | \#daa520 | ![goldenrod](figures/goldenrod.png) | +| gray | \#808080 | ![gray](figures/gray.png) | +| green | \#008000 | ![green](figures/green.png) | +| greenyellow | \#adff2f | ![greenyellow](figures/greenyellow.png) | +| grey | \#808080 | ![grey](figures/grey.png) | +| honeydew | \#f0fff0 | ![honeydew](figures/honeydew.png) | +| hotpink | \#ff69b4 | ![hotpink](figures/hotpink.png) | +| indianred | \#cd5c5c | ![indianred](figures/indianred.png) | +| indigo | \#4b0082 | ![indigo](figures/indigo.png) | +| ivory | \#fffff0 | ![ivory](figures/ivory.png) | +| khaki | \#f0e68c | ![khaki](figures/khaki.png) | +| lavender | \#e6e6fa | ![lavender](figures/lavender.png) | +| lavenderblush | \#fff0f5 | ![lavenderblush](figures/lavenderblush.png) | +| lawngreen | \#7cfc00 | ![lawngreen](figures/lawngreen.png) | +| lemonchiffon | \#fffacd | ![lemonchiffon](figures/lemonchiffon.png) | +| lightblue | \#add8e6 | ![lightblue](figures/lightblue.png) | +| lightcoral | \#f08080 | ![lightcoral](figures/lightcoral.png) | +| lightcyan | \#e0ffff | ![lightcyan](figures/lightcyan.png) | | lightgoldenrodyellow | \#fafad2 | ![lightgoldenrodyellow](figures/lightgoldenrodyellow.png) | -| lightgray | \#d3d3d3 | ![lightgray](figures/lightgray.png) | -| lightgreen | \#90ee90 | ![lightgreen](figures/lightgreen.png) | -| lightpink | \#ffb6c1 | ![lightpink](figures/lightpink.png) | -| lightsalmon | \#ffa07a | ![lightsalmon](figures/lightsalmon.png) | -| lightseagreen | \#20b2aa | ![lightseagreen](figures/lightseagreen.png) | -| lightskyblue | \#87cefa | ![lightskyblue](figures/lightskyblue.png) | -| lightslategray | \#778899 | ![lightslategray](figures/lightslategray.png) | -| lightslategrey | \#778899 | ![lightslategrey](figures/lightslategrey.png) | -| lightsteelblue | \#b0c4de | ![lightsteelblue](figures/lightsteelblue.png) | -| lightyellow | \#ffffe0 | ![lightyellow](figures/lightyellow.png) | -| lime | \#00ff00 | ![lime](figures/lime.png) | -| limegreen | \#32cd32 | ![limegreen](figures/limegreen.png) | -| linen | \#faf0e6 | ![linen](figures/linen.png) | -| magenta | \#ff00ff | ![magenta](figures/magenta.png) | -| maroon | \#800000 | ![maroon](figures/maroon.png) | -| mediumaquamarine | \#66cdaa | ![mediumaquamarine](figures/mediumaquamarine.png) | -| mediumblue | \#0000cd | ![mediumblue](figures/mediumblue.png) | -| mediumorchid | \#ba55d3 | ![mediumorchid](figures/mediumorchid.png) | -| mediumpurple | \#9370db | ![mediumpurple](figures/mediumpurple.png) | -| mediumseagreen | \#3cb371 | ![mediumseagreen](figures/mediumseagreen.png) | -| mediumslateblue | \#7b68ee | ![mediumslateblue](figures/mediumslateblue.png) | -| mediumspringgreen | \#00fa9a | ![mediumspringgreen](figures/mediumspringgreen.png) | -| mediumturquoise | \#48d1cc | ![mediumturquoise](figures/mediumturquoise.png) | -| mediumvioletred | \#c71585 | ![mediumvioletred](figures/mediumvioletred.png) | -| midnightblue | \#191970 | ![midnightblue](figures/midnightblue.png) | -| mintcream | \#f5fffa | ![mintcream](figures/mintcream.png) | -| mistyrose | \#ffe4e1 | ![mistyrose](figures/mistyrose.png) | -| moccasin | \#ffe4b5 | ![moccasin](figures/moccasin.png) | -| navajowhite | \#ffdead | ![navajowhite](figures/navajowhite.png) | -| navy | \#000080 | ![navy](figures/navy.png) | -| oldlace | \#fdf5e6 | ![oldlace](figures/oldlace.png) | -| olive | \#808000 | ![olive](figures/olive.png) | -| olivedrab | \#6b8e23 | ![olivedrab](figures/olivedrab.png) | -| orange | \#ffa500 | ![orange](figures/orange.png) | -| orangered | \#ff4500 | ![orangered](figures/orangered.png) | -| orchid | \#da70d6 | ![orchid](figures/orchid.png) | -| palegoldenrod | \#eee8aa | ![palegoldenrod](figures/palegoldenrod.png) | -| palegreen | \#98fb98 | ![palegreen](figures/palegreen.png) | -| paleturquoise | \#afeeee | ![paleturquoise](figures/paleturquoise.png) | -| palevioletred | \#db7093 | ![palevioletred](figures/palevioletred.png) | -| papayawhip | \#ffefd5 | ![papayawhip](figures/papayawhip.png) | -| peachpuff | \#ffdab9 | ![peachpuff](figures/peachpuff.png) | -| peru | \#cd853f | ![peru](figures/peru.png) | -| pink | \#ffc0cb | ![pink](figures/pink.png) | -| plum | \#dda0dd | ![plum](figures/plum.png) | -| powderblue | \#b0e0e6 | ![powderblue](figures/powderblue.png) | -| purple | \#800080 | ![purple](figures/purple.png) | -| rebeccapurple | \#663399 | ![rebeccapurple](figures/rebeccapurple.png) | -| red | \#ff0000 | ![red](figures/red.png) | -| rosybrown | \#bc8f8f | ![rosybrown](figures/rosybrown.png) | -| royalblue | \#4169e1 | ![royalblue](figures/royalblue.png) | -| saddlebrown | \#8b4513 | ![saddlebrown](figures/saddlebrown.png) | -| salmon | \#fa8072 | ![salmon](figures/salmon.png) | -| sandybrown | \#f4a460 | ![sandybrown](figures/sandybrown.png) | -| seagreen | \#2e8b57 | ![seagreen](figures/seagreen.png) | -| seashell | \#fff5ee | ![seashell](figures/seashell.png) | -| sienna | \#a0522d | ![sienna](figures/sienna.png) | -| silver | \#c0c0c0 | ![silver](figures/silver.png) | -| skyblue | \#87ceeb | ![skyblue](figures/skyblue.png) | -| slateblue | \#6a5acd | ![slateblue](figures/slateblue.png) | -| slategray | \#708090 | ![slategray](figures/slategray.png) | -| slategrey | \#708090 | ![slategray](figures/slategray.png) | -| snow | \#fffafa | ![snow](figures/snow.png) | -| springgreen | \#00ff7f | ![springgreen](figures/springgreen.png) | -| steelblue | \#4682b4 | ![steelblue](figures/steelblue.png) | -| tan | \#d2b48c | ![tan](figures/tan.png) | -| teal | \#008080 | ![teal](figures/teal.png) | -| thistle | \#d8Bfd8 | ![thistle](figures/thistle.png) | -| tomato | \#ff6347 | ![tomato](figures/tomato.png) | -| turquoise | \#40e0d0 | ![turquoise](figures/turquoise.png) | -| violet | \#ee82ee | ![violet](figures/violet.png) | -| wheat | \#f5deb3 | ![wheat](figures/wheat.png) | -| white | \#ffffff | ![white](figures/white.png) | -| whitesmoke | \#f5f5f5 | ![whitesmoke](figures/whitesmoke.png) | -| yellow | \#ffff00 | ![yellow](figures/yellow.png) | -| yellowgreen | \#9acd32 | ![yellowgreen](figures/yellowgreen.png) | +| lightgray | \#d3d3d3 | ![lightgray](figures/lightgray.png) | +| lightgreen | \#90ee90 | ![lightgreen](figures/lightgreen.png) | +| lightpink | \#ffb6c1 | ![lightpink](figures/lightpink.png) | +| lightsalmon | \#ffa07a | ![lightsalmon](figures/lightsalmon.png) | +| lightseagreen | \#20b2aa | ![lightseagreen](figures/lightseagreen.png) | +| lightskyblue | \#87cefa | ![lightskyblue](figures/lightskyblue.png) | +| lightslategray | \#778899 | ![lightslategray](figures/lightslategray.png) | +| lightslategrey | \#778899 | ![lightslategrey](figures/lightslategrey.png) | +| lightsteelblue | \#b0c4de | ![lightsteelblue](figures/lightsteelblue.png) | +| lightyellow | \#ffffe0 | ![lightyellow](figures/lightyellow.png) | +| lime | \#00ff00 | ![lime](figures/lime.png) | +| limegreen | \#32cd32 | ![limegreen](figures/limegreen.png) | +| linen | \#faf0e6 | ![linen](figures/linen.png) | +| magenta | \#ff00ff | ![magenta](figures/magenta.png) | +| maroon | \#800000 | ![maroon](figures/maroon.png) | +| mediumaquamarine | \#66cdaa | ![mediumaquamarine](figures/mediumaquamarine.png) | +| mediumblue | \#0000cd | ![mediumblue](figures/mediumblue.png) | +| mediumorchid | \#ba55d3 | ![mediumorchid](figures/mediumorchid.png) | +| mediumpurple | \#9370db | ![mediumpurple](figures/mediumpurple.png) | +| mediumseagreen | \#3cb371 | ![mediumseagreen](figures/mediumseagreen.png) | +| mediumslateblue | \#7b68ee | ![mediumslateblue](figures/mediumslateblue.png) | +| mediumspringgreen | \#00fa9a | ![mediumspringgreen](figures/mediumspringgreen.png) | +| mediumturquoise | \#48d1cc | ![mediumturquoise](figures/mediumturquoise.png) | +| mediumvioletred | \#c71585 | ![mediumvioletred](figures/mediumvioletred.png) | +| midnightblue | \#191970 | ![midnightblue](figures/midnightblue.png) | +| mintcream | \#f5fffa | ![mintcream](figures/mintcream.png) | +| mistyrose | \#ffe4e1 | ![mistyrose](figures/mistyrose.png) | +| moccasin | \#ffe4b5 | ![moccasin](figures/moccasin.png) | +| navajowhite | \#ffdead | ![navajowhite](figures/navajowhite.png) | +| navy | \#000080 | ![navy](figures/navy.png) | +| oldlace | \#fdf5e6 | ![oldlace](figures/oldlace.png) | +| olive | \#808000 | ![olive](figures/olive.png) | +| olivedrab | \#6b8e23 | ![olivedrab](figures/olivedrab.png) | +| orange | \#ffa500 | ![orange](figures/orange.png) | +| orangered | \#ff4500 | ![orangered](figures/orangered.png) | +| orchid | \#da70d6 | ![orchid](figures/orchid.png) | +| palegoldenrod | \#eee8aa | ![palegoldenrod](figures/palegoldenrod.png) | +| palegreen | \#98fb98 | ![palegreen](figures/palegreen.png) | +| paleturquoise | \#afeeee | ![paleturquoise](figures/paleturquoise.png) | +| palevioletred | \#db7093 | ![palevioletred](figures/palevioletred.png) | +| papayawhip | \#ffefd5 | ![papayawhip](figures/papayawhip.png) | +| peachpuff | \#ffdab9 | ![peachpuff](figures/peachpuff.png) | +| peru | \#cd853f | ![peru](figures/peru.png) | +| pink | \#ffc0cb | ![pink](figures/pink.png) | +| plum | \#dda0dd | ![plum](figures/plum.png) | +| powderblue | \#b0e0e6 | ![powderblue](figures/powderblue.png) | +| purple | \#800080 | ![purple](figures/purple.png) | +| rebeccapurple | \#663399 | ![rebeccapurple](figures/rebeccapurple.png) | +| red | \#ff0000 | ![red](figures/red.png) | +| rosybrown | \#bc8f8f | ![rosybrown](figures/rosybrown.png) | +| royalblue | \#4169e1 | ![royalblue](figures/royalblue.png) | +| saddlebrown | \#8b4513 | ![saddlebrown](figures/saddlebrown.png) | +| salmon | \#fa8072 | ![salmon](figures/salmon.png) | +| sandybrown | \#f4a460 | ![sandybrown](figures/sandybrown.png) | +| seagreen | \#2e8b57 | ![seagreen](figures/seagreen.png) | +| seashell | \#fff5ee | ![seashell](figures/seashell.png) | +| sienna | \#a0522d | ![sienna](figures/sienna.png) | +| silver | \#c0c0c0 | ![silver](figures/silver.png) | +| skyblue | \#87ceeb | ![skyblue](figures/skyblue.png) | +| slateblue | \#6a5acd | ![slateblue](figures/slateblue.png) | +| slategray | \#708090 | ![slategray](figures/slategray.png) | +| slategrey | \#708090 | ![slategray](figures/slategray.png) | +| snow | \#fffafa | ![snow](figures/snow.png) | +| springgreen | \#00ff7f | ![springgreen](figures/springgreen.png) | +| steelblue | \#4682b4 | ![steelblue](figures/steelblue.png) | +| tan | \#d2b48c | ![tan](figures/tan.png) | +| teal | \#008080 | ![teal](figures/teal.png) | +| thistle | \#d8Bfd8 | ![thistle](figures/thistle.png) | +| tomato | \#ff6347 | ![tomato](figures/tomato.png) | +| turquoise | \#40e0d0 | ![turquoise](figures/turquoise.png) | +| violet | \#ee82ee | ![violet](figures/violet.png) | +| wheat | \#f5deb3 | ![wheat](figures/wheat.png) | +| white | \#ffffff | ![white](figures/white.png) | +| whitesmoke | \#f5f5f5 | ![whitesmoke](figures/whitesmoke.png) | +| yellow | \#ffff00 | ![yellow](figures/yellow.png) | +| yellowgreen | \#9acd32 | ![yellowgreen](figures/yellowgreen.png) | diff --git a/en/application-dev/reference/arkui-js-lite/js-components-basic-chart.md b/en/application-dev/reference/arkui-js-lite/js-components-basic-chart.md index 7a0a07fe1b..2c8f4c0550 100644 --- a/en/application-dev/reference/arkui-js-lite/js-components-basic-chart.md +++ b/en/application-dev/reference/arkui-js-lite/js-components-basic-chart.md @@ -14,118 +14,118 @@ Not supported ## Attributes -| Name| Type| Mandatory| Description| -| -------- | -------- | -------- | -------- | -| type | string | No| Chart type. Dynamic modification is not supported. Available values include:
- **bar**: bar chart
- **line**: line chart
Default value: **line**| -| options | ChartOptions | Yes| Chart parameters. You can set the minimum value, maximum value, scale, and line width of the x-axis or y-axis, whether to display the x-axis and y-axis, and whether the line is smooth. Dynamic modification is not supported.| -| datasets | Array<ChartDataset> | Yes| Data sets. You can set multiple datasets and their background colors.| -| id | string | No| Unique ID of the component.| -| style | string | No| Style declaration of the component.| -| class | string | No| Style class of the component, which is used to refer to a style table.| -| ref | string | No| Reference information of child elements, which is registered with the parent component on **$refs**.| +| Name | Type | Mandatory | Description | +| -------- | ------------------------- | ---- | ---------------------------------------- | +| type | string | No | Chart type. Dynamic modification is not supported. Available values include:
- **bar**: bar chart
- **line**: line chart
Default value: **line**| +| options | ChartOptions | Yes | Chart parameters. You can set the minimum value, maximum value, scale, and line width of the x-axis or y-axis, whether to display the x-axis and y-axis, and whether the line is smooth. Dynamic modification is not supported.| +| datasets | Array<ChartDataset> | Yes | Data sets. You can set multiple datasets and their background colors. | +| id | string | No | Unique ID of the component. | +| style | string | No | Style declaration of the component. | +| class | string | No | Style class of the component, which is used to refer to a style table. | +| ref | string | No | Reference information of child elements, which is registered with the parent component on **$refs**.| **Table 1** ChartOptions -| Name| Type| Mandatory| Description| -| -------- | -------- | -------- | -------- | -| xAxis | ChartAxis | Yes| X-axis parameters. You can set the minimum value, maximum value, and scale of the x-axis, and whether to display the x-axis.| -| yAxis | ChartAxis | Yes| Y-axis parameters. You can set the minimum value, maximum value, and scale of the y-axis, and whether to display the y-axis.| -| series | ChartSeries | No| Data series parameters which cover the following:
- Line style, such as the line width and whether the line is smooth.
- Style and size of the white point at the start of the line.
**NOTE**
Only line charts support this attribute. | +| Name | Type | Mandatory | Description | +| ------ | ----------- | ---- | ---------------------------------------- | +| xAxis | ChartAxis | Yes | X-axis parameters. You can set the minimum value, maximum value, and scale of the x-axis, and whether to display the x-axis. | +| yAxis | ChartAxis | Yes | Y-axis parameters. You can set the minimum value, maximum value, and scale of the y-axis, and whether to display the y-axis. | +| series | ChartSeries | No | Data series parameters which cover the following:
- Line style, such as the line width and whether the line is smooth.
- Style and size of the white point at the start of the line.
**NOTE**
Only line charts support this attribute.| **Table 2** ChartDataset -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| backgroundColor(deprecated) | <color> | \#ff6384 | No| Color of a line or bar. This attribute is not recommended.| -| strokeColor | <color> | \#ff6384 | No| Line color. Only line charts support this attribute.| -| fillColor | <color> | \#ff6384 | No| Fill color. For line charts, the value indicates the gradient color to fill.| -| data | Array<number> | - | Yes| Data of the drawn line or bar.| -| gradient | boolean | false | No| Whether to display the gradient color. Only line charts support this attribute.| +| Name | Type | Default Value | Mandatory | Description | +| --------------------------- | ------------------- | -------- | ---- | -------------------- | +| backgroundColor(deprecated) | <color> | \#ff6384 | No | Color of a line or bar. This attribute is not recommended. | +| strokeColor | <color> | \#ff6384 | No | Line color. Only line charts support this attribute. | +| fillColor | <color> | \#ff6384 | No | Fill color. For line charts, the value indicates the gradient color to fill. | +| data | Array<number> | - | Yes | Data of the drawn line or bar. | +| gradient | boolean | false | No | Whether to display the gradient color. Only line charts support this attribute.| **Table 3** ChartAxis -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| min | number | 0 | No| Minimum value of the axis.
Negative numbers are not supported. Only line charts support this attribute.| -| max | number | 100 | No| Maximum value of the axis.
Negative numbers are not supported. Only line charts support this attribute.| -| axisTick | number | 10 | No| Number of scales displayed on the axis.
**NOTE**
The value ranges from 1 to 20. The display effect depends on the calculation result of Number of pixels occupied by the image width/(**max**-**min**).
Lite wearables support integer calculation, and an error may occur in the case of inexhaustible division. Specifically, a segment of space may be left at the end of the x-axis.
In the bar chart, the number of bars in each group of data is the same as the number of scales, and the bars are displayed at the scales.| -| display | boolean | false | No| Whether to display the axis.| -| color | <color> | \#c0c0c0 | No| Axis color.| +| Name | Type | Default Value | Mandatory | Description | +| -------- | ------------- | -------- | ---- | ---------------------------------------- | +| min | number | 0 | No | Minimum value of the axis.
Negative numbers are not supported. Only line charts support this attribute. | +| max | number | 100 | No | Maximum value of the axis.
Negative numbers are not supported. Only line charts support this attribute. | +| axisTick | number | 10 | No | Number of scales displayed on the axis.
**NOTE**
The value ranges from 1 to 20. The display effect depends on the calculation result of Number of pixels occupied by the image width/(**max**-**min**).
Lite wearables support integer calculation, and an error may occur in the case of inexhaustible division. Specifically, a segment of space may be left at the end of the x-axis.
In the bar chart, the number of bars in each group of data is the same as the number of scales, and the bars are displayed at the scales.| +| display | boolean | false | No | Whether to display the axis. | +| color | <color> | \#c0c0c0 | No | Axis color. | **Table 4** ChartSeries -| Name| Type| Mandatory| Description| -| -------- | -------- | -------- | -------- | -| lineStyle | ChartLineStyle | No| Line style, such as the line width and whether the line is smooth.| -| headPoint | PointStyle | No| Style and size of the white point at the start of the line.| -| topPoint | PointStyle | No| Style and size of the top point.| -| bottomPoint | PointStyle | No| Style and size of the bottom point.| -| loop | ChartLoop | No| Whether to start drawing again when the screen is looped.| +| Name | Type | Mandatory | Description | +| ----------- | -------------- | ---- | -------------------- | +| lineStyle | ChartLineStyle | No | Line style, such as the line width and whether the line is smooth. | +| headPoint | PointStyle | No | Style and size of the white point at the start of the line. | +| topPoint | PointStyle | No | Style and size of the top point. | +| bottomPoint | PointStyle | No | Style and size of the bottom point. | +| loop | ChartLoop | No | Whether to start drawing again when the screen is looped.| **Table 5** ChartLineStyle -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| width | <length> | 1px | No| Line width.| -| smooth | boolean | false | No| Whether the line is smooth.| +| Name | Type | Default Value | Mandatory | Description | +| ------ | -------------- | ----- | ---- | ----- | +| width | <length> | 1px | No | Line width.| +| smooth | boolean | false | No | Whether the line is smooth.| **Table 6** PointStyle -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| shape | string | circle | No| Shape of the highlight point. Available values are as follows:
- circle| -| size | <length> | 5px | No| Size of the highlight point.| -| strokeWidth | <length> | 1px | No| Stroke width.| -| strokeColor | <color> | \#ff0000 | No| Stroke color.| -| fillColor | <color> | \#ff0000 | No| Fill color.| -| display | boolean | true | No| Whether to display the highlight spot.| +| Name | Type | Default Value | Mandatory | Description | +| ----------- | -------------- | -------- | ---- | ---------------------------------- | +| shape | string | circle | No | Shape of the highlight point. Available values are as follows:
- circle| +| size | <length> | 5px | No | Size of the highlight point. | +| strokeWidth | <length> | 1px | No | Stroke width. | +| strokeColor | <color> | \#ff0000 | No | Stroke color. | +| fillColor | <color> | \#ff0000 | No | Fill color. | +| display | boolean | true | No | Whether to display the highlight spot. | **Table 7** ChartLoop -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| margin | <length> | 1 | No| Number of erased points (horizontal distance between the latest drawn point and the earliest point). You are not advised to use **margin** together with **topPoint**, **bottomPoint**, or **headPoint** for mini-, small- and standard-system devices. If you do so, there is a possibility that the point is in the erase area and invisible.| +| Name | Type | Default Value | Mandatory | Description | +| ------ | -------------- | ---- | ---- | ---------------------------------------- | +| margin | <length> | 1 | No | Number of erased points (horizontal distance between the latest drawn point and the earliest point). You are not advised to use **margin** together with **topPoint**, **bottomPoint**, or **headPoint** for mini-, small- and standard-system devices. If you do so, there is a possibility that the point is in the erase area and invisible.| ## Methods -| Methods| Parameter| Description| -| -------- | -------- | -------- | +| Methods | Parameter | Description | +| ------ | ---------------------------------------- | ---------------------------------------- | | append | {
serial: number, // Set the data subscript of the line chart to be updated.
data: Array<number>, // Set the new data.
} | Dynamically add data to an existing data series. The target series is specified based on **serial**, which is the subscript of the datasets array and starts from 0. **datasets[index].data** is not updated. Only line charts support this attribute. The value is incremented by 1 based on the horizontal coordinate and is related to the **xAxis min/max** setting.| ## Events -| Name| Parameter| Description| -| -------- | -------- | -------- | -| click | - | Triggered when the component is clicked. | -| longpress | - | Triggered when the component is long pressed. | -| swipe5+ | [SwipeEvent](js-common-events.md) | Triggered when a user quickly swipes on the component. | +| Name | Parameter | Description | +| ------------------ | --------------------------------- | ----------- | +| click | - | Triggered when the component is clicked. | +| longpress | - | Triggered when the component is long pressed. | +| swipe5+ | [SwipeEvent](js-common-events.md) | Triggered when a user quickly swipes on the component.| ## Styles -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| width | <length> \| <percentage>5+ | - | No| Component width.
If this attribute is not set, the default value **0** is used. | -| height | <length> \| <percentage>5+ | - | No| Component height.
If this attribute is not set, the default value **0** is used. | -| padding | <length> | 0 | No| Shorthand attribute to set the padding for all sides.
The attribute can have one to four values:
- If you set only one value, it specifies the padding for all the four sides.
- If you set two values, the first value specifies the top and bottom padding, and the second value specifies the left and right padding.
- If you set three values, the first value specifies the top padding, the second value specifies the left and right padding, and the third value specifies the bottom padding.
- If you set four values, they respectively specify the padding for top, right, bottom, and left sides (in clockwise order).| -| padding-[left\|top\|right\|bottom] | <length> | 0 | No| Left, top, right, and bottom padding.| -| margin | <length> \| <percentage>5+ | 0 | No| Shorthand attribute to set the margin for all sides. The attribute can have one to four values:
- If you set only one value, it specifies the margin for all the four sides.
- If you set two values, the first value specifies the top and bottom margins, and the second value specifies the left and right margins.
- If you set three values, the first value specifies the top margin, the second value specifies the left and right margins, and the third value specifies the bottom margin.
- If you set four values, they respectively specify the margin for top, right, bottom, and left sides (in clockwise order).| -| margin-[left\|top\|right\|bottom] | <length> \| <percentage>5+ | 0 | No| Left, top, right, and bottom margins.| -| border-width | <length> | 0 | No| Shorthand attribute to set the margin for all sides.| -| border-color | <color> | black | No| Shorthand attribute to set the color for all borders.| -| border-radius | <length> | - | No| Radius of round-corner borders. | -| background-color | <color> | - | No| Background color.| -| display | string | flex | No| How and whether to display the box containing an element. Available values are as follows:
- **flex**: flexible layout
- **none**: not rendered| -| [left\|top] | <length> \| <percentage>6+ | - | No| Edge of the element.
- **left**: left edge position of the element. This attribute defines the offset between the left edge of the margin area of a positioned element and left edge of its containing block.
- **top**: top edge position of the element. This attribute defines the offset between the top edge of a positioned element and that of a block included in the element. | +| Name | Type | Default Value | Mandatory | Description | +| ---------------------------------- | ---------------------------------------- | ----- | ---- | ---------------------------------------- | +| width | <length> \| <percentage>5+ | - | No | Component width.

If this attribute is not set, the default value **0** is used. | +| height | <length> \| <percentage>5+ | - | No | Component height.

If this attribute is not set, the default value **0** is used. | +| padding | <length> | 0 | No | Shorthand attribute to set the padding for all sides.
The attribute can have one to four values:
- If you set only one value, it specifies the padding for all the four sides.
- If you set two values, the first value specifies the top and bottom padding, and the second value specifies the left and right padding.
- If you set three values, the first value specifies the top padding, the second value specifies the left and right padding, and the third value specifies the bottom padding.
- If you set four values, they respectively specify the padding for top, right, bottom, and left sides (in clockwise order).| +| padding-[left\|top\|right\|bottom] | <length> | 0 | No | Left, top, right, and bottom padding. | +| margin | <length> \| <percentage>5+ | 0 | No | Shorthand attribute to set the margin for all sides. The attribute can have one to four values:
- If you set only one value, it specifies the margin for all the four sides.
- If you set two values, the first value specifies the top and bottom margins, and the second value specifies the left and right margins.
- If you set three values, the first value specifies the top margin, the second value specifies the left and right margins, and the third value specifies the bottom margin.
- If you set four values, they respectively specify the margin for top, right, bottom, and left sides (in clockwise order).| +| margin-[left\|top\|right\|bottom] | <length> \| <percentage>5+ | 0 | No | Left, top, right, and bottom margins. | +| border-width | <length> | 0 | No | Shorthand attribute to set the margin for all sides. | +| border-color | <color> | black | No | Shorthand attribute to set the color for all borders. | +| border-radius | <length> | - | No | Radius of round-corner borders. | +| background-color | <color> | - | No | Background color. | +| display | string | flex | No | How and whether to display the box containing an element. Available values are as follows:
- **flex**: flexible layout
- **none**: not rendered| +| [left\|top] | <length> \| <percentage>6+ | - | No | Edge of the element.
- **left**: left edge position of the element. This attribute defines the offset between the left edge of the margin area of a positioned element and left edge of its containing block.
- **top**: top edge position of the element. This attribute defines the offset between the top edge of a positioned element and that of a block included in the element.| ## Example 1. Line chart - + ```html
@@ -134,7 +134,7 @@ Not supported
``` - + ```css /* xxx.css */ .container { @@ -155,7 +155,7 @@ Not supported } ``` - + ```js // xxx.js export default { @@ -211,7 +211,7 @@ Not supported ![lite_line](figures/lite_line.PNG) 2. Bar chart - + ```html
@@ -219,7 +219,7 @@ Not supported
``` - + ```css /* xxx.css */ .container { @@ -236,7 +236,7 @@ Not supported } ``` - + ```js // xxx.js export default { diff --git a/en/application-dev/reference/arkui-js-lite/js-components-basic-image-animator.md b/en/application-dev/reference/arkui-js-lite/js-components-basic-image-animator.md index 97383611f9..226eff9f6c 100644 --- a/en/application-dev/reference/arkui-js-lite/js-components-basic-image-animator.md +++ b/en/application-dev/reference/arkui-js-lite/js-components-basic-image-animator.md @@ -14,68 +14,68 @@ Not supported ## Attributes -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| images | Array<ImageFrame> | - | Yes| Image frame information. The frame information includes the image path, size, and location. The supported image formats include PNG, JPG, and BMP. For details about **ImageFrame**, see Table 1.
**NOTE**
Use data binding, for example, **images = {{images}}**, to specify the image. Declare the corresponding variable in the JavaScript: **images: [{src: "/common/heart-rate01.png"}, {src: "/common/heart-rate02.png"}]**. | -| iteration | number \| string | infinite | No| Number of times that the frame animation is played. **number** indicates a fixed number of playback operations, and **infinite** indicates an unlimited number of playback operations.| -| reverse | boolean | false | No| Playback sequence.
- **true**: Images are played from the last one to the first one.
- **false**: Images are played from the first one to the last 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 image size is different from the component size. In this case, the width, height, top, and left attributes of each image must be set separately. | -| duration | string | - | Yes| Single video playback duration, in seconds (s) or milliseconds (ms). The default unit is ms. If the value is **0**, no image is played. The value change takes effect only at the start of the next cycle. | -| fillmode5+ | string | forwards | No| Status of the frame animation after its playback is complete. Available values are as follows:
- **none**: restores to the initial status.
- **forwards**: retains the ending status defined for the last key frame.| -| id | string | - | No| Unique ID of the component.| -| style | string | - | No| Style declaration of the component.| -| class | string | - | No| Style class of the component, which is used to refer to a style table.| -| ref | string | - | No| Reference information of child elements, which is registered with the parent component on **$refs**.| +| Name | Type | Default Value | Mandatory | Description | +| --------------------- | -------------------------- | -------- | ---- | ---------------------------------------- | +| images | Array<ImageFrame> | - | Yes | Image frame information. The frame information includes the image path, size, and location. The supported image formats include PNG, JPG, and BMP. For details about **ImageFrame**, see Table 1.
**NOTE**
Use data binding, for example, **images = {{images}}**, to specify the image. Declare the corresponding variable in the JavaScript: **images: [{src: "/common/heart-rate01.png"}, {src: "/common/heart-rate02.png"}]**.| +| iteration | number \| string | infinite | No | Number of times that the frame animation is played. **number** indicates a fixed number of playback operations, and **infinite** indicates an unlimited number of playback operations.| +| reverse | boolean | false | No | Playback sequence.
- **true**: Images are played from the last one to the first one.
- **false**: Images are played from the first one to the last 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 image size is different from the component size. In this case, the width, height, top, and left attributes of each image must be set separately.| +| duration | string | - | Yes | Single video playback duration, in seconds (s) or milliseconds (ms). The default unit is ms. If the value is **0**, no image is played. The value change takes effect only at the start of the next cycle.| +| fillmode5+ | string | forwards | No | Status of the frame animation after its playback is complete. Available values are as follows:
- **none**: restores to the initial status.
- **forwards**: retains the ending status defined for the last key frame.| +| id | string | - | No | Unique ID of the component. | +| style | string | - | No | Style declaration of the component. | +| class | string | - | No | Style class of the component, which is used to refer to a style table. | +| ref | string | - | No | Reference information of child elements, which is registered with the parent component on **$refs**.| **Table 1** ImageFrame -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| src | <uri> | - | Yes| Image path.| -| width | <length> | 0 | No| Image width.| -| height | <length> | 0 | No| Image height.| -| top | <length> | 0 | No| Vertical coordinate of the image relative to the upper left corner of the component.| -| left | <length> | 0 | No| Horizontal coordinate of the image relative to the upper left corner of the component.| +| Name | Type | Default Value | Mandatory | Description | +| ------ | -------------- | ---- | ---- | ---------------- | +| src | <uri> | - | Yes | Image path. | +| width | <length> | 0 | No | Image width. | +| height | <length> | 0 | No | Image height. | +| top | <length> | 0 | No | Vertical coordinate of the image relative to the upper left corner of the component.| +| left | <length> | 0 | No | Horizontal coordinate of the image relative to the upper left corner of the component.| ## Events -| Name| Parameter| Description| -| -------- | -------- | -------- | -| stop | - | Triggered when the frame animation stops| -| click | - | Triggered when the component is clicked. | -| longpress | - | Triggered when the component is long pressed. | -| swipe5+ | [SwipeEvent](js-common-events.md) | Triggered when a user quickly swipes on the component. | +| Name | Parameter | Description | +| ------------------ | --------------------------------- | ----------- | +| stop | - | Triggered when the frame animation stops | +| click | - | Triggered when the component is clicked. | +| longpress | - | Triggered when the component is long pressed. | +| swipe5+ | [SwipeEvent](js-common-events.md) | Triggered when a user quickly swipes on the component.| ## Styles -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| width | <length> \| <percentage>5+ | - | No| Component width.

If this attribute is not set, the default value **0** is used.| -| height | <length> \| <percentage>5+ | - | No| Component height.

If this attribute is not set, the default value **0** is used.| -| padding | <length> | 0 | No| Shorthand attribute to set the padding for all sides.
The attribute can have one to four values:
- If you set only one value, it specifies the padding for all the four sides.
- If you set two values, the first value specifies the top and bottom padding, and the second value specifies the left and right padding.
- If you set three values, the first value specifies the top padding, the second value specifies the left and right padding, and the third value specifies the bottom padding.
- If you set four values, they respectively specify the padding for top, right, bottom, and left sides (in clockwise order).| -| padding-[left\|top\|right\|bottom] | <length> | 0 | No| Left, top, right, and bottom padding.| -| margin | <length> \| <percentage>5+ | 0 | No| Shorthand attribute to set the margin for all sides. The attribute can have one to four values:
- If you set only one value, it specifies the margin for all the four sides.
- If you set two values, the first value specifies the top and bottom margins, and the second value specifies the left and right margins.
- If you set three values, the first value specifies the top margin, the second value specifies the left and right margins, and the third value specifies the bottom margin.
- If you set four values, they respectively specify the margin for top, right, bottom, and left sides (in clockwise order).| -| margin-[left\|top\|right\|bottom] | <length> \| <percentage>5+ | 0 | No| Left, top, right, and bottom margins.| -| border-width | <length> | 0 | No| Shorthand attribute to set the margin for all sides.| -| border-color | <color> | black | No| Shorthand attribute to set the color for all borders.| -| border-radius | <length> | - | No| Radius of round-corner borders.| -| background-color | <color> | - | No| Background color.| -| opacity5+ | number | 1 | No| Opacity of an element. The value ranges from **0** to **1**. The value **1** means opaque, and **0** means completely transparent.| -| display | string | flex | No| How and whether to display the box containing an element. Available values are as follows:
- **flex**: flexible layout
- **none**: not rendered| -| [left\|top] | <length> \| <percentage>6+ | - | No| left\|Edge of the element.
- **left**: left edge position of the element. This attribute defines the offset between the left edge of the margin area of a positioned element and left edge of its containing block.
- **top**: top edge position of the element. This attribute defines the offset between the top edge of a positioned element and that of a block included in the element.| +| Name | Type | Default Value | Mandatory | Description | +| ---------------------------------- | ---------------------------------------- | ----- | ---- | ---------------------------------------- | +| width | <length> \| <percentage>5+ | - | No | Component width.

If this attribute is not set, the default value **0** is used. | +| height | <length> \| <percentage>5+ | - | No | Component height.

If this attribute is not set, the default value **0** is used. | +| padding | <length> | 0 | No | Shorthand attribute to set the padding for all sides.
The attribute can have one to four values:
- If you set only one value, it specifies the padding for all the four sides.
- If you set two values, the first value specifies the top and bottom padding, and the second value specifies the left and right padding.
- If you set three values, the first value specifies the top padding, the second value specifies the left and right padding, and the third value specifies the bottom padding.
- If you set four values, they respectively specify the padding for top, right, bottom, and left sides (in clockwise order).| +| padding-[left\|top\|right\|bottom] | <length> | 0 | No | Left, top, right, and bottom padding. | +| margin | <length> \| <percentage>5+ | 0 | No | Shorthand attribute to set the margin for all sides. The attribute can have one to four values:
- If you set only one value, it specifies the margin for all the four sides.
- If you set two values, the first value specifies the top and bottom margins, and the second value specifies the left and right margins.
- If you set three values, the first value specifies the top margin, the second value specifies the left and right margins, and the third value specifies the bottom margin.
- If you set four values, they respectively specify the margin for top, right, bottom, and left sides (in clockwise order).| +| margin-[left\|top\|right\|bottom] | <length> \| <percentage>5+ | 0 | No | Left, top, right, and bottom margins. | +| border-width | <length> | 0 | No | Shorthand attribute to set the margin for all sides. | +| border-color | <color> | black | No | Shorthand attribute to set the color for all borders. | +| border-radius | <length> | - | No | Radius of round-corner borders. | +| background-color | <color> | - | No | Background color. | +| opacity5+ | number | 1 | No | Opacity of an element. The value ranges from **0** to **1**. The value **1** means opaque, and **0** means completely transparent. | +| display | string | flex | No | How and whether to display the box containing an element. Available values are as follows:
- **flex**: flexible layout
- **none**: not rendered| +| [left\|top] | <length> \| <percentage>6+ | - | No | left\|Edge of the element.
- **left**: left edge position of the element. This attribute defines the offset between the left edge of the margin area of a positioned element and left edge of its containing block.
- **top**: top edge position of the element. This attribute defines the offset between the top edge of a positioned element and that of a block included in the element.| ## Methods -| Name| Parameter| Description| -| -------- | -------- | -------- | -| start | - | Starts to play the frame animation of an image. If this method is called again, the playback starts from the first frame.| -| pause | - | Pauses the frame animation playback of an image.| -| stop | - | Stops the frame animation playback of an image.| -| resume | - | Resumes the frame animation playback of an image.| -| getState | - | Obtains the playback state. Available values are as follows:
- playing
- paused
- stopped| +| Name | Parameter | Description | +| -------- | ---- | ---------------------------------------- | +| start | - | Starts to play the frame animation of an image. If this method is called again, the playback starts from the first frame. | +| pause | - | Pauses the frame animation playback of an image. | +| stop | - | Stops the frame animation playback of an image. | +| resume | - | Resumes the frame animation playback of an image. | +| getState | - | Obtains the playback state. Available values are as follows:
- playing
- paused
- stopped| ## Example diff --git a/en/application-dev/reference/arkui-js-lite/js-components-basic-slider.md b/en/application-dev/reference/arkui-js-lite/js-components-basic-slider.md index 8e69b18afe..14a1804c4b 100644 --- a/en/application-dev/reference/arkui-js-lite/js-components-basic-slider.md +++ b/en/application-dev/reference/arkui-js-lite/js-components-basic-slider.md @@ -14,52 +14,52 @@ Not supported ## Attributes -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| min | number | 0 | No| Minimum value of the slider.| -| max | number | 100 | No| Maximum value of the slider.| -| value | number | 0 | No| Initial value of the slider.| -| id | string | - | No| Unique ID of the component.| -| style | string | - | No| Style declaration of the component.| -| class | string | - | No| Style class of the component, which is used to refer to a style table.| -| ref | string | - | No| Reference information of child elements, which is registered with the parent component on **$refs**.| +| Name | Type | Default Value | Mandatory | Description | +| ----- | ------ | ---- | ---- | ---------------------------------------- | +| min | number | 0 | No | Minimum value of the slider. | +| max | number | 100 | No | Maximum value of the slider. | +| value | number | 0 | No | Initial value of the slider. | +| id | string | - | No | Unique ID of the component. | +| style | string | - | No | Style declaration of the component. | +| class | string | - | No | Style class of the component, which is used to refer to a style table. | +| ref | string | - | No | Reference information of child elements, which is registered with the parent component on **$refs**.| ## Events -| Name| Parameter| Description| -| -------- | -------- | -------- | -| change | ChangeEvent | Triggered when the value changes.| -| click | - | Triggered when the component is clicked. | -| longpress | - | Triggered when the component is long pressed. | -| swipe5+ | [SwipeEvent](js-common-events.md) | Triggered when a user quickly swipes on the component. | +| Name | Parameter | Description | +| ------------------ | --------------------------------- | -------------- | +| change | ChangeEvent | Triggered when the value changes.| +| click | - | Triggered when the component is clicked. | +| longpress | - | Triggered when the component is long pressed. | +| swipe5+ | [SwipeEvent](js-common-events.md) | Triggered when a user quickly swipes on the component. | - **Table 2** ChangeEvent + **Table 1** ChangeEvent -| Attribute| Type| Description| -| -------- | -------- | -------- | +| Attribute | Type | Description | +| ---------------------------------------- | ------ | ------------- | | progress(deprecated5+) | string | Current value of the slider.| -| value5+ | number | Current value of the slider.| +| value5+ | number | Current value of the slider.| ## Styles -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| color | <color> | \#000000 | No| Background color of the slider.| -| selected-color | <color> | \#ffffff | No| Selected color of the slider.| -| width | <length> \| <percentage>5+ | - | No| Component width.
If this attribute is not set, the default value **0** is used. | -| height | <length> \| <percentage>5+ | - | No| Component height.
If this attribute is not set, the default value **0** is used. | -| padding | <length> | 0 | No| Shorthand attribute to set the padding for all sides.
The attribute can have one to four values:
- If you set only one value, it specifies the padding for all the four sides.
- If you set two values, the first value specifies the top and bottom padding, and the second value specifies the left and right padding.
- If you set three values, the first value specifies the top padding, the second value specifies the left and right padding, and the third value specifies the bottom padding.
- If you set four values, they respectively specify the padding for top, right, bottom, and left sides (in clockwise order).| -| padding-[left\|top\|right\|bottom] | <length> | 0 | No| Left, top, right, and bottom padding.| -| margin | <length> \| <percentage>5+ | 0 | No| Shorthand attribute to set the margin for all sides. The attribute can have one to four values:
- If you set only one value, it specifies the margin for all the four sides.
- If you set two values, the first value specifies the top and bottom margins, and the second value specifies the left and right margins.
- If you set three values, the first value specifies the top margin, the second value specifies the left and right margins, and the third value specifies the bottom margin.
- If you set four values, they respectively specify the margin for top, right, bottom, and left sides (in clockwise order).| -| margin-[left\|top\|right\|bottom] | <length> \| <percentage>5+ | 0 | No| Left, top, right, and bottom margins.| -| border-width | <length> | 0 | No| Shorthand attribute to set the margin for all sides.| -| border-color | <color> | black | No| Shorthand attribute to set the color for all borders.| -| border-radius | <length> | - | No| Radius of round-corner borders.| -| background-color | <color> | - | No| Background color.| -| display | string | flex | No| How and whether to display the box containing an element. Available values are as follows:
- **flex**: flexible layout
- **none**: not rendered| -| [left\|top] | <length> \| <percentage>6+ | - | No| Edge of the element.
- **left**: left edge position of the element. This attribute defines the offset between the left edge of the margin area of a positioned element and left edge of its containing block.
- **top**: top edge position of the element. This attribute defines the offset between the top edge of a positioned element and that of a block included in the element. | +| Name | Type | Default Value | Mandatory | Description | +| ---------------------------------- | ---------------------------------------- | -------- | ---- | ---------------------------------------- | +| color | <color> | \#000000 | No | Background color of the slider. | +| selected-color | <color> | \#ffffff | No | Selected color of the slider. | +| width | <length> \| <percentage>5+ | - | No | Component width.
If this attribute is not set, the default value **0** is used. | +| height | <length> \| <percentage>5+ | - | No | Component height.
If this attribute is not set, the default value **0** is used. | +| padding | <length> | 0 | No | Shorthand attribute to set the padding for all sides.
The attribute can have one to four values:
- If you set only one value, it specifies the padding for all the four sides.
- If you set two values, the first value specifies the top and bottom padding, and the second value specifies the left and right padding.
- If you set three values, the first value specifies the top padding, the second value specifies the left and right padding, and the third value specifies the bottom padding.
- If you set four values, they respectively specify the padding for top, right, bottom, and left sides (in clockwise order).| +| padding-[left\|top\|right\|bottom] | <length> | 0 | No | Left, top, right, and bottom padding. | +| margin | <length> \| <percentage>5+ | 0 | No | Shorthand attribute to set the margin for all sides. The attribute can have one to four values:
- If you set only one value, it specifies the margin for all the four sides.
- If you set two values, the first value specifies the top and bottom margins, and the second value specifies the left and right margins.
- If you set three values, the first value specifies the top margin, the second value specifies the left and right margins, and the third value specifies the bottom margin.
- If you set four values, they respectively specify the margin for top, right, bottom, and left sides (in clockwise order).| +| margin-[left\|top\|right\|bottom] | <length> \| <percentage>5+ | 0 | No | Left, top, right, and bottom margins. | +| border-width | <length> | 0 | No | Shorthand attribute to set the margin for all sides. | +| border-color | <color> | black | No | Shorthand attribute to set the color for all borders. | +| border-radius | <length> | - | No | Radius of round-corner borders. | +| background-color | <color> | - | No | Background color. | +| display | string | flex | No | How and whether to display the box containing an element. Available values are as follows:
- **flex**: flexible layout
- **none**: not rendered| +| [left\|top] | <length> \| <percentage>6+ | - | No | Edge of the element.
- **left**: left edge position of the element. This attribute defines the offset between the left edge of the margin area of a positioned element and left edge of its containing block.
- **top**: top edge position of the element. This attribute defines the offset between the top edge of a positioned element and that of a block included in the element.| ## Example diff --git a/en/application-dev/reference/arkui-js-lite/js-components-common-animation.md b/en/application-dev/reference/arkui-js-lite/js-components-common-animation.md index 8533e8dd78..ef2c39dc69 100644 --- a/en/application-dev/reference/arkui-js-lite/js-components-common-animation.md +++ b/en/application-dev/reference/arkui-js-lite/js-components-common-animation.md @@ -4,44 +4,44 @@ Components support dynamic rotation, translation, and scaling effects. These effects can be set in the **style** attribute or **.css** files. -| Name| Type| Default Value| Description| -| -------- | -------- | -------- | -------- | -| transform | string | - | Translation, rotation, and scaling attributes. For details, see Table 1. | -| animation-name | string | - | @keyframes rule. For details, see Table 2. | -| animation-delay | <time> | 0 | Delay for playing the animation, in ms or s, for example, **1000 ms** or **1s**. The default unit is ms. | -| animation-duration | <time> | 0 | Animation duration, in ms or s, for example, **1000 ms** or **1s**. The default unit is ms.
**NOTE**
**animation-duration** must be specified. Otherwise, the duration is **0**, which means the animation will not be played. | -| animation-iteration-count | number \| infinite | 1 | Number of times that an animation is played. The animation is played once by default. You can set the value to **infinite** to play the animation infinitely.| -| animation-timing-function | string |
linear | Speed curve of an animation, which makes the animation more fluent.
- **linear**: The animation speed keeps unchanged.
- **ease-in**: The animation starts at a low speed. The cubic-bezier curve (0.42, 0.0, 1.0, 1.0) is used
- **ease-out**: The animation ends at a low speed. The cubic-bezier curve (0.0, 0.0, 0.58, 1.0) is used.
- **ease-in-out**: The animation starts and ends at a low speed. The cubic-bezier curve (0.42, 0.0, 0.58, 1.0) is used. | -| animation-fill-mode | string | none | Start and end styles of the animation.
- **none**: No style is applied to the target before or after the animation is executed.
- **forwards**: The target keeps the state at the end of the animation (defined in the last key frame) after the animation is executed.| +| Name | Type | Default Value | Description | +| ------------------------- | ---------------------------------- | ----------- | ---------------------------------------- | +| transform | string | - | Translation, rotation, and scaling attributes. For details, see Table 1. | +| animation-name | string | - | \@keyframes rule. For details, see Table 2. | +| animation-delay | <time> | 0 | Delay for playing the animation, in ms or s, for example, **1000 ms** or **1s**. \|The default unit is ms.| +| animation-duration | <time> | 0 | Animation duration, in ms or s, for example, **1000 ms** or **1s**. \|The default unit is ms.
**NOTE**
**animation-duration** must be specified. Otherwise, the duration is **0**, which means the animation will not be played.| +| animation-iteration-count | number \| infinite | 1 | Number of times that an animation is played. The animation is played once by default. You can set the value to **infinite** to play the animation infinitely. | +| animation-timing-function | string |
linear | Speed curve of an animation, which makes the animation more fluent.
Available values are as follows:
- **linear**: The animation speed keeps unchanged.
- **ease-in**: The animation starts at a low speed. The cubic-bezier curve (0.42, 0.0, 1.0, 1.0) is used
- **ease-out**: The animation ends at a low speed. The cubic-bezier curve (0.0, 0.0, 0.58, 1.0) is used.
- **ease-in-out**: The animation starts and ends at a low speed. The cubic-bezier curve (0.42, 0.0, 0.58, 1.0) is used.| +| animation-fill-mode | string | none | Start and end styles of the animation.
- **none**: No style is applied to the target before or after the animation is executed.
- **forwards**: The target keeps the state at the end of the animation (defined in the last key frame) after the animation is executed.| **Table 1** transform -| Name| Type| Description| -| -------- | -------- | -------- | -| translateX | <length> | Moves an element along the x-axis.| -| translateY | <length> | Moves an element along the y-axis.| -| rotate | <deg> \| <rad> | Rotates an element.| +| Name | Type | Description | +| ---------- | ------------------------------------ | ---------- | +| translateX | <length> | Moves an element along the x-axis.| +| translateY | <length> | Moves an element along the y-axis.| +| rotate | <deg> \| <rad> | Rotates an element. | > **NOTE** > > Only images of the original size can be rotated on lite wearables. - **Table 2** @keyframes + **Table 2** \@keyframes -| Name| Type| Default Value| Description| -| -------- | -------- | -------- | -------- | -| background-color | <color> | - | Background color applied to the component after the animation is played.| -| width | <length> | - | Width value applied to the component after the animation is played.| -| height | <length> | - | Height value applied to the component after the animation is played.| -| transform | string | - | Transformation type applied to a component. For details, see Table 1.| +| Name | Type | Default Value | Description | +| ---------------- | -------------- | ---- | ------------------ | +| background-color | <color> | - | Background color applied to the component after the animation is played. | +| width | <length> | - | Width value applied to the component after the animation is played. | +| height | <length> | - | Height value applied to the component after the animation is played. | +| transform | string | - | Transformation type applied to a component. For details, see Table 1.| If there is no default value for when an animation will start or end, use **from** and **to** to specify the start and end of the display. The following is an example: -``` +```css @keyframes Go { from { diff --git a/en/application-dev/reference/arkui-js-lite/js-components-common-mediaquery.md b/en/application-dev/reference/arkui-js-lite/js-components-common-mediaquery.md index c01a9c1459..43a11aa1f7 100644 --- a/en/application-dev/reference/arkui-js-lite/js-components-common-mediaquery.md +++ b/en/application-dev/reference/arkui-js-lite/js-components-common-mediaquery.md @@ -45,8 +45,8 @@ You can use media logical operators to implement complex media query. The follow **Table 1** Media logical operators -| Type | Description | -| --------------- | ------------------------------------------------------------ | +| Type | Description | +| --------------- | ---------------------------------------- | | and | The **and** operator is used to combine multiple media features into one media query, in a logical AND operation. The query is valid only when all media features are true. It can also combine media types and media functions.
For example, **screen and (device-type: liteWearable) and (max-height: 454)** evaluates to **true** when the device type is wearable and the maximum height of the application is 454 pixel units.| | or9+ | The **or** operator is used to combine multiple media features into one media query, in a logical OR operation. The query is valid if a media feature is true.
For example, **screen and (max-height: 454) or (round-screen: true)** evaluates to **true** when the maximum height of the application is 454 pixel units or the device screen is round.| @@ -55,18 +55,18 @@ You can use media logical operators to implement complex media query. The follow ## Media Features -| Type | Description | -| ---------------- | ------------------------------------------------------------ | -| height | Height of the display area on the application page. | -| min-height | Minimum height of the display area on the application page. | -| max-height | Maximum height of the display area on the application page. | -| width | Width of the display area on the application page. | -| min-width | Minimum width of the display area on the application page. | -| max-width | Maximum width of the display area on the application page. | +| Type | Description | +| ---------------- | ---------------------------------------- | +| height | Height of the display area on the application page. | +| min-height | Minimum height of the display area on the application page. | +| max-height | Maximum height of the display area on the application page. | +| width | Width of the display area on the application page. | +| min-width | Minimum width of the display area on the application page. | +| max-width | Maximum width of the display area on the application page. | | aspect-ratio | Ratio of the width to the height of the display area on the application page.
Example: **aspect-ratio: 1/2**| | min-aspect-ratio | Minimum ratio of the width to the height of the display area on the application page. | | max-aspect-ratio | Maximum ratio of the width to the height of the display area on the application page. | -| round-screen | Screen type. The value **true** means that the screen is round, and **false** means the opposite. | +| round-screen | Screen type. The value **true** means that the screen is round, and **false** means the opposite.| ## Sample Code for the Common Media Feature diff --git a/en/application-dev/reference/arkui-js-lite/js-components-container-stack.md b/en/application-dev/reference/arkui-js-lite/js-components-container-stack.md index 2ce76b90cf..c099a46be7 100644 --- a/en/application-dev/reference/arkui-js-lite/js-components-container-stack.md +++ b/en/application-dev/reference/arkui-js-lite/js-components-container-stack.md @@ -9,47 +9,47 @@ The **\** component provides a stack container where child components are ## Child Components -Supported +Supported. ## Attributes -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| id | string | - | No| Unique ID of the component.| -| style | string | - | No| Style declaration of the component.| -| class | string | - | No| Style class of the component, which is used to refer to a style table.| -| ref | string | - | No| Reference information of child elements, which is registered with the parent component on **$refs**.| +| Name | Type | Default Value | Mandatory | Description | +| ----- | ------ | ---- | ---- | ---------------------------------------- | +| id | string | - | No | Unique ID of the component. | +| style | string | - | No | Style declaration of the component. | +| class | string | - | No | Style class of the component, which is used to refer to a style table. | +| ref | string | - | No | Reference information of child elements, which is registered with the parent component on **$refs**.| ## Events -| Name| Parameter| Description| -| -------- | -------- | -------- | -| click | - | Triggered when the component is clicked.| -| longpress | - | Triggered when the component is long pressed.| +| Name | Parameter | Description | +| ------------------ | --------------------------------- | ----------- | +| click | - | Triggered when the component is clicked. | +| longpress | - | Triggered when the component is long pressed. | | swipe5+ | [SwipeEvent](js-common-events.md) | Triggered when a user quickly swipes on the component.| ## Styles -| Name| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| width | <length> \| <percentage>5+ | - | No| Component width.
If this attribute is not set, the default value **0** is used. | -| height | <length> \| <percentage>5+ | - | No| Component height.
If this attribute is not set, the default value **0** is used. | -| padding | <length> | 0 | No| Shorthand attribute to set the padding for all sides.
The attribute can have one to four values:
- If you set only one value, it specifies the padding for all the four sides.
- If you set two values, the first value specifies the top and bottom padding, and the second value specifies the left and right padding.
- If you set three values, the first value specifies the top padding, the second value specifies the left and right padding, and the third value specifies the bottom padding.
- If you set four values, they respectively specify the padding for top, right, bottom, and left sides (in clockwise order).| -| padding-[left\|top\|right\|bottom] | <length> | 0 | No| Left, top, right, and bottom padding.| -| margin | <length> \| <percentage>5+ | 0 | No| Shorthand attribute to set the margin for all sides. The attribute can have one to four values:
- If you set only one value, it specifies the margin for all the four sides.
- If you set two values, the first value specifies the top and bottom margins, and the second value specifies the left and right margins.
- If you set three values, the first value specifies the top margin, the second value specifies the left and right margins, and the third value specifies the bottom margin.
- If you set four values, they respectively specify the margin for top, right, bottom, and left sides (in clockwise order).| -| margin-[left\|top\|right\|bottom] | <length> \| <percentage>5+ | 0 | No| Left, top, right, and bottom margins.| -| border-width | <length> | 0 | No| Shorthand attribute to set the margin for all sides.| -| border-color | <color> | black | No| Shorthand attribute to set the color for all borders.| -| border-radius | <length> | - | No| Radius of round-corner borders.| -| background-color | <color> | - | No| Background color.| -| opacity5+ | number | 1 | No| Opacity of an element. The value ranges from **0** to **1**. The value **1** means opaque, and **0** means completely transparent.| -| display | string | flex | No| How and whether to display the box containing an element. Available values are as follows:
- **flex**: flexible layout
- **none**: not rendered| -| [left\|top] | <length> \| <percentage>6+ | - | No| Edge of the element.
- **left**: left edge position of the element. This attribute defines the offset between the left edge of the margin area of a positioned element and left edge of its containing block.
- **top**: top edge position of the element. This attribute defines the offset between the top edge of a positioned element and that of a block included in the element. | - -> **NOTE** +| Name | Type | Default Value | Mandatory | Description | +| ---------------------------------- | ---------------------------------------- | ----- | ---- | ---------------------------------------- | +| width | <length> \| <percentage>5+ | - | No | Component width.

If this attribute is not set, the default value **0** is used. | +| height | <length> \| <percentage>5+ | - | No | Component height.

If this attribute is not set, the default value **0** is used. | +| padding | <length> | 0 | No | Shorthand attribute to set the padding for all sides.
The attribute can have one to four values:
- If you set only one value, it specifies the padding for all the four sides.
- If you set two values, the first value specifies the top and bottom padding, and the second value specifies the left and right padding.
- If you set three values, the first value specifies the top padding, the second value specifies the left and right padding, and the third value specifies the bottom padding.
- If you set four values, they respectively specify the padding for top, right, bottom, and left sides (in clockwise order).| +| padding-[left\|top\|right\|bottom] | <length> | 0 | No | Left, top, right, and bottom padding. | +| margin | <length> \| <percentage>5+ | 0 | No | Shorthand attribute to set the margin for all sides. The attribute can have one to four values:
- If you set only one value, it specifies the margin for all the four sides.
- If you set two values, the first value specifies the top and bottom margins, and the second value specifies the left and right margins.
- If you set three values, the first value specifies the top margin, the second value specifies the left and right margins, and the third value specifies the bottom margin.
- If you set four values, they respectively specify the margin for top, right, bottom, and left sides (in clockwise order).| +| margin-[left\|top\|right\|bottom] | <length> \| <percentage>5+ | 0 | No | Left, top, right, and bottom margins. | +| border-width | <length> | 0 | No | Shorthand attribute to set the margin for all sides. | +| border-color | <color> | black | No | Shorthand attribute to set the color for all borders. | +| border-radius | <length> | - | No | Radius of round-corner borders. | +| background-color | <color> | - | No | Background color. | +| opacity5+ | number | 1 | No | Opacity of an element. The value ranges from **0** to **1**. The value **1** means opaque, and **0** means completely transparent. | +| display | string | flex | No | How and whether to display the box containing an element. Available values are as follows:
- **flex**: flexible layout
- **none**: not rendered| +| [left\|top] | <length> \| <percentage>6+ | - | No | Edge of the element.
- **left**: left edge position of the element. This attribute defines the offset between the left edge of the margin area of a positioned element and left edge of its containing block.
- **top**: top edge position of the element. This attribute defines the offset between the top edge of a positioned element and that of a block included in the element.| + +> **NOTE** > > The absolute positioning does not support a percentage. Therefore, **margin** cannot be set for the child components of the **\** component. diff --git a/en/application-dev/reference/arkui-js-lite/js-framework-file.md b/en/application-dev/reference/arkui-js-lite/js-framework-file.md index ade304c4d5..e03caae24c 100644 --- a/en/application-dev/reference/arkui-js-lite/js-framework-file.md +++ b/en/application-dev/reference/arkui-js-lite/js-framework-file.md @@ -50,7 +50,7 @@ Application resources can be accessed via an absolute or relative path. In this > > - If code files A and B are in the same directory, you can use either a relative or absolute path in code file B to reference resource files. > -> - If code files A and B are in different directories, you must use an absolute path in code file B to reference resource files. The reason is that the directory of code file B changes during Webpack packaging. +> - If code files A and B are in different directories, you must use an absolute path in code file B to reference resource files, because the directory of code file B changes during Webpack packaging. > diff --git a/en/application-dev/reference/arkui-js-lite/js-framework-js-tag.md b/en/application-dev/reference/arkui-js-lite/js-framework-js-tag.md index 37d0808134..fd346adaff 100644 --- a/en/application-dev/reference/arkui-js-lite/js-framework-js-tag.md +++ b/en/application-dev/reference/arkui-js-lite/js-framework-js-tag.md @@ -4,10 +4,10 @@ The "js" tag contains the instance name and page route information. -| Tag| Type| Default Value| Mandatory| Description| -| -------- | -------- | -------- | -------- | -------- | -| name | string | default | Yes| Name of the JavaScript instance.| -| pages | Array | - | Yes| Route information. For details, see ["pages"](#pages).| +| Tag | Type | Default Value | Mandatory | Description | +| ----- | ------ | ------- | ---- | ----------------------------- | +| name | string | default | Yes | Name of the JavaScript instance. | +| pages | Array | - | Yes | Route information. For details, see ["pages"](#pages).| > **NOTE** @@ -34,10 +34,10 @@ The **"pages"** defines the route information of each page. Each page consists o > **NOTE** > -> -> - The application home page is fixed to **pages/index/index**. -> -> - The page name should not be a component name, for example, **text.hml** or **button.hml**. +> +> - The application home page is fixed to **pages/index/index**. +> +> - The page name should not be a component name, for example, **text.hml** or **button.hml**. ## Example diff --git a/en/application-dev/reference/arkui-js-lite/js-framework-syntax-css.md b/en/application-dev/reference/arkui-js-lite/js-framework-syntax-css.md index 79b1d9938c..7e3bf96dde 100644 --- a/en/application-dev/reference/arkui-js-lite/js-framework-syntax-css.md +++ b/en/application-dev/reference/arkui-js-lite/js-framework-syntax-css.md @@ -14,16 +14,16 @@ CSS files can be imported using the **\@import** statement. This facilitates mod The **.css** file with the same name as the **.hml** file in each page directory describes the styles of components on the HML page, determining how the components will be displayed. 1. Internal style: The **style** and **class** attributes can be used to specify the component style. Sample code: - - ``` + + ```html
Hello World
``` - - ``` + + ```css /* index.css */ .container { justify-content: center; @@ -31,16 +31,16 @@ The **.css** file with the same name as the **.hml** file in each page directory ``` 2. External style files: You need to import the files. For example, create a **style.css** file in the **common** directory and import the file at the beginning of **index.css**. - - ``` + + ```css /* style.css */ .title { font-size: 50px; } ``` - - ``` + + ```css /* index.css */ @import '../../common/style.css'; .container { @@ -53,16 +53,16 @@ The **.css** file with the same name as the **.hml** file in each page directory A CSS selector is used to select elements for which styles need to be added to. The following table lists the supported selectors. -| Selector| Example| Description| -| -------- | -------- | -------- | -| .class | .container | Selects all components whose **class** is **container**.| -| \#id | \#titleId | Selects all components whose **id** is **titleId**.| -| , | .title, .content | Selects all components whose **class** is **title** or **content**.| +| Selector | Example | Description | +| ------ | --------------------- | ------------------------------------- | +| .class | .container | Selects all components whose **class** is **container**. | +| \#id | \#titleId | Selects all components whose **id** is **titleId**. | +| , | .title, .content | Selects all components whose **class** is **title** or **content**.| Example: -``` +```html
Title @@ -73,7 +73,7 @@ Example: ``` -``` +```css /* Page style xxx.css */ /* Set the style for the components whose class is title. */ .title { @@ -95,15 +95,17 @@ Example: A CSS pseudo-class is a keyword added to a selector that specifies a special state of the selected elements. -| Name| Available Components| Description| -| -------- | -------- | -------- | -| :active |
input[type="button"] | Selects the element activated by a user, for example, a pressed button. Only the **background-color** and **background-image** attributes can be set for the pseudo-class selector on lite wearables.| + + +| Name | Available Components | Description | +| -------- | ----------------------------------- | ---------------------------------------- | +| :active |
input[type="button"] | Selects the element activated by a user, for example, a pressed button. Only the **background-color** and **background-image** attributes can be set for the pseudo-class selector on lite wearables.| | :checked | input[type="checkbox", type="radio"]| Selects the element whose **checked** attribute is **true**. Only the **background-color** and **background-image** attributes can be set for the pseudo-class selector on lite wearables.| The following is an example for you to use the **:active** pseudo-class to control the style when a user presses the button. -``` +```html
@@ -111,7 +113,7 @@ The following is an example for you to use the **:active** pseudo-class to contr ``` -``` +```css /* index.css */ .button:active { background-color: #888888;/* After the button is activated, the background color is changed to #888888. */ @@ -124,8 +126,8 @@ The following is an example for you to use the **:active** pseudo-class to contr Precompilation is a program that uses specific syntax to generate CSS files. It provides variables and calculation, helping you define component styles more conveniently. Currently, Less, Sass, and Scss are supported. To use precompiled styles, change the suffix of the original **.css** file. For example, change **index.css** to **index.less**, **index.sass**, or **index.scss**. - The following **index.less** file is changed from **index.css**. - - ``` + + ```css /* index.less */ /* Define a variable. */ @colorBackground: #000000; @@ -135,8 +137,8 @@ Precompilation is a program that uses specific syntax to generate CSS files. It ``` - Reference a precompiled style file. For example, if the **style.scss** file is located in the **common** directory, change the original **index.css** file to **index.scss** and import **style.scss**. - - ``` + + ```css /* style.scss */ /* Define a variable. */ $colorBackground: #000000; @@ -144,8 +146,8 @@ Precompilation is a program that uses specific syntax to generate CSS files. It Reference the precompiled style file in **index.scss**: - - ``` + + ```css /* index.scss */ /* Import style.scss. */ @import '../../common/style.scss'; @@ -154,7 +156,7 @@ Precompilation is a program that uses specific syntax to generate CSS files. It } ``` - + > **NOTE** > > Place precompiled style files in the **common** directory. diff --git a/en/application-dev/reference/arkui-js-lite/js-framework-syntax-hml.md b/en/application-dev/reference/arkui-js-lite/js-framework-syntax-hml.md index b9f5bec1e1..b111895cb5 100644 --- a/en/application-dev/reference/arkui-js-lite/js-framework-syntax-hml.md +++ b/en/application-dev/reference/arkui-js-lite/js-framework-syntax-hml.md @@ -7,7 +7,7 @@ The OpenHarmony Markup Language (HML) is an HTML-like language that allows you t ## HML Page Structure -``` +```html
Image Show @@ -21,7 +21,7 @@ The OpenHarmony Markup Language (HML) is an HTML-like language that allows you t ## Data Binding -``` +```html
{{content[1]}} @@ -29,7 +29,7 @@ The OpenHarmony Markup Language (HML) is an HTML-like language that allows you t ``` -``` +```js // xxx.js export default { data: { @@ -42,9 +42,9 @@ export default { ``` > **NOTE** -> - To make the array data modification take effect, use the **splice** method to change array items. -> -> - ECMAScript 6.0 syntax is not supported in HML. +> - To make the array data modification take effect, use the **splice** method to change array items. +> +> - ECMAScript 6.0 syntax is not supported in HML. ## Event Binding @@ -52,7 +52,7 @@ export default { The callback bound to an event receives an event object parameter, which can be used to obtain the event information. -``` +```html
@@ -73,7 +73,7 @@ The callback bound to an event receives an event object parameter, which can be ``` -``` +```js // xxx.js export default { data: { @@ -88,11 +88,11 @@ export default { > **NOTE** > -> Event bubbling is supported since API version 5. After you upgrade the SDK and run an existing JavaScript application, events bound using a traditional statement (such as **onclick**) will not bubble. However, if you use the new SDK to repack the JavaScript application, such events will bubble. To avoid service logic errors, replace the traditional statement with one supported by the new SDK. For example, replace **onclick** with **grab:click**. +> Event bubbling is supported since API version 5. After you upgrade the SDK and run an existing JavaScript application, events bound using a traditional statement (such as **onclick**) will not bubble. However, if you use the new SDK to repack the JavaScript application, such events will bubble. To avoid service logic errors, replace the traditional statement with one supported by the new SDK. For example, replace **onclick** with **grab:click**. **Example:** -``` +```html
{{count}} @@ -108,8 +108,8 @@ export default { ``` -``` -/* xxx.js */ +```js +// xxx.js export default { data: { count: 0 @@ -127,7 +127,7 @@ export default { ``` -``` +```css /* xxx.css */ .container { display: flex; @@ -164,7 +164,7 @@ export default { ## Loop Rendering -``` +```html
@@ -184,7 +184,7 @@ export default { ``` -``` +```js // xxx.js export default { data: { @@ -211,11 +211,12 @@ The **tid** attribute accelerates the **for** loop and improves the re-rendering - for="(i, v) in array": **i** indicates the element index, and **v** indicates the element variable. All elements of the array object will be looped through. -> **NOTE** +> **NOTE** +> > - Each element in the array must have the data attribute specified by **tid**. Otherwise, an exception may occur. -> +> > - The attribute specified by **tid** in the array must be unique. Otherwise, performance loss occurs. In the above example, only **id** and **name** can be used as **tid** because they are unique fields. -> +> > - The **tid** field does not support expressions. @@ -224,7 +225,7 @@ The **tid** attribute accelerates the **for** loop and improves the re-rendering There are two ways to implement conditional rendering: **if-elif-else** or **show**. In **if-elif-else**, when the **if** statement evaluates to **false**, the component is not built in the VDOM and is not rendered. For **show**, when show is **false**, the component is not rendered but is built in the VDOM. In addition, the **if-elif-else** statements must be used in sibling nodes. Otherwise, the compilation fails. The following example uses both ways to implement conditional rendering: -``` +```html
@@ -236,8 +237,8 @@ There are two ways to implement conditional rendering: **if-elif-else** or **sho ``` -``` -// xxx.css +```css +/* xxx.css */ .container{ flex-direction: column; align-items: center; @@ -250,7 +251,7 @@ There are two ways to implement conditional rendering: **if-elif-else** or **sho ``` -``` +```js // xxx.js export default { data: { @@ -269,7 +270,7 @@ export default { In the optimized rendering (**show**), if **show** is **true**, the node is rendered properly; if it is **false**, the display style will be **none**. -``` +```html
@@ -278,8 +279,8 @@ In the optimized rendering (**show**), if **show** is **true**, the node is rend ``` -``` -// xxx.css +```css +/* xxx.css */ .container{ flex-direction: column; align-items: center; @@ -292,7 +293,7 @@ In the optimized rendering (**show**), if **show** is **true**, the node is rend ``` -``` +```js // xxx.js export default { data: { @@ -305,4 +306,5 @@ export default { ``` > **NOTE** -> Do not use **for** and **if** attributes at the same time in an element. +> +> Do not use **for** and **if** attributes at the same time in an element. diff --git a/en/application-dev/reference/arkui-js-lite/js-framework-syntax-js.md b/en/application-dev/reference/arkui-js-lite/js-framework-syntax-js.md index 3ce76d4463..e9d71fc2ff 100644 --- a/en/application-dev/reference/arkui-js-lite/js-framework-syntax-js.md +++ b/en/application-dev/reference/arkui-js-lite/js-framework-syntax-js.md @@ -31,7 +31,7 @@ The ECMAScript 6.0 syntax is supported. Lite wearables only support the followin - Module declaration Import functionality modules. - + ``` import router from '@system.router'; ``` @@ -39,7 +39,7 @@ The ECMAScript 6.0 syntax is supported. Lite wearables only support the followin - Code reference Import JavaScript code. - + ``` import utils from '../../common/utils.js'; ``` @@ -48,17 +48,17 @@ The ECMAScript 6.0 syntax is supported. Lite wearables only support the followin ## Objects - Page objects - | Attribute| Type| Description| - | -------- | -------- | -------- | - | data | Object/Function | Data model of the page. If the attribute is of the function type, the return value must be of the object type. The name cannot start with a dollar sign ($) or underscore (_). Do not use reserved words (**for**, **if**, **show**, and **tid**). | - | $refs | Object | DOM elements or child component instances that have registered the **ref** attribute. For an example, see [Obtaining a DOM Element](#obtaining-a-dom-element).| + | Attribute | Type | Description | + | ----- | --------------- | ---------------------------------------- | + | data | Object/Function | Data model of the page. If the attribute is of the function type, the return value must be of the object type. The name cannot start with a dollar sign ($) or underscore (_). Do not use reserved words (**for**, **if**, **show**, and **tid**).
| + | $refs | Object | DOM elements or child component instances that have registered the **ref** attribute. For an example, see [Obtaining a DOM Element](#obtaining-a-dom-element). | ## Obtaining a DOM Element Use **$refs** to obtain a DOM element. -``` +```html
@@ -66,57 +66,57 @@ Use **$refs** to obtain a DOM element. ``` -``` -// index.js -export default { - data: { - images: [ - { src: '/common/frame1.png' }, - { src: '/common/frame2.png' }, - { src: '/common/frame3.png' }, - ], - }, - handleClick() { - const animator = this.$refs.animator; // Obtain the DOM element whose $refs attribute is animator. - const state = animator.getState(); - if (state === 'paused') { - animator.resume(); - } else if (state === 'stopped') { - animator.start(); - } else { - animator.pause(); - } - }, -}; -``` + ```js + // index.js + export default { + data: { + images: [ + { src: '/common/frame1.png' }, + { src: '/common/frame2.png' }, + { src: '/common/frame3.png' }, + ], + }, + handleClick() { + const animator = this.$refs.animator; // Obtain the DOM element whose $refs attribute is animator. + const state = animator.getState(); + if (state === 'paused') { + animator.resume(); + } else if (state === 'stopped') { + animator.start(); + } else { + animator.pause(); + } + }, + }; + ``` ## Lifecycle APIs - Page lifecycle APIs - | Name | Type| Parameter| Return Value| Description| Triggered When| - | -------- | -------- | -------- | -------- | -------- | -------- | - | onInit | Function | N/A| N/A| Listens for page initialization.| Page initialization is complete. This API is called only once in the page lifecycle.| - | onReady | Function | N/A| N/A| Listens for page creation.| A page is created. This API is called only once in the page lifecycle.| - | onShow | Function | N/A| N/A| Listens for page display. | The page is displayed.| - | onHide | Function | N/A| N/A| Listens for page disappearance.| The page disappears.| - | onDestroy | Function | N/A| N/A| Listens for page destruction.| The page is destroyed.| - + | Name | Type | Parameter | Return Value | Description | Triggered When | + | --------- | -------- | ---- | ---- | ------ | ------------------- | + | onInit | Function | N/A | N/A | Listens for page initialization. | Page initialization is complete. This API is called only once in the page lifecycle.| + | onReady | Function | N/A | N/A | Listens for page creation.| A page is created. This API is called only once in the page lifecycle. | + | onShow | Function | N/A | N/A | Listens for page display. | The page is displayed. | + | onHide | Function | N/A | N/A | Listens for page disappearance. | The page disappears. | + | onDestroy | Function | N/A | N/A | Listens for page destruction. | The page is destroyed. | + The lifecycle APIs of page A are called in the following sequence: - Open page A: onInit() -> onReady() -> onShow() - + - Open page B on page A: onHide() -> onDestroy() - + - Go back to page A from page B: onInit() -> onReady() -> onShow() - + - Exit page A: onHide() -> onDestroy() - + - Hide page A: onHide() - + - Show background page A on the foreground: onShow() - Application lifecycle APIs - | Name | Type| Parameter| Return Value| Description| Triggered When| - | -------- | -------- | -------- | -------- | -------- | -------- | - | onCreate | Function | N/A| N/A| Listens for application creation.| The application is created.| - | onDestroy | Function | N/A| N/A| Listens for application exit.| The application exits.| + | Name | Type | Parameter | Return Value | Description | Triggered When | + | --------- | -------- | ---- | ---- | ---- | --------- | + | onCreate | Function | N/A | N/A | Listens for application creation.| The application is created.| + | onDestroy | Function | N/A | N/A | Listens for application exit.| The application exits.| 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 35211ab166..8801033ff3 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 @@ -22,7 +22,7 @@ Since API version 9, this API is supported in ArkTS widgets. | Name | Type | Mandatory | Default Value | Description | | ------ | ------ | ---- | --------- | ---------------------------- | | offset | number | Yes | 0 | Relative position of the gradient stop along the gradient vector. The value ranges from 0 to 1.| -| color | string | Yes | '#ffffff' | Gradient color to set. | +| color | string | Yes | '#ffffff' | Gradient color to set. For details about the color notation, see the description of the string type in [ResourceColor](ts-types.md#resourcecolor). | **Example** 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 11394a20c8..8032455b78 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 @@ -12,9 +12,9 @@ Create a more gorgeous look for a component by applying a gradient color effect | Name | Type | Description | | -------------- | -------------------------------------------- | ----------------------------------- | -| linearGradient | {
angle?: number \| string,
direction?: [GradientDirection](ts-appendix-enums.md#gradientdirection),
colors: Array<[ColorStop](ts-basic-components-gauge.md#colorstop)>,
repeating?: boolean
} | Linear gradient.
- **angle**: start angle of the linear gradient. A positive value indicates a clockwise rotation from the origin, (0, 0).
Default value: **180**
- **direction**: direction of the linear gradient. It does not take effect when **angle** is set.
Default value: **GradientDirection.Bottom**
- **colors**: colors of the linear gradient.
- **repeating**: whether the colors are repeated.
Default value: **false**
Since API version 9, this API is supported in ArkTS widgets.| -| sweepGradient | {
center: Point,
start?: number \| string,
end?: number \| string,
rotation?: number\|string,
colors: Array<[ColorStop](ts-basic-components-gauge.md#colorstop)>,
repeating?: boolean
} | Sweep gradient, which can sweep around the specified center point in the 0–360 degree range. If the rotation angle exceeds the range, a monochrome color instead of a gradient will be drawn.
- **center**: center point of the sweep gradient, that is, the coordinates relative to the upper left corner of the current component.
- **start**: start point of the sweep gradient.
Default value: **0**
- **end**: end point of the sweep gradient.
Default value: **0**
- **rotation**: rotation angle of the sweep gradient.
Default value: **0**
- **colors**: colors of the sweep gradient.
- **repeating**: whether the colors are repeated.
Default value: **false**
Since API version 9, this API is supported in ArkTS widgets.
**NOTE**
A value less than 0 evaluates to the value **0**. A value greater than 360 evaluates to the value **1**.
When the data type of **start**, **end**, and **rotation** is string, the value **"90"** or **"90%"** is equivalent to **90**. | -| radialGradient | {
center: Point,
radius: number \| string,
colors: Array<[ColorStop](ts-basic-components-gauge.md#colorstop)>,
repeating?: boolean
} | Radial gradient.
- **center**: center point of the radial gradient, that is, the coordinates relative to the upper left corner of the current component.
- **radius**: radius of the radial gradient.
Value range: [0, +∞)
**NOTE**
A value less than 0 evaluates to the value **0**.
- **colors**: colors of the radial gradient.
- **repeating**: whether the colors are repeated.
Default value: **false**
Since API version 9, this API is supported in ArkTS widgets. | +| linearGradient | {
angle?: number \| string,
direction?: [GradientDirection](ts-appendix-enums.md#gradientdirection),
colors: Array<[ColorStop](ts-basic-components-gauge.md#colorstop)>,
repeating?: boolean
} | Linear gradient.
- **angle**: start angle of the linear gradient. A positive value indicates a clockwise rotation from the origin, (0, 0).
Default value: **180**
- **direction**: direction of the linear gradient. It does not take effect when **angle** is set.
Default value: **GradientDirection.Bottom**
- **colors**: colors of the linear gradient.
- **repeating**: whether the colors are repeated.
Default value: **false**
Since API version 9, this API is supported in ArkTS widgets.| +| sweepGradient | {
center: [Point](./ts-drawing-components-polygon.md#point),
start?: number \| string,
end?: number \| string,
rotation?: number\|string,
colors: Array<[ColorStop](ts-basic-components-gauge.md#colorstop)>,
repeating?: boolean
} | Sweep gradient, which can sweep around the specified center point in the 0–360 degree range. If the rotation angle exceeds the range, a monochrome color instead of a gradient will be drawn.
- **center**: center point of the sweep gradient, that is, the coordinates relative to the upper left corner of the current component.
- **start**: start point of the sweep gradient.
Default value: **0**
- **end**: end point of the sweep gradient.
Default value: **0**
- **rotation**: rotation angle of the sweep gradient.
Default value: **0**
- **colors**: colors of the sweep gradient.
- **repeating**: whether the colors are repeated.
Default value: **false**
Since API version 9, this API is supported in ArkTS widgets.
**NOTE**
A value less than 0 evaluates to the value **0**. A value greater than 360 evaluates to the value **1**.
When the data type of **start**, **end**, and **rotation** is string, the value **"90"** or **"90%"** is equivalent to **90**.| +| radialGradient | {
center: [Point](./ts-drawing-components-polygon.md#point),
radius: number \| string,
colors: Array<[ColorStop](ts-basic-components-gauge.md#colorstop)>,
repeating?: boolean
} | Radial gradient.
- **center**: center point of the radial gradient, that is, the coordinates relative to the upper left corner of the current component.
- **radius**: radius of the radial gradient.
Value range: [0, +∞)
**NOTE**
A value less than 0 evaluates to the value **0**.
- **colors**: colors of the radial gradient.
- **repeating**: whether the colors are repeated.
Default value: **false**
Since API version 9, this API is supported in ArkTS widgets.| ## Example diff --git a/en/application-dev/reference/js-service-widget-ui/js-service-widget-common-gradient.md b/en/application-dev/reference/js-service-widget-ui/js-service-widget-common-gradient.md index fbfe2c4db9..2c338d915e 100644 --- a/en/application-dev/reference/js-service-widget-ui/js-service-widget-common-gradient.md +++ b/en/application-dev/reference/js-service-widget-ui/js-service-widget-common-gradient.md @@ -33,54 +33,52 @@ background: repeating-linear-gradient(direction/angle, color, color, ...); The color can be specified in any of the following formats: \#ff0000, \#ffff0000, rgb(255, 0, 0), and rgba(255, 0, 0, 1). At least two colors must be specified. -- Parameters +**Parameters** - | Name | Type | Default Value | Mandatory | Description | - | --------- | ---------------------------------------- | ---------------------------- | ---- | ---------------------------------------- | - | direction | to <side-or-corner> <side-or-corner> = [left \| right] \|\| [top \| bottom] | to bottom (gradient from top to bottom)| No | Transition direction. For example, **to left** (gradient from right to left) or **to bottom right** (gradient from upper left corner to lower right corner).| - | angle | <deg> | 180deg | No | Transition direction, which is the angle between the gradient line and the y-axis (in the clockwise direction), with the geometric center of the element being the origin of coordinates and the horizontal axis being the x-axis.| - | color | <color> [<length>\|<percentage>] | - | Yes | Colors among which smooth transitions are rendered. | +| Name | Type | Default Value | Mandatory | Description | +| --------- | ---------------------------------------- | ---------------------------- | ---- | ---------------------------------------- | +| direction | to <side-or-corner> <side-or-corner> = [left \| right] \|\| [top \| bottom] | to bottom (gradient from top to bottom)| No | Transition direction. For example, **to left** (gradient from right to left) or **to bottom right** (gradient from upper left corner to lower right corner).| +| angle | <deg> | 180deg | No | Transition direction, which is the angle between the gradient line and the y-axis (in the clockwise direction), with the geometric center of the element being the origin of coordinates and the horizontal axis being the x-axis.| +| color | <color> [<length>\|<percentage>] | - | Yes | Colors among which smooth transitions are rendered. | -- Example +**Example** - 1. Gradient from top to bottom (default) +1. Gradient from top to bottom (default) - ```css - #gradient { - height: 300px; - width: 600px; - /* Gradient starts from red at the top to green at the bottom. */ - background: linear-gradient(red, #00ff00); - } - ``` + ```css + #gradient { + height: 300px; + width: 600px; + /* Gradient starts from red at the top to green at the bottom. */ + background: linear-gradient(red, #00ff00); + } + ``` - ![111](figures/111.PNG) + ![111](figures/111.PNG) - 2. Gradient at an angle of 45° +2. Gradient at an angle of 45° + ```css + /* Gradient at an angle of 45°, changing from red to green */ + background: linear-gradient(45deg, rgb(255, 0, 0),rgb(0, 255, 0)); + ``` - ```css - /* Gradient at an angle of 45°, changing from red to green */ - background: linear-gradient(45deg, rgb(255, 0, 0),rgb(0, 255, 0)); - ``` + ![222](figures/222.PNG) - ![222](figures/222.PNG) +3. Gradient from left to right - 3. Gradient from left to right + ```css + /* Gradient from left to right, which is available in the 270 px width between the left 90 px and the left 360 px (600*0.6) */ + background: linear-gradient(to right, rgb(255, 0, 0) 90px, rgb(0, 255, 0) 60%); + ``` - ```css - /* Gradient from left to right, which is available in the 270 px width between the left 90 px and the left 360 px (600*0.6) */ - background: linear-gradient(to right, rgb(255, 0, 0) 90px, rgb(0, 255, 0) 60%); - ``` + ![333](figures/333.PNG) +4. Repeating gradient - ![333](figures/333.PNG) + ```css + /* Repeating gradient from left to right, the area of which is 30 px (60 – 30) and the opacity is 0.5 */ + background: repeating-linear-gradient(to right, rgba(255, 255, 0, 1) 30vp,rgba(0, 0, 255, .5) 60vp); + ``` - 4. Repeating gradient - - ```css - /* Repeating gradient from left to right, the area of which is 30 px (60 – 30) and the opacity is 0.5 */ - background: repeating-linear-gradient(to right, rgba(255, 255, 0, 1) 30vp,rgba(0, 0, 255, .5) 60vp); - ``` - - ![444](figures/444.PNG) + ![444](figures/444.PNG) diff --git a/en/application-dev/ui/arkts-common-components-xcomponent.md b/en/application-dev/ui/arkts-common-components-xcomponent.md new file mode 100644 index 0000000000..b6bdb5633f --- /dev/null +++ b/en/application-dev/ui/arkts-common-components-xcomponent.md @@ -0,0 +1,302 @@ +# XComponent + + +As a drawing component, the \<[XComponent](../reference/arkui-ts/ts-basic-components-xcomponent.md)> is usually used to meet relatively complex drawing customization requirements, for example, display of a camera preview stream and drawing of a game image. + + +You can specify the **type** parameter to implement different features. Two options are mainly available for this parameter: **surface** and **component**. + + +With the **\** of the **surface** type, you can pass data to the surface independently owned by it to render the image. + + +With the **\** of the **component** type, you can dynamically load the displayed content. + + +## surface Type + +When the **\** is set to the **surface** type, you can write EGL/OpenGL ES and media data and display it on the **\**. + +You can also have the **\** laid out and rendered together with other components. + +The **\** has an independent surface, which provides a native window for you to create the EGL/OpenGL ES environment on the native (C/C++) side and use the standard OpenGL ES for development. + +In addition, media-related applications (such as videos and cameras) can write data to the surface provided by the **\** to present the corresponding image. + + +## Using EGL/OpenGL ES for Rendering + + +### Key Points of Native Code Development + +OpenHarmony applications use native APIs to implement interactions between JS and C/C++ code. This is also the case with the **\**. For details, see [Using N-APIs in Application Projects](../napi/napi-guidelines.md). + +The type of the file for processing the JS logic on the native side is .so. + +- Each module has a .so file. + +- The .so file is named in the format of lib{moduleName}.so. + + +In the scenario where the **\** is used for standard OpenGL ES development, the content of the **CMAKELists.txt** file is as follows: + + + +``` +cmake_minimum_required(VERSION 3.4.1) +project(XComponent) # Project name + +set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) +# Path for searching for header files +include_directories(${NATIVERENDER_ROOT_PATH} + ${NATIVERENDER_ROOT_PATH}/include + ) + +# Compile the target .so file. SHARED indicates the dynamic library. +add_library(nativerender SHARED + xxx.cpp + ) + +# Search for related libraries (including OpenGL ES libraries and NDK APIs provided by the ). +find_library( EGL-lib + EGL ) + +find_library( GLES-lib + GLESv3 ) + +find_library( libace-lib + ace_ndk.z ) + +# Dependencies required for compiling .so files +target_link_libraries(nativerender PUBLIC ${EGL-lib} ${GLES-lib} ${libace-lib} libace_napi.z.so libc++.a) +``` + + +### Registering the N-API Module + + +```c++ +static napi_value Init(napi_env env, napi_value exports) +{ + // Define the API exposed on the module. + napi_property_descriptor desc[] ={ + DECLARE_NAPI_FUNCTION("changeColor", PluginRender::NapiChangeColor), + }; + // You can mount the native method (PluginRender::NapiChangeColor) to exports through this API. exports is bound to a JS object at the JS layer through the JS engine. + NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); + return exports; +} + +static napi_module nativerenderModule = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_register_func = Init, // Specify the callback for when the corresponding module is loaded. + .nm_modname = "nativerender", // Specify the module name. For -related development, the name must be the same as the value of libraryname in the on ArkTS. + .nm_priv = ((void*)0), + .reserved = { 0 }, +}; + +extern "C" __attribute__((constructor)) void RegisterModule(void) +{ + // Register the SO module. + napi_module_register(&nativerenderModule);c +} +``` + + +### Parsing the NativeXComponent Instance + +**NativeXComponent** provides an instance at the native layer for the **\**, which can be used as a bridge for binding with the **\** at the JS layer. The NDK APIs provided by the **\** depend on this instance. For details about the NDK APIs, see [Native XComponent](../reference/native-apis/_o_h___native_x_component.md). + + +The **NativeXComponent** instance can be obtained by parsing the callback (that is, the **Init** function in [NAPI module registration](#registering-the-n-api-module)) when the module is loaded. + + + +```c++ +{ + // ... + napi_status status; + napi_value exportInstance = nullptr; + OH_NativeXComponent *nativeXComponent = nullptr; + // Parse the attribute of the wrapped NativeXComponent pointer. + status = napi_get_named_property(env, exports, OH_NATIVE_XCOMPONENT_OBJ, &exportInstance); + if (status != napi_ok) { + return false; + } + // Use the napi_unwrap API to parse the NativeXComponent instance pointer. + status = napi_unwrap(env, exportInstance, reinterpret_cast(&nativeXComponent)); + // ... +} +``` + + +### Registering XComponent Callback + +Based on the NativeXComponent pointer obtained by [parsing the NativeXComponent instance](#parsing-the-nativexcomponent-instance), perform callback registration through the **OH_NativeXComponent_RegisterCallback** API. + + + +```c++ +{ + ... + OH_NativeXComponent *nativeXComponent = nullptr; + // Parse the NativeXComponent instance. + + OH_NativeXComponent_Callback callback; + callback->OnSurfaceCreated = OnSurfaceCreatedCB; // Invoked when a surface is successfully created. You can obtain the handle to the native window from this event. + callback->OnSurfaceChanged = OnSurfaceChangedCB; // Invoked when the surface changes. You can obtain the native window handle and XComponent change information from this event. + callback->OnSurfaceDestroyed = OnSurfaceDestroyedCB; // Invoked when the surface is destroyed. You can release resources in this event. + callback->DispatchTouchEvent = DispatchTouchEventCB; // Invoked when a touch event occurs. You can obtain the touch event information from this event. + + OH_NativeXComponent_RegisterCallback(nativeXComponent, callback); + ... +} +``` + + +### Creating the EGL/OpenGL ES Environment + +In the registered **OnSurfaceCreated** callback, you can obtain the handle to the native window (which is essentially the surface independently owned by the **\**). Therefore, you can create the EGL/OpenGL ES environment for your application to start the development of the rendering logic. + + +```c++ +EGLCore* eglCore_; // EGLCore is a class that encapsulates OpenGL-related APIs. +uint64_t width_; +uint64_t height_; +void OnSurfaceCreatedCB(OH_NativeXComponent* component, void* window) +{ + int32_t ret = OH_NativeXComponent_GetXComponentSize(component, window, &width_, &height_); + if (ret === OH_NATIVEXCOMPONENT_RESULT_SUCCESS) { + eglCore_->GLContextInit(window, width_, height_); // Initialize the OpenGL environment. + } +} +``` + + +### ArkTS Syntax + +You can use the **\** to develop EGL/OpenGL ES rendering by using the following code on the ArkTS side: + + +```ts +XComponent({ id: 'xcomponentId1', type: 'surface', libraryname: 'nativerender' }) + .onLoad((context) => {}) + .onDestroy(() => {}) +``` + +- **id**: corresponds to an **\** and must be unique. Generally, you can use the **OH_NativeXComponent_GetXComponentId** API on the native side to obtain the corresponding ID and bind the corresponding **\**. + +- **libraryname**: name of the loaded module, which must be the same as the value of **nm_modname** used when the Napi module is registered on the native side. + + > **NOTE** + > + > An application loads modules to implement cross-language invoking in either of the following modes: + > + > 1. Use the **import** mode of the NAPI. + > + > ```ts + > import nativerender from "libnativerender.so" + > ``` + > + > 2. Use the **\**. + > + > While this mode also uses the NAPI mechanism as the **import** mode, it enables you to use the NDK APIs of the **\**, by having the **NativeXComponent** instance of the **\** exposed to the native layer of the application when the dynamic library is loaded. + +- **onLoad** event + - Trigger time: when the surface of the **\** is prepared. + - **context** parameter: where the native API exposed on the module is mounted. Its usage is similar to the usage of the **context2** instance obtained after the module is directly loaded using **import context2 from "libnativerender.so"**. + - Time sequence: When the **onLoad** event is subject to the surface. The following figure shows the time sequence of the **onLoad** event and the **OnSurfaceCreated** event on the native side. + + ![onLoad](figures/onLoad.png) + +- **onDestroy** event + + Trigger time: when the **\** is destroyed, in the same manner as that when an ArkUI component is destroyed. The following figure shows the time sequence of the **onDestroy** event and the **OnSurfaceDestroyed** event on the native side. + + ![onDestroy](figures/onDestroy.png) + + +### Writing Media Data + +The surface held by the **\** complies with the producer-consumer model. + +In OpenHarmony, components that comply with the producer design, such as the camera and video player, can write data to the surface held by the **\** and display the data through the **\**. + +![picture-1](figures/picture-1.png) + +You can bind the **\** to the **XComponentController** to obtain the surface ID (**surfaceId**, which uniquely identifies a surface) and send it to the corresponding component API. + + +```ts +@State surfaceId:string = ""; +mXComponentController: XComponentController = new XComponentController(); +XComponent({ id: '', type: 'surface', controller: this.mXComponentController }) + .onLoad(() => { + this.surfaceId = this.mXComponentController.getXComponentSurfaceId() + }) +``` + +For details about component APIs, see [AVPlayer](../reference/apis/js-apis-media.md#avplayer9) and [Camera](../reference/apis/js-apis-camera.md). + + +### component Type + +When the **\** is set to the **component** type, you can execute non-UI logic to dynamically load the displayed content. + + +>**NOTE** +> +> When **type** is set to **component**, the **\** functions as a container, where child components are laid out vertically. +> +> - Vertical alignment: [FlexAlign](../reference/arkui-ts/ts-appendix-enums.md#flexalign).Start +> +> - Horizontal alignment: [FlexAlign](../reference/arkui-ts/ts-appendix-enums.md#flexalign).Center +> +> The component does not respond to any events. +> +> Layout changes and event responses can be set by mounting child components. +> +> The non-UI logic written internally needs to be encapsulated in one or more functions. + + +### Example Scenario + + +```ts +@Builder +function addText(label: string): void { + Text(label) + .fontSize(40) +} + +@Entry +@Component +struct Index { + @State message: string = 'Hello XComponent' + @State messageCommon: string = 'Hello World' + build() { + Row() { + Column() { + XComponent({ id: 'xcomponentId-container', type: 'component' }) { + addText(this.message) + Divider() + .margin(4) + .strokeWidth(2) + .color('#F1F3F5') + .width("80%") + Column() { + Text(this.messageCommon) + .fontSize(30) + } + } + } + .width('100%') + } + .height('100%') + } +} +``` + +![en-us_image_0000001511900428](figures/en-us_image_0000001511900428.png) diff --git a/en/application-dev/ui/figures/en-us_image_0000001511900428.png b/en/application-dev/ui/figures/en-us_image_0000001511900428.png new file mode 100644 index 0000000000000000000000000000000000000000..53fb84e3c75c85055eb4e7a0797dc4600f9dd304 GIT binary patch literal 28059 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 literal 0 HcmV?d00001 diff --git a/en/application-dev/ui/figures/onDestroy.png b/en/application-dev/ui/figures/onDestroy.png new file mode 100644 index 0000000000000000000000000000000000000000..8615ef3b721eab8e90b7602ed20ac9ddd3cb2e07 GIT binary patch literal 25366 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 literal 0 HcmV?d00001 diff --git a/en/application-dev/ui/figures/onLoad.png b/en/application-dev/ui/figures/onLoad.png new file mode 100644 index 0000000000000000000000000000000000000000..69c39d25de8323e5b20d5324da322796d051b102 GIT binary patch literal 26121 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 AF8}}l literal 0 HcmV?d00001 diff --git a/en/application-dev/ui/figures/picture-1.png b/en/application-dev/ui/figures/picture-1.png new file mode 100644 index 0000000000000000000000000000000000000000..85e91bba345c1b0012d0c6f031baa7ee43ef867a GIT binary patch literal 40406 zcmX_o1yEaE*Dg}rDS_Zn9E!VJ(H3{N;_mKFgSAj7P~6?!CAhm4cXx*y-f#ZPOlEQj z?7hyGvmRMHk&5zCXvhS}P*6~4GSXj^p`c)5A@6q(;h~_QCCnM`As5ij%2Hxb~8P*t%g&qi>NYa|D0EoUewJgoN@^bqxxFcj2ZYnd;isvi0$dT?n(5|3!* z;XPf@?u{)ZPDDg*1Ef4FH*x&v4eO#5B4WBSVla+)*b!Ln^RDh|#0_T#XQ@Rp_V#C| z$EU}TpSw%%gVW-};=`1s3WFp!udQhA{YaYh2%Q)pYtRxbA9;;@LCv5G50Q^clkRUn zyM~q+Z|D1$yS4CYf;9_u(d;-`S=oWTtI4m-ZC~`7T{f=TZkK)(my{e7WcXzh^Shnj zoNx5}`OD{;tz*~J$JQQ}JOTG`+H&SprqkgkxazSL?Xu$7AHQn1hgecv%rjE1*FwwA z{)@|ILBy{k669GCr0_ z$otp6<#yhtLvuuHqTF|_`&T!eILUQ5BS}k3%Z0Y8Al;wJqA@AmOQE?AheZXKRp_Wj zE<}@`2QvI$|A0aG)AXecWJyeVLvU_KWet~A-gl?u8HUh3#Bc|9jcP`GgImh>&Jr5? z5%*!`pQ+9J!ua5d9Pc;6udp0hQH@sU$KJk;WcjtVZyZ@#*}4+bh|kFiYJJ#E?b)Lp zcslFI7(|GI&kPJG0P&Z`^%m7)M}#^n@k)AWpFf^$`qhgz zuFr=Q-KndG?Q%=J)eHjH_sJ_0YPOnyZRc@8yi2rC6coX+;Y3b|HwV+%Ky;|x(heicGkNdxVbYiv8gQJsH5hZz?ERR!|Hq?rfB*u>g?a~;lsZr@I zF(lGfK2gA=)OJsDXfF-?#@)_%do~|dzqDW_fb$%Wuo2?Ap0lIVQH_I&iG%Y#u0k*n zClGi#u31@w84Q5ezw(tcaz?HmIn6ahXk?Uj7){~SrKqW{?j}H;zc=p2dfoL- z>6S)u(#iUDSvEn0kuj^T%`#fUS`p9C56oFe zii_6g;-7@K3m(3>#n5nQ#yvMwgwPRqLUZ&I0ECgJj$D5Y=bUP|c<6q2M$p=Fnu-HZ zsoJu;aso5ANci1sCPc$8)Ta2^FL@OvJ*@j-qUWS*K}U0r0*y^%gvId|yzV?UuE@&$ zfu!&TSfoDZ&<5c>_wL-twbMbUas3s@nRGU_p+0SozQ<89t8jhunM~Vd#2W?s3=8_u5N+*^SG7Ho_2fo9Vf(rNW#S?^jybu&8Z!K1o z<9r8kEw{4pdSgv~uE4redzwPEI1IsS#eqeFdt_Gh0IO0mSc{1BS*CB-!Rw}`k&3_> zU1BK?BhGs|?NYTksP+m@ki8ky-s3MU$lALmfLA;aRplFdcDmUKswWT^J+!wrsnEOc zM+y~9drOZK*UD=Y_L_Kz;<{ieREd)l{o=nAkVQuLg%+e1{X9R=%=k|(l-1w{E4Y9K z9WfDp-uLM?ueG(6ZvzDBZPu-2hpY%}0h)*clJ&tB2xJAS0BJ)5RpjSSt=$LYh#hTP z*O2W;KO_F-L<4(_&cNMuqcB5Oh_qymqo_8TZWN7V5Xlc&F>|yYU8tR%9h(aC(G<1* z3cBqe)Vz2W4_7O{{Zgh8I7L-e9Jh+1qKz?D)HJa!n2xts{Yw9AyeIbyF>FZUQ!s#Rj8uoh~G}1%9Qr#jG1I7hmH}PUY>a zTn;t~R}1~86$mW$fnQhj5TSp58qhYq-&CbVp3(gA!{KZ*^7}_NqE_g-xV7;CO2XFr zfhyYE*2!B36L6mY8tAUqWB-t6?EUS=&-2D16CKOx#7ZvbL#YwqSZH&A)o>~`%jh|riT(44sw6VXZzkRh9lIP zsDIw>%L*sa-fPdVPEV<9=!o{P!#(`HT(`)$+$JqYGq0MTRKHV-b-ZI*^ zfD0_`DA}+*q4hEWo1Q(|6^zhON@mg(=I~UxdYM;-#WZj{ggh*&jCS!!VoO{n9znvk z{m-)y23&RfuJvQx#|`hG4!YelQWqVk%*SFyJJXI?D=KaiOKq3bx$IB}(L>zJe6nn_ zT9K360eCDsNtAy-aI=g`hApLx&P}n#3meELLAg33uE9*12&&Mu(hWvXi6mb_p;c$2 z!u@J%+{o!SUl(i4uax>j@A0!(n7@gXC^$STc#F2d6``Pa8q&NV0Z7hsF_ofw8%e}P zH&LK740hlD679vZpTP={3t4gSjZFgF&z(2%fiT?xbkB;0g`FOTfR@>i@>wOlhNB>m zMm=8di$$%6xi>!JygueHWY1nKsSv`9ae=FE&08`2-G0gNXzMEre%a$yB-6hXgk+vh zTbRRpU^I3sZDoq$CM8BbQ}S_EG#?hP@3kpMvzv{qqh^v~G`>C_9bAnI7bxXOP71$X zV3a!)4iv@}{BuIVF{N15)c{t8;864><8)DDDwe=w|p>R>NQO(#_JG^R58Bohi20VXv-@$D9 z8X*wHbEi(5Rs6gnTeJC#)UL6=C}wPA^^S~*Xpzz76ln-~Yp)|85>I!v7`&7Wmu-xV zN*01#L#tRhie%yP&k-A@&zteci;otSVu$K04nInQ^re-#&9@pYr}NJ}J<2O#%CShw z8o=if7yu^|Pu#Nc(tJ+*#M;kwKX>hz&13X5hKO<&>@8VuG>95YliTmh0v;~XV4BUp z;QqaIWozRVG*APY4vqjId6B#82+k)CL4Yu3*C*5{rr$uqn!VV=r@>Lzy;Xf+PPZ|q zF2X)Yk}>zSivuK_NunE)bJ0IHu?I#*%EaK&#+}-5nJ*KNq~AxjB!bGjG9j{6x28>eqfA-xL+IIzWtEHLmt^^>;42%+#82c%Rz!=F%1diGCzNk50A>8pfEKl; zx=$5-fGMq}=quUw30Vw3HKpqnuahu3A%}{c{BGcCx1J2xBO$fjAgie2_+YvCU`pSz zmeSYVz_@fm86{F!)3RR`Q6=yXaB;>P$rtYpP4O2sx|VcJZ9h@hcRWLU#* zN2&JhG9?-nyVm=IMm=E{49+!H$)9x(?81S|8S1phT$tH96DVDSha?&^F$Q$`OmO}q^)H+weH^C^=U>Z@gi5m>=0OX2Mv($$6 zp6jZHjn!Q4lfq6HWnwcd@D>j37II3I)EU*~*8EW>{|H2Dt6r5yct~`uEsoPn8$re27MG#tS2%vp`2iPC>ZkP-)ACt^iE?IK4GS=b~=^iBUIX&%+m5D1y}1K;Y2 z9LZ38Dv!Hp$53o#|LGgG1hb1Qk2^NkI+=x zs?O&p+JjVCVuACXoG^)XU07SlV2J|G{sJEA%5CfO?cQSZ?zNYNy1{h>!fbLuV+iZE-#DXJsuz)U*J$=KX6h zp}nTvH);^bYZg`1WdiAFR})an!iJpvLw=vN$_s!*NE3FBlKq3LD9%fc1e4{Fvo}8^ z8ZJ*vlC(^p95xWj{&(<|=hd!bwwEKV>d02CaQgUUQqdV}dX6VNtjK(+mUxnZAMaft z;Y)Pscv~H$*T;y+(3xP;+XWMh@{q;F#p{!XwaXiP^RzDft_N5QfzG{ThmgOBaooPl z^g93zU98);r?t1SU!e87%^%Fw{F^{wKY?gM?wB#byOnd=thsE+L!N>f;B>t|nFh=k zH6EgbuNQ)l2VGv)Yy@w7|L2STR=;iQiZ-y32&$-fXz#W&6aYKNN9b`s=Ukdx*Mw2} za|p6~NCuDNrzfo)suV~%^6kwPgDJF0#*U1FM~RGrO>-XO<*;4i5L&CZB|MuCvX!_F z%CGd|Be5AM>)G_{b^YhLcX0!`{jvTcl>*sNoBoJJspyLvq~VC6klH%_F(o5MbYb7} z*d<~qUttak`qH_W2-wr}`MX-`_rYW>i7V?;5PnG@?H*#reGj1a2zhbt{f(x&H0n_l z+~@&UIJgnyNVs~4G9TyfYbPli3KBY0l}4@N+utky{gp-P7aqgE=jDBEOYXnu*^JyJ z?rvP6Ne18nA_d0*v|*l-oEGV(#IxIer%~`uY8~Nk_uafK$KL93xFNK!Uo;dA7dKp| zlK$&)p#S%`-3_C%(W6~ZX`-7m@E?3>;sHuwv!$#K{r77n`%oL(F9l-sC`||O!^k*h z&W2bDh6kiPf+mm3Ila+2!_gKpp}kH+noTI4dD$6^3~|(w z;U)!NOP+hiv2iax>}K^B`l?Eg=#a9TeQTjuiX*Iz16v|IBJ?RS+t`;D0$=T)C+jjC zWnoXJjTFf%k~sqLS`B`+dv`spxgG0YzxK~kwXO@^n_6^vpO-rp4^_ zrDL=D2rzQwtA#HH{r1{k3|Ylvpy;t(<^dPxk5BmSf>4exGnzLWSPn(81c~hua8n$+ z7<-zENaI012eJ{NzZ^)$S|kJlO{HitxEa5dXL?J0pX^NROGui$2VdAit4f=A*5Pq! zlS8+$L;JC`vHea*&7+Zn20K%L0LmIrs!@f$Gxy>sEA!%d&{hv25)F zFF~fIdIreEwilWc#9Bq+aWsf!6M_2MeV^toxs}5ssVR!%%0k`llxjTe<;RoT9}@Mx zUrkkIoMdw@-g?ciM8aunlZ$>fjI~xg>->SH>bhd)?pwhclVAN0`C+@d==ZY6msF*q zxR!J_n+>JD8rY^6EGZ!kz)&L~Vlty={=-?gaDT8FJiEyz z-KQD`zML3QVHxQqA%mV*d*c{q6BBt~@ycB~2Wc{hNc#LoIp@!PldFHGqzn<#%B2(8 zR1J=dlqR+V^2F-JpM6E(U3FBa3~Q7rA!{z1B8DeOgHjT%dj?DM%X%j)#x@2JN@vta z&E#`k^xyW|f8O>>t)A>p8$_hsl@arL?!*dX)15z8yz&p`%5)g7jB+8cE9Ufv?7_eI z#adqBd*r!@>%?dZ{pm-7i3&a65K{f&OgpvCrgnr1BSAE{38|G>T%sBS@dV^QA|iPq zx5ol45%r}yMSknxr)qa*PaxgJr0LE-p2-liL2bmGClEMT)(Ft*7B9>R^^3y z0x;!N^B#eMv4&CWt~YzAkAg6v{$#0&?KrZKJ@I*p8y2ncH%JHFFFCL1Dcs5 zB)SQ6nh&LrR3thX7uFl2Pve{T?aBS0R)LuD1S)*;eju$ni=7}IU9Om$1IMk>mWKMr zp63yOGB+&r){!$iXyaNH4-`Ioy5wXf9eTW8SRrQo&T*M^2S`!+iQS1}#U@Qop=xc7I`^&*rY$>OZc$>{ zx+Z8lf$pWiVdN(IVNs16nF2it4>&H=qPS7Auo3&kYAV$b*(aZ8RsbH}Rnk!?p8h~$ zng83X&j*NzEhGekKV0$ACnXp{KWB4-{4ls;>}9D;vZKy*Vhsdf`yZb~+m@3n zL2Hz0_xL`FfjCNT^Wzg6~?`B3;bx; zR}^!L72ck5$t@^w4tDk4iX#_asu!zwm&_4cT77k(!iiHI_+8lqaI%dFCIKdj=ggnI zvf+M+hhPp;$;YjM`?}TS)Wx--(c_BMARF1xwAQ>RJK~=*I>@CRAUM&PqPYFDR^wfk z=I`Kj^}Q$Sy?NP|0~gHEUBb^g@vm-@kn;D%VqdD(VF-bkh}lF5W`RZL(aBkxf&*Pkw~+5Ywc!@@4!5tN~LI3>JBuJe}>ELOIer6l%h&r1_pB? zKoSD5s~h07+V>kmi7{~7j;n|7Exxpkn?SI`MSB{Pq)w9B;z2T#42Svb*aTXTMb;ny z8^w1lT`+ae02p3*)P&0u-tt-%y+^=jSDJaGF3hseF|pyudJ@Iu9>>XKo;({RRf2r+ z9HP5vEAW{X~_2=vPq&$6*3+)O1=MoE!Cq%0pEr47~2mSXrS@Bbk-v1ldl2U#{2noD4 zf{1pSe4zq<<|XX(0H>>HS*c=SqP85ou^X(fJoAq1X;)ao+=MS#GF3A*lcSP>R0#7j z2JdLCKrBd@(mwZEalk({DQ_S?2!@(OAld5#l09*Je0Mz=Wg}2p zRDgmUm2w8rE9=C~o6%iBLrDpXx&QU~YFtH4O^wli1;PJYIULAOj@-?w>zItlG1?{2 z`>ZX=`!YV}fg}sk!1H?pyMyw{EP>_ChxC55jnMBTUSTsVu$TRC?*oe(mL%GfVVXlX z(s3BB8x$B9j4tBQXp+u|`Z=H1IErE_#M{-C^Q37noe057Oz!=&2S8Mq(!{i4CRE~FL5PU#%NTmq$DfBBu{MQr>Js1z#gwosnjbt$Je>*jAkLF{U+V72T5in`e z;abeQCSXiWO^Jj-yqDq5wX5WByKENrIIwgP?v$#8l)`arWQyVb_dTTd1oR4o(x1bi z^By3yuaY#KFl?{)qr&!4s$FxWyIL?`uOL}>>-E&v<8W(|{;U;rh%m3ehYYVw_!X%B z!i&}^Vq7BJNZtw`W^fpIyTFF2gV>FB0X={Lsv1L>>fya@?^O>9cvxJf=o3NSBt|kN zGm5C>!xZ{cRa8DnT#S~{4~4TNia^|}^K~qZm)*uC0AeYGuHLQr`!_>+ZL)znHb?CNE=+08H_8 z@XDBHn6QgsGZ`1^e#C*sWN;Vgta063IseV4F>GXgRc#cuEFH5v5LaD;t2s~6dfJGY z+I?5rsQ^uxNJKtKZc^cNDoEA;^GNs6eCd&kDDPzodavGwim@!pzNtVp@-wr&FOf0>bK)xE+b|o^OyH zJ$gY>kmtx7)qa?OdS3Cp>e2(s;9vIm%I3lg-ZI+v;3Eb^jFEnvnD$*?S6gN+R|-o# z?T!t>=ri?9gAW&tn5l~OKWdZoH2UbMoj1?@w3Fmc3tzck+RtCeBm_F47)b4_+xv;x zA-~Es6!J~quY0h@1$jvQLZ!q_SN2Ei;$Nn_-c%X$xhqIpGg1_<|mGHgb!0nh6dG$S&zVu!hlIH8_ z?Vb=)(EB;BmLw$MFNpd9FST64X}U6z%0*=F@Ac`3zz{RG*1^`ZQu%lvvA`6Qy2owoBhPy6D=(*^u%R*~(eNkJB`90ms^kwO~dvG|}y_tuaDl zU-)raZ^qUSIx$g1^dHVhZeo`u2w5E-dtO`41j`jIp~A5Rl|oU7fVQH_q(7`&?0v-G zmVXLQ2IUfXZSH;k*L)?lSq1g`G!$&4ma)2jPWL`G7gl|hM8<+w z0n8O?N;{bJ&*VZ^p_TBJAc2|tu&^qe2@eBoq_;x_z9iftZpMO8o+2#Cs?Z*p`3`z^ zu0O+8*3j(GI)@}21FYpgZs{K2obDXh`ek`8NbS*#{=@Irz$4H_(`2bgE-1$-qqYjf zbofVh&;QrAH{$AqAz~q?!PnU6Pjm3tH=@krZ1kSP*y_~TA48l@li3Ho|ocEv>t=def^zh!C0{J{4-GH-mG?=sOzLN9d@ z4N*Sp{Wga+wFz@(CRBNf0q8OHEOBT}zBjWP8&~dYzDfEX8=>c%W|12U4fbo=r~SY(7p7#BGBvD?_~|ZFGbjuFC!tI!jZIPM_(@Vp z^f!y1ZdkTQhB|Bg!GZ72zhzetT-~!HN6FWaR6bX$djd&$LfI0J=+g+&D8QbFSxsOx zT&fM3`|rew#p%asyi~l&aKhaN=dqkUjc*01e#Eo8$k;tbtt2!LHHq4(#R)5=f&(2F z5|J<+&+s$kU0+oE}!YY5&@eS8HesQPejuf4KNy6ohy_|mPFI61{J+apfmY)geM zU*dSqv`hudQ@bq(!(6HI(W5osnG&QL2?-^puWl7&%xS!nuqh-1YNfXw)9wBmYT(k6 zNcRB#>UGm3j}OjV~<+9Qu+y%Z_Z)ujw*{Q!;*gX9k$e z5L%UpeNGTpX;4>^Y?8viyEPXzu_a3t1M+Pv81&q4L@1c#v;gWpan_W9D1cmX7{bpi z74bZFD?C{&`9wSpWDp(NJxlm)!9?x%U!gxb-!P)bvI_clrsh$i7CpcW*`{PwKUFF1 z7_+$IM#)i4bO@waY{>{t?Q#udI`|fPbCjoz?JbU^T1I@vJ8j= z!E^>QF?A1lE`AvOfVzJ)jeIb2O6T&6E%Ph;v5kOE%PPAzGBy~Ng18d9{a-&4&q?j{ zy#>0k*$7bIkU;VZfa6E4&q;ym99f+&kQ}!g|B@uU>+yMsWef>@!)2)~z``SS(qWA0Fi!Unrl zS?`lNJcwThdM9B|;=UJsc&&W?UsbDs(t(+PO3G3Bw?Ao8{zn<272g;$Ar25NyKKhE zBwHMmS>$J}>X18=6mENx79-P_HUBrk)@ngi)Jz)heQ%@QN=qU>X;3~J zH0gEX_8ie0>EMsc=-7}9Es z-jvHY`|lBuNrM?x^kZRagg4Zkt1uYfQw#tmA#R2Iv0upl&|+zPMhR*N4GOt{nivLE zfmy!&z+*-y{7f`orqhp%ox0$9y7Fh4vZ??(;7JMu?6P||raT0gZk@XYStbT3CUT@O zgu0VIDY*ahq_KBFFmx6=UJj{LjNjiE6*By6v~N`U9v~7_1GC71shyX%8T84#C;#f5 z30K)DlAWl{ms*_fpAq50Uy{$Y&@@9M%^}bPaR~`GZ)O7EJ9V&9zFah1AyG?SkTPV0 zuCLj5B9ag0{)kWVaj(q)R(Uypnh9* z5`*C@0cTwEi=sI5{S;2}mW5mdq(eTI>{*!{;VMG*xc#iK$KZH&rZ8JBFYr;=bEa5y ziL<3}>7l7E?~oO*PzYP}qz+J;qPELw05L@^f3l*zuX6MP`lf7e39}cn z@rZ$p552Evy+kQ>WocH&Zpa>gIlg;t*~TgQXp07c-K0;-=Lu#l21H=^n67*kdphP3* zEmi`Q)*6*sP`5dn^;sgU4V;LPSxiTa=>7z>=$ynkg5tz5i2PhKlV( zVW`hLA$iG$lsDf!Mb?7Zg0N=&cn%w(avb}b!Y=%vN|K-)*z>2cqMfC<;^?UC{!woh zIX1a?j;kKlcQ8gN^@?Dp%I`$KDxS#5JJ?tcTK2QNCe*VPfJ1oqxn97xD{YTtw)}r%nV>UzTBs>}0#4!Xpj^~w2^Nm*v7Hv2r7R8L{i zc>Q7zUI!O0B9x zqYUfkY4!7RSBE~i`iJgiY=eG6j~qjdiTFvh7yf5>c_x?&6E^*^p$0@}+ZRRUP*$Jr3ii&7!A*c^eE zq2VJ{2j(L$PHSS+&KGELjKT`ZCbje0DwgLVs2N9r&JQvt#5d!I9MET{R z(b^`QwUSNo6#^me`+uF?^19~t51%vm2l5F9h$Wc3tZbN81wWJ%5w*bM}W zV489aiU`$zuWs&>Lci(HTue6{xeKd4=3$8|w$aOSW9Bj@hn>X%W2+y`8^JxS$aZN9 zl>E8DAK+X>Z&Lw52{pN8 z7&Wp8IAde7s&>K%K;X@%AIS!UpK zyg>N^zVtEvl(!?RAh%Gs@{iz>GM+S9(JFfO8RnZ0hogZ!`WO}NF@?72|Y!@3bo+PO6frZx;JGCN8XnvNa| zLLXuS4_v|@O~9nJyC>r82OCOSuJ^s;i`U&DL|&pV8`iHn7iE^7ty(|h&&G!enEe#fN)9qPBHPPHUGYngFV1p1(l`NNG{sd(k zm5ik>SEQrm-?fb44~URB&ETi*`^}zvLRwyf`+go1puLbESpzjjtYdJ%J`H^|Ttcke z-_?}zRtNdV9cd){yt3uEi&yH7Kk6g_GBu3nEUcPf7+K>2^TM_Kj8p$pFd|yy37#)f zge#yM4-_P?NV$X%Ml%l8S$6sD_$<>-4HaA%+^1$V%4xZ`_G%xRaZ9HvdXUwl)yJ*! z|I;~6QF8$k2T(bP1ha}NMkDUeE>kvSOP30XExQZ@$zAlm>;RaKvp!eqr5>LTL7EiC zuuVCoA?0a;Ah4-TJ{H~45@$GrUzI1;i^*vrk76A9&6rYHo*BE+ZNrx)-^ig|+6MYh z3P?)o8as30g%+jN0VVOBMKj9bD9;8`lZq4OXtHGt~s|K!Lznf92X$NCR z7O?P;;8nhWhJ%Nwje>zz~zk2Eem1#ko zH;w9nWF(W8J41=B9woEOdbBo-FtG5b>p3Erv4&fPc-8=96A2Me4p}-mSZRU!LoW~V zCO(o05#drc)Oh%dUTHU!g*r=1L&E+(OzCroF%jHFYzRw?MNe^I;d;&_TFn<5EX71c{fVwKf{m!$Vmfb2uHd1dAvTj-c7Z?>r8LG1qx z&bM$>(8BA}8L8K2*I{kc!zpf`EktcyywH;`3$u4pS4PQmq1jq1Oh_EPdUVQ)!MKd#MLaQ9dka)?K-FNBwT{{2kG(?wH@y;DzZz}v9liA03 zg3-1juqYZMGruM=U0?K*Iuq``YqUm&L>Gg0ez&*M|1H#b7BH5i^+KhQ%Sqk*R4|6n z05Xc?&=3zU4o;iX0ijUXJQ|Dz5BMtp>4&!EVBCsUbsO4f1bhME z-0RQl|8|CxrXd}T8%??)*6FCK_DT`}*}fz0A-(dEMqmUujtmYK-K?A>{{K+{5u+lY z;^SnJ)aOKRy;lQZpoSu-!K83u)XAJ5w?oWG=Bn{!@9DA+^U z#z1y>&;l7`IuLbTXVo^~(AME8LiCT{3lUc*^xc;%3mp4VgxW5&o*?7uv@n{=?aWU$ zLlm~3X^U+N+v7gQyEg%iK-3v_SJv=vv(Yes8KQ36NpbALf*n_zT?NLl_E%fD{rxE9 zU9j~ag4G5aGXsN(Nntc^45VN;vj?3Ybh~UX%m=XxdP-a=*7i-g^Jn#uA{=pg*|CRs zf*ze`_Tf!TiGIWS6Jg=@HldePIC9*=A6d)Qw6xEKq>drPWV%hCvV`p4KU_~MJoK~t zLpk)>f5snQ=7(mD3G$Ha#_zxFPDvq9uThK!3R?oGjA)hsQty?WH4aM!@COYAsA-6@hK0G4O8s_xhjWxtcIv=@(Y#T(x+2lC+WjE9bm%vh6P2-g znV2ez_b{jiFW_x4p{XrUL;c@WL@e+KwK{wP@KvRg{r+HmM)`ObW$9Dv^)DGqw#+AS z2pjbmy$%q_B}rD!DQ+i(!tFciw}f_)yehVlobOP#B4+fUFYZ@5h2C=DFl6|9j8daZ z^~MIxUJ&}f<@Jdx27_)Z*_MH(MVSUYqfJlcMQvJTnA#ayQ_$X~2vo<#6)DmYOjHgY z2K=`cIEH!Z&3k`2hG043ji|mQY7(YM0~s{)Y$Z&IP9Pfz35qoacbt&HDRt}7I#Tz~ zP-Vyxbn1|17ySvJ>bN2cXhjP)Z&YdG6ia36-J%N{(~fyBvv1uN4TcZZ4eI2ALCY$O z&RMQ|N{ikKJ4$pMK_f0j%y*MnO+w0~6E5yAwo=WBs`Rt9sw9l> zKOudjJ7kBF5E(Wsei4@G`>6R(oEv@qE*{(k*SA)>PXhw@%d5tu%k5jk-2PCzXNX)uLCf% zIe&$`KYH+Ry>aZrcbBTl71!_g`-{1YLf#F&Ea&5A(6?Mw7NL%?$x%&ouMORtRQMsC zmaN5W2nww??9`Dkcvb(Vwc}Q-1V2@x&toT%)Fe;$K8%&0+VpX>7Q8|Pb*qdeTtE~F zxm-e$TM;ZQaRgxRkvnTDD;Fu<8{h2I=*%#;e$wW#kC{Co(Oa8;Y6XYoe*9vva&(nU zWJ|6?%4yWuoZuimX*b)T1XfkZA-9t$j3~qjsKNH~@#1NJd5{T&2S_(M795wYl7%AX--s zTXjuV&|6pDiKmx`3xOpjV0NvL1rmFRo=v@DFX~|gBA{P zq#BRBIS-%X!wjE$xWXn+9i}gW`9Kdf1VdnH2%wLY$6;tLwNUaioFHpFXvfmxurtBW z@K$YlLn$@50Sjy3m*1bCb|*B^M4mu6qlAEa{U#~7G--qdKP-! z8LKsdv9~?_b4K=({)`mi4js%GfoM!*(t}GV1?4ZINbNO_ONPA_p*p5TZoH(2w&AG)4P@8xO<^~Jyn-%F}t6i>nE zDSSKTkRZBw(5c+#0<_y^ExfP2XKN62hcxFVR7{-rpUo=@yuln7l5K1mkd7^8T$CGnw1FWMepsdb>1&$ z`CQwFo`W4wOKQvZ=_tZi?OsZw6j%Hzei)*7qY=q}Wm~;Ii}ZAPxU;<8UeI0A3K?Sv z1Q^>A*|$IJo^yf-4nx}0-@Tkxx?>2?VR^&CkEVdy31VSUl?={*gX(%*IbsI|T#$s! zvNUh`5hpc?Q!{~bz9xFBHM7x=szzr9`AJS#dBjX&NTIzv*!cX}ATYH+?XQ$wjw<#! zDF^eT1-!mkH}Jmx{+?qF-kCh#9LedUy9^I`>A$ffJS;a0UknE-&-lg+JT~C|k?My} z8yPCzKzyA~Ag(l?@!??;ilS*KqtBwg#3)gYAiS*zs$q}8$`7nDWh~2k)*(^uk6ZH|q1qh^o+_l04Jpq!i=B?#tH3X;HuVzRoF1m3 z+0LFi5aBu&pA*UVMK-$f8F2#|xTbv24!t+RYF+)rPI8yz!iPzf3&g=uBF^EL3xa-+ z*Yn2Bxf%qk!t|+>ju^!>mQuyk zMgu}AT8TnMV)%Z|>Ot_uKe(;^(K_e-9<(c*y$0)d3arOtVmLytE$+h8)>~$U5=)*^ zhXAqWwq0=x*LvjwO=Z=(ZLMf70dnj30)dGISfh$|>}rkGYV>JIJ_mXc`L3T*%DeOY zGFP65&`%XN5>k-~HQhe0 zvbcv1x3)!- zsDiQQBO@TU&En8(I{^t!fv`pzl*0;A;1mO*DF4jtIoRD0LeEKM<2lX`IkV%opBM$OG}3jC9xR^ZZz6?V&AB=^ zciRoXo-yRC^w=SmT=v`5UG5|Ovq!~qs_~L!51a#jXlGTRi#0X99#B|xS)Taz=%bI6 zmju^=yTlLKfLXhSAB@foOF@D&OFUMyh&^FB=)vb?D~>a^Kg=NPr|^uEK#ErO{^&@v zS_X`TYL^!BP#q~=vWEi>6R`$Lv76ad^uQ`LjP!r5xTkZt>YSq$C< zD&thiMKgYw07vN1ml-6x9y^Ld&1-?|0<-FXLE60NFR=#jSv>x-Tu2hZLXm)97 zsXA*~nZ)+&iJiySb!i}1jP4RlAQ`HUpZ$RA)Yo5^p4wY_JvA2AM5utMFvsf$pZ630 z7eA2pAm0~|1<}7_pZ$axbsOVuSDY2pZ!AzkS{4^FoyQJag}89R$MyjI7ET;I)TOb% z{0Gwt!nTh1k&ZZspL(lZ_+Q+egcyb(Ce-A_>`sC*!4t{3g|GS>gsQk~M$$Ox_LKSx zkOt<&3Z+2wkP3VxSZFc?R@?UV+oky^QmE~?mPl_D7(C#LJ;ff%&C%={$>VS#^KE;RY2BdQkX&6eB?(W7Qr9omqO1e8FhZdD?kS-ArB$XDVQvs14Kw=1K z_^$DN_uk)s&(8;jd+xff^IXSTrvfPTU-5jkKNyt*fogQ{@m2M0+To*)pBuA8xMtXGET7yOJT+Vr`}4XqpIXA`49n`tA?o1C zz`ldY68%YntreX1HVwlD>B6^|FYjX8c1IBfx~QmN?}F1zN2z;%CG1sLK_oiX&1vUt zoqtb|>k>HehU-jK`jPNclsLq4)#x7iHC($_P*Io|2)rrlr~=tf=Jx7HoMZDLSOQrV$;5Zv@sB4tAHyeN~uxJGl1 z-$q7YP50N(uXbiY3Wh0XWMn)BMRn$YWm3~+lq+AhtuuU&DpmREWcaSru(A-i`Yh?7^|h&G>EFh_5^_AQ z`r|h`A|2i0Pd*|PMF!5_dHeP)cLEDxoJb-#3L4sH7B^Sto&ae+5br7+hR8)j-mx8i z0=&SXHmz!)SrSw_Q??QPJ(gA6C=#5b+(iqzWD-VJ)<`ID)X9j-c<8YAX*0r^-aK6p z@>XP(mgP_5Ipay#4BNL`>FVGXPCP3zueVY6z1Cn8ZD5c&nbHX)zH>G#x-^C|>b4;J zXg}BA!L|p^0?*6cCJz&)pEw1?X(MOy|fFlqC(qxDO%Kd^G+1Qeyd@pm1JyoxBz@CBk}Jevi$2{ownA*KGLpHyf5qvnWofN=^;KFeb`D0>MDw1`hN-eVWj9%HoDguWm`FV zAVpL6DeM~hdDB}4+d${zO?P5Mvurb;sRLOk&8I^Lddno{N?YfD56~`J`pn$=Ec3;Y z0lVi&G=crbU;IHf5@(Bzqh{Y7iz5afs|eC_lRVx3$nT6j^-@9tZ{3HSxc%KiQGeYV z`gcs`Gd6nTsvh`=}DP{^4IcZ64Tg)$-3s=&Rx^o{zSfpq74y;OZsod{o#UGNR9q zc~&n0ssW>i79OwoQ>cy?--t0sqCOy;d7?n7tvE&i@?NIBfI~3W0nt4A2El92I?2Sa z``(~*W8!h%{>w2j%VAY2VJcCl-ydi+bV3i(x9)O+;u}|jEmLrWbT{cX>)lhzziP!H zNuvcZv~|J}Nr{e1;?Ur;<;E!}Aw8juPUz){W40k^27&K6PPdA9R`p48AlfM?Ap*^bRs68T7;DF|MyQ@ z(N$B~M-y(aIjlyAPt!Ed@X_{z_5o7dLO+o&k%lkPIEH3*QUx+NZ3jt!ZHNEo8_)EO z<5F=tEzk%gs-!2d#4}B?b#0A$Ln?i;Uh%ok-dkmZ;BG5(B@}6+zqGq!Eu^c?pQsW- zC3V(qVeIu&$&zpwbU+}UT0*m8mcB`&J1Ye;cH!|oVl*ktp_-2E_tM8*m)peqNH-5= zH(MUk+5e{N(<#OI-SU4&%`et=R28`Wx$O0)^_ka6IIk{QXg2K}J%ngD8f0JkPclGkd0I8VSS(yzz41-iP`4*OUx7 zgTI}=RhNjCtRpS&Y9b#FQJ+0e2cEZVPZ#LIx<>-Op3r7hzIJ8k zPY#XWh6>RC5W5KMFmAwSaiqtvq;u$IU_89Q5PC-4W7YDfkkh|(e82qfYhIbkESVAQ zIZto9Rd~A#0Rh1lKq(7YlBC}F0i^s%ZyXb7{K)^|@E#|4dx$8^Ek8zPGaKi^HbsO4 zGX-&4H|1?Kq>)ypoquOCnV6;J1td#0oh4=vBa9YtePQ+3|90}Qe+QR^X>^GkLB`-Umv zhBtvg4{ru>_xsUzToZlySYHBG^3M$5s{rsEF0jEmj^`<~+RQ)t*oS1aFkEI%J}4~} zxffD!YNZ5OrJ@C2%}`ITw_?2F4Z2~%+GbwJ146fp$-EmS!1Y?4qI_)5En5#VWkY17 z!RqDNM{PS6$J;Rw^07s{UI(s10I7h$^EwOS$Jzn zNmQC;80nP#^^WO&{-9)^UsCF5Rwy8^D#$rTv5gBz!qksla@P{hsJz z#8}b|?aKJWp2_4avP7C?zf(0LcXszHlD$>>pW6VU&(dc`X>*U9JTe7(0FY9ne#nCF8V>q4n+;9lqSvg?z zk(zUyb&-C8!brxeW|o1v@&{}~P}Pa{Y>nx8J%v;37qDfL2OFItu)9js%MOjsr+6@K07+GVWup8PAYC#*<1#l)9T9<&%_AVm>$WZMwA?HKp%^uh} z{3vFV)`33}NuZ`}lD3+Et3F&h)S+1f>NGYlL!V}K2Ml$=vsLB##1AL%M1v~fA535& zAWNjCrf%>*d1(wn(|{ALep%t`7jAa;nC_IcG>`KyAAUG~I=D8*0F(x1w7DwN7&LyB#9`1+?k|1!N8c+LEFrC}x(ZT_ z);m{kt4Sl}%jZLbZ;}R3&#m;n@kdgU@s#mYHH}qK=-r>k7k%^2f2vv0HGgVh*rMt7 zypMsjqiZ5>LB#p>dM+i2AAfItPSac%zfe6E%mxqf^j&3hq{Tp5&@FbLk+TcWdAPCD zUvKfW1SnBhzY`8=PGEEcLIRMve@=+4kevfZr{^!xa!0Br^5y|{d~FLLegH`aUhKx@ zb7lv6N&eO^WlZN~!%hcn>xLlWxi|jFGr8OBv4%;ECBL}idPS9DT>8)00efC;=U7)A&!6}T&c)k5 zs}Zo<-`7}Q9h&C{#j+>$2i%rVJ<86)ojK^E6+biWa&*i%XEQ_xHDw)=Y&=|xYLM@V zKH#{q2p$aEsyG&BNc{b}GzwR#Tg>voU7r;3QK8(}Go=@FFf|!N z$t0dknRK3v@f*Lo72*15GIm<~leW6T?$VDRZmYOS$G za9%WqBm+r_p!w$%Ze3@N-IWYjlibA7wprR?7X5dI3A1a_l(d(J1~toPKb#g%I2N^n zZ9JKM{xZ6^&;*~Oaq}m#ittKb>G0(I;?6(;^05`t&mUmOH$XDnbQ^D8VXfL5X;T#I zQgTos=`Ut-Y4%aq0S61B63-OPPD;nwY!U<8%!|Yhv$eo< z*n$;e5af(5Vk>|44t>3WXa^tr-HAwRfxrh^5l{SAv}fZ`o`A@ z#tBrFs=>8TfMflILC8Jtlm3a^@|%xa->lz$Mytvd z_14X6vLik!AC;r(RLXCC6l7yiVM{QAU6CYb)ko?SdGyv1MCQ@8l$c8dNf`wF3{ZmN zTZY?Et40g(SpM#-*=`=MAuH)?T z6>+F!4gzE><^BTjdycBG)URuUx+ev}U>fA!Yc-9jqs(q@|$CIDlm2))@Y`VRn zccAmFR8uLz)8(U4MYDGDtmiOzcUxYXJE%&ufU|DzN$~Gr`o=pF20jspY6V9o{Fj(5 zX$={8pBop;R!Z2u@HLYDLKT(`$^c_{3{X-y^p|Er8pQg4u^av&56MT1r&~a8UJXWD zb|ty_LfUtR$zT4v||)_OxHQxvDPIXB!Pt7mm&{LG>SAkKBr+j39CqRD(ap)zBEq8*%1oQM6do z3+RuUnj29qHWoA}J8a1U!3dON00j?8?^Ir?Ys;72a!0(um1T_e@>V8 zv)Q0E>-JH?X*UThp^Bt2q3EK@jGrHYt~cqpa>S>=vHrda%k<2YV^KgXeB%!;(eGao z#2GV!i6<$X7F@h+s%Q3IMh`WB#>zLhff(A;Ow`W>wMT=iwoTP9f_RM#$Z24uJqiwAMGK$Asny9CApGy``h7ig)S5~>zr!6X9#lkq?ln4} z{yk#Yd)3f|?MWQ0uo;yFDpfXGDw&4lufx71BaNMPPNb^9CL$tW)n?NZ?uIGt+}-$; z`demOzIL6E2&opjb?70sn={?Wq~Yhn?_)Itkud^FVsr`1sOwp0!zs?`UAF1q%P96w zIkyvDoqKK<{t~4r3f{aw zy#KIZZnkv8a--$rR5RK_q|DF+7MlUzCaE%kgK<+#fZb$>` z$}cgDGp?z;h~zRQ&YohoHEIFTM&Bqkwg0>U1{jp~zROH(u-Tp3y>a{AXz-?g-|-YP z*GS|)>IjhfZfXRQ%l~*K6bdZJ^gCM>nJLMODqn9ot#4F|G;b+$z033NmOg1=(nztP z7o{gY$D?*0xday(e#@D@*b&FatWJO@tX>oJ=`7`N+WQVl(2S3W%UB7TUJj8w zM*}L1WXr&^E;j3LZ58YL+Ro;MRkiPu*$w(ssPhWz2CEsgN1C2olwdB#KCIZ;C%?pu zM*CXrpVP8eKKC@IR^NG0t|e~DYoC#nWFeb+`=Zq%JF@6q))QKLCiVBGe9zZ=>7V!W z8}yPieINatJ?GoaaB6d+g`~t>?GfJ8F22)r=(omkp-$a@L79v8A1XzuZ+!Fb*uLM^ zRLEuv=CUzOa$8JbZq#k4mHe-dUyA=c*>gP+zu@+pkl84Ynsfh>b1K;SS+IlI)+@^0 zBbhU#&3&h4E<9T}gKosA<8kDVT-RR zCSEjU!?G!(KPCkxT)hvLBerfOEtOO)S755u#^?lEtT|*{$>3!w<()lETNtkUwHt;n#pu-=~tuf3;M|#8hURjfQyB zy^nMH{ks~7sSQlv+qjI6knMT^u*Sc;^W|k_W$N2LI1S~Y|Wo} zd3hC$vfrb@gZtjY#SGg}?6IOH!yvU%XIcS!;QjzpQ$XP_=P+08p)=+u%HH^zanVaY z{e8Ogvysz04}>pC@uQV#hQ6#b*3yy-0fo|51ewNfev44Ovl&J-qz|gX$_?0i40@jo zyMUlm%QkoGB}WCt4Gs>jd@$y-vZTC16{i&Kq1qPskwl~rBxu}V4oAcL#R_t(jsfrW z0WA<y19kLXN=izD+o}o&FRyKZwPSL3JA5g=t4o2x z5``7oBgP8;lHYYIkP) zq^LtEVSoO=vzQH8CwZl2+nwbzPge&BbS ze~?@?$R5Hsr9kQ@0@%E5MY$RaO`wgwJ%T@Xy`N}klz^C2Q0nh+2R{@o9V+8lrIDVV`*A@wk#XbMiFIsp0ef|8D0*Tz>Q`K)ZPYJa3#e?YV-mn}t7u3jKj*u9_;H8zw!lnNNX`9f}Ny z4#XGnpkEsFAA$|rn0S5zjL%Z`&%+zg-v4OP6TBk2=tT?j9(&E2_J^q{#`R18oeSR=1^@W#_ZcJO(5Y{m9o5~#hM4W$Zu37kQwxI~-^ z+Ub_FZiAGW|5owBA)G=u!8X?~N_m`sx9!UcxqVt{>c`)&9)(HvvGM>_vHKJxR=4IQ zFq7Elo1qUZ0e<-#Gil+y#dS2}WzVJ)Jpduu zZh-78qf_O@UM+dgJ1q#{sbvU65=;K!qexQG#>-c$3ig3H;{M;eiSBObSh$uFffdkg z48Ii6QZ4>KX?5a+!GiDyxC}+UN<&$D`h9!yu8MI*6kg3Zg*Yq3)fQB;zCh!QYOP)l z0WYHHhc$8*_6m@#RS=mxjJ!kj7VhcFU~%u!04*kG#58|DT{lc?6AgTrsGza&_#oam zPI5`X5#iMAp_u)|eN=l}j0Y~#P=dl$Jwf}T9yjt#@$>e~GfxvmT}8ISND8?OmL$k; z8bqcH@D7QYNj34@F(tN}?u{sNsQLUr>J`r7?!oQ+(oLV~YA8~a;uAeOX%bip#scBK z@j4iGNQtBGg8yQ}VG;U|;18tV(pXl=Aj?dkOg+D`kwqqp5ZPcCi}S;EDalLV;HsHE zg!{j`922faN3S$N2)*VBb$-ds*613^(1(FBz}ezU`mj%K`;rlQlCHYwRK3Hz$DbOL z;yYy}Gk$@Ceid?i8nSGw8jSwkQg;2FPV>5Uoa!|l#1Ao|dg{CXt6iMf)8&pt5}P7? z0>vCt@S1&h4*kr9#;x{HBYR+lH0+sA5N)3F-2eYXYm{RZP=qk{Ef5=LV~X+Ot7zG)S0+ni3h=sD=~`i~>0IFfjG25H*m80Al^Bed#yD_ccweLI zf_;A!(w+h0*cOI|taw!y25E(pSQ0K@{@s0wir`L?RD!zJ9AV2z6$+D|B7&k4Ms40x zBthCx#B>vv+y6;_V!$pBJ2?ZcMO#+9(pk7UAgU)?rqF2B4uyRSO^}i zEsv`*tP9^qx5`9B&5Zs9{W1>+zEsjKr9xC9hI8{W_OA^c0*!bRWkb)^o#LqPqb#6X z^M8+Lf6qR;8#aG9^$b-h4uAO4AQiDQV;`xdC5~A<;;{GHHTn_8IC=bI0biKqgAWwK za0V|l?kI@9gc;gaQ89^woWg=Up``#EDqDUO=Gsij#>2BgA>EeE^jjqXL?9607Q{(0 zNgYO~O2l*bsJ)aXepc$Dybz9z8sIgy;9th}8{-Z}^g;P8G2>Lfe~j|&3xZ@&<;CpT zzpq`rbFhFYjBZvsM<2)|wh9#aE)&hCWRy=gZrtMdmL`>>OE)V|y zx6T}KnXvDo-mY!us@8VJrW)BLF|hqV(SFBY`n(br&Al+fcYF*go0GfL&2!7qPP3 ze|Ag^%+N>$STr-^iZ&wzHuf|H|az%!6fi51Iuj~GF8hKuZvR&td%L^|~r^rU=pJTJpQ2;}nIM)I_ zaR6I(;YGbd@b~4{4AGMe@tpT&1n4Hbskyj zRwHm&8mKB1bi245EUp_VnSo)ypKK7rRNET$j)ytq=jC9CCV44-X}8AW+bc;Kmg3>C zWnGydWiq(_^U?`PHY#kG?e!}RlU)6C;~|ifK)a;ad7EHY^28*%`-tmjULbj=M`pVA zo>vOQ>9bCxxJGf1FW(=!lz#KXhvwff$SEg?%8o0)8HhbCF235_cCE{GcUh@^I$c2B8gy3KqF7r9CqpkC-m4it_R zDYlpzH?ghf!mLl?rzJ>lrp4}E<3 z)Afwm%24jS-sdv7wke;)lgPg=v4k*UQS3hkMW#FwarfVT*eOPzG>L>e`%w~4hT4x$ z?kN#zf3|xW9Rn(w1fAH1N*<=g_!8bVEi@u07G{48>ZcU1%%bIAtW5wLHEuPh@)#UYq_ukwE zuRHk&{wJxH?Ijt3yZ`r!O#cl*8Zs!7*>H%w30dVL|7UsZQIpE`-!7jj*Lj#J9pKHkjvX2lMM`ms){Haz zZytjx{=%I;vg7*DreFS?va54-Ry#o|^fjLmh?VhG_cycjQZs)EVpVN>B@U}Q6YY*< zr<6-Ll0T6qoh5j+^Bsanr_yMsKU-mER`aWA50N-yDPo-!Bp)jjhf}gBSdug;Obq9f z)Vdx~L>K1!(apFVUoLKLqE3k0FG#~!1RN960Y;%TfGu%H;ysCWUyQ>d$woqc9@Hs%MRW^;Ev-}a(KBofoCPcF z_;?gY@oV}vxW-aErY%BiA8B2|u#cfRhW@^rU}pKJJ9^YX8Iv<^-W^y#N~ouQ!dHVvck;UA9YdI{ki zw6K(6`SodHj*14+!4(ckKzp;depfL{fWQQvIKF$XtN5)~_?_9yQYb+jqC&>rbE>oz zf#7+3+|SdBnAq3Zs{f32JfGAagoz>hnZdB+Jq|+I}A7Ts%4 zWOP`HdPNdgSL7WmPqwE$0rz#NaEc+%jJ^*=^ra{H^$g+i^1!79w|82m3n#C_x}Os5 z*(HoylEE5VOGqV%+9DcVyPw{5bMRRuFeoMR;ii($-l6=gjhMmdDOyzsK53*t|2cXU z?#yEKf|DaVHsOT=7x z?a8Kq!;rJXRCrW=NPtz29DQh3jR9J4$W=l{_qM++VQu-V3!)IKYmDQinz~>k)RV95 zX>vKBQy;#;P5XE=sQt~~U=jv&cF)-Zwe8mT=`%L^Qb_L4p;pmRioXxR%I-7OfY%Y6}x6l5Td2ndG=al zuQsV=UGNR1^?g{poZ)*|)U+VR#(_lpqr3tclk$LEC=bQN{&=mT>xxB!h^G%s*Cv2*6AMHKpkdZS(SEB(gUkF0~GeXEX zLtroBX^~~EeFtwQ7GWn|x5jv!i+a(NS>z3}WiU0tyHu_FRZ83o$3wbtzxzTz==1JA z>b26zE6_%k{acljaqH~XiLrZeG2s=RUY{`I(G|xOYGsh{mJ*ZC!(JT)7h2|RuJsks zp&k7d8aqj8U`Z1qF{ot?*_d79GOY~etvZ@(>q8H=*Yrf^s9wl3Fy!ZG6T`o=cu& zr^z>kbfzY5wPpU@i(jTFKR%vADYsyviaZu1&8ENuHINhDeJeRQD7IRT5+0$f!tX$fO^l`f%7(~ugAxlg>yyy^RIW_}PSt?;6>%Tg@bYlnY^V|8_Bbxi4nsAt5uAmifV@?*Mu=S=SV8d&phw0|6LHw1d;HGGaetQ_xRhfF0UGD4Xss;}hfu^k=8AFS|8#B(C4)PMIz zQ@+rNpbHJibk8GZ(6mEPD@o0$veHQpmKhYkeYmbusHW`GQPDkEN7PbX6dAQ0Mt;1c z9>l$waBhNnw>)jY4#5Am`G~c(UE$i|qf|MMdy%d$C zq;CbeaZeGay0p7&?%KgAX%(iyhiAS@)%oFtMRBUG{fYE2^o+DLO7B_jcYPmF{SvXN z*@|Hf>ubm^Yq=mIBidrd+miRM^e6Atc?LfcTx>GZ^RUt6->knFtYcPoXjs6EhFdcU#c_p+r#N<5N8KS$zMcHcjF``^(m;Lvt1 zj@GySVgJ1k-`_is$8<^%NJgm&v&TdEs=*@#1(ky-XYXnb5-~}WM1e+P28>; zC9BtGL}4q)$D~QI#!@v*w?BtsM4lIM1!AW?{%}dN%8<}tEVV$VGD$bXL0EQmm-Onp zzBR5$F&*dw5(`E*w9?z)SF|;N;Hhwf)X9K)d_T4IJ4Nn@uKjaR>S4Rb*goEdwlFc}8NsQRdCWD0CjL^+YT%*1CIlQVuIaYnn& z-_xA=8}Amx^v%We7wfQ@#(L6>-Zd9T8;j0)xtMr%qGrmSi4CcWgWy*DG@AJEN#Z&MX@W!I z5Dk;{uaWLk_OydI>j-v&sO3X#24TH{G=92V6VmlN_mWD#`~)G9mmZI#J~{qj8JpRW z!k+4EdqSc$W0y)-EU(^NK(9~BJw7mtIKsPfH~XFp%>{H{w+(U29F3O;1N04Fy{=Vw|lO3vJuXmmFBRzCP+La(=7?ZOkemb^*NP9E@)R|Uw#u3K;WZOu>5|b2+18SCymZ8; z?`j^FR>LFN`xC5wV6T^UMXu_q_Sn}FMk)q!IC`ZXnpAdG|D-n`r*YS}KIDYk`s7d};wL#Y zcQc%i?SXD+zZKm)uEM>U*+X1rqBDC~oYBSxU(BFBSrVf$L!CL_`PsfQWb}aS7S(xB zeV7_v{?sG=qDwwrnL=d3b)z91W^$KUD7v25fv{fEadp{v)u>RJ5!!2YpRLZ%{&7n} zN49|)ulit7bjTnI;`i`5Z>)pm}(=sBJTX_`|Qcp(o*xQ3?-Bj)M3==oJ3v`wtk2$H{YzE8>Gw z!yiP?)CIadgD##cQsmqc{Y}>_O?$9Dc`!}hAS}yPgT);V@1KF0z*QTR3d!$Iai?tP ze^2}(v4TX+x=ND0NvFIM3|PW*wtM)IF;C_`0~?GEm{MtXxc2SJeSZKr8--+hRm?|t zOF$6e_{kjsL~T%*73Wfp>7zT~9k*aA+`u&ZZO8DUxbdTQPnPc#Zdol}d*eg62ONV4 zerGkPS)^;-onKf&!G*PDfQf>MdA_ibblqtk>M%o^R3HKRO_&(yceqpYXDRc$Uh*~> zc8FAm@@%E3TzdVI#|ilm4yDN<+rzJQAJlbaS&^4oQBI-^26m4euNk8S%c!J>ISja} zXtd~3R|nmmWAZrTSLa9FdvY2Y#9*e1hbKr6IlNZ6Stbd|w;oEZW8B4M7D$b-IKB)I z(IF=%*9G}0s&oCB{~D5VW6Ty?`NQWLnR$+@8A}YK+$e~=*d*%3gdT{s)AqV4aHnnL z5#wwtV#+m!GVKA|4?z#ehDZl(ZRrs*KHCvGiqw8+0GHE3b8oCtY;i4cpRgY&SV zkgWsb=4qU@aVnpn(Fot)Nm8PJ7h3cTWdoi)yPI}P>(Zv}(9d@y*czAe4uv5KL)H zLs{_?Vxmdx(Gh0kxDfkf7E3mDBJln7%Iz=S}BsSwAV z2?z>)j-+yaM1s5qfo3ZKCw#PUu~ipRf>@LUj3NL174@&Vi8@fkRAcd=Hh#Y{jJ}wN zL(jkQNVKZrFV^;0*Y>hD)Heq;>G!QhP%jF=+qZ!j>q7AWxPz@l;VQUF7Hb2^Tt68H z&?=jS(BVZWY`2$6iK-_JyX8Am#Oq%Ga`{2Df&>kDl2+8npo)r$xgd}R6M@$ju=n|4 z5cpc}QX+RP!{5%g`0S6ID>q4?Am8~h->u@b35MG<)kKC+#zinj z=nPubfQCrzAm`NoFc*Mw)?1bkI>kZQQSMVr~g~w68Zo@`#5R z5w1I~EL`*5E(p01GanG_DaSs%+z+|UT8t*5?Q@2_e?(~=k*bu*?Yy`1p*S zkQczQCYgpacsEo_xstbsC09q5<v15JUN* zrNV_~v9f2~wv&7^>;JgQZW7tGy%%tmf3jsHNd$8Qp%OuU zFTF9t(BR-4JqEr4{<7R+SF`J~Ld!-bph*pz&|Wgdvb6LkV;c*($ws_RWaxTU8bk32 zE)x;yI^o863wa4i60{w8A=-mP2|P`_eYO}9&^1cyq#30KDdt=dDdXA(W_-fXF&TM* zf=FH+!**wJS{h85qR2z&t5P!)neP`}d+)jOj zD+GTQpt=X`4oO0A^vAobZ5GDy6w*33zpClDc&Xt5 z%!CDC5{|1OT4y%^5W2%4VPxFVR64*UXzSj#-*%+Y>_zf6ZY+nyC*Dt~BVmPfJ;Lox z3oX=AFUee~@_yfgFi3{o`gCu5YkL& z_+_+xF1yU5dyg#DSbHGGlkuwrq{J&=9k(lp$kTYbiKjqlNm>2+Cw-6bAx;R|X`v*g zmEh6Q(K+>aSIpINFq)r2wgeH{d8n(R7+e;Y39gLBos3ITDD@h9LU7|w7zGCHdPH5W zu@*WUXZ7Cr%a}7J3S?C?PLFuYpJanIywfdTWT0I_kIVbT218{dD>n30WrYsUjQ?56 z8MQvJ*EMr3YSd~Bmxh2Lc_0&GIYv^HXe7UeAl4pMkpQMqw>>2>7OyL|x({#SPl{21 z^PpK_^GDr%>)Bu!@jI+@I;bmE=bu7`i+O?;c6ar`I8g`Fth{VZwbshV&?b+zGFy(E zD?Nd02PKgcvu7%m^>i;huv!fg3_HD>d?OY-#i~GzkNjG(G#PgUIXMctd5|f2YOwb! zvg~n$ZKdL*%WUese`*DWyx{WTg&8m7NU^BI%yG{npu{(EnktY(rlC?0K^Gk3=J7PQl7) zk14}5R_xgqdgGtkURJn?4Xl2;QMUpGE()W9G~BJoHlt}5%isz2!Zej-drN#P6!~|* zEvIHLOT~1Pd?I^y{hg^LOWIuz^v=6)%_#j+#9WQqJ`^c8ShBA_>DH&vDK%&s3wgMS zq{(s_Wy^1haO(-&mZ}Vm*1qz1gq<@h9pg;_Q+tp~@$ts#e;#8<1M^I+kuu5E4v+iK zFanGDKg5GvjpK*$9GNZU@%}sTK6_QsE;+tWc%&lKfjAp`=#SFXte#FV3ydp-sN(|LK4K+(SI(<=GjhGnkV>h zl<=Q7D(+pHK0Lv%{7G|zyvKL-nIV>Zb16imo5i8Cj|sf>#(d)Nx4!ZJKqY5*`ZwKc z39@_8UZrH6$Eqyk5FlPXR9;dgKuho~RJFHY1GWMxZq*s)mc~zt>q+-ow_UXy<1&+}RPXVE$#e{~jyj11GLx zFkW*jQ^vkwGi!e940sVYzEU5@+>Pa&e4Uu3Z>u|=aA(r~_S9#B-TdLCj#d4)O_EPa z+o`IgNk|~r{=1x>d`bc3&<1@=#}`_dg}oEQrpu2bg@t&_!=h@~N=|JykOGP!=NuWJ zfudIGrCx%vNs`?&Pk;T?TI6AZxq*VJlDw4VaIc9=dkWDM!xl?@-! zb>3uy{kV&Sw`VfVxeDDWM1oPt6|=ILUo6+^9+h(cM=rw*BaSlUxx05H<|m$Z-pXO; zXNHkS!CAgm>UbB68DOIncltNxlD-Lj_;1cH^-L?>aYHLCrD6PvP0$LQzGEU z?8$H*=k`BIxo$+uq})h2j{`TOJnlo>ny84k#12@CVYo~-mZnl)QjTUh_2o&tZO zVpXq|ReXuB&>c(sLbW(9NZ17Ku5)A*kO@!GP8MgWz+jj>ij+`|O8)WENufB+guW}5 z$p1ZLi8sDNicJ^tYA@~FY*4?Y$XvyQ#Fek?YV(PKys|9~-psb^Xg9lWrx}$AzkTOc1s>wz3*ao#qwa#g7E%KqGJMol2~CJ4F+-8vpBxy9saOT z3jciKB$gU}9@2ihSXJ&v$qZ*j!n&p3K?FmCoLiFU|YL7P_P8vEl;yy?_Ig19z*PI-%<`*i zp5+(i;M%u`oK6iw#cy~nWl|`yWs88g13IFV__Bv@?@Qdy-^=_^m)$bVnQtZgYrMh= zip3rMzgM7;6R}o>Bo!-6T+BqWW$8~ zD)(I21VS8moW**@=LZMA?MPkNhdOG`@r?2GtO8o>F$x(xMS`v1Wgw`*yOdb}JO|m8 z3r(vsyDU&w5HH({Rm?q{~5W|f%eyZ%8hp^N-nZ)>*Ssx*-d z=g$H>c_|LjL{HwpS{wDGa`)Z=<~~V2>zg*u+cL+NW?PN~Q}e;Nh|4w}4MF|-YAkNm zR!9=)0*LL-)v=^oq0ST<8wW?>a(A>&ty#MQ4~G1)1!#`J+e91h`lk0_Fum5cDH1l) z6Y_8nKQYu&(oFbPu!Hk{5^Jdhbhrh|F2fWqoNTecxH{7CLRIY;rP{a8Ib+EGI zs^2na5!i|aYH7Cfd9)HMYgDq0pdM$JnZr+fT1S5B#w!_pA!e za%JHcK4QL~Su2->Q0qUT&h3U-t*Dx*d{q}<`sDzYlg|z`8IGLb!Sds=)IiGXkM)@y z##(A5@q-1Gmo{U?OQj%F>7(7iHpdh0qlu5}oQS#rmxpQ9vHP>UAs(V0CJ=7JmLU_W z+lC9G`7mavq?joWVFehA@;+j=6u6h^66nO=P(CyLV1d5Ax#?j@n%t#yAH0djAbhZ8 zpairF7lrcd=V+9AJq3TT_+Lo&gbgd?=>mvmP9ENUm{hwr^;WoqKM8psBcf|VtH%nb zm?B{)mAeS!dB0ASI(%e?$AG;DfZSq`+!}2#*SVf*;yWEkc!nL1F|q7ARmdOAGJHd{ zIQcq{oCVM2ZzXS=x99|&O1dxVgoE7~s`1pGmO25J|4HDg8dH>AADdit-&*_;IpqYy z8=f;$r?z%JEZVBWgU>vZR)Dpk4&r|BY^XpmDv5Kqt{>_NFt$lxU!5yM5AMA1*N3@I zeQBi7DWgS9L@_BjSi@jU0EVt(jFe35I|l8XAG?1)m@6w|jXL*|B591w%tnIYB&RD- ztLKa>W6Pw(%XOKu69?ykjT8Oi3&{pOSj?vHtr7{&0qHA4w@l(=71-6o!nneZTt2}m z`?+3PNW<&I>pBrJoN|28fPwP5=3J_CEb{S%o293#l8Ndi&o|BgRlWlNtQeIxT4gD3 zMg@ohW-vgA8-UI-aSKvR4n&^lFDGC!R$QF!YyJaw1OC)`0)b^hnbK4VHH-QhnG|xL z>jV>7{Hg`B6Y!EzCj51x2+-)zD9v`q2Pn81-DtMB2LgCj^JTA=NjyRMftpOEj6?4U z*#%rUYI?G(RG*Y1s4h&D$Bq3#?{N}zcr;Y$z3%O^_yd~v8OT?SdxYY=7e4xf*3Kj# z!PQX2V6@^HKu6-b1HmMkY=(xmE(SlPi-A#)&Z-JZsa4m$kB|q%07r?5Zg?h|@Z3aR zGikJ#tmDxNy*?_bgyHI$lFlbxohLC_?wr!P>&NvU9Myr){eT9X4L%GzzwprT|JT%c z$FsfmZ(QvfF=I=mYLqCBQG3KJYP1qWjOwvkl!`V+Rcoa}(b}s2A07awEfJ^|lb34I& zFPNH^+dQNqwrQ!e|EI=O1f9L>wR$EPK4Lf`Vxl2HyqT^kItT=zyr8dY2Uh3a-GXSo zB)-n~;3lcL<7QWrJ-1p`a8I^tu|hCdKr2K$Db*l|J|vtIJi`qd~0pRvjC z;@uc~$1KoR#0PRddZX}2A}neew6rgRQ>UkXOj_IF&o7DJ=xQ8I&}hDnX16vLzhr84 znKwYdmt&e3;D8fo*)3!M(K!0cvC31iIN;|wI}Rj8`}f||>hc^$4D+B20o?{_>7Fo5 zQdN`JZ_ z+JJjb+)yz53y4)70vkIs@Yf|kLTnZ<2+LVzfLwJ!|oX2c~p8!n+0Lzy8kJEh#SEthKeX3nU{pApvoUg#ZNsp2v>8 zmJwR1JHJBD0$>!f)*t3k&l?hEaW2To8VSC7gX2C-?rEWTbYSTH|6bCWa66ichYNf$ z0-?Z)j(30&bb#CA{Q2|*P<}T|;c;*d-*<-`51GqHH)meIcFpVKGaD^N?(i{r0VF#i z1|KExNkGYiE%(;Aw-$_xRsgIJQ!s)(F1iTCJHuh$d`qt06sa}yxeiaiZs8KP!7wja zk&RhLD#(Lknmz#OS6f3jG8({A*v_b8whaceg8(5`_6btIvuDnwT^Kd<^_S;>%Hhx= z=|Zrw4@%wl1IN+12efi9#j_j{+FUGOlvD=v#Aj+Exgx}`wtJarY3aR|^cvNJVBHbfPrco#mJB|6M3 zj+_e}C@U#wz5b4A3VS;;vc18-YLH|94`g%pmTR9>L<7$L>Oq55$JM7Ok%&Rj{hB7b zu_Iut@qqz(5(xiAR(ItJP44y;+=cXB>UlaZIXifsXomls4b6l&8`Ox??XaEdUYMX6 zR1)WX>A4gVACiz@2p(Af+G$m=lQdPt22#rf;;@f0XzE()4O>h6Om)e$;U=qs%Ww9} ztc}syh%I!2BLOdqCNH?<^i#%PDf^m3wRPc7&aGw|&xbumrpqSpjn^Taxl2B-O4Ofk zU~ti9{|RP6bbxZQmR`1|*NDSMO__t-jD`dha23%09j0*HAri7zf(;3}b|TSAqxWXCx4HJ4+*=;j`cOXd2(9$h%qcec>o zOw8>Pk*X2!{_74NaBdUFaM#Z^FZ_~l#~rrdG*-8qaK^j5A^tekJGIYJROi)8^T)e+ z9CPw$jDov8z;@ELE)I`V04bWqpVme;2sizcTcKjH*$4;C@@7AQM2KDJt(UFeS$_#G z+OEE9Kn9%7Im@<67KLm_9mY?Koa<5UDBqk27&*!Bw&LG;RlC1;8rQVv2qF1OmQ=LD zor(ShVFFtn-wAcS{gi3fNVY2|p=tlV1w=0W`&#__r>X3XmaCRWUVdEKs*>qa<*x7* zs?aPy4;@atE^BY-cAgLXlLVDQ8JJTT&gO*%pXRddZ1u@+NfHnyl*W2!(DHXL`|>ff z&RpG0t;Mg>x1_9$6Q^tjbG2Fls)Eja%)HrB;4e+Xq=KdCv9;<^S%o%_-Az zGSe$JcQ z;%;{_r`Poj!VW}ML}&F{-V?0B*CS`-u|S4?M_3b)YRce9?3+H!R_d~SM`iAE;J}hy z;V>&@CL>=E%YQL{tC%DIxFXBwRQYkjBu3Ljfa$k?t5!(JXWl0KoLJMv^E{=_c zmluMtX?}<>%e;)(CW@)`*R_v9m78Dum}Aw>lX1@@k3{5$&Y^ZoMjrCaGslL(*@le% zGA%)m$NkKe!CsJFv4-WUcik{q@mE=DOiqK)H4#&r;cR&fyYRJkoVJmSXkZu~G@aK* zbq)STJXHQ}#}}t$tJ7e497SuMc7XSHMi#3r!hcI_!C5II;c zvwlf4)Rbji+=mV?G^va4kN<6@t~KCvD)hRD$TF~1HHR|3Pjy1s5fqt42gC|9#wU7A zTkll}Ru)wEvX7=zqp!5gMO_}%TlCqy(df9ix(MGGd%k*IYmcP_LhoX`A8q2`sD+?cHu`smP_9WUHILo&`I)FOrSn`{qXKL;qpZG|I zZ4laO2jlj@rhD=}$7wF}$ye&HBaAC6@c7#+5&WNs;(JSs#;(a9=wunznx_Yiy8hHC7(0Y%eFN)D^UtKrK)0yB}*)mqcc; zbK*q1v)=-b3Z(htextW5h>{E0X5M!CFG4Vg(88rgZoXHx5UY%{r*BWo8PI5*e$VrOkaz8c+%jU4$C zJ-ACGE|k`M#*K0aQWH}{mgjwzv}A#3DqYL~lt2@Gc2w!Lq|7u6ai*Pu@Yion7Q?|C zd7qH1FvB(PZ$Rz^{UGi0#-MH_P1SeY5S()GqPk>$Rg8Pjv|b%OiA0Je-fEXV@LBtk*V^sd15{6H^YE5e9(Rg^yDDFXS+um`BFY3IaaF<D-qt-V?73;B@$cE_rO zHKcfm;VWr~I-|?EacQv*IANAXKTy?m4Imd&=O?1a!Q7(z-r!s;mg?aR@`pKp>E`dYUv9bvr@j#tCy_$8cQ;%$T+ z8Ivph5(cM(ns#0jPLQ_~0x*L)mX}>oBVxpkIE#>59}pThwr#WO8e=4VWJ&_E&7j>& z{>$xufN_7kho5|jgQkqoY|jc*+0&Cj&aCw5*UPfrHgwo$6vRdHQx%8QI#qI+eq~>I zA-g)N&gnt4CRO^?hzb`HsrS? z1**@QEy$7o;b~0J{ezmAKz@~x-su7+zFX4&4=)keRB9)=B%vn)=jwuF;m+kd`nS&t z4OdkeNehAHm-B7gsv;=;u&?jF2*J&_Wnn!r4`jkuA4&4FJ3IGW{h9~MHZV`|Vt@EJ zkf&)WxcgNc`|Ou>j>29u)3$d}g0-DWv_VEh{j0CN&F*}P5dK|m?J}x1F!1$~0J{G( zLiGm4;wn||0s93iqd)5z&pMjlC_FI6;LBF^P47+5?gGD}mxaqbzgx?gJ46gZup#@c zn}W~9)puje#=}vwL6b)gr6x2HoZGR4pd9t5R4kmc4H^^Wl}mFgh6*4Jz$PRCBUb2~ z@gt+sC3(b-#_w6^TqsR0f31Mgn5uVhJmr$M@&9-m@P@p_R!EAqRJ>Wo*JQ1|>lTzh ziW%x)#k@^Q*ma0b;H55$78_%nsS&u4&U?X7gpfg~j3Y}X+Ksu%GW%o=A;kTtMWLv4 z2P&6N_#!ZAKVL4{BbNBAYOXqn3hYRRb0D}^QEyS(d?)$;VfRg%c@sC7$$TR0hmZU$ zXbf4wYsBG|hud~WravMXX1J8&($OANUdYk(iOFY9Pu!Bs|7bm%2)`Zr!HWrK!GSS% zU%!3ti~l@OI;VhPZ)>3=qeHH~ZZV@H>OK|FDe(J2c_LlCsSHZ*JvG1K_7UOzo&R@Z zFwP7*R^crSD<`Ytiu-bqTm1ds0?7(B#oC5kiN;H!9)LnB;(qwzR))<^8pG3M^bDhq zU&8^#SW{%|FaMqB1fvGd6L|`O^o_MKGE@L4Qvn1x()-2%D<6Qukb)`-M<+HJuoN}1 z>QY1^2uMf07k@AA;h0_}^)*HqDVJD43JH7GZI8ta7yXs8S1ExnLr$kWQAGUp>eGwX zkq1_>DlrCOs^4LlsaI&Va&7Nrux4hq`l~&yXpN#c=n%QB=T?KYTq-;Vr!9yjj&odB zF8;WB@bOM~(B0fkeRZK>^t{Lub&(O8hn#36(Nf zYhE(wBKfnJwS=Rv+Y>@E_h92{Ke6GMqv=bNtJ=t+U4v&i|2!Bg8r%b-DVu^R@n3|+ z>JRod_$<#Hw+l;GZ~L>9@3B4({~8(g;YRWohYNm*=lAN}JJ=SXh+lz>b1*%TjjTGenST2>D4{s36`-7%<`*`{j2iY=G>v_y;PY> zca!Lc9h`Eyd9NA`Y{#K8zNcb$KQ7w_k2|*Qmbiw6X*rYbq=!K2SxTM_?bwz}9FH*B zYMIC!^Qc>5Ug@rVU#XcVV{7 zxP9cbn48lpT#~`z%14&S>kYBPU?=rbF5>oYy-aSms8-r z5S}=m>7HPEu0B8f9Ah_^_YXB_#Z07do{|V8NJV1@`d`WsFt66qyzQFcbWZ(RgjM6Q zAev-9Ob4t~2(g;tEbv=N?kivPXntTJB5KzEfV6b~)Ua_1R3wto6@|c7#SFk&%1uy$ uq#QVBu{2U43_5{z|74*~r8or%N2ge(R+F|K9^z=g&jlk(!%C#<{r>>t6^;V{ literal 0 HcmV?d00001 -- GitLab