From b89a54a3e7c549b07a198abe5406fab710d7d2b7 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 21 Apr 2020 11:52:03 +0300 Subject: [PATCH 1/7] docs: add Confirmation-Service.md --- docs/en/UI/Angular/Confirmation-Service.md | 168 +++++++++++++++++++++ docs/en/UI/Angular/images/confirmation.png | Bin 0 -> 26919 bytes 2 files changed, 168 insertions(+) create mode 100644 docs/en/UI/Angular/Confirmation-Service.md create mode 100644 docs/en/UI/Angular/images/confirmation.png diff --git a/docs/en/UI/Angular/Confirmation-Service.md b/docs/en/UI/Angular/Confirmation-Service.md new file mode 100644 index 0000000000..1164dd9de6 --- /dev/null +++ b/docs/en/UI/Angular/Confirmation-Service.md @@ -0,0 +1,168 @@ +# ConfirmationService + +You can use the `ConfirmationService` in @abp/ng.theme.shared package to place a confirmation popup at the root level. + + +## Getting Started + +You do not have to provide the `ConfirmationService` at module or component level, because it is already **provided in root**. You can inject and start using it immediately in your components, directives, or services. + + +```js +import { ConfirmationService } from '@abp/ng.theme.shared'; + +@Component({ + /* class metadata here */ +}) +class DemoComponent { + constructor(private confirmation: ConfirmationService) {} +} +``` + +## Usage + +You can use the `success`, `warn`, `error`, and `info` methods of `ConfirmationService` to display a confirmation popup at the root level in your project. + +### How to Display a Confirmation Popup + +```js +const confirmationStatus$ = this.confirmation.success('Message', 'Title') +``` + +- The `ConfirmationService` methods accept three parameters that are `message`, `title`, and `options`. +- `success`, `warn`, `error`, and `info` methods return an [RxJS Subject](https://rxjs-dev.firebaseapp.com/guide/subject) to listen to confirmation popup closing event. The type of event value is [`Confirmation.Status`](https://github.com/abpframework/abp/blob/master/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts#L24) that is an enum. + +### How to Listen Closing Event + +You can subscribe the confirmation closing event like below: + +```js +import { Confirmation, ConfirmationService } from '@abp/ng.theme.shared'; + +constructor(private confirmation: ConfirmationService) {} + +this.confirmation + .warn('::WillBeDeleted', { key: '::AreYouSure', defaultValue: 'Are you sure?' }) + .subscribe((status: Confirmation.Status) => { + switch (status) { + case Confirmation.Status.confirm: + // confirmed, the popup was closed by clicking the confirm button + break; + case Confirmation.Status.reject: + // rejected, the popup was closed by clicking the cancel button + break; + case Confirmation.Status.dismiss: + // dismissed, the popup was closed by pressing the escape + break; + } + }); +``` + +- The `message` and `title` parameters accept a string, localization key or localization object. See the [localization document](./Localization.md) + +If the status is not important for you, you may not listen the closing event: + +```js +this.confirmation.error('You are not authorized.', 'Error'); +``` + +### How to Display a Confirmation Popup With Given Options + +Options can be passed as the third parameter to `success`, `warn`, `error`, and `info` methods: + +```js +const options: Partial = { + hideCancelBtn: false, + hideYesBtn: false, + cancelText: 'Close', + yesText: 'Confirm', + messageLocalizationParams: ['Demo'], + titleLocalizationParams: [], +}; + +this.confirmation.warn( + 'AbpIdentity::RoleDeletionConfirmationMessage', + 'Are you sure?', + options, +); +``` + +- `hideCancelBtn` option is the boolean value that allows the cancel button to be displayed or hidden. Default value is `false` +- `hideYesBtn` option is the boolean value that allows the confirm button to be displayed or hidden. Default value is `false` +- `cancelText` is the text of the cancel button. A localization key or localization object can be passed. Default value is `AbpUi::Cancel` +- `yesText` is the text of the confirm button. A localization key or localization object can be passed. Default value is `AbpUi::Yes` +- `messageLocalizationParams` is the interpolation parameters of the message localization. +- `titleLocalizationParams` is the interpolation parameters of the title localization. + +With the above options, the confirmation popup looks like this: + +![confirmation](./images/confirmation.png) + +### How to Remove a Confirmation Popup + +The open confirmation popup can be removed manually via the `clear` method: + +```js +this.confirmation.clear(); +``` + +## API + +### success + +```js +success( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + options?: Partial, +): Observable +``` + +> See the [`Config.LocalizationParam` type](https://github.com/abpframework/abp/blob/master/npm/ng-packs/packages/core/src/lib/models/config.ts#L46) and [`Confirmation` namespace](https://github.com/abpframework/abp/blob/master/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts) + + +### warn + +```js +warn( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + options?: Partial, +): Observable +``` + +### error + +```js +error( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + options?: Partial, +): Observable +``` + +### info + +```js +info( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + options?: Partial, +): Observable +``` + +### clear + +```js +clear( + status: Confirmation.Status = Confirmation.Status.dismiss +): void +``` + +- `status` parameter is the value of the confirmation closing event. + + +## What's Next? + +- ToasterService + \ No newline at end of file diff --git a/docs/en/UI/Angular/images/confirmation.png b/docs/en/UI/Angular/images/confirmation.png new file mode 100644 index 0000000000000000000000000000000000000000..efe4c98ea779b3798d21208966566711ec535629 GIT binary patch literal 26919 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 Date: Tue, 21 Apr 2020 13:35:42 +0300 Subject: [PATCH 2/7] docs: change a sentence in confirmation-service.md --- docs/en/UI/Angular/Confirmation-Service.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/UI/Angular/Confirmation-Service.md b/docs/en/UI/Angular/Confirmation-Service.md index 1164dd9de6..8722f88fd2 100644 --- a/docs/en/UI/Angular/Confirmation-Service.md +++ b/docs/en/UI/Angular/Confirmation-Service.md @@ -1,6 +1,6 @@ # ConfirmationService -You can use the `ConfirmationService` in @abp/ng.theme.shared package to place a confirmation popup at the root level. +You can use the `ConfirmationService` in @abp/ng.theme.shared package to display a confirmation popup by placing at the root level in your project. ## Getting Started @@ -21,7 +21,7 @@ class DemoComponent { ## Usage -You can use the `success`, `warn`, `error`, and `info` methods of `ConfirmationService` to display a confirmation popup at the root level in your project. +You can use the `success`, `warn`, `error`, and `info` methods of `ConfirmationService` to display a confirmation popup. ### How to Display a Confirmation Popup From 177ffba81d18702e2ea870594e89c6ca0075b9be Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 22 Apr 2020 13:04:43 +0300 Subject: [PATCH 3/7] docs: add description for Confirmation.Status enum resolves #3606 --- docs/en/UI/Angular/Confirmation-Service.md | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/docs/en/UI/Angular/Confirmation-Service.md b/docs/en/UI/Angular/Confirmation-Service.md index 8722f88fd2..56e8f1ce35 100644 --- a/docs/en/UI/Angular/Confirmation-Service.md +++ b/docs/en/UI/Angular/Confirmation-Service.md @@ -44,21 +44,17 @@ constructor(private confirmation: ConfirmationService) {} this.confirmation .warn('::WillBeDeleted', { key: '::AreYouSure', defaultValue: 'Are you sure?' }) .subscribe((status: Confirmation.Status) => { - switch (status) { - case Confirmation.Status.confirm: - // confirmed, the popup was closed by clicking the confirm button - break; - case Confirmation.Status.reject: - // rejected, the popup was closed by clicking the cancel button - break; - case Confirmation.Status.dismiss: - // dismissed, the popup was closed by pressing the escape - break; - } + // your code here }); ``` + - The `message` and `title` parameters accept a string, localization key or localization object. See the [localization document](./Localization.md) +- `Confirmation.Status` is an enum and has three properties; + - `Confirmation.Status.confirm` is a closing event value that will be emitted when the popup is closed by the confirm button. + - `Confirmation.Status.reject` is a closing event value that will be emitted when the popup is closed by the cancel button. + - `Confirmation.Status.dismiss` is a closing event value that will be emitted when the popup is closed by pressing the escape. + If the status is not important for you, you may not listen the closing event: From f34ccb8261ffdcd345334753cc7e3971b2af8325 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 22 Apr 2020 16:17:12 +0300 Subject: [PATCH 4/7] docs: add Toaster-Service.md --- docs/en/UI/Angular/Confirmation-Service.md | 5 +- docs/en/UI/Angular/Permission-Management.md | 2 +- docs/en/UI/Angular/Toaster-Service.md | 157 ++++++++++++++++++++ docs/en/UI/Angular/images/toast.png | Bin 0 -> 20291 bytes docs/en/docs-nav.json | 8 + 5 files changed, 168 insertions(+), 4 deletions(-) create mode 100644 docs/en/UI/Angular/Toaster-Service.md create mode 100644 docs/en/UI/Angular/images/toast.png diff --git a/docs/en/UI/Angular/Confirmation-Service.md b/docs/en/UI/Angular/Confirmation-Service.md index 56e8f1ce35..d42c323227 100644 --- a/docs/en/UI/Angular/Confirmation-Service.md +++ b/docs/en/UI/Angular/Confirmation-Service.md @@ -1,4 +1,4 @@ -# ConfirmationService +# Confirmation Popup You can use the `ConfirmationService` in @abp/ng.theme.shared package to display a confirmation popup by placing at the root level in your project. @@ -160,5 +160,4 @@ clear( ## What's Next? -- ToasterService - \ No newline at end of file +- [Toast Overlay](./Toaster-Service.md) \ No newline at end of file diff --git a/docs/en/UI/Angular/Permission-Management.md b/docs/en/UI/Angular/Permission-Management.md index ababd25e7f..d86e8c96b2 100644 --- a/docs/en/UI/Angular/Permission-Management.md +++ b/docs/en/UI/Angular/Permission-Management.md @@ -76,4 +76,4 @@ Granted Policies are stored in the `auth` property of `ConfigState`. ## What's Next? -* [Config State](./Config-State.md) \ No newline at end of file +- [Confirmation Popup](./Confirmation-Service.md) \ No newline at end of file diff --git a/docs/en/UI/Angular/Toaster-Service.md b/docs/en/UI/Angular/Toaster-Service.md new file mode 100644 index 0000000000..669ee3b33b --- /dev/null +++ b/docs/en/UI/Angular/Toaster-Service.md @@ -0,0 +1,157 @@ +# Toast Overlay + +You can use the `ToasterService` in @abp/ng.theme.shared package to display messages in an overlay by placing at the root level in your project. + + +## Getting Started + +You do not have to provide the `ToasterService` at module or component level, because it is already **provided in root**. You can inject and start using it immediately in your components, directives, or services. + + +```js +import { ToasterService } from '@abp/ng.theme.shared'; + +@Component({ + /* class metadata here */ +}) +class DemoComponent { + constructor(private toaster: ToasterService) {} +} +``` + +## Usage + +You can use the `success`, `warn`, `error`, and `info` methods of `ToasterService` to display an overlay. + +### How to Display a Toast Overlay + +```js +this.toast.success('Message', 'Title') +``` + +- The `ToasterService` methods accept three parameters that are `message`, `title`, and `options`. +- `success`, `warn`, `error`, and `info` methods return the id of opened toast overlay. The toast can be removed with this id. + +### How to Display a Toast Overlay With Given Options + +Options can be passed as the third parameter to `success`, `warn`, `error`, and `info` methods: + +```js +import { Toaster, ToasterService } from '@abp/ng.theme.shared'; +//... + +constructor(private toaster: ToasterService) {} + +//... +const options: Partial = { + life: 10000, + sticky: false, + closable: true, + tapToDismiss: true, + messageLocalizationParams: ['Demo', '1'], + titleLocalizationParams: [] + }; + + this.toaster.error('AbpUi::EntityNotFoundErrorMessage', 'AbpUi::Error', options); +``` + +- `life` option is the value in milliseconds that determines the closing time. Default value is `5000` +- `sticky` option is the boolean value. If the value passed `true`, toast overlay keep on the screen by ignoring the life option. Default value is `false` +- `closable` option is the boolean value that displays the close icon over the toast overlay or not. Default value is `true`. +- `tapToDismiss` option is the boolean value that allows closing the toast overlay by clicking over. Default value is `false`. +- `yesText` is the text of the confirm button. A localization key or localization object can be passed. Default value is `AbpUi::Yes` +- `messageLocalizationParams` is the interpolation parameters of the message localization. +- `titleLocalizationParams` is the interpolation parameters of the title localization. + +With the above options, the toast overlay looks like this: + +![toast](./images/toast.png) + +### How to Remove a Toast Overlay + +The open toast overlay can be removed manually via the `remove` method by passing the `id` of toast: + +```js +const toastId = this.toast.success('Message', 'Title') + +this.toast.remove(toastId); +``` + +### How to Remove All Toasts + +The all open toasts can be removed manually via the `clear` method: + +```js +this.toast.clear(); +``` + +## API + +### success + +```js +success( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + options?: Partial, +): number +``` + +- `Config` namespace can be imported from `@abp/ng.core`. +- `Toaster` namespace can be imported from `@abp/ng.theme.shared`. + +> See the [`Config.LocalizationParam` type](https://github.com/abpframework/abp/blob/master/npm/ng-packs/packages/core/src/lib/models/config.ts#L46) and [`Toaster` namespace](https://github.com/abpframework/abp/blob/master/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts) + + +### warn + +```js +warn( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + options?: Partial, +): number +``` + +### error + +```js +error( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + options?: Partial, +): number +``` + +### info + +```js +info( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + options?: Partial, +): number +``` + +### remove + +```js +remove(id: number): void +``` + +Removes an open toast by the given id. + +### clear + +```js +clear(): void +``` + +Removes all open toasts. + +## See Also +- [Confirmation Popup](./Confirmation-Service.md) + +## What's Next? + +- [Config State](./Config-State.md) diff --git a/docs/en/UI/Angular/images/toast.png b/docs/en/UI/Angular/images/toast.png new file mode 100644 index 0000000000000000000000000000000000000000..24cdd0fe0ccd88cb679c452d5929042a56f150f8 GIT binary patch literal 20291 zcmZ^~1AJu7^EVoM!;Nj*HYVoA$;O=6+}Oqj8{5goHaE6y+ql{1_xy3+``$C3GhL^< zzJ*iOGt<>)!W88tzrf+Zfq;N~0Z54{gMfg>e$w(VP@nIJuR@d{AP4{pQBg&Js3?)5 zgRQBBwFwA_R9KQaw1&zsMy9qhz&u9=wmnQ40!#`vM;tkpCRADq43@kvFxyZvS%8b~bA0gSb1@fmqWjMwASaEgH-f%D4?n6z%WkCM=wTDk`{{ zcn7I4F343I%;nzpi@3Z}oP3w5Mkj3|{oS`=$5%$U!;mQ$Ts2J!BPqKa`~J*B&!7%< zhUh%bxPL&n9O+8CMraR-SsI->H-7HDm|K6`j~`qDxfR~cU#=2tOj&gGBVUoYpQH1a`k1iI0k2ik zVt^8470|BY{_RAK(0XEy*aLEjGH<4IR1`{=Ny$Pf#eG|7W*Mq51hpF@?4{qK5K*0V zLIN6$-xyFGjo6!7q!PatoFg@4OsMSHg4ri1_Q(_LqKpgRKq7`u~vw92y**AbD!W*h93>oO$f^22Xd1IT>!1J8Y`-s90d8MLTI3nKplfB zJ1s>23lC7rD zF(i2>{n40&eIjK;H}lqHJ_q4$zf$Bw{w->{3d0F*^GJmi5(V8mv_3g9wOdi1@nn09 zSGpOIY4u8V{x#817B+{=yIpxje8n?Vd})gDC2ySFs<`Y|PHNSTW5;1FNc5Dxry+cG z`y%xzmJ1YbC_6ZX3xrkoxIsvwn>iA{>RC>=Ic%xdHBroCx*MOItO@1b`Iqyxb3!)9 zY$-0eCohO!B1cZCT#~AN#=VrCvBOE1k_cuVEuJml*DCbp2cv9aO=O2O(=|vDk6y$N^KalNLm?6*(2f~YexnJ5SosaC4-J5f-|OIAuJI~ zCbf!-lH$K+bpYWG{w2&4i#x=hkLw=RCdr%_jFXK~49q1S%Y*Q?&C;C zgK|Egy*G>t+-%#%4oPxrn2RvWe_{Z0%jyc~hUNp-8Mx8wd8Gis)BS5x`jXNPb_bR_ zuq4ny1l<7MKyZt!ExiS%DoiXFWh(9v{$ha5kij0x9>pHt9`lN-CgAbMq9jS2ETA%9 zNEt6ol7=KHVLsL+HaeCezD3G*Sj(99Hzl|KFZtwHnPIivv)$g^h~2?mpKyl$%x#6R zJQ%7OY8k3@>WajhL! z^t;D9!#Sfki&&m;rsBEhvCaVSkn^bVcsh@t+#V`B;X84+@U1Piu(v=vRUO?QG2imt zZr{S)VjKY%c=H~_vhpvo2`d>V8D}=~eRV!S!HpJKxDW)41dLdB$nyUDFyA!qVjp5J zW?QtFw3)Ojw&faO>bFZXh}t6Vl_wn?>JGI^w5{tikC{@-dlcDEg2`@%WKs%yGz?JBx+0#xZBzz67YvG=S;_3%&|bLs(%w zE#$U5H_ZGl(Cd}(#C;%ERjr{+?-5HkEHFQ&0OwZ-uI2RB3gsr z1czm5)XS9p2BLOhd6j2G%bIO`|o{ z<%C5G3rh2B(=S(XU2mQK$`c*lV6@Tpv99F~SuNClfcTMt@oT{`!2E|>@MX7lED3W_2qH);oNeq*lD_E<%$M=V4r zRptfe&BwHyk6jX+ytTWgKS&bl6Q(NUDKu7P*cRGWT(BpD(q`6&Ixoj;Vjgo2USx0Z z`VxMSeDJ^fLN-C}LRurau`Juy+1>6>A%OwG-2HIDc>_{}Q-uYgoT0R#Z~RaEFG3cB zVMH1N`Am6h9hZ0)Cq&moO>$mDH|$=yYq=zQtE-2q!>jM@-Y$19>$hAD#3kt?S_bMjubb~y*O@zvOry9_Dof2goHbW_U30c}-8lYZ{Ht zjL2)o?1`dr8%fUP+l*clAN2=N2K!^mupg+pNexVUO2j0#cl*x5suDyJlF8PjU8KK} zH5MG^8|Tj!wE@1!=w>c+`|Lhy?o1S>7KF`cO#_aokF=*>C;}BU*mG!mdGq*oj>QJU zW+*aKjX9`&r*npR65JCWOi@`>SR2iJHv6xR-Mlqd%a_ab1VTE~K4g(eG^h_Tpx}PO z6PiJrGEVr!qovf66ls5@D@DBv<=(E}#%xw<#&y`(?cW2A;SMQ`ZKw$`4AF5BP5s;j z$bZ$skf%M3ZIS*{kfHKgRGv0X8<7l*BfSp0P9_0&`z}~yr|ebKq>iVmqw?xvIWpTm zb6W@~%t$|H@!q-}Bu60^9P2W>G^-n{%jCA*Z`VB4#5E(Wtu<{NtI1H|D6+EIT?O70 z-(2s%=^g8}wB63V&OTL`V3;`mA@IU{(iLrXX)b?VegNID)%d}P%xJEESZ_Dhqk!%o zzCp7_TSg;Dx6Sx`1|36K>WiiEtG&rPY$EMFAZ8P&jN}%Q}qh>vz}$n6NnRrN+ivV zrfx&gz2FDIaNo8LW(Omc3{l-VitWN}xfqTjYk@nolcHyOQ*D|?uT`3*AIqS(pvQ+Ez%#e{V!rnACseYzF#IfP% z*F*DLr{_mU=UP$wQQO5+GQ1C_7O#XWUI&)f)nY-lOsC$yo`5I$z4YMRZrMVWiOxwI zL(}`N#CsGbXN2wjMw(~3UF&xAc}8jLzU#@m-Mf)`k-|Zar@_PcnnIiJ3Ft?6ZOC;9 zVao`?6rmb_gNM#X-_3CMdFVO30wv#>2Zi_ihRS=R%o(5RecH5Qu+yv_9Lv$KQ3!C;HzOJU$o%`tu6) z^9;-e`!8jD{#KgwY+}25kHg@H+1J+JT(-8y&gZ%Fa z3Q#7y1OWkav{2P>(vXwoF|q|R7#Q0cnlQKl?f%LE;dA5pB!MPQ21IT^Ya2%%H-3_T zICwtkzuk-^ME|fjS@Dx-$SD$u+B%pJu`{qSFp&tr5fKsbIT)MrD2qw_3;(?0Coy+& zvg2W7bai!QaAjq%bueRO=H}*RWMW}tVWI!zpm%h)aWZhDw{ax>kC6Y8BWB`g${>jr?CD|04Mq|Ays%h3P*z@K5h&5(vQYG5&W#3BZYqaR!5c2>JrVgjL-@ z&vc>PRMnP!C|MH_VL`z_!C=X9Tw!3Sh{D?|TITCdmtV9roz-0WTNW28trqHCYlzwd zZeu6GVN1yTW>aM;K3=?CZD5Fr0>ymS9NmUSS3S?EFSs904)6wxc9g9Q;)T12z9Tci zU_l_F_+^WZ+Wy9cKmdaR4fr7}gu;Z-CkydO{beyn1q=3LgXOr1{VxQR;r@Sym|)mo zL3@SLAky83{uPD*&g}SKg3|(j7!b+%kMSA*qX*$rP73#bbRvMsiF7f=QgoXVuzZ^E zS8=bZBmfXEc_KWqU)3CK(c`GD%wkblkXVnSwx{+G@M zz+gd5lP!*l{^QA~C0L=U;Q!K-WDq)X9;M_24qPDbu3SSi{^cKt@0E8ipilZIjU5YV zH&t3-J}QO(_{pUT;iC&BV!8!`XqrAu#g|k}%_t63 zY=H7iD9_Ql9I=eEk#oPW%lWStrXrgQ21K(=c<0|A%StyhcyXg0h#o(GG#_)q5T6-7 zb@Gew^mSvSf++|Sl)_yr>8gfapQRS-Jo8)r23?r^+O+HpVQHy&Qf5QJm8KZUBzzyl z7psN(@u!GPTPc1+Aj`l7F8s;p^X9&0B0u(Hhmw*ZypO=S`TmLu4a=K+@+&c4Xk}b} zIEkrFX<#$pM&5M-yVggQ`&LiZ<&#!z$)|TZsu9u?>GX9pJt$XQFDTDUy@}UVvf?LB zMCX9V{?BKbePWyh*DaCxF=-%$;Q}K;p|neZFW;{-o-*w54ikYde-oyQn3QPWo0#n- z&sjJ>-Eg0>{gpg^XU4vyp?uZh4iM6JDpt6e!Ht=d7eaKjyb{NBZXT$#vZ!CW=h&l& zBO}0)<6mzTcePJT<#r6&B=IGX^*6hmfm&bVl^G6gQOSbXN%49E;@QM2E0mr$|CzP? zA4!!Wk0Gr29&{Z4GuA>t_$zk#+`O;mZ!@G#7vgl3-yj!7AyAO zr20^YfuVP5-Fk4766LdN2yX~9O(%#gn9%@o}?(^riaE~4N$juIB zOfBisRwFpkEK72lx`@P|f`&INuPs_>_QY zfb)c`_|i2Yay&~o4kFNyK7$JO@y3NDAIK}_947c32t-BQ+!&$r7NJ`gKI-0bP^rDX zZoCc2K!c(Uiw_9c5I^~SKFn??HCBig$P(P+Mn`|}#aK1T<6!OUC&wIizE^OV|I2|F^H?FO6{ zI}4{}iR$RUQF<_Op!9_qUM_@=2O}meG)g&i>)-)BWO${?M-u}di?ZTBl;wM@z4S)x zf&+6`7Oz4JV6B&okVp^we2I4-?b+zn*z~?R>Lzu>1-}Fp|M5jV-5#wNQqV2~qDo|+ z8N~{9ZwJ8~FJQB;%wQ44f=gNx&Xy|#u-5SYfgvTe>(0s=7jWM+U%_QhJ=r`>6rw

cOjnr>*RPz|ePJft@iK~qX=2loHEf?dYGG38$(LAY?k~(HBFy+otm+`$|g!OC5W$@ z(B?4fUN;no9&!d_Z(mst`5eCX7-4e>?W;DB;-<3tirpLeiYjgk)g7-9dJ}qLR9?bZ zzu$t3Q9MXAk`8tcULPp5U}pkxlThk+ji(XQ1wSXKP%Q~jVac($)f8~rSd3gT+!)7x zB|}4YApWk;7%oj{;f2EJk=~Uk)K3yfqMfsXZDur<#UL^S0hh84!fZMJO*5z-0lX#^ zn*1mw%xoJ5^|CA_g1WMnTzh`;S@J{pKoh41G{hp^d2qt@6 z_-$)Zt;^P!uo4+UT*69Bb8w4vD<9vntALqpD-H!hnGD;Ck_8&GzN9+E1ty~47+Z?? zjQ9JY>&)cN;?Ake^HQmbS=yy?O^&)P9siz_6W5hfUlf*_D`O(Uoc#Fw)DLrGl!`N% z{h7}%pvMZLE^_$ut@hZvGxbBBeX2WLUW*&^#2_Gl4=7ul$ z!lh3#b}Qt|5($FX=?y!%IE=z^%q+mymU~|b35z*kN&Z34EHfb7%%S?IrITbg(7w1L zTS2TY2}9=Fl9GMK)l?{VM=vU zq5b^;cm*1E6y|`%(L54HB>3}|FRcd(0lXa(wy}P(iV?M(L#?>IpNWG)Rti1Mcl;uP zXbORts4uHkza3cE?z?HCp2J5A|CH4R=gR3|2zvu8A-ns1>M{$p>)X3~HAiwX3|MAp zrj#{0KjX|jEZ}6fdekhMB(!;=Dy5}idN>CxK5chynZR7u99g7E<}&(tJlh+~XXZMq zwO!Id>ADo~Ot;GNp=htWM{Us8>S2?|HZSM~Psel=)@JgV%rgDKpyA;B&y28&4HA$(dz|FWu1*|(k+#Dr9$^6Ny@wgbO*zA`Xmx~bCb;4T?( z`*4|MrVd*lEFz%j6GqzcY`;2UGZ)q(O`N0}&5e^;SiTP`{HYF& zzPikTy~MONd0C_h8vrJRPWEM%;sbd33kp1BPJhyn&yt?cwYqkvqLwIO%0F}W?G{X^ ze(PyXqNo(8bCWIw1 zF0d5$*}B?JG%bmB+MVHywx8zJ?gs%i?~FLnGrTcXxO;gn#rKI@2U9%&Ce37C-x2&< z+a+FV=w5HESN!Q~^PlAJQ;<7;i(dn?yb$K~+?eOvo?46*DM+$B$qne}WO}qb^&Gfg z1%cVDUE#`$wEC>?vCn~bPp(r29gfhi;@p>*rYh-FTXPlnqgvzYNHCG z=wpWQx!bKdC(aK!mdmoL6MFuAGF7vi5Y6iHX01P?UDGW_*#9$2p~0lJSr>9=fDhjn z>{3On57Nqa* z5tM`Ax!+3T)l{v;&C#Jtk-*I^A2@ei4|-lgrb^EqxIYV-$IJ|3VOVz@#sC@n9Z|)^ z5YZimN_<*&Gr7e@ZPgk)H;isYo1kd@W`M)N4>)KX<2qFUR`+Yr0i!T?Gj+DZ9nBoR zHh5i88@@PP5xsD4ZVTq^Od8lR>r?@=I-cve78=`LpjLGVx6L~HcIzbr627JWUFEzM zqGX%&W+??8ChB>nK-WjRBlJ=0H%eRdwyoH76-#ESW)(*yhZXOBJsnzwQXjNAEsxSen%P2)dREK1#z$l7ptLohqAQFk!dwcQG{R zJk9uqR3l1(@E=Ds`D(Ov=c|wv+uM(wXq~PST$qRwt}@?0q>*KTQt_uO<@p&Vp%yZD zAKjpii8AN*YcWjRVFZ6X?g`3YHu<9-T$Ed4>j}@G5lBd#^MX;d%hn%};Pkw;MLo#N zZL_ZL{#}=RLn$tZJtW}8!_CSFFNeHQth49eU-RIXwkULPjtrq~V3o#r|MAqg0Rh{y z#NkQ7!Ow}_9iTEtxE%jxgYiX7tvr(Z&}~i-83VuI4A>>0S{sY|8-!wOHKO|UEJhJm z^8E8Ad6Sc+p_&L$#QW^A+ldFVhL<5>=z0rS=JE6Z5~8_6zzqe})g-emmyiy{CUZT> zG@apu*AQt@1(rJM#{BZk`wtA$+jClV-a z!rbS_2p0l`*igRj(!|;jW(KE(g)DLf^SK+;zFmwkpj+27FL8M&W+(oxv3BJ<`XYet z)>Y=sB6-aXpG-?_W3(@}s#6RVe>*C*st$ZQ6(nxsa%oV*{W;Z6flqmioda#kE3xt| zNE3m5`Adj7fnoBL9E7+br4nL{*jzaFq1*cxEc*$;a^!D%jdI`ax_^(E?$x2l3mQOJ z=JA%eI4*Wc>xgZ5haTr>ll{^^=)OY`Uv8EQW0drTtR22t5W}`L zp+}Q&rwcghHb(YYf!O4X2BBy9Jyl8pxAtYjwtbLKg!A5dcKNrr4FOaSjNh?lZQOIO zY+sDQBNp#M3b<~oa!i=@>o#jS*PT;S47oabruk=;iNC|0O&%}Ag z2P!VRSJ1WuHJ|b<9o?@qi;t|;y)^O=-NX*kVQ2aaWL%uz<14kABvg)6&bgHcb<4fQ z-q&3CEYa){#rK)4(3#pobBc+Yk|lA7<-z2)IGn;8=XwH-Hl(m!zTH^-QB>>Tc>6+L`+VK`b>>V9{TcJXhe#jY5J4IUhYH9XH5VGJCGdoFZv}z+(5V0=#ZV$vM=seZ;d{y<{KCo0s!yL=G;j; zUBwbh%G+zy^`COoq!>h6kRO*Dkuvbf<`Jy$m-i^`i^Z>9G*eRA(MI1p>Q(CAL-0kT z!V*te4l`pIE46PF^WN9Q_+kQUFD4TnAuYdNd|=I)4Z*JM(~%|VDqQ$1=l|x}-H|@DqgKwgd{t3GC?GY_@c;XknHi2Rwk#aAC=YjBEN|0gUY0Vnr@V6I)eS@DHKQL!ub=h$?q?tUf$twj+z2gel=Ss4$k| z>zVr5i9c7iuMvIcA#WSThDz}}%(I8i^O*UunY6;3M6j_kFBnHwZ6Asj%*t15yqj%( zm-*k)oOrf7R%rRmW^k?e$$TlSrSCX!ijT}>EGweF$gyZSQ!@6!PB*Z9GwLCrheYw| z4bSQA<_p&Iv-%}aPiXzS1@|-42Mk(Vdo9Ne)?ikqyFV@4gD$7RLA{_Wa0zT;#JL4> zXo4B{1^Zv05Wrp}vo*1#fb0*JN9p0ORRY`RHOYj1rWnp@@Mzil#4nr`p4%w11C;ij z@!uodLuqwWLaY^7JSke#Zw@AP-eZZjh2@%`FMed2f?)L~b8U?3PQBR7*@wjF;*dA)dU za{B02n?Yp4P~cF!<6ew2u6bFl2NPCn=@QZM_7R-w^k2)QFJ zR#U9;6=O|PB)xii6>DOJBG@4>XsR;k{D`Mdr~ic`Pr-s@KqGI1v-ncw+7;Itw@-Nv ziB4qL!aw|)dg!pSCRJd%wL4-xoMksEhVYUoYkbd#D)94JyG~$Awc`{kS6xRDY-Q#o<=U2+?T4!9D)^e;47nf&}QFvDbq=36W8 zdyn(jINtbv;|Wy4sH*T6OjuyS?8<8NL$O?va(e{ix4qLO5uF>Lxjm(6Sj`Zk?bo!z zpn$6|KbB2Qy_f${Oz0f*2us&H{>Y*PU>TSBPBhlejZz1;1$Wdnb-v<*H*cAkHyZQj z)bMzMw+W6Jv{pR14dH+1uWyA{(yoSlKa<(oXh3E^Ip}V6U}&2;$o9}q>+i!!O$gCh zsJi=cThj)yRwNK0aM1>6q3NcnzpOO<2-J+dl;LXUB?0qZ_k_-<@&tL0=R?1~Uokcy zsKbL8r2Nj*$b9T{7EnCAv`E#PbmryJ@kY_o`G|LLDlbE{Xxk0#9&o1am*mvnYK>^= zIHS}`yD@DSI4^~aw4tAfPV2}wr2J7-%Z_V>N!ipoVQ%ev{LSegIGlO4RWDVDG*XPh zkWT@wFQm3+cQsFOnEAwGf-HaCet}>g#cjO1tsZZ+FKiHereomuj>7EPnJ3>pOt7A3 z06`ns-qL8vySZf`Mqbr?=L5zh<@ho|flqLu50Y#{EXNeqjSY`Tu3I5&#_hDe;E7|n zbU8~ zi*;(cgBc9B6?rF9vBG|Z*{%J9lxwV4&jvo+xE}D;h7hfv)DfP*3nsehd~}>8Uyndo zN1JqlW4f}%9}M`NeOVsW(7Qv}yRD3|BboYb@{qIa%th(N3zc(@400#Eq z@cJihqUP5s&7fB#J)t7pqAtm8z1uUhD4zs-p$MCD+#|M&GQKiioL~%sW9d^D^+>U9qxOsS&hQu;KHz-X3%PI9nBRB#AB+aW_cXkAm0DPv z%w;If2>ncrh(yW*Ll+(cVy`w_?fTXd=tU-_)>!m|BKu+lP{$Q8a?I~&Znw!20~GHK zct+`D#V9)^vUw4v>)P z`hY)QZC02l%zvK&64rEj$KJ26cmzuekbVTRAvHZJ*B!4y&ItIT5d_A9Uedr;rLosh zyc@h2hd^?x=$&3RxT^{T@r5*6A#r~cgsvP$Om5~5vzG&T=PJc}^`?phIo6%H{Uzbh zYGmtCU$^qu&g`y<>dmp$8M@HvQk-{zyLmf14>C?Svaok{UmVwe!|5ebU?NV!&z*fPN>7z9x`B#PQ3y z@C|6-v-^A$U_;YHD{1}(2M;^!bNh^EfF=^ZY4+o(b!<=wra*RbGm&|b`7Ud*`wYNS z5WV`7m}=J;4)l=s>Ic~qBY+*&Jr$QCbynp26SnVcQ%md14Bx3ksf5VQvM!U zu?QZ=cmVGeOkK`Kp|v)}2&ONndXHV14ol3j96a)}8QyXXL5L;lu1 z81og-d4#Dcpb z+M>~KhOtT>`>}zJXx2J@Ifc1x7m_=-se~Nn;5xvgTKR|}-(bZ!CO`1w4dx^n##SD~ zt63Y_dA7tZ?lF;0yNi^qv1=~KELCv^d3da|6{I30MwAO_k!E5!dYXJj)7NYp{X5(= z1;C#Y+iFanfnu*9g>>L%cS!0~UO!@losW&uFEAW}zR4SUACg90PI9r!Xwu_WBT?DE zT;m>Hhd)}#ZUb={gL=9@170M=epS0sa=qw+sd|8&7~U2KPhjwJPKv+~hIkif!I*3jP)J-=2v zG2OSIJa%7|6nxLa)(B2pp~{YSKV*jUz^_Stxo}o(A&s2tg+&X-VX*|TFz~RNbfh~8 zL8K-5Ny(8kbG;x9T)&(Pm0@m3(8|MTR~mnPo?BP{Cml^X1W)I2S{ibRqz3aWQp zgSmKrFd(V(&}4fb)|qQK%=p$4s9&2W4XjygXs`6uvYBa69cJ!u6M+L@sP2II`4hhW zyYcEcUi|oPZqMH*X5PPNI1RCk+}zacPEilNEvSUP ztWAFZ>dKMn(*dr31E1fu%R8=+?3_p)DR0znM9(?u z(%o=2 zRU$IfIQ|GKLy`Hzh{Hx`g#ZwK^MkgszpGOx$o*k8tbtULIB5AqVYU1FW|DfZTrlO$ zVT!AuC~Ow>dYw}JO1}bsw5;@^K~dI^aD`6c<6lcsSdL_-C=WeInZd2CFg$pYCEP!1 zBgB^Y+bAb2h#hz8oz-lS+5Yc-?}|zaN1?5aLhzP^GvnjEXmUW_1&>G^$m#`+td%3-&!jynVUH zC7a@FOSCFw$!bQ*hMK$xnwSi58*jb&md`h0q`Z_>r=BT!tea3DQ-RIocs!yr?&mJm znngiHG1V2VSBrD@azC@tbNa3Ak*MzopCQnq(YxJ{>(>bjrXLg#6twegEjaSVGU=?Bb%fsdu{ zdA?rpCik|LIq{Ou4n3Ejk)oL%xe5kr9Yrq}9UkJgE$Q~VFrRZa9UlxpmQHPj!|=*G zVKy+Ylqk%^2oTzi`q~A*q>=f&fS8g6&iIZBI9d0FPXF-0^?!-6!rnLF3`bB=waYm6 z3#04<_$D-!z*4hG6r?G3gxZ&oRtNQQpPelziK_@rUs2|s`&c9eNb&(U3x6@ z+LAcV$FPO<8}?;9kXRerCUJ@LoC>XYA{R_l2zrIkI|U=X@5`Xh+Ee97)COxQB2L8G z&a^{I@G+qaXX@TtQC*QsaHM5;I07^%yUM@RVDfY34wzM6XG_H5m75lp& zYhJ7*q@5hfD`(e$uMm0;-|u|&rp0p%jIjdD8Ihu8z)H)QwrdU&-C>k;Ugl4zWc5Q_ z+FwYL7BX%PONfY!!~spFuCQ8B-0+gGH^e3c+GetYEv_5>Mde@H$GPD7&pi>>znI|M z*@xydJw@*iY)nfD49p9-dvRptr-%2NbXCDhI zOD+0cEwq4G@o~wYUmNL_iA7Cq^Jtf*z-8PY6v}tT4MDcg@5Z>BYxbnlajY`YO~Gr!gW80u6re3=Sci*tJKFHULyn!(K&yk^I`I-AXr zfKq-SU_Zykcwcxy^z?*@^~5QeS_`9sn1-lTaqEr)g^UuPnZmn^Efnw6_NyS!^ZQdo?EX6l+S8h|y0g3$z zsfTSHLa#e#7{P6XS!4zFR#=*MOLk7Uz})6=-RuwVn9?JK=U-P-FGHq_J`b>i$5+V8 zS){5C(5MHIDg7cmuHw^<6GTr*m~pSyH?JQen;$n)1}n>%ZqaGRCO)ueD7Bd(dlQ|n zc*gSWkU5e_wTIDd#du`gMS~Z$SfP*gvOHW6X}aKXQ;N_!UU1tpw86j;IHrv(W$2D5<)6nI-{itP zj`EObIF!~rV~fGsKkPX8*jl}ZG2=js$ZESTe`fY}{izgrh5VUEMJj6A^8CXzgB!FU zVxIK5Jc0Ro{Y6PEYUd9@V#iaY?8lX$S41By+SL0jeB8?wuAM7|!B4U_(Tt_nZ0w@B zOPfTSl^ilh+HV=&4Cck%4G&mv4r}z~jQHnzI>a=x%2YXRZ6pO#4@ycJp{YgDKU^I_ zEf+Q71dOP?TdLBs z$AgfEf=?)E0*2L(!zCK-GZnF6%^mD^%JST(g9=?x@861e1l1K27VU1%UM2jVt|XaG z3s)w?2H)fb(@ZP!GY^^Es9Z+V1LP9kE1RTe$kk??>WD+# zg_rt$h4HfBvH61~$tT2DfhtZ52NkzyYNNWshMslL)aCIw@AU)URzCk`^YdqcEDc-f z7cDug=tS1>z@Hs{7Hmi(G}PD&C}bYs?+)ZVzwB_XxxV?I**uS%M#@s;zIBRYwd@_zKNZ(hLx6)VF7j_PIyT|Md=S z?R(??yk45P#k-@d$njuxHzDqN9HU0k__JY5DK1CZPH%1&-{p>I1) zHXmbgrRA&;U!Kd#F1ih(m_zsN0Ly9LnGD{S;9ix*S{RKO7wJcel-MC1U#cxeAq@IP zo%oFDBjP)bb%MX?R(9FdFmf-lyKu;3$=3EYZC}R))Ww%s_uztvWoq3l%M4cV?y#BQ zM6nIOVvr!9`=_1+A<>w|T|%2#pK@SXnu6kJ`Wfqn>v7Iu?c0*m>|a}m?)XU89*`?wdH7&hT3O9C`>{` zZTg5Zly*(!kMqxDGY=(qp4b{%j1><_5LUb!0Qp53{TRLAP5H{gE z7ge{6a=Aq?^@x<{-7{EVmIuy=z#~Eu8Hh*L-e5ek%*cD3PvUtF46Xy+h~O(2_a8ba zRN<`9=#G>xeYVLkVpnPT@{-Y_r~Xf+_+eFD6Ol@=Yk)=Ql4fDH=wAx!;t;7ZTyGKI zDkl$g_)?W)QB}gpF!RbqioZPmtXSB%mSi(H3KEkGt48@HeflczR`?c*AAv!%H_M9b zI-)7{lDtn~$sXU}`_8;7ns8)=I`4rD2t{S*oth>yC$Su5hS}lf{@vwrx!Qaj5NrP> zN0pH}+U0STu<+>N_o~kMg2W($oOzNq>#Twbprkq2&|{Z+u)C2o18l(No*A#ZE+wcQ zSOz9J&O1T!`e=Wg$mo9NysPg`%A@ERj^jvoz3z_J4IpL9&hs**faA0cPTA`j7evDE zgYLRozFljay&V@zS7F#r6{w)9YbEZcjEA6nFG%I^H)4|Sgr7koU#yg8)Bnvly^w*B zRF&&XaaxDw2dSS&LYeM<6l}Edu-vK&<3$wag5v(v?@?;Lzq&NS*E8`w(d0_r+WQ1O z&0#_{LBFDy+K-IF;R+gqUN=;;aV`I*&s55Vz{2sVp#o19Y{qkV~HqX$cl(<7v`@8 zV0S^|)IzX14b`c*Q-3B!{aSF36XsvCSm9k|QkNhxav6kL|A1(-=z zM3ZjbB&jnqmX3iPJpAZL9KxKD&}Ruiw5-f3k&y<$@)mEy?#bVWXg5QH@{tZL&!=IL zGFuU&wTz(f;@uvSGbIBm?=$SD-}4Xi(esL1#}FhZ_pY#13RoJesYMErfX_=l4obo@ zhenFkkX`+bH{mEhp?uLkDS=sCxgi!K`Tl+OzIdY27SsCUp4Nn@ri8R6%6+-;Ht;bn zyweN4GBXdxg`e3?!JcOVUziON&OVn+Po)X`9CX&WST4!9LX}!Ox5A&4bh5;i5!;X= zns$Y|`v(xyX6KuV|aD%Yw{hm5eusAde;?=^d%yCw-JcEx;Q0y|XbFd`z?<&d_V9$I*$VPBo8($Gjgsr zZJC>2sQSaroU3g_5WnKhx!**)E4IQFB$&qp#5om2=u*ua4>FZ-eK6Q_(&)4R&mpJY zI@O8TQn_-EwBeh@#*4LFF6t&EM`4b4Hn609Bl8u+EU9>TC0XqL3 zpN=SMeMifH<`+XWtT6J8laxlbn6s}wB*QjUcUGOgL0cZ!yTm2zV-0k|kQ5h%1)<#c zI-%K0!!72zr7}39agASUC^Lgl40H1bN(x0w^e0K7ej{4VxXxUnEu?9fTEp=|OOy1~ zMTv?(OMCIR@NVT6(p*HQw8`=ifxYB_L3`~_+Bkd6w|og^~k;y>U*lBI^$)4ZaX~r zTf+DtKFD$f^Tm4*z?pa5>i)IMa_Sy{(bJwjUDV}q;cD?up9ASPiEA&Oz9L^ve1>%yypr1_PRp2zf8lm%MIsv2$RfC)A z2TZS_Y71MKSo#In^R98R}uw~GUKsa6oGLG2N% zX-lJ&60ssyV(;2C2tQhC)lAil8G98)Yg2+!vqp_lenu%(yEf6n}^%X3mlK{NXaP8kkc}-|KOR?Z_%yupj)K zl6y-|7rAV7CY7OBgtX_;FWkf#xA@9FxPuorIuH+llQ^l6w%a=j< zUg_yBh5mb;mcGLVQ6i+43(twcRu4itw(Urb}0jEE;&ZaNG!TCOp9~_frYXhq-_68Mjzqw&aB^%Yi1W75rv6p0Q63;lQ zwWQ5srnfy@&#j6C7dO0DD?6I+jv!UKCeg(S(TkIqMY*huC;gmH0EnFJ5 zHtxuWN-gUOO?Yaiie_ZqzZDB!|Lh0(gy(&5B(u(XnP(SrFmD=z9|Qb;$e)X?w^COv z9wk+u<@$6=7DI_`7n<2!^Pb)$QzF1VH!ybY_a22i#c~d2e}ZL|)PR#ydI8x-o$qO> zm)^b8K60B!MW!C@9=96J60Z>R;Kl`ACz~{3fScwuSDSiV+0l!rhF9j@dWp#;E`)R< z)A|s|I^Ek!oDsK%qbD_;*0z74zAdmGHj$vI%B>)-6KJhpxfxWI=t1-Qr&nOKXf0Ls zOsUsrh`NrN3pqF@b_aa8dt;TC4k2%1eOTD7QALn@0<#E&>9hTK=b8w!pD%_6@Kv0LM9 z9>Nma_*3$JwG6iCDvxCc%iN_qozpYibH8bYnQbPTTdtAqYxVlxIfcze-NKPxuR-{4g*TqZWpY zrhP49n>;%Gs19Q~2IF&kC|fP=uv$d{VCrQ~8)>G;wIv3+@+-1bKI>74Wzm^hCGKe= zaWWfD`{QZuTPR|ouLztR-E^1zV@+V6U3t?fY>aC34yw;UOV`CwcZkh!dCBH>Mp$}V zGqa?lKHZuI9ts2BM8G{J-r0_-kyW;%4?Wy@IyF^NifUIQu?0^Oboec6odjMjOv<4m zDWYbgBOK2`4nz|E%~*%?(YUuTnviO}%`m%<%@iM*$>2x?E2`vNT;SZBRa8mA}$!B=G@bO!Wl*u&4Eo&~}Z zi<~032Q-%5Ixn-Pf|G7Kj7UB9wK5_^FrwaVSO=KlO@Xc#18?;|)L5z|w~=MMXPR$i zt1=o?mX)xy&b&P6O>dO877}@!sJ?{2gyJI=@(JK}^I1P5*4>XxBC5^1{jAl50qC#% zHi-LPHIRM6OGhq>NNQ8OoH`z zt})*k4O{;CT<&DX?VcIBSB%E~es153bNkJ+6G_;RQ+UZOkgFG>wdur1i9+ZwK%4-I z%Zm>N5D9h3bjF_(xVc#9zcI=8rKpz234p7jmmg%0J--K3?LZ@9k48#j!@$) zg!=BShI&gIHJFUuoch3Wt*hlV$%WvmDqsL~X6d<>^%*kVpw}Z3Lx~ceh>~vD(xJ=< z5(}Y25o@Y1wkC$d1}ypOxQ45{>UnOi$O-|qDB+u}eWs=w>GY>);OAW8ja>j1NhIi3 zF=IT#0&*F8b0nCCnH}gx*!hS_(RKyB$g3Q#Z`^i=uTcCImK)WF*L}=SZWq`h?191LEmHwd(jX~F0IVOx@5v7@Jl$Dilp9D-wA`>`__P>Y% z!0rdGEB>DxU&XV%Da*Gn0}XXZ0_!jrIRzWS_0s5;tkh3!CA46g08%|jp=1Nn-55P? z`w!!Y_C+c^i@i>{P55f#qJN%)$xV3lN9XjRNG$^@)kicH(f$~Gxb7h+iY8=Pedv{u zn-J_{)zi?ptKV)ut?FUfodnWzOMc?uUEAICb=z_Gq3oajf{<|m2{#R)OSbYaKIz=3 z7fA4yhCF%E^(=89WyJFIA6~e^^IfeOI_@67Us*Q22S#5lwMEfWa1^_}S2zEW&yJMG z$MD02W;@T(6OeQ1`L}iwtM#?q>fXD*?G0Z$o&?n9Wo)gc&5rGJjOqw4VtR|5Wu<~d zbb`>yDUJ;10*EY5!EODHu&@wAlyQVO34P_|v)eza0+P#THfWDH(tCO=`m<+Rk}Ez>UY#!Pq24u;xGZ?pPpAI z6>a`rN#)5AS}U!-#w#~sr`^1gUDwrdSe$n&Nf==@UbO2ivLbqJK4MIw%;bA)!MNe^ zhmCru{PUNi>2u1hC9ct{^WzwBsJ!&g4%I*`(jr}yd)sK&mwF>|N@zoi5+=8w>;0o$uFt zEIZ!!E4pB1(#5OyFiOWy$;(v6<~1l@LAK;ShM*EM;)ng&R4zpaf1ES@acxG#hiGKP z#QrZ^br(xJ1+Q8D*42X?B~Z0;f~9p3_=5i@ZM%VarI-Z@%fJ8Qc#HTDg{M;4rU_`Ytsz#BG8%X7c(wEOQ_JG3#91~UYi-~y37r#EuH(&8A(`X)#v6_&=3J=oQ zy)P@qzYm>T|E@>*?BV31jz?*FXa%w2_4tLut)!|`p$>eQugwgt_ZZx>z0zjz0xPSs zz*-*JHb|WjGEhW9C@(;ts7fTqxz4e3OT;B%U%*VLZf8WiZY2sT_Pf?9Yqb@h|5}7W zF`D*pnFtm0iNmrr74i`Lm>d#(HuNbFz@5UXm)NWnkw^*M$%E^s)t7jUvsC3mBc=*d zoz(=sG8L|9Wko0O4vvb-iaRw`Dn9h(+3vKz@NWUdpP9IaLi(ojT%T;z<=X}gY5OIYWTI2BV$YaNTu}dsV z&I0HTJ?i7zX^VN8Zh<|)^Wq6SF@gpX=I?BI$o&Q#d*^R1k@(V^JaKm11mJs&vQ{|7 z?mVfnv(V#uaHrZO?e6UPH+jcjaZWc-t1Uu4Oa3wj%S3_imiQ}y{>!{0VlH`j1Te$* zZ}#?YiR!NbhySC90t4<)7W$^z(zn9c~;4gardx%TwPNp7ttJGX}^ho&cz6T8z LZDb|F=GA`yG#y|> literal 0 HcmV?d00001 diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 8b5d41aa59..472f153321 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -337,6 +337,14 @@ "text": "Permission Management", "path": "UI/Angular/Permission-Management.md" }, + { + "text": "Confirmation Popup", + "path": "UI/Angular/Confirmation-Service.md" + }, + { + "text": "Toast Overlay", + "path": "UI/Angular/Toaster-Service.md" + }, { "text": "Config State", "path": "UI/Angular/Config-State.md" From 56fef10c2b9aa231cec2281fd795a3e0a461deed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Thu, 23 Apr 2020 17:44:15 +0300 Subject: [PATCH 5/7] docs: update option descriptions --- docs/en/UI/Angular/Confirmation-Service.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/en/UI/Angular/Confirmation-Service.md b/docs/en/UI/Angular/Confirmation-Service.md index d42c323227..2d28d04b2b 100644 --- a/docs/en/UI/Angular/Confirmation-Service.md +++ b/docs/en/UI/Angular/Confirmation-Service.md @@ -26,7 +26,7 @@ You can use the `success`, `warn`, `error`, and `info` methods of `ConfirmationS ### How to Display a Confirmation Popup ```js -const confirmationStatus$ = this.confirmation.success('Message', 'Title') +const confirmationStatus$ = this.confirmation.success('Message', 'Title'); ``` - The `ConfirmationService` methods accept three parameters that are `message`, `title`, and `options`. @@ -34,7 +34,7 @@ const confirmationStatus$ = this.confirmation.success('Message', 'Title') ### How to Listen Closing Event -You can subscribe the confirmation closing event like below: +You can subscribe to the confirmation closing event like below: ```js import { Confirmation, ConfirmationService } from '@abp/ng.theme.shared'; @@ -56,7 +56,7 @@ this.confirmation - `Confirmation.Status.dismiss` is a closing event value that will be emitted when the popup is closed by pressing the escape. -If the status is not important for you, you may not listen the closing event: +If you are not interested in the confirmation status, you do not have to subscribe to the returned observable: ```js this.confirmation.error('You are not authorized.', 'Error'); @@ -83,14 +83,14 @@ this.confirmation.warn( ); ``` -- `hideCancelBtn` option is the boolean value that allows the cancel button to be displayed or hidden. Default value is `false` -- `hideYesBtn` option is the boolean value that allows the confirm button to be displayed or hidden. Default value is `false` -- `cancelText` is the text of the cancel button. A localization key or localization object can be passed. Default value is `AbpUi::Cancel` -- `yesText` is the text of the confirm button. A localization key or localization object can be passed. Default value is `AbpUi::Yes` -- `messageLocalizationParams` is the interpolation parameters of the message localization. -- `titleLocalizationParams` is the interpolation parameters of the title localization. +- `hideCancelBtn` option is the boolean value that hides or displays the "Cancel" button (hides if `true`). Default value is `false` +- `hideYesBtn` option is the boolean value that hides or displays the "Confirm" button (hides if `true`). Default value is `false` +- `cancelText` is the text of the "Cancel" button. A localization key or localization object can be passed. Default value is `AbpUi::Cancel` +- `yesText` is the text of the "Confirm" button. A localization key or localization object can be passed. Default value is `AbpUi::Yes` +- `messageLocalizationParams` is the interpolation parameters for the localization of the message. +- `titleLocalizationParams` is the interpolation parameters for the localization of the title. -With the above options, the confirmation popup looks like this: +With the options above, the confirmation popup looks like this: ![confirmation](./images/confirmation.png) @@ -160,4 +160,4 @@ clear( ## What's Next? -- [Toast Overlay](./Toaster-Service.md) \ No newline at end of file +- [Toast Overlay](./Toaster-Service.md) From f35da7376bc8a02bedce4c87d8e3432fcf274a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Thu, 23 Apr 2020 17:54:59 +0300 Subject: [PATCH 6/7] docs: update option descriptions --- docs/en/UI/Angular/Toaster-Service.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/en/UI/Angular/Toaster-Service.md b/docs/en/UI/Angular/Toaster-Service.md index 669ee3b33b..191f0b34fd 100644 --- a/docs/en/UI/Angular/Toaster-Service.md +++ b/docs/en/UI/Angular/Toaster-Service.md @@ -26,7 +26,7 @@ You can use the `success`, `warn`, `error`, and `info` methods of `ToasterServic ### How to Display a Toast Overlay ```js -this.toast.success('Message', 'Title') +this.toast.success('Message', 'Title'); ``` - The `ToasterService` methods accept three parameters that are `message`, `title`, and `options`. @@ -55,15 +55,15 @@ const options: Partial = { this.toaster.error('AbpUi::EntityNotFoundErrorMessage', 'AbpUi::Error', options); ``` -- `life` option is the value in milliseconds that determines the closing time. Default value is `5000` -- `sticky` option is the boolean value. If the value passed `true`, toast overlay keep on the screen by ignoring the life option. Default value is `false` -- `closable` option is the boolean value that displays the close icon over the toast overlay or not. Default value is `true`. -- `tapToDismiss` option is the boolean value that allows closing the toast overlay by clicking over. Default value is `false`. -- `yesText` is the text of the confirm button. A localization key or localization object can be passed. Default value is `AbpUi::Yes` -- `messageLocalizationParams` is the interpolation parameters of the message localization. -- `titleLocalizationParams` is the interpolation parameters of the title localization. +- `life` option is the closing time in milliseconds. Default value is `5000`. +- `sticky` option keeps toast overlay on the screen by ignoring the `life` option when `true`. Default value is `false`. +- `closable` option displays the close icon on the toast overlay when it is `true`. Default value is `true`. +- `tapToDismiss` option, when `true`, allows closing the toast overlay by clicking over it. Default value is `false`. +- `yesText` is the text of the confirmation button. A localization key or localization object can be passed. Default value is `AbpUi::Yes`. +- `messageLocalizationParams` is the interpolation parameters for the localization of the message. +- `titleLocalizationParams` is the interpolation parameters for the localization of the title. -With the above options, the toast overlay looks like this: +With the options above, the toast overlay looks like this: ![toast](./images/toast.png) From 02d2e1f93f39f3c9116f2be1426cace0144f099f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Thu, 23 Apr 2020 17:57:52 +0300 Subject: [PATCH 7/7] docs: reword option descriptions --- docs/en/UI/Angular/Confirmation-Service.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/en/UI/Angular/Confirmation-Service.md b/docs/en/UI/Angular/Confirmation-Service.md index 2d28d04b2b..a8d2c4c2a7 100644 --- a/docs/en/UI/Angular/Confirmation-Service.md +++ b/docs/en/UI/Angular/Confirmation-Service.md @@ -83,10 +83,10 @@ this.confirmation.warn( ); ``` -- `hideCancelBtn` option is the boolean value that hides or displays the "Cancel" button (hides if `true`). Default value is `false` -- `hideYesBtn` option is the boolean value that hides or displays the "Confirm" button (hides if `true`). Default value is `false` -- `cancelText` is the text of the "Cancel" button. A localization key or localization object can be passed. Default value is `AbpUi::Cancel` -- `yesText` is the text of the "Confirm" button. A localization key or localization object can be passed. Default value is `AbpUi::Yes` +- `hideCancelBtn` option hides the cancellation button when `true`. Default value is `false` +- `hideYesBtn` option hides the confirmation button when `true`. Default value is `false` +- `cancelText` is the text of the cancellation button. A localization key or localization object can be passed. Default value is `AbpUi::Cancel` +- `yesText` is the text of the confirmation button. A localization key or localization object can be passed. Default value is `AbpUi::Yes` - `messageLocalizationParams` is the interpolation parameters for the localization of the message. - `titleLocalizationParams` is the interpolation parameters for the localization of the title.