From 8a5193d4e5ec9a10749258dd76cf897ef5d28724 Mon Sep 17 00:00:00 2001 From: Esha Noronha Date: Tue, 21 Oct 2025 12:15:10 +0200 Subject: [PATCH 1/2] Added changes from v16 PRs to v17 --- .../property-editors/property-actions.md | 4 - 16/umbraco-cms/customizing/workspaces.md | 4 - 16/umbraco-cms/reference/api-documentation.md | 8 +- 16/umbraco-forms/developer/ajaxforms.md | 5 +- 17/umbraco-cms/.gitbook.yaml | 3 + .../assets/DeliveryAPIContentIndex.png | Bin 0 -> 85650 bytes .../assets/DeliveryAPIContentIndexRebuild.png | Bin 0 -> 100474 bytes .../assets/property-actions-blocklist.png | Bin 0 -> 47545 bytes 17/umbraco-cms/SUMMARY.md | 2 + .../extension-types/dashboard.md | 72 +++ .../extension-types/workspaces/README.md | 49 +- .../workspaces/workspace-action-menu-item.md | 0 .../workspaces/workspace-action-menu-items.md | 92 ++++ .../workspaces/workspace-context.md | 248 ++++++---- .../workspaces/workspace-editor-actions.md | 273 +++++++++-- .../workspaces/workspace-footer-app.md | 0 .../workspaces/workspace-footer-apps.md | 217 +++++++++ .../workspaces/workspace-views.md | 317 ++++++++++--- .../property-editors/property-actions.md | 138 ++---- 17/umbraco-cms/customizing/workspaces.md | 41 +- .../rich-text-editor/style-menu.md | 2 +- .../reference/content-delivery-api/README.md | 10 +- .../reference/searching/examine/indexing.md | 1 - .../security/two-factor-authentication.md | 66 +-- 17/umbraco-commerce/SUMMARY.md | 1 + .../order-number-customization.md | 99 +++- .../discount-rules-and-rewards.md | 10 +- .../key-concepts/order-number-generators.md | 217 +++++++++ .../assets/External-profile-data-tab-v16.png | Bin 23964 -> 15050 bytes ...nalized-segments-cockpit-formatted-v16.png | Bin 0 -> 3472 bytes ...ials-personalized-segments-cockpit-v16.png | Bin 0 -> 4278 bytes ...ge-tutorials-personalized-segments-v16.png | Bin 0 -> 7484 bytes .../implement-your-own-segment-parameters.md | 442 ++++++++---------- .../profiling/external-profile-data.md | 17 +- 17/umbraco-forms/developer/ajaxforms.md | 18 +- 17/umbraco-forms/developer/email-templates.md | 428 +++++++++-------- 17/umbraco-ui-builder/SUMMARY.md | 1 + .../collections/localization.md | 71 +++ .../images/collection_name.png | Bin 0 -> 22966 bytes .../images/collection_translation.png | Bin 0 -> 35582 bytes 17/umbraco-ui-builder/images/section_name.png | Bin 0 -> 51405 bytes 41 files changed, 2054 insertions(+), 802 deletions(-) create mode 100644 17/umbraco-cms/.gitbook/assets/DeliveryAPIContentIndex.png create mode 100644 17/umbraco-cms/.gitbook/assets/DeliveryAPIContentIndexRebuild.png create mode 100644 17/umbraco-cms/.gitbook/assets/property-actions-blocklist.png delete mode 100644 17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-action-menu-item.md create mode 100644 17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-action-menu-items.md delete mode 100644 17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-footer-app.md create mode 100644 17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-footer-apps.md create mode 100644 17/umbraco-commerce/key-concepts/order-number-generators.md create mode 100644 17/umbraco-engage/.gitbook/assets/engage-tutorials-personalized-segments-cockpit-formatted-v16.png create mode 100644 17/umbraco-engage/.gitbook/assets/engage-tutorials-personalized-segments-cockpit-v16.png create mode 100644 17/umbraco-engage/.gitbook/assets/engage-tutorials-personalized-segments-v16.png create mode 100644 17/umbraco-ui-builder/collections/localization.md create mode 100644 17/umbraco-ui-builder/images/collection_name.png create mode 100644 17/umbraco-ui-builder/images/collection_translation.png create mode 100644 17/umbraco-ui-builder/images/section_name.png diff --git a/16/umbraco-cms/customizing/property-editors/property-actions.md b/16/umbraco-cms/customizing/property-editors/property-actions.md index e628e2f2514..710100d733e 100644 --- a/16/umbraco-cms/customizing/property-editors/property-actions.md +++ b/16/umbraco-cms/customizing/property-editors/property-actions.md @@ -4,10 +4,6 @@ description: Guide on how to implement Property Actions for Property Editors in # Property Actions -{% hint style="warning" %} -This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. -{% endhint %} - Property Actions are a built-in feature of Umbraco that allows you to add extra functionality to a Property Editor. Think of them as small, secondary actions that you can attach to a property without modifying the editor itself. Property Actions appear as a small button next to the property label, which expands to show the available actions. diff --git a/16/umbraco-cms/customizing/workspaces.md b/16/umbraco-cms/customizing/workspaces.md index 1e679db0c72..0a3e30a2802 100644 --- a/16/umbraco-cms/customizing/workspaces.md +++ b/16/umbraco-cms/customizing/workspaces.md @@ -1,9 +1,5 @@ # Workspaces -{% hint style="warning" %} -This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. -{% endhint %} - Workspaces provide dedicated editing environments for specific entity types in Umbraco. They create isolated areas where users can edit content, media, members, or other entities with specialized interfaces and functionality. ## Key Concepts diff --git a/16/umbraco-cms/reference/api-documentation.md b/16/umbraco-cms/reference/api-documentation.md index 410b7ebb2f8..68bdbdf5c89 100644 --- a/16/umbraco-cms/reference/api-documentation.md +++ b/16/umbraco-cms/reference/api-documentation.md @@ -10,13 +10,13 @@ A library of API Reference documentation is auto-generated from the comments wit C# API references for the Umbraco Core, Infrastructure, Extensions and Web libraries. -### [Umbraco.Cms.Core](https://apidocs.umbraco.com/v15/csharp/api/Umbraco.Cms.Core.html) +### [Umbraco.Cms.Core](https://apidocs.umbraco.com/v16/csharp/api/Umbraco.Cms.Core.html) -### [Umbraco.Cms.Infrastructure](https://apidocs.umbraco.com/v15/csharp/api/Umbraco.Cms.Infrastructure.html) +### [Umbraco.Cms.Infrastructure](https://apidocs.umbraco.com/v16/csharp/api/Umbraco.Cms.Infrastructure.html) -### [Umbraco.Cms.Web](https://apidocs.umbraco.com/v15/csharp/api/Umbraco.Cms.Web.Common.html) +### [Umbraco.Cms.Web](https://apidocs.umbraco.com/v16/csharp/api/Umbraco.Cms.Web.Common.html) -### [Umbraco.Extensions](https://apidocs.umbraco.com/v15/csharp/api/Umbraco.Extensions.html) +### [Umbraco.Extensions](https://apidocs.umbraco.com/v16/csharp/api/Umbraco.Extensions.html) {% hint style="info" %} Opens a documentation browser that is different from the documentation section you're viewing now. diff --git a/16/umbraco-forms/developer/ajaxforms.md b/16/umbraco-forms/developer/ajaxforms.md index 2223d869eb9..d6cccd7def0 100644 --- a/16/umbraco-forms/developer/ajaxforms.md +++ b/16/umbraco-forms/developer/ajaxforms.md @@ -599,8 +599,9 @@ With [expanded output](https://docs.umbraco.com/umbraco-cms/reference/content-de } ``` -## Dynamic form injection -For dynamic form injection on a page, such as in a modal dialog, there's a specific JavaScript event and API method. This allows reinitializing Umbraco Forms for the new content. +## Dynamic Form Injection + +For dynamic Form injection on a page, such as in a modal dialog, there's a specific JavaScript event and API method. This allows reinitializing Umbraco Forms for the new content. ```javascript // Execute a reinitialize on dynamic injections diff --git a/17/umbraco-cms/.gitbook.yaml b/17/umbraco-cms/.gitbook.yaml index 41d7d74474c..ed43a66b57c 100644 --- a/17/umbraco-cms/.gitbook.yaml +++ b/17/umbraco-cms/.gitbook.yaml @@ -146,3 +146,6 @@ redirects: extending/backoffice-setup/extension-types: customizing/extending-overview/extension-types/README.md customizing/extending-overview/extension-registry/extension-registry: customizing/extending-overview/extension-registry/register-extensions.md fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/date: fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/date-time-editor/README.md + customizing/extending-overview/extension-types/workspaces/workspace-action-menu-item: customizing/extending-overview/extension-types/workspaces/workspace-action-menu-items.md + customizing/extending-overview/extension-types/workspaces/workspace-footer-app: customizing/extending-overview/extension-types/workspaces/workspace-footer-apps.md + \ No newline at end of file diff --git a/17/umbraco-cms/.gitbook/assets/DeliveryAPIContentIndex.png b/17/umbraco-cms/.gitbook/assets/DeliveryAPIContentIndex.png new file mode 100644 index 0000000000000000000000000000000000000000..ead9b5e058f042f3b8db939a9700716cda893272 GIT binary patch literal 85650 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 literal 0 HcmV?d00001 diff --git a/17/umbraco-cms/.gitbook/assets/DeliveryAPIContentIndexRebuild.png b/17/umbraco-cms/.gitbook/assets/DeliveryAPIContentIndexRebuild.png new file mode 100644 index 0000000000000000000000000000000000000000..71641282deed922a26813cb92fef819b156ad5ce GIT binary patch literal 100474 zcmeEuWn7cd`!|Y$L8vGlN~&}>s30Mwbl2#v(F_3*kS=KuDe3MQAsgK=VBmn!FlzJ| zJoESe)&J%5;(7O+&u4M&bKmDa=ZgD$&vkvbh>xoB#1E(+;NjsBD=NsUjF5Qp9(UqAWyi8injU6E^o<%jGDfpq|2K_V zM~>8vg5=-A|5f@JOac%FHk&3X26lcLSXM7Qw~>t_q}rT?MfU1!1VeP~0?z}h$bX$4 zeicz?OZBFx)!@mDP`JLJWb}0CmH#CN+%v!W5ZroUb@l>q0xU3X`1b{UIh~6rgR%WC zg2C8@KTUOLX#_=or!kjtVRzAq#U{sTn0cF3%+s zEgA9;5S)I|MkW-`gi?(VjU)l|yULiV_4A9F+zw~Dm@JXIorh#aBA!=I*`;PXzgM18 zSwDOH@6wtsCCqr`QDzv%7e)tA2^TWp1~#ZP`KQ&%R{pi$%md$kUGMhZ=)F;z z$!q~~6LRj+?K)C>k{?q{|F)f@qL~IuyvmM8gMYA865>8mH{w3?v#Z~*nI{i3I%bDa zZ;7|gOqmh%eM^My7bhl}H1tEphku@4o^CsEbePA`!gr(*R%K8AEyIhR(k*xXNmlGL zbTLPEmPAf1I8#`t*{+#_`*2MM@z)Og7!A-D>sf|Xh5|zDI)S|8hH9>Pn8}VTM**PE zHoTPIHE%H6%i!OF%WrFH)mbaFqlc{QSRDgMKb97<@mq1VvIaSX;d-}*3|ama=_Zt( zM?0mJhJ45gQE_1@xq0Z;D>)7}l=uI)J@!Rw6|1wP6P%MxwB2uVaR3W>MV>`KG6Vt9!R&4xM$Q|tlrBB zzEXhPoU2X9SqgESvRq;-$8iV&sSXsGmb9G2xN*^78kTbsZ_gnL*%HQ1< zIRrCYV5G^bFOfIYtuJ+It)n14d9P)1qJ*`LG|<+)X4Qrk$4zsP5;u35;JE-lAS-Bl zTJm6gb2dVQD+K9EW>xJ!O#nCqE-5tzJ(d-)4=)xo6a!e@jBx9vdEBe5E>2PzRG{DA zB$NlQl;_Jp^x3+O8RiIXY7xAEL#WPSA1GTSrnhzHXNp-a>2*0NgrnQUEszdlM9RZ6BDtPT*>+=)^0nN2& zn0H|7jC(hl$PpBDf{*kW)Ya2IVf4A^RZS&vvN)%C1=0U&!tpfbL&yLht09@Ia}9F# z1fgp8v$rET;LrQzz|DnR;!j51qTVkPtC7|<8}Orx@5b6j;*Chu9FjLfjbHFuGGWF+ zNa)rNBe-cc$PMrD@{1t_UH{?WeMfzQgZaVO!^_>9s?*8J-2zs|pSPQP+kY(1^<>Od zRW8*B>iW%3g)(?KzBsXYEBXdKf;tr2EosA7aT-}}ofe-ZJl>p$DU!co7;QTzLF{%2 zA;z5*(&LK^S8Js_SDu1`cW^bRYH}1))+2AKh zs)Yh#x*lrEQZBV;!X=uea>)aDFFc4J{s1LfdF+`x=vJST2Bb|#R7*T@rMd0^9ytH` zF3$?74gACan0)fP#@A0m<3TcTDNAj=+9u9j&yO)36K zjQ7a+@`iI(ca1rrn$#;FU}5kM8x345exOy-{Hfqu^;PUIl5%|tLqf*+&@tW`TqkZ^ z_HyhdNPn2|vsgRL;&nMKz+AVD!JUr86^OH*I5-XZboX%goHd%h zJ%>vuj`(0Y2LG7mi18tLrRBnG5YaAddN$wCqotK)gIibO+P_u9Rz$7i33Qk0?&Qy8 zMOp+nHJaadiS&_V+#Elob~j7p!TZ|`IV0Pmy~$8szoB;TxyS@*#K^@%a;P8u%dkd1n@>pr$nY5P)!Kq2Brjvx ze3!g`V%i3x1j9rw2K8c+(ZBv^g9Iz}@OJf21A0pY^LLocAnF;ui&Xwa{kr-jr#ykn z*8X*F&zw2A@qJ}C0dKAS63#{)3BlZ`?2OiIaafY zlejf^?&_#%92=2y$;|#IL!FsR^l+_F@2sEP7zBEGvOV)!Q-{8Lo&dLU5uT%jb^1kW zW~+Vq6-$K^>n=pB*>%{Sw~%W1%B(}7eRpie!YPXmbJhL;GdQKDp2x{&{+#RS!MYHF zlo7$m>mvlH_6XO{J$o9>v8qg?GgD9RUpt*gGpM_HC0N5dt&zxuQ*YiN7vx)a)Eyqr zkCZ2+*{r}BBC9f>Y85D5CBmIb%1Lwt9Ql#^b9kSSM-)+R0Wak^b87hd>Ej%gU`HnK zyJ(sA`HyHTnfOFVuA@VqA{|yFNd_Sdxf??V{;Zav0BJdoFM>0f-O&+`zOV)mzfsZu zV+&`MvuGE%?0Sj<4Llo=XLsV9DNt$kP$#5lvvjl-<|(BEAO2Hcyl~_r1yk$tc{a* zoG!fI*?H;L{z9LwhFL0Dcj)r?;Sy3_*5Yk5vW?wWbxw4oxzAjVM%d`Rp5 z=Q?4uXX3Ov@ks?0UHii#)f&;^J#MfW#tU+^0&5*RH6Ce+_zO{!Rw_gMaBx>o*%#PR zT@v1d$T8jC*&i3JK>;J~$^q}QaU6RVLclsN;}#ortZ{HqEkN2}$PEYNzU3Q$EFrfS z7EAd&`tU;sDz$My`j^&Z;-X)qQhh>Cm+N5^J;mrIRIb((_P#Uh(lKZX=Ak#`bMu+}-0%`rXx)nz_$5BKrI4 zt-Ic{`NZPbKktw7WI;5)!|ajE&EX_&8l6G?#PaNU@TNc}eLeB9`ZerHUW* zlcg0~bqer6X+ir5Op`%-pH>0h#x#^6k)S+DQN;&^^{Ri zNg#%jk_UbAebSuO8%2+(K#SJ+d2^|Mf)>=yR_1a!uVZo-ttZojJtZphZ>Lg9ZCFBp zLR}Y;OUBR6+9Fr4A6TH)l1H48*LwoS;Ritrk*h6Qy^?HMKC#go$wr|Rev;2XH_>Z8 z{*q{xKUXJjjVXO8qBBAF`=pET?pbZF8Xr4+N_-7ocfBuMa^;&|nKH86n@_GBuzxF^ z_99Ly(ZR<~Mm`#_B3UnTadG=A*r#C%z~x~>i)^`2UmW+cgddVv`H>hEt-)i_ufLP| z3$SN5Ho#|`9lDu3PPm(#4EgrWuKPk4`g(kK%V1mE8bc>V8~3z-6LcEGLHxZ@&q1bm zQmd|8I=IEYqccbl?c@7NZW+7phQaVTYZ;8N?EjG4;Mvv*&1`3w*kB?Dwl`h~4j~DO!KLI!{A}@aSpj{E^}!G< zc@J_@RD$&py2zjpHIe-}FJlWPm^~GK=zrnlcNI9_#s9dn>bI?;3Jr#j4MfDP;um}4 zG`FLvAyt9t+g*_}YW?t7T|1_ZrT6610^i^wonZ0(RDLB=msA3x)#8^XBaSA$WbN67 z@;N$bhrOdy?dV&^;Xvv`&EXX7LZbCpzjXR`V@t@)q$Vj*UZ9#O%HJFl*tbUuPZ^=d zT?YNpT*jEX!GKa2v_sU|EKJJcP(o}mTm%(J0bmm;*l7CM!T#9RRt2h94$?Yl;dgSO*|rMkiDE--y&w-ziyouDz=$0?w>N?B)9Tfx&R!!U z_Q*!l6GK~HmE9lqH@lhd{e9}2PM;@baaNEnD@**l_w(V7&0T&N9UH9nagRw3^g79# zTqTONd+YSk4X-k-X%f_TZ-!YLz=Yfp@aNjIybGIk=!nHx*<*@OK zEeoxMT2G$KejQyNo2LNAl3M4tw4fIOwhNNkdZl3269R&oNG{M31NL0*tb|;%oIX_uSVt>KsI-c3h1Lp(^#P!oDF$vc%kSVQO;c zpRI|Z;-}z8wm*fC5anHS`#Hd3uhr1MugdfHB$w(IXza1Uj6%RNGNtjn)#R$gS}mTR&=gG9w08+Pngj$XmbY-ZdJ;qQ|d#ht8pd99!clw>V2(EusSgatw!R zlJIvc9tG_tJeB;ePmsRUs?rcJyQ8(f-~Q#*6&FM_&?WV@jgMJIyNX0<2fl_kC1B^% zHm|X+B8vz=ZB6Up;o#Rw{1&W4pzh;v>pEdgHEB)ndw;h{3US`)V#PNA@Vhk~=bQM$^cJ}mv z1+vZo+LF|`LqFu1%njGGJpmI^puZ6mMiG1w%>OX*VrEF8SLonIAj7J#N_;R{4&^I$ zS9Ul*#%L&gf7fw_0jex$*D^F{3gb`EE|efC%NbOMI(EZTYNfEZrBw7q?$THM*neP- zk?t_{8W~=AJPB*46g&HA|AS_|62^;&OI(;Lz1uadik=3O*Y+D*tLl%OGA!6kN!+%P z8C^;@mHI6nftZ!I%Q4-$`6g?dm4C3(r<1m1b0hNr9&3mUqKD+$qEN3M0`5O&uq1`#2!wUd;%bB zpC=e|+Pl4yOuo-f3m&0=Zq{?QIy;%4TB3bx;g{a16ytHL<{y0vu*Rxa7x8PE)bGmP*UjJZeSil)<9YGGqtd))7Db~fI70JJP2OWD&l+1mw7${w3BoD?!O)*h) z7O|E;uv(rCwB`YXlq0SLBu@OdGz;ykjn*c2ef_wc%duZoOz67}pLIrWXR{hC9fvvV zirmz8ziNH`s~h^HEdA(pb>hrye9j)&fKhwxc_YXV{gp^z@37(2rFOXqHJy$ey z-99rR;Op)6#uo+1U!X+C*3q@6jiX#{r@vqEsbw;vWyzbJq-2S{tqDR+$EOWuF=R`6 zIpH>b-{Ny((5@wE`B*E1l6VaDp~dWVo+-;1Xod_pJ7zpa`Et%tUSK2EC?0Xe>*s?=26S*%a46ny%fK(jVY!nXRkGbA}VVd-~O|D86ki z7@0`qT%5fPHlp^8pxsjp{`m_xE~>$QguVy%igIdi9kibut@w5{{^>4es6^rA4+K_+ zYNC%o{Mu_fxKO!)P@4+Ib2!4U!8E@?#@Lu1&&i34{-ft`=1MI_esb%2++&+wsVE=0 zv?pJ=jE_3WiT4#DJji|T;CI_8nBgox?oNKi2R5>MHj?S&#GlbnMI+PAYq6%iE{BZ; zp0$EHDWy_wVS6wW`nKj7sb`B8=4k3=Eb>g);X-9Y93kY8L!ag+9)g(Hk`5@r3OpAL%IEW6KX6ndf@ zt&+z}hh$3VaTkjL&-R$LYVo@Vg{s_?8(;!;q>t5_>ynA`=EnGtmv^GkyW7exga%%b`B>{IC;&MZBOb@?_ zu*%&vZMnF;z8?sQTh7(|yHCx0%D+H9()6k8?y~}V_Z(h8?+crWcvt6+k$GXlC;DrC z+MK$EoAT+Ii>2SP3ENru%*q{C*S~-}2EM$9&t@5gvgV%gIc?wb6&(&_%51%(dG;Hj zW!f(HtmO8FD*VXBG0>f09QnQ00prT$OE?DHOdO)2ibJ&hMsa@?wdKOk$sD{=BXyl0 zjt!T>Pm?VES)e)#$;h#E>7R;nZO8wW4g9R-OwT7Y;KhPj{*by*f=3~e;v)!K!Do)5 z8zrliW)eg`5zGkXbsG>#A-z>GYd3**M(Rr1-;vor>IpOHyIST*q1op|QI6_t3nE|p zJk4?bM`|Ts;%YxEM{EpI1Ir3Z#nS(~&=Mc|6*s_}q&=bAndF_<8w$Cp$clPl7 z&SYRzX}n*@aa2U7?1M11TlLCBuQVCthBF+Q8k9y`jDoR6{XeOJ_(uNCSQ*jIQhU;P zq+ay)I+jD(16vADADVo_xeZ5?Qvib}tsNWRQ3Q+{+RuTR9-oZV*g|B@p~Gv_X_0fu zz~&bb_PLy~MD@`%T&6!etbu)E!;NK@2*u7usrL-YzU{w{y0O676dTf?!aGW}7^I#{ zol9u|J1TEb-g#NxOM0)V(j}nRog3RKn7@5ZN_9F*l$~9ZO2t2{+O@mSWBv9-j96); z6m-a8Z#81Q{6}dD+{y-!aqKN%aCfBiHNm5392q5jbV?-(dljlkl`?AU$;N5jJ)1(= zuzn{+0(%c->);+xF6wfdXWZ?Fh6{rOX_>>m{4-T|Q(WNkW>JWI*LGYAoUwelY9*(MfnDUQATT;;tvmDX0D=_N*SA+cx&Uwcx_2%P?EL`_~dIY-fg^x-M_f}gJqY~|`k+?@kn z&9#PVA*^k5aHsoq>fU1cqe-aZ_l>*l^-YhA5yNb+B;}F5t~8J?15~w0BI!4C4|3`x z1ML$!rWJ{UZAkR@buCiS;G>1<7>o2}_Hr(tFQ(5riPQ5Hi+i1~x|$AJzjs#RdVewx z@^F~=`U0Pkry##dlAly#_Kh(;r81y%N+O|}-kb6spSB66MR|9`D$~HyyL*Bd%n}` z7~Tyssif)1qS_TY1E>99%@?O@u!m*~zxTe(SBkgGL8`q+9<|&mOnsqD2QU$~dotd{ zss)l9UZ(LE5A(SelM>Ai+ZvHq@CQDZ@fE2kjvbpGjm~U0sd5p1!xO7UJAlkW*;2eS zSPJB~z#bT-H6ZHKk1yf(Aic8{bW`?kkz!6R+g}F7-#V4aFt;_vs3k~QK%T&)_lzz; zFEcK2`OJwnR$Oj07k|rx#sY=;R*-~qkEk(1AD^Gt+9&rMt$z}LO}Q{R51xg136{L; zQe0pT-pF%emmF4j!9s@&O+HBvlIKicSW|-DTHM;&-Xnx!W>EJrZuS#yo%aYD+tQS_ z{PfhBlcWEEP%qL1t?v?&S{_{@a()~-vJ}l4@SOQvo^*r-4jFcj7Ag6X=wB#Yd$8k@ zzc#QLk%NK44(BZMkOQY=_DS&;rX8udZ_{>y+9uUeLy33-wwenaN4bt3gyuiR$C}IU zpVdO=cml=7`LmefBNZiWXgtx#Yffg->3l9}bHD5PN_mB>ZO!H1)&H{rWEkSIngZq+ z$0#GKRziqzj`Io^INsoU--lx~h~Tn}hc|{Fu6Bb>Juy5m!oF{$6&rcT2429_ZS4TS zR~*)%6Nz&L5b)J_(WEz}%?SjOkR^N;bWe--2zS5s;o+xuPG9rET9X#bXtB%TK=Bb4QVjQJyTu~7n3^uM?zc5yXy${h(twY}5{&=Dxo ztF`grB?Y@Fn004l%m$3e!s3|}3{S*vXal&rXmQ~rM~p8PEX8u-{fzo#b5L4Ga&+oX z{cN_!=M|^p**Z@`LN^>zUIuD&2V|XRPb*;eBL+K++S*XwT-gz&u`+q55~92@bNpWq z`{=a#uRM4|tV}vD#@$vXrW1q~rTwrt(4y8@W43SW#*T53N0^m?z@*oO z)KkvmAuw%LSO35#k>>t=hV8)-?{i*#>?$+sIh}mu%^jgsRO_kD{Z0+Fw3G8te>a;y zClo%a&VPKXu;W6^-uk#;a+q!Iq`nl*7kb~>37IO7C&PNoQd9@1_%qzJVbtkwN?L4! zGQ)ICX68M({)<>v-ssP#NK3C-mo&7c^q=mGjI~OLHoJ4T;suV{O*vYdG(H>U7dW`x z3M&JEmY=oWB8lSxQZdjqy%{ca+!UVjR3WYihyc7Q_4ZW%h9d0r6)gVL`r<4$27vko z(-VIYmCgn>+X{C6K?L7Vk4P7WF`6&kd!o~ZgH;Sa=0au4^nF8^u6pOLsqPm@)S(AX zW#(wb9~iMoj?Qc0^3~&Uk%U6=Jky6tnp-e)9c4l1?y29`dd(|9R|jUcT`Nb! zC*HfiWB>A~sOE6E$`R*uCz~RHF+!Mg5Zi39V#~x8sSEU|p z< zul5>Kgq@X?v&s@+V8#-PH@_VZj1)H{#+rQaHcpclAjvB+&Dn{CJT?8U>!j%hHosje z`!y)%mqgr&E{;@&Ly9rzTb`|yTDErd@5o|w#@sttIrkkDqHC#G%5u1K>0I8ufHst#K#oVy`WP0;%hxWO|LE`ro{Y=oZ=y{%%<<>`hsAS3o5sn=LdC-t4`X}|ym;_^SCVk*hiwYI z#Kc@!`=RS`hKaAp`)_=`kVDVW^i1Ws-w8$y&z%>o9v?>?BNqZGc&>)=A$tF0S%Gxs z8|_t7Msn{E2>j3&^isuor=!Ft6fR$~NZ0qd2ht27V^3O~ZlT!ZPt9;VhBA!B!^$Du zH|xAGSK`KjWGbB5(+8GOFjQcJp*fdf)r!qFlYF0H#-J$Nyu#{pK$c}4g}xrP(8;`; zSZibdFlW!!mWSBw#W+(>#k^Wqi92p^shAv*-ou-$*9qvB4ima7r*at_d9Qap+qEe- zujc*lP&o-cfB-=3Vp*^K^_~xfXa+Eo7;Vje*^Zcdx%;4il@8#?`<(A{%k<)}cl0T4 zAS$bFW6)HKye{vYFctvi{S9UbSiK3lQzbe1M2H$#zoU z$#^1Xol=Ag*OF)C{fE4Eol4Je`J6^5P-ec1eJIg4ZF{=BckBh}Blnxd)a|FBz5u7a z_c&Tf^4&<-(aA{NJ0PqZ$ACPTs0~R?Ie$EuC`40Q8PUN@M@jD|{m*=ieHoXqFh{D& zE1!x=ZCqyl{Xdl`D_arz83J0+-zQ&Kc#THJ>ftD?cS=t#znYrR3di+@e~*gF=qGsE+$xYfr8Vh#W{m+b1XZ?XWEPgW=e7p2NpHD9FI59(mTGk6AdIsV}qf8X3x zvPQ%P$A=RAa}K44q^+n*D)JWDs>)|{DHb>K}c|Z zI5G8}w*S0qHh*F9z*Ok;^C`|me(D`Kdi!V#Yp3+%unDD@-D@17)AYZ2h#D7N{^|R% z+4+c&_%HRuj3`r9X=|*xgXjBnp;OL#7HWR61Phr0E8Icu}>90swW+}VGxFMWf3bNR#a z^S=emSTTLvoHiaS`Nl$4sYBW~LCe15`2`wvb!ss8t|#z9iRI_s{Q{lQ)~52eM(XNb z{Fp3KQ6p8R_Q8^O1hxOMgna+S#g4mJ`Y2|Ru^co7hyTU&Ezf<)AuoAVmm^K`4L2^l zk9od=+cSr`icBW@4K_nrsNm+}bV9-je!bJT4{jD~V6!K{-2cVRRmk{$>o0Z5%rOK< zU6|B0>KiQ@t#Op6rnza&aQ0;2(>BrhU-Vza>9h9Guh+olf(GGfXE(y<8~$9<*GVdJ z>xwa1=i?%S#CiX9gK$l692@j6F#c!J6!`Dn6he#s_sRcvjeYw=!@^nx>%-Ggy@C3I z&J_?`RgnB&|$2^@o3% z!S!f}&X(5I1q8;B#U2umuz1Xd+bhMydRbYg z&pVVu4RMY_03mBYKmSZbxI(C>o8Wj5uf%r;qV;_A2U#MNH9c>Vb+v^HQMAcC;3fA^ z+lzRpF+6xq_t5(I@X^BJVx+3$lRln?cI}zi-c@JwU0*=&v=V5F&TEpgf&5JP%^xmS zK_C=6ZUGq1N$`QoO^i?}Ie*S$-+W3LVsbr|VudZNHPwl!F0hw&GFwTFowMd>WcMHz zsZQTK2$BWs96d8b{PbpZYMOYIGX6@ajeK+g3vp{r%;9aZH=z!LOt98*gL3nHEHeOb zcagdaw_wKdbkztJG{J>A%8V6b6Woh&3 zo#h$1@Q%SDXp?#AmQ-TPXi3LxmD=zi32+);nanGwPAD+bhnLqQJ#azS49ps3_2(0y zckR{DMIc}ML9Awhp}67Y^iWGN(w6Rt4Duk@{nWYN%8h$xwnYL~f+z*}kv^o`S$2&w zP8iVxOb)tQ2#%LyCVbBwtcH{sr?=W(9cPn^seuCdHe$Kj_K7Api6Np7b`72e0%8b} zq8{}^zbWRNz;Qvc(FVgYHOAb{1UoE@ZtcNyb8yzjdW#Pe!P3{)tZgNJk41gh=kRnD zFcJ|)Y*FsX+~^o)p+ftzwD7)X#qc0Pcy|l2_=A*v1+%y0v>5M)VVQ%0^Y11awuv_B zR}5blY>#d)7`kN@IYTDKW_R`P`+fPc@x+^XNcWR!%?6+U_nomepJnetBTJXnSf&sb zCTN18oAR015i(RQK_ol-_hHt}Y8DSa8G~;c%bMhTos$TFe!nLb$9i5T5bciYs=a6! zls(;7TRFd8bMR*g=ZDgn44m0aRlHx-WE?(0PHzi?NzudTV3Evc&h@k#MhdSMR_l z&@&DzAx&PUKH@yK!G+x0Pnnsb*H}|PlwC(8b z_2Ix9F_=(8H6|;E?V40&BV$Syehd=0b$+;tIfWHRTuF9|K%>2;H{z7&bS=Qz^lBy} z*FdDtK??KF{lIt@%eEPljFTtv(yjIkLsBV2sTGs6`gu&F9j)op46Hmt-I4pXT{O?R z(~2c84T9#7-^+C6c4&zj&Ot3Kh-bzp%01abX%d+BLmV73Mmr2)$)R`Nd#DY%!Lk@Xz5!`Wop=b2Y(;%@)E>tB@{pAe#fC)p*|Vx)TBI zr!P^G?9CltM#~?RojbaHP&6xZJ6ik%la6~sRYBKTymqsijPID%zHa$7EX}2os7Z(I zM-Pv7;1l_cj0cUQ!>^aUIc$AcuA=le zhR*tR#$JD_7;z0TA5C1j^xQpr;I@m<%o3{)*wrA$YdbQ*ENy|PU@RX*3tbNBMdrmD zU0)VfCXD1BDJE+@Q$sxZI+`}TJLBiQ9$Ft7!vq)nv5C=H@O=g|md)p=2;lKM6HDND zBmkmMB$RtR?Z`YSY>{vw*HkVg8Ey2HyY#yQG{yYk9AeKrWp3ptvTluy!bEm-ZvNS& zx~(F>S}YDYF#{EanG9uN+?z>8Py^?^MzX81-C!l=ThZq z8T{4b?3jUQk|wZZ7JJW}QDg*3KOmQjp;$A%26Jxax7~i zajH)2kAf76Ae78~+ojMO9s|+SWBPbCWk#|5S1(?$woyl0BOC9_UJ5;Du6xDG9VqAT z;2a=BtU-4g|N zE}Mss1k=*aSop1uX5RI-7RH)wN%E)Bu4$&WCx0QlI<$LaXW&_`@MHo73?sAI68vJD z$iyp1Qq2i(WKcqR`B*wDJ)cKJ66EH75fUteMHC#Pg&&_UnG$&MEL$Ey!ST}LH+(YL zX$7&D$TgaGHke1$Q*QIZr&wMqH-VtxcMh0~wCMcdno1cBGUIC|1y2F);>v`Xn@!pl zpZAFh)X0oxWcCe6lUeYfjcOzle9ytG?#0@h^{eso-m>TX;MFIX?_hK#phw zDDP-$+P&R?XA2!!%}4L`af@fUGi|)r35#9Oq_Vv9T6IM=PWpKP-X`;-9<;Qba~@Vi zdrGwxIGu~9Tji<_VopSqyx4iN%#RT> zJG9hEd375(hnIQjA(XWXtBQ$Ng?%@lcc!#fSo`=gG$g=i-_-$Xv;M5*?mEHN!OOt? zwvY|0XR1u~&U?2Ly3MIzxgU9(!?gKDj?DDWV)6{m!VV+-<5^Ul*K*gmCt83UbQs9v zIiQGI8GB}TVHs@aNo6ub zAvgK%gJVIzpWe@=wm?}zWbkbl;hr%qEzbkZB_5_w!y1j+mj;mN1!zyHNkLAc2@D>ySL8Ip*~`tyoL2>hMZh zBAOQbq;pY`#KmmtXxaT_&1Fg8Ve3C)EewNC7{+?`^&1Z z&*n3wv!{%VDP6whmThK^I`t*>c3BlO!a~_~#x5n7AS-eE=@PAnDk0J}`mkQ@dhK%Q zg-de>Is>0wvC@;gu8Wh?=5pt{3cK?8OX8g~?b2zxc2mg%->`1%G=l@y^x}YV@SYDA zqyG09MM0vAXo8Qy5JI}Ov_|3KhPie4Tacd*HmiWXDK_?{FjBa&6Sk=SQ;}D>U%7Uv zraf<#89EgfZ{ntAy#9{7K6|oNg{B{v8|kGC8a)dPTj=`e;`xEXAPpuCztKwLN@r zG$*1#i29^>I@7vdzkH*NA!-|N((axPL{S-FyP9#`wkJ3Y_Uk&KD6f)$6#@KZK1JpG zvD*Lx1kF}n*G!34hJI@dtrOi|sYaD-4qMGay`Y6@@!ysol~<# zDF(D#(8-SOVS->i5x}Bw1 z+IosIgKS4T$IFRZn4RvK-g)W3hnzij_4I+T`RVIR3{1u$rxDlFqC;&o5d=3 z^T}Y#z_YJ{`F3>nh=Q2*M9Y9iYpv3aSW z#g+$zI9A4X@DFTbhEf`i+7@Rv_Wk?B?2NiV;^!k8+6ZwJTx+$(Sz3w~o#Nfj1wS-D zzTh9nIS99IPWHLl&Lr85E!{Kmp?SN_qhMsQGPDkTXyS5} zly{&_UHv$F>%;lg+IG^AnWQUG&~er$+^9?%KnEf1OG8C7Z&eEjnWKW=7Y5BYQS3G2ff2%vMLMQwnYwDIv7rwCQ3 zUUk4TFOv5L1}axIOZ(OsSBU^{-ngy(%4eG${QcIZJ^$;LY1lzp^5~zl$yeH?g4T^E z*c;jgF_OIYN>X<*E5kCKSE%>011s~fLrw?x62nrT`;j4AFOXV`IZmU@@n%6^V~b2d z!UUgFz4-fwhAh@4PcMcdl;M}p@9%Rn`S?TM8MP#dW%u1TIHYfi8scwWy>82}tdw{M zmAaoQEUonDkpNfd(2%nF*JNJIFEhFZ)o_ce25sf*b)x3x=2XPK8l>!6dC@BK6AtzL zdMx?V|J)T#!iW2{kikKlbi(>)zm3zo#d4k~%f(8^=1Li@*_P1!Hi$rbQwXp>LocN* zS;O1iA+Ma&I<5cJuFap27v&}MN+m0ZzB{|7{TNXR%Ed0vQt3B&Qc+vkJqf_OO!!!X zyPt~q-T>$8O7NHIHk}x9pFJA8cS^S|{v18|ltj?(%SP8Q?h)j{-Mlv)xsDHhu|2V! z{qiTRhOSK8t|0y56I~Gt_8tbh?zpbj)G8m=Wv7OguUNS!YkdY=bgD&gP7CpZBO7lW zHf1NgKVJ~f?kv(XL$W_GZ=Pyb0oW=Sw4VO{EZ^;D+x7XNRjf|^+7yunCTyevm`BYeZd{ynC3X_X3->EmL6h3}$+VjC&+^yc0W zDBh?t{Ys{=ElqTQCz*G(YCqXgr!A+M*y6(QwfAg2z4xgd;DCX0hHICb!YbRff)UaGw4KJiMPwxDVw*Ll7r5VS$N2qP2Ul#)Kt6($DK<4`ml?ntD_ zb<>i_nz(bvV_)3`<6BBD8`m>O`JT4Hn%l}o* z5*QhA$)=v#Dv_nJ;n>*TDqayJtREtE1^7r_*@pXLgyz1l=e@fDHoD^g#uI*Wi~0hc zBtX%dHx3NupbyI-MyETVH-wiPCTFGYelBm}H71oxQpVqY1<;(yesNKgy>|w*jlAi4 zc7+<2tdQ6Ku4fC?QG^z@EB=0CysKV?6;8MA`Ei9!l3q0XX?oz^4`2P$K!|^Pci(YM zZejd^>YVBn-)nzV_&qe!S$Rf@+Rx(p%3~4J8Hk@51ZFYq+CZxt4S*DRk*}6v$S34qWl? zS20wk_2FN9J;{p5gRv72u{1Mci;y*_Qp@`^Vc6+72yg!yPgcVL+hGC)6fVFd}X zuV@$;{||d_8J1=Dw2OlhB1kG-k|Ny=(k%i?_f2;Q+_ZpncZ1U1-Q6YK9nyW%urGWb z_4oeYcYoN&-XH(h7xcKVTx-_MIWy@q)bRZn2O=n0rZJ{B9CN@9;?%qxjBgbSo_@9UcI(^^k&+#1Gsi-^YByS}d|Hh!uCox%TX0kJ_Gukk*{AvO*ZdPbA$C;j z_QtXoiOb`%21mIEXPsC^)2EQDVtqf6pIYbqzfso1)nG@R0U_AM; zi{_wbKmsxj@>cFqPHhR}HaC8EOQd09_JKzVuJ>5znW)OCGU;yqf784eW>AGT_^q` zb0QX(dMDP>EZ?Pq>bEqsHO$5q>(P#ZY7qR)s>neevU{#iNbe@_Idn%m5e^A-UgiO&iyI2kU79X?vvK+Mc)FsQ#Z7Zj zd$H9V5fTa78Od3`dt;txGiVmapPVyPMbs`z$z4q?8*KCgU%uJ?uH0-UX>%Ik=iXQKJI1doyZan$nS{lo<`r*ee7fWgdgkPtf`{~ z2EF~vqe#B_-C5_#Bw|Qtr>yeG3WY?St{jGPP!C;v&HxIlcfP^%$K4*k6Tgz~=ey^# zfqpOT2s~%l2tDM2Tuphm`40_F_FF=PBP0i)XTs(rv8g~&u3b+mNP0NRcJp3p`XWNb z9L_)-nR-(xBX6&8JRflTzs%)x4w90bz)v>NUN{mO3f-E-%+GreR>7pd`&1`ZxiQ@x z7+=fk>xXP^4Zp);5p+Wj%&P7s6aGppKM857+9wWhLyw<%PJr0P+8*s$ymff_)=EsB zh~R2w-qJWqj)dA8*4d^KT2eh7lek~<*Y0s|9@F@aFck=q{4hE5D#XI|48r6w7a7SiGUK$2=~?Xa|$b>z0C%Q9IQBXvYeFJ{U$S>yn4 zS<~FobOtsK*=J-u`9*~c{EET)lGN`K9m=8=$KMuRPp56IcuRw!Ez&<>e`t1H+21A* z%J08)?#SY~$-{n5=<=!YXRUKBGT};Cw*Pge-N$O$cEf?qqeWpw2gcI@=6nrxA|#U= zv}H%M!z`au?mSv(_D>#tNBiNcVv4a8-{f3DavrDLmveXYVYAmN5$t4Tw(ZnGrY2^e z9e0G!bRc~j_)A>jn%zsA{uggQ5b6&*$D?nxd*4m)1~tFhb-Se5@(?l<$ph`>}&%hu_tMLI2mV{D*>C(LOhgw;OSFG#k@O$|ycJ z`^3kMuV|DHx{ur-9#r}JoIs^`G4a@%PZWLFLa;|ZT2lyi%gdy{!i7I7%yv6(H> zh&%94`}E?AS(RI9KOn2dd-FOZJ1L6bni)c}+8@S>r&vI$1w@4ybGYuCIyQY~U3T|+ zn8N97w`a0UI{+(KJ#1=UbO2oqmLMQN>q2g=z?GdT+D$tHJVoU z9J`7KD>M{b4h+^m)1z+d%2VkKH=(z#5Z5jIvQ;j?lLWO!&Ua&k1}{}E@P|@-=TEU# zx=Hsgsr;O|FQ+{jD96Mr`J*bnC^)zDmvi~rXIev)z69dWUfKx|Z||W&2r4Vvvl(S9 zponEqG|IL>*~y^!a@#`9vZ+j)Ux-tkw^`^Uc*`FLC%q zMKsssMtx^Wj-RC#&r9zd(}e8L_SKnp_ZGf$NaLWsvCCZt?VLmv7MCRp1!H4O#Sk0^ zs!VP0!9}rRrzE!L3aP~%PaCCh&U=WsH)F{z*WZcNkf-quT0ZH~=?)>`P8)HG&TRA( zH!gBy;9e^Pnr9fcHJ^ev3#4@cTaKg!Ck)BwcM{K_1zrZzIAstai?Fq48hL{SR-f33yu?Z zC1jnxzGIe$broD+qzpSFq+qcOtH}wg#5!IuC1b>4N?<2FPfS;#FEeR7JjRHt%&fHmM|>sYiAIG&C}WU1}kegK}1pSRK2jf?B{w>wbUeoOO#ywcFgxKaIFvx zH`)7*?ot^V@)D0OY`XJr(1)VV4alpBuVn)&;qwD`E~iQ_JA8Fa)Bwn5( z5m$%THXbdrUW6xGex!_B9YR_<#Goi^6&}$x_DAy4Eu6@Wkim{y^%NCOx#uP&lp>9`B;Zqk+)=>yL|z zPI?BPE;I$@DP5jK{N018l>0#khB`Z>;QC<$FGFV^JHED`;&X*#a<=(nwUG+GT@aNK zNbircCGJFnLikadTLgp2rpN=xT%#@X1rz9~9f-kZ+JR}9=Y1G69cDtl?Piq`F@l_? zz0m16_?}Kq^F0Noj(q2ocu|FABu14COdLq@(a@m6oT%FEfaBtYec$(wle^~|g!K8@ zYgpJIcdgWoS}$6#p+0`HWtv&{XGTfxCP^+f_u_!1tf~&=;-LaxxY0UWn&gx@p+Mx$ z+n><$XcHduj@Fl~&T&7{Z9873mk|N2NV>T-h8RyvS6C4JTj}+Ple6}|UrCLDTd$@r zbjP=ENb*6pU^*tBuJEVFro2f?5M8P4Pi;Vi8(d`wX>gulyoTM>Xf>Gs06E>?i&DN7 zgdeTxv`Xm@);XspDB6FsU4AfLOZt`Y!gs`z)Fq|PyLL@<3_Krm>w)@8Ql(fblRzOh zx1xz|3*Y9@hMw``R=BUEvn4z8v|HgBB93^XFJ?*l538nmR58Pw1rD^kv}4U9nnAAa z(d&C~6S9SxQAwb6qogT4i9BX>0T6XmRxYB!A?rK`^)%aWgwimH$QoYFfePV5<} z$byW0p{sp@?!fHHn2ujnnKK(?-6sA>b>b(c8*VMkNf-8i(aUfs9wSm-DBYn*PG zl&qgHd@3vv-^!5gP|>JFe{pk)PTW3U*>W4U%D1OWlcKrv(s^vFmPRy|=rXMx*x#J5dQzg?vUYJ2qDgk)@@ZbfCBFG>v*x;) z1r^F^J+jTPR!3u;+>hE?ENcgcJZ|^!`NTX-JmNQ_O;PupsX|50uuhjC5yhhJeparm z2QwS`h+V}>v+l!UtlrEZbE)*xO$Sojd!uWOAW;9>dwzQtE`sJ-0hd~)x=Wr7`Hwim z-{)T(1C`t)R~R=afl7r@yZYhhZy!}G72t!;`IB?wH8g6t{isSRUzThC6fBSeE0rSV zzqB8)-#>wM$8@$8KtAUw);ji9M7SsbXhJz91c%@NhknQygOEO}fP#oaP06@@DPCn> z66%BnG*sKAaIobm6eIe68p$}nrSz(7G>+Q=5jxV~G<0YpcyJ?6zjXP#G8<1toXCag zLqN~rnB9xV29l-#xl5hW5p%RjoaAavCId~l`$pGqdwOI8W&e?fxW929^?oN?tK8ll z(=MShTkNA+0FSI(pIA}+c<>C&XM~LRRHQW`!f)R`@}u4YeL;WIsU+F;m>7T&3^v}4K4TR|NrrS9)$4Sjq0T!@_)xsUi66lXSU!1&k6p8;jb5YD{ z!WmD*Wx0)L{`9A$eB=y%gxWTSKR!QY{zLxrOCAmS&CCM|$N%q$hJSDL5&VBfQT)#< z|J8wu^78VR7tIgJ57!6vhZIaq5pXYXUz$*ooES!@*rRIk^Z(@=PHUWo&xnN*W|~eF zL9rN(d;v~9T68}Aktu~0Lda`k=7z&0ZnPFs@4V8RufpC{JkX+Rc3&SWGkdKO7u*R& zghEwDl$0HFjMK&Wo8~Ai?50HLtOo&DwqOuMJ_UCn6`-#MO^9SOMn%(`ond?kk0Fgnxniv9D(z34InO;?jz%er?Y+sh`69uKWxy$#3KMrF}DIh_7|k zQlXwt4ZY601HrVQPcdc#hBo{3Y$q8Hs9^R;m5W))`TWGAq7@+E_mKq`pt}Ea$d~mK z#y@s;Rjb-hKm6v8&u!hOtYMJqc1?vr`F?D-d`EYrbbHxALv+|E7Qo;8-t)_&+YM}Le1H|B5t?qC!P!XD z(T*3{tC!kv48_wxP)tu6wr^64?1))5XizqcL)}-x`&Wr5ZI^k?K=m&rKCzmB-tXxV zr+A;Fte3#=&X>q;$;L)sUlq#CMw1BpFk|9uE&&>PdJkrOMqc4ctT}P#e;=!0#NkXG z$>lt=E5tBi(i?X^1NkumkQ~%USV)`54*+T&6i3oKsp8ktPH%&<%ms~2PSWPuSR#C{ z#)!$H!r(M(9K?wS(eSJ2yI&e&nPF5T@_1qIW>Dy`OmD-ffdSg~&jU=jl$1 z@%oXYvFH6zqE`mpL(J&j?4y11oOET*^Xjjp^!2}jE#JMFq^kY`snl7mqR^hHibm4j z{VJYvp5lGACCwBX*Smnx-P=uy10t$zJodJbK7C&@WoWZ`#FX;3Fys>p49Iz| z`bSxm3@c{1vDQJ^VmAUU z)0UKz%p@h+KmJbt#s**uZ|R=QBKOjOsS}}}f{yIVv0y{=1^K&s_Vr>K&0pJt%>-Qc ziE(2XV_p>gTz}?LZ7$0pz=KVo=e)lVFd3}VUyaj35kpgjy4cZ{6)gcoYDum*#(5Kj zZSH#x-{{`N?>$^(DRdLl7@C2;6^mx0fsAXMko_s4XlPtb=?b&>#3;KVxG{Llw`e@_ zY^4}I%E{uY+NKSVnMqFLa|#+(X|lp47&i*s1gxX3W_ukzL#fl%@TKfON=N*vc2&E| zi_}je##ca--=OIMnWwGI_?bGf-!}?xHE>Nh(Hr|u?yTx?p9lG^&@mRhJ=gagckW=) z@U7QPHz3_OcvaC~uZ*oo!a4In*qk+Ay(b%keUy8uT6#e^ALbB=vUi+*lq<94vCi|w z51LXg9~XhX#xtXZ9&vXdfrxSu`0jO4D_F{8EM5=3(q# z;0ZiL#MD|+8ecB&Lszq+_%`@d&{qsGc2rctw#!@u>8~gm_V9+ceK{0mST95Z{ZkI~ zYl@Zjf!XbPXAd-52$r#U)-Q{*r^?~kGGuGaVaFOd_eA)(XKj(j)ehGflJO(P5+m-~ zT1fY%`fV0pIA>xRv}FVD==7yG?}RUTaK<|Ii%B2mWjT~hKBW@;q0I0KtMoga0R3qs>pOtu3xLY*e)cenQ#uBF zuXuB7NW;XtOH*g%NfQLx#(Bp0`Qy6Nr?d1+1M71H=Trmd&VezSnwN?5$2;*z)nKR< zX*d3uXn55TN= zQZ_TB%k~0D*tjq{AjkQp1z21g8=Yqqk^GvPw2t`@b$Ly|fA40G(NCn*cI^9FAIqP$ zqsc;0{letSh80sJm*dLDVQ6zMbYxurz-#gh`oHL`R`6ddnNWjJ{#YHw1YefOX5P2l z>J{ACDJdbb^7BVJJ`Z?A+0IM3B$wY|MvSsf0CtO7x=|B{(zcZ=m= z1xA%^uJ>%-TbPr*8Goy+6#R1~lthV?cb~Y)&8}( z!+eR{;sB)&idN5+0UhCP%Jkj$R@fkO#fkx3{i1}w&DzQ9=~~TdkINh=%O_})a^@Nl zm6D`DYfgxRPSt`4g2EQ~{{d99fN}?M*l&M|9>ja;ZlJ^dY8{fP#K$|!>j0k^M!?;~ zhWW6vv7SUqxs_C^{I6P0`qei+)_goCd^~R>l7GQQiWUyp#ShfY6f8q8Wpl!{=z5{m zr5j79QP-iQWxm$tjo6j96n(m73%*?O;JH0|HQnR``+a7B;>7z~ps_T`{>*Wh)Wq2Ud41~^R*b{jRdIi6cHuvLq zuIB;$wf*NTOgsG0NIAeq+TWLL-VbpO7?k(F#0B1Hbv#!AxOJEEC%*}kjVUd6R!pF( ziT|XZzUb+U;ZV{F@Vk25=U(Mc!YWhk(Md_ROae%_n*06xB@`JQ!2Uwg`= z@}!q?7XcYL1Gq7Zr5m@L+`{G3!+p2MQ~1Yg=c?VKm+tpw%IDo5TwU(3wvvE|c^sqc zXqt%aL1Q&@YpciAoFQA{_H^k}g{%g_wXR^`>CWI){~y23D^=sU9guGz`=C}& z5wMdJrmDT39$9a1DnMJe1!(7>i-SgB+I^=q6I*52KatYz6W?59AFueDUUu_ql9H2W zj@&|RZ*TKF+@8{C-tqxITCew9z`(3@3$$}+UNsST65Krv9V%vRp#*k zP>YWjo2fKKafa-H7V6G#Pg5Vrm`~q8&CJZ~&0oEMN6t7MWaq|V(t8HXLuWXt7*vhb z$`h%WhT(@hEv>vy`7zB%-#VHO8!t4Q?(B*9?=MNA@Yu{+y0a;ECktVnccPQIn^yod zPCNdu$?YNXcw9{GOzEP*9aB@WiiN5;`E-G)sYJx_JB z&B)F^ZGN~5y}yG$+KA0f;<5_>o)trIY+)TSeE}TN;DX^+;~is@79Wy+u?wW zn>+9+JTlaWLRHqTkl=ol5q8T(&o5t~a&5Z@xv(pXduA&>CxY=NA-A7^^;f z*x1S#>hE6zhI1n;F%PdEMtf^0xj?NNnTW`;p`j16r;9J4-swCs2M}yGl}yQKD_dLJ zc(u6+C!kK({Wbj|`qpqNB@0VbqD9^imey@7Alapc!xn^KV%$LT*i`p>|3u3sPIo>O z6o(XdH}YPSd#sMkj9?U^YSC=2)^hmRK@rY^y~sXPQuK_gsD zvD=-rS?@ucU*P@uV~r2!6)LDY3(a@4$2?or=mnhfYDeiGZM7cy4)Aot`4J*}I}R3{ z<5{-J|JBFQT>FcSSb)>A*GEoIPY>L~v(v`od^gf@C%05O{^aeWbYGo3EN^VUeo0Kk zi;wSC=X;4xOtSi3vEUNrQROZ;EZM~$&PGc{zYUMHO^Kv*@1gJS?+1(u&-u=RY7T8@ z0Z{kq0aV7XuB`fT0yz?>Ebq`LP$~BTmdkhN z3qtSfm;YGatMm_mFL&QEl*~N$sLW5+C05t8y2r*MF=+(>BSIXE%bErF zqRK!!#r-*{_d||QTn0->6>yfg6PExP2@_4x2;!omLV{n=Uu8U`W=nZ()e@ayF zv#&D{t5liJ>fQyp(sU{daHI#~PccG4ls0i->0eKu!{)byYvA6!WQFy}!`H?>q z-}rf3-eltByZwGbg^@M4v9WQ(#bR^q`J`Iy#UkC_Ty-d5c%GqHb^{B-v$)v&^XCsA zPytOG1gP(>U`tZsZ;XJd1w{R=_jR#WGv8SD@bcAG>KahZ`7-aR(RdCTAeEUiiIelr zhrCG~)=B;tl<4^LL0K}1Bi{sE;a)h!DQVqtJIte*Bqe|QM!Y!?-ycP#kfXH}`)Jv& zPO-q}6U}Rzn{e;$uJ3^l>n*IlM#ohh>260s(H;5r`t#2b58y@8<uudnTaE4XTRuQJ zdbGQDa{xRU%*ZC_m>Oooy$o$*o4s-=tu5^j{1^58u4Q)rwNcGSs43DoUi&@lMQ6+K zQsw(ECX)rd--UdGfA8GU{1}J?B1XVzzhe+5&RLIzn!k_#cf0RA)_|I@V#ZWQMZLVg zJ9OV_Zn`pzXV%)j9_(A1?AP;2QkL7VI5qVT z=o8*6y6V{jaL;I^sS*?}i_tq^+`xco`Z=132n2{&*_x36>}%cKXi8!LiWY*%r!6cP z0e*(TsjsO8f^Q=UG(##j^$;#0d^K? zV05OE4L*jm)>G$jQBdnZ`A=rs82r%9NGSS4#Q5YW1Xj$wZ`^L5LGV48)28 ztqH&IAkG*t&uk%WEUpA4={?g+?eE&lD-?QRDNPY+p11$>i>&#Lslv?DnV8gpIQKH_ zKTgd5-AUYRX6%uLT``lM%_ z(u`p@k8sY2vq`1mgzC?K7G<-33or-H9nQ+5k6#~v7YHSd>fyjw zp~P2AO0s{#JsBjmY1;O{oNr)`G?`cw#vO^eS9JxG&M*pc*`b5@4u=Ph3!n2AFoG17 zd@?#q_aEawdb)f(@kH0ihTELPmZXts7)F;d@yzk@dIknehi=*N$+a3Sqb^*V%mzTL zh>_kzW>qM1+QdvLB4n76mL^_;dF&)`AaFD6C0k7Q+^nWrjAhy^cYNIAeM^Jx>${l^ zzT=dH;ZFtEzKFFRH(QGN6(d47e%DnG5;x+&D(4)la&yl5QCg5I_vcH5-+rThZlKWm zWR~z^kodJ36)5YlY-7|-m#%Qt5cN}g?Wg}>e~PQd3(E(<9;!+dNI~;yb*W3a>%wCS zyLwqzZp?c``kcA*Jhx<@qdw&3LeuNrJb~j+^dopBBzlX_wh5hatk^~;+Q5SzncnMK zdUjFyu*B^X9_my=Wk*@!Paa77mA$mYIMZA$B2;K0U4o3rr!LE<#EmX;GCSNH8pZNZ zP{8#+L@JRQ*?^nFb6VdKd%Y4wV!u<)0OCP7Uc+%eP{~5+MM0QLUcYHy-q-KfFjx48 z=T`Wo0ny6YRCVU*cxLZna?fQE?Xe}0{-vDr``N$o!x@G&u75rnbDG5$ri-a8z4Vhu z-8o)ctr^WG5r;p*p79#_BNySfLsaaG8?N#cVjs`910^#g2h`=Kl!jG!rSk9AJYho2xdp zFtd3IMtzmqvA(5vYR|8PkS25Xb1J+rvOD}Nvav_kV6Ba8PUsaW7rGF-l;UhRgW6~u zWJi7r`6T()9&rY3!Jla+!Xd7CTHL2p4hNQ(H$Kih61$npC*12rdar}IUOvdKDY83@;9jC$g zbjE%$8R)b0QDDgU>Hm~+M|l@~KcL3?CD==*roMh{kLf(15jOir<{_Q^$e zvmAD0L%JU$+uMBHJDd>|9-rWE&5X-?4iT{C(s8$qM<%D3c1w~v244%`-d6I`n4UxH zXdVDRSh3sb_YO}$F&rlJhru1h;a;t2<>U3XgF71X_=kGs`W_8;Gtu8fOw?W-OnD{;CKDUEEfcYim6njqwP?gJD`}Rw zwS)pdsu%u~MhcI3Y|lCp#E!iji<5U za=&^Bz_QAPlY$Qp>UqHr4hAm!Z~6xZ$+@``0YJt4Ct_3c`SR!j?CiXDaPS@gdO;IP znev&EVDLxUv)SX~ zt%PXXD=K2jB>Wvo{nG^pv7_T!`&P5=9j-&GD?h*- z8ma2ic}$?gL3DKCpRtaLr;XbWuCEuXg)1j;<;=#hrelXINq#8)6*3D;u@6hAG!bxn zS4W(q@xk6Py{xplRGCIkUmp#1WLo(*l3N`G0KoC_acg_Ji`NWtk&OZOL$f%s+M{SEp& zh&{260XQZ+fDE{Yois%(w3(9rPylsxscz|dM6_MPmoF4ulE1A$EHc40GEr&*7+mvo zgJ`fwvCxX)=Jx88Mzz9EDwb{|Rw-BB`?Zjd)tC(XFJYE@#Ks@1E#keVi~7_{RSVZQ zH*K!Zj1$;C{pl;xx4GPUn4?load03a_952SWMUq%Q4{b$Dc>i(`KSo&YvJPRde!`J z!#`*G7{{|{IIHj)FH{=VXPCQu7{%WD+oFVSs`8lu_r)6iz+x!~J~ub_syO(d>BeHV z$~^yZu0)oBpKa|N?LR4^=L20cU;WO-hnI1IkLpdYp~SbeA!?S5oq*@xf_h}1BcJ&k zh&k&$^nv$43>gT)Io$8oA2uZd zAzlDXf5=%l^e1;E?cGX18=KSvnhw>P0gI+~Vv7C2&QT+wScHL_cmLbJX=!2Mw|*_( zvbxf!ZPLAFM1j>-2WkC<%`1!*;7|yYh#DRr0tBjEuD7$5&_;%czsnG>nGTbmMk=fO zM3u*)o8t<0jeoZ9W@VYwj1IbtfjLNge^4*im6sm{)Ib}>;06*{q`tpq2T?5*0$bP( zVh`AFNYYJBk^FI4++En2;xy(@0CV!VKiFbiV^p^2MK)lUL3U_>at7jqAbcKWFqsw* z0)R4_E-_NB0(=f6T$Y@uch$UccmJaGRNqqQ-)OxVm_Ki`QyiQ9Vm7{wVN^_@ik(tT zK%ZW^GSDL5@3twLJkFK;4}Bt>+M3jBrt>PW^c%}#A3OayzH8)!$Ig;L6Z(+t>{KS} zRpH0c)q4!B1JS8274_$#NQT=A3Nz7$IUGqXN7br77zaKeThZbDgUo$xX8^qY(#?FR zD>nnRUv{%?KUukKkbF4Nyeny6eb=M9_iHboqcarY;#F}!eovJih%J$7yizE|+pIi( z&$cT-eiI|ybVt>N;kO3Al~cE8z|+2RR)8wv`bL0*)7#;X5h#7SHEejgIoP#H$BNII zY#85l>1~ibY8J!COxRzu9b~rpG0D(iJN+Jf<%2rQ_Z6=47U$Tys*x%F^+9-0Jid%} zIjSHoc;#V0bksoPS4#GGB{+P~oQN)pJ8lIcd4>np0Z^}Q3)53x&6Hb?mDTb=a1Jou z0c5WiG#wtx-i5^DUiruN5F?TfLjbVm< z*Y`pd6iU=Ru~`)TZy8+tN*u)Ws-l4E2J- z)#VuKfrg_th(=nh)r!*Kbbht9uJAo<<0LMB#?%YL%}Yg&P|#4^MD%N8YqJ~9M>2XG zitMIuQ@ct6zn~))&Wj}qUS^C_fA0!6>VTf&RFZ`xiOu2qcy;b@iNK_`p0Ti0vDXW=Q=0$M!G-j)ojV;&aRqNR1^Nf{qjpvuiAEECj>W_!Ylb4(?DP zllZj*u0UafxLUICXdhXGJPmkCQdc7&T}Fs&LEk+p!+|6D$?H6aAX@P~OyPXR64Tf* zqm3Kg?L%?vU4r%=G2ZFx^Y_{qQkZJbEOm9pBU> zLt>X5`UN8^L;3PK=N^|1G&@QI;y(XxBLXOmtpLCPh7jAU5W+d`$N42+(+ptC3f_Xd zQk`SAh4uutT_~^a8Nkk09MKbNt?V(!AE~oR()*vWO%*Po4(Wp!A6g`&!Q3Q$P!(Ib z7Z`qhTC|osukz^gi3y4Dh9U!CQ5V!1$5R_UP+(l1bP?PTAe7vjYHB#2>ntz z%j60@h$$?k4FrQ>h1pKp8s+%W35@^4NwX*cyq(9cY>;GMIe-Cj3~XwvsO4@>$zZ#z z*d;4YvJ;(c^oi`5D_&vSm+O81Z2|=&lMQSQ*J%5F$@cc@*MwQxo;*X#3k63ux=s!x zIryU7iEyE0n?_G;SC>e1E}n^=(XD(B+peGXX6IY9QaiQkF%@@ihjdp|`nI`pGeQ>3 zlX@8=N9lvnN)fsi|GJMBet`Rk_w;ekUSO+RXdb@+S=|%ce8>9K{Qsb^U-xS2{i3k9 z3gOXD6$P7B^7H;U*=Nb3JKYR_K!k6@Im&^zO-&R{=v;)T<4Pd1Z}OWR=Z*gyUfJUqR$LECl_t`gKFch)ZX!ERe48KkdlH4_^*z&AmE3E@n~{>C1!|K zr{{Gyx-bXG7nf*s8uf6zDNg!6u0i_j<{B*`c5W=}va8JO6oy7N-s<9{`{P1j)>@Uo zi)D4V-bijB8Xf9Rit$48OYK7t>)CH~1_bgzAIpF;ZIF)fD#bwBuvapm#4Tnkr~p5L z4HJtR2;cxQE}Nre0Z{a`en&N#)h^5s&7rJ7L^wb#3e7&hUkEZ+&vBgDQ0b|9Oy*9h zJ%ZD_+n`RRL6b_|Qe_U;YZea==q{7rD&WD?xsEW{N#$E6e{1V9suXMggz86;O@ zaOIgvcNKx_1cYB55Yw#et(fZ-54zLUu6T^(g^P&(dIr4w zZ{tq=vXBh}wV+QVuR_S@q#>N3+(_FQu9#ohnst<4Rr(`xwRlsN(r|tqB}w-ujH<`Z>km>oL~Sa6MQurYkJbgs|O?DTP#aF(m?7Tygg;8 zasnTgBHk=|0FJ+9oUrNU)#JfScHiw??76hpteIkZh2Kw^wDV7v=>FZW^esRrr}xl5 zq_<5-Nn-_yAx*uvQ=o;faJOoljE{9LFJ$zTG*R!e>GWo9`o+Oa_zF%W3QC69iCRyM z$+{q*y>80jS0o}E=K9jUXnH}@gYiHkE!zPaQ`XoVU-W$kyf}$HyiU(eM8>V@9fdT9 z(c(d%TR#pr#xLo)y8DHCEuN(+E&$4Bjis{fEBk)8dk>^T%;@Ll_+=6)t3T~42??4R zoW0p_Q3$6{KZbu$dF67>@ekBi1-hMaPn`TEMx~(>&?-Uci=6M8VbxM(?h2+xIYhT?O zQXLnC-Z`KG7>}8qc1ju0SA9Cm0-Am4f295D?w2UN4MWh z9v#)57vZI!c}NL~!uiP$*s7r9yD>O*s0%eqvsE~NP@ovb&xajFkd%0`@Iy7z5n;_h zjLk|1(=|8A_`6v?HLK!J+U=f#>En#TeC4k~J^FiiBKzY9^v{Y*qm4DX!_+tB#xd>n zyG!m3ySd^dTN&PHJp>#SkgVz*-O!3 zD&bJ_E=36*eeRhh8G>1v$eK#BYQBvv1Nv@97nbHm?f~iI^j$6%9_j zw2&{I)Tio*cbldf56*WrnGfxT8e=!! zHH+^GSM^ze$(9pba36v%_g}_?%*S6f%Zc0vMRDPCNn=wUP#bhI4(6;g{m z1Bx%>Ec$VG14GgFqzO#9J72&`K^YN%F1Io?Y-*=~k?XSDo~rd*3y435rR zq;zWRd!`tuAC!}*KdZ_JI?jdUrZgn!dqXq2-&ZNT7_g_7RfUszgg!~<@?Xm zDba1KzEf&OrH z48@!*^^Mwt0q^&8ITCX!{F`t(D zXBjYMgNLIhjUq@csN}f8=)qkK&_!zfS!t+=Y;gVwE!sgLmP!hiX1eV*&N~0BC@lU* z3qIGc6FBjf z>Z0VI#np05?2=-qig`puuSe!P&sNPV9$a5_u}> z_+$=d8m=NY3|pT_W({?{sB&J)f9`HpSO3tWAFJUrwyg&czaZ=7Y_4_fe5UFq+)=8ZV#cdi}NbRa^f=40}W#^Y(v^UZ+Pr_WKZ@tS4^W zgFx(??$3)+Wat}?p78SWLd^c)HWCu!WMI>1Sy`0+7}}@Al$5?nN%(HpW2rVb`_-xX z@3;k*Md6XVdwT8mZA>7d4Er<80ceX$BIA6{_~HAG>66J^(TC;qum9fA&?G=#CB}7A z`F`Uvb^3TIar$VGX>%~yT$Yf0hWci@6hykY1khxlz>SM&rxGxYL@q}HHa0eU5>zBG z76X|p9u^^H(osK%NE_TSGV^g6rmAe$d)p8iw5f$_K`7MlxW{vmU86*#*IOQ!52V~G zRUG2IrpXBZTa^!AVW3G&5b$-)Qx{hZ^O?rz>m*PRxm~`ltxc_@{5>)m6AO3n zboF~oN$)8E@Ks8gTDd(&08v>>_&mJlXlrO&a%z6y3Tzw)e8XNZ1|(nWE})yp-6f~m zerJ4facHUu!g@opmblVYot8pcZ0?yInCnPNZazYW8H~ z2Q9TI4z{I$8r>Za14S>9vRhfqJ;;c~hto(F+mQ3m+=WXGWB`P3`iHX{C_{n~y0>pv zkGqM8Sb2d6UIS#-6taimFs7P^sLS(kiVT%T8@*nuzD}pwbwTOlO>aGd`UQ$GvpD+p zR*CH13ajjlD{>mUF`hEfoy9A_G75F3DR5HY3j_C4jgR-SZ-ew=>fgReOuTHa|C;BU zT+wKa?T31+g00mQXeAZ4yhz+?k8!afplR;Q>4OECQmE&b9)QW7@O9&4=tTpIvJx#*BB;s&b7amZBk8^A@FjBW?M| zWbX@)zYER=jcZLC(v1Ir5onq$)9lHbn{5!w!hF!lgwTs8l zh10g{A?r?2IenOJ*%fnqT~uDMrYAo#>a>ci+qtR>gomoGu5HBX;MITG3nHx zrkYca;OE1MO}!qnA?m^rvQ}8pWU9p^T0k`5X6t!H*>zEE7xj5keoS6)BJVr2=xUwn zw)p2XjTTmL&87uimdVc9Eb(EBR-j}!9 znD?)!VAn5mYp8^;HUN27#He#gx{YK^4~ouQR@ab-=UsN$KuBr+(Q;H{wNMku$vx+| z69bMo7H8gPrP#H>ui=41o^oNcYoj5a{Uqxc@^sAvC8a+W~C_cM1K7Zin{%bK1cHVEa`Y%Sw7RTZ0^1CE<4fIyRpV01ZnC7WYheZHCk&gC{i4kYJnuaUqPmv}u zfBoL2>T6qVRn&o^;N6tGO{6(Kz@C_X45|Nflu59`l~eK>R7po+97g=`FoQBYkcTb% zyM8Es;ke&Y_5U?wf204v?aEUABt3wI5OJQR9HT#D7~t3A{l8WHso@7lj5jp@-o6*T zw&@C@Vwmy28I#P%Gy-N#+@HtTZ1;C*SNY)lem$THvEaXSj@RS;<8T8nNVfYosRO*B z%73Z<`#<`$Ke2A$$^Y*jdDG)LbJ+aA2QavpEE|sD+yRrn*ZWtgkO?S=N^WVeQ+wZTcEnQ>6qY&yHE;f!&Ow3>b#i0Kl;i097=mU$jwv^o= z1Z$mGT6))K+qZj${A+Vd_iQ2}A_c0I0RXmXdbm4`Oidj=9p)cKalaHoCg9SeH#oTl z38%~H-a)>?Fo#>rVzdN__=|$#ydY7>ow2-;HZrAx$InOMJwpY^h=h`<6|HYtD;+t4)G_H)zgXA$ z_PLe{>-yPTby;9Gq&eFAnCxBQnsjAF1!Ro^HUUeSPDw zjs|uBe*$0^hXoQUw4WVn&72ptp-#hmf8evvvKi`rc9Zh!Og$PEVcv*H>VZ$cVn82? zgBVl#Z2`mn8W9N#cCNks6)IY7+zSfARsD%}u1Ik;zoJOUReU_<+FTe!C!>c`yQ>S# zLH}!RPZ+Hiy?%+wVZ$jh078aG8d6dS0|Ekk?(bKzn#E;hhewtimR#8%&SW20&Mq=! zc!M49*wS3(oR$L7U02|65AriXZ-n5@v)PUmD`FQH`DWQu40bocAL8#Sqneu{?z*{W z9{Me=Rr`M0TCP_%7q^IOh;b>jR<6dLop<){&x1V^n&aQq-o2ir&+opGM*+aa_I_~L zLyX4D2V$hJ({>Zm9YXCaJE20C0|d9BkMczKymc@DZ2?n-1R5)a!pS z_ZC2Lb=$Tu2?-J`f#8TZj6|Yr)ILNotYEkvW`~BG=XK0|zNtCptBVzU^ek($Ru(cPQ7FYVil@dp7nbESr8k&=&kOU<)oW8z9H zJZ6-ZJ!^y;pQjP(pVg&-zhU7n$z6Rs8<$=*AkTe(B=0-k`!U$?+;g^CE>%j+0iFFx zJ{^2f<|;v3m8ZmJ8a~LO+O^)t<>Tu62p+)GOhUobd?QQ3X$S6+D@Cs@b@UeD$+uQ#lWP*owb-vfY^sWDooH|3140yk zz*7h!8S5JmpbZ#y7#DQY!;(kR{g1|Q_3XHRWv{-iPv&uNSixqSXufFwCiV(E$j#F9 zMw{DyfbscklG6vKzvj)|;Lysa-mhg~?TO+9r;97*8i00zO~tZylSb$uSpJS?;cAV8 z$3Oh0zqJ1B1DUj0!hRD;FLznEECYo3%?LZ^^VyN6b;u_Xh@kdon#k)1J&g;&#qh
{
-    type: 'workspaceView',
-    name: 'Example Counter Workspace View',
-    alias: 'example.workspaceView.counter',
-    element: () => import('./example-workspace-view.js'),
-    weight: 900,
-    meta: {
-        label: 'Counter',
-        pathname: 'counter',
-        icon: 'icon-lab',
-    },
-    conditions: [
-        {
-	    alias: UMB_WORKSPACE_CONDITION_ALIAS,
-            match: 'Umb.Workspace.Document',
-        },
-    ],
+### In Workspace Views
+
+```typescript
+export class MyWorkspaceView extends UmbElementMixin(LitElement) {
+	constructor() {
+		super();
+		this.consumeContext(MY_WORKSPACE_CONTEXT, (context) => {
+			this.observe(context.data, (data) => this.requestUpdate());
+		});
+	}
 }
-
+``` + +## Best Practices + +### State Encapsulation + +```typescript +// ✅ Private state with public observables +#data = new UmbObjectState(initialData); +readonly data = this.#data.asObservable(); + +// ❌ Direct state exposure +data = new UmbObjectState(initialData); +``` + +### Context Token Consistency + +```typescript +// ✅ Use workspace scoping +new UmbContextToken('UmbWorkspaceContext', 'my.alias'); + +// ❌ Generic context (not workspace-scoped) +new UmbContextToken('MyContext', 'my.alias'); +``` + +### Conditional Availability + +Only provide contexts when they are meaningful for the workspace type. diff --git a/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-editor-actions.md b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-editor-actions.md index 2eb896ea50a..92a2318c0d2 100644 --- a/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-editor-actions.md +++ b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-editor-actions.md @@ -1,55 +1,256 @@ +--- +description: >- + Learn how to create workspace actions that provide primary user interactions within workspace environments. +--- + # Workspace Actions -{% hint style="warning" %} -This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. -{% endhint %} +Workspace Actions appear as buttons in the workspace footer, providing primary interaction points for workspace operations. They integrate directly with workspace contexts and can be extended with dropdown menu items. + +## Purpose + +Workspace Actions provide: + +- **Primary interactions** prominently displayed in workspace footer +- **Context integration** with direct access to workspace state +- **Extensibility** through action menu items +- **Conditional availability** based on workspace state or type + +## Manifest + +{% code caption="manifest.ts" %} +```typescript +{ + type: 'workspaceAction', + kind: 'default', + name: 'Example Count Incrementor Workspace Action', + alias: 'example.workspaceAction.incrementor', + weight: 1000, + api: () => import('./incrementor-workspace-action.js'), + meta: { + label: 'Increment', + look: 'primary', + color: 'danger', + }, + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: 'Umb.Workspace.Document', + }, + ], +} +``` +{% endcode %} + +### Key Properties + +- **`weight`** - Controls action ordering (higher appears first) +- **`meta.look`** - Button style: `'primary'`, `'secondary'`, `'outline'` +- **`meta.color`** - Color theme: `'default'`, `'positive'`, `'warning'`, `'danger'` +- **`conditions`** - Determines workspace availability + +## Implementation + +Create a workspace action by extending `UmbWorkspaceActionBase` and implementing the `execute` method. This provides the functionality that runs when a user clicks the action button: + +{% code caption="incrementor-workspace-action.ts" %} +```typescript +import { EXAMPLE_COUNTER_CONTEXT } from './counter-workspace-context.js'; +import { UmbWorkspaceActionBase, type UmbWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; + +export class ExampleIncrementorWorkspaceAction extends UmbWorkspaceActionBase implements UmbWorkspaceAction { + override async execute() { + const context = await this.getContext(EXAMPLE_COUNTER_CONTEXT); + if (!context) { + throw new Error('Could not get the counter context'); + } + context.increment(); + } +} -Workspace actions are a set of functionalities or operations that can be performed within a workspace. These actions involve creating documents within the workspace, organizing and categorizing documents, publishing content and so on. +export const api = ExampleIncrementorWorkspaceAction; +``` +{% endcode %} + +## Workspace Integration + +### Context Access -Workspace action relates to a workspace alias (Umb.Workspace.Document) and has Access to the workspace context. +Actions automatically have access to their workspace's contexts: -

Workspace Actions

+```typescript +// Context is scoped to the current workspace +const context = await this.getContext(MY_WORKSPACE_CONTEXT); +``` -**JavaScript Manifest example** +### Execution Lifecycle -
import { extensionRegistry } from '@umbraco-cms/extension-registry';
-import { MyWorkspaceAction } from './my-workspace-action';
+- Actions execute when clicked
+- Can be async for complex operations
+- Have access to workspace state during execution
+- Can modify workspace contexts
 
-const manifest = {
- type: 'workspaceAction',
- alias: 'My.WorkspaceAction',
- name: 'My Workspace Action',
- api: MyWorkspaceAction,
- meta: {
-  label: 'My Action',
- },
- conditions: [
-  {
-   alias: 'Umb.Condition.WorkspaceAlias',
-   match: 'My.Workspace',
-  },
- ],
-};
+### Conditional Execution
 
-extensionRegistry.register(manifest);
-
+Check workspace state before performing actions: + +```typescript +override async execute() { + const entityContext = await this.getContext(ENTITY_CONTEXT); + + if (!entityContext.canPerformAction()) { + return; // Silently skip if not available + } + + await entityContext.performAction(); +} +``` -## The Workspace Action Class +## Action Menu Integration -As part of the Extension Manifest you can attach a class that will be instantiated as part of the action. It will have access to the host element and the Workspace Context. When the action is clicked the `execute` method on the API class will be run. When the action is completed, an event on the host element will be dispatched to notify any surrounding elements. +Actions can be extended with dropdown menu items using `forWorkspaceActions`: -```ts -import { UmbWorkspaceActionBase } from '@umbraco-cms/backoffice/workspace'; +{% code caption="action-with-menu.ts" %} +```typescript +// Primary Action +{ + type: 'workspaceAction', + alias: 'example.action.save', + api: () => import('./save-action.js'), + meta: { label: 'Save' }, +} -export class MyWorkspaceAction extends UmbWorkspaceActionBase { - execute() { - this.workspaceContext.myAction(this.selection); - } +// Menu Item Extension +{ + type: 'workspaceActionMenuItem', + alias: 'example.menuItem.saveAndClose', + api: () => import('./save-close-action.js'), + forWorkspaceActions: 'example.action.save', // Extends the save action + meta: { label: 'Save and Close' }, } ``` +{% endcode %} + +## Action Events -**Default Element** +Workspace actions dispatch a generic `action-executed` event when they complete: ```typescript -interface UmbWorkspaceActionElement {} +// Event is automatically dispatched by the action UI element +export class UmbActionExecutedEvent extends Event { + constructor() { + super('action-executed', { bubbles: true, composed: true, cancelable: false }); + } +} ``` + +### Event Characteristics + +- **Generic signal** - No action-specific data included +- **Always dispatched** - Fires on both success and failure +- **DOM bubbling** - Event bubbles up through the workspace +- **No payload** - Contains no information about the action or results + +### Listening for Action Events + +Components can listen for action completion: + +```typescript +// In a workspace component +this.addEventListener('action-executed', (event) => { + // Action completed (success or failure) + // Refresh UI, close modals, etc. +}); +``` + +### When to Use Events + +- **UI cleanup** - Close dropdowns, modals after action execution +- **General refresh** - Update displays when any action completes +- **State synchronization** - Trigger broad UI updates + +{% hint style="info" %} +For action-specific communication, use workspace contexts rather than events. Events provide only generic completion signals. +{% endhint %} + +## Common Patterns + +### Entity Operations + +```typescript +export class SaveAction extends UmbWorkspaceActionBase { + override async execute() { + const workspace = await this.getContext(DOCUMENT_WORKSPACE_CONTEXT); + await workspace.save(); + } +} +``` + +### State-Dependent Actions + +```typescript +export class PublishAction extends UmbWorkspaceActionBase { + override async execute() { + const workspace = await this.getContext(DOCUMENT_WORKSPACE_CONTEXT); + + if (workspace.hasValidationErrors()) { + // Action doesn't execute if invalid + return; + } + + await workspace.saveAndPublish(); + } +} +``` + +### Multi-Step Operations + +```typescript +export class ComplexAction extends UmbWorkspaceActionBase { + override async execute() { + const workspace = await this.getContext(MY_WORKSPACE_CONTEXT); + + workspace.setStatus('processing'); + await workspace.validate(); + await workspace.process(); + await workspace.save(); + workspace.setStatus('complete'); + } +} +``` + +## Best Practices + +### Action Availability + +Only show actions when they are meaningful: +```typescript +conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: 'Umb.Workspace.Document', + }, + { + alias: 'My.Condition.EntityState', + match: 'draft', // Only show for draft entities + }, +], +``` + +### Visual Hierarchy + +Use appropriate styling for action importance: +```typescript +// Primary action (most important) +meta: { look: 'primary', color: 'positive' } + +// Secondary action +meta: { look: 'secondary' } + +// Destructive action +meta: { look: 'primary', color: 'danger' } +``` + +### Context Dependencies + +Always check that the context is available before performing operations. diff --git a/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-footer-app.md b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-footer-app.md deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-footer-apps.md b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-footer-apps.md new file mode 100644 index 00000000000..849404b5aa7 --- /dev/null +++ b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-footer-apps.md @@ -0,0 +1,217 @@ +--- +description: >- + Learn how to create workspace footer apps that provide persistent status information and contextual data in workspace environments. +--- + +# Workspace Footer App + +Workspace Footer Apps provide persistent status information and contextual data in the workspace footer area. They offer a non-intrusive way to display important information that remains visible while users work with workspace content. + +## Purpose + +Footer Apps provide: +- **Persistent status** information visible while editing +- **Contextual data** related to the current entity +- **Non-intrusive monitoring** without taking up the main workspace space +- **Real-time updates** through workspace context integration + +{% hint style="info" %} +Footer apps appear at the bottom of workspaces and are ideal for displaying status indicators, counters, and contextual information. +{% endhint %} + +## Manifest + +{% code caption="manifest.ts" %} +```typescript +{ + type: 'workspaceFooterApp', + alias: 'example.workspaceFooterApp.counterStatus', + name: 'Counter Status Footer App', + element: () => import('./counter-status-footer-app.element.js'), + weight: 900, + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: 'Umb.Workspace.Document', + }, + ], +} +``` +{% endcode %} + +### Key Properties +- **`element`** - Points to the Lit element implementation +- **`weight`** - Controls positioning within footer area +- **`conditions`** - Determines workspace availability + +## Implementation + +Implement your workspace footer app as a Lit element that extends `UmbElementMixin`. This provides access to workspace contexts and reactive state management: + +{% code caption="counter-status-footer-app.element.ts" %} +```typescript +import { customElement, html, state, LitElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbElementMixin } from '@umbraco-cms/backoffice/element-api'; +import { EXAMPLE_COUNTER_CONTEXT } from './counter-workspace-context.js'; + +@customElement('example-counter-status-footer-app') +export class ExampleCounterStatusFooterAppElement extends UmbElementMixin(LitElement) { + @state() + private _counter = 0; + + constructor() { + super(); + this.#observeCounter(); + } + + async #observeCounter() { + const context = await this.getContext(EXAMPLE_COUNTER_CONTEXT); + if (!context) return; + + this.observe(context.counter, (counter: number) => { + this._counter = counter; + }); + } + + override render() { + return html`Counter: ${this._counter}`; + } +} + +export default ExampleCounterStatusFooterAppElement; + +declare global { + interface HTMLElementTagNameMap { + 'example-counter-status-footer-app': ExampleCounterStatusFooterAppElement; + } +} +``` +{% endcode %} + +## Footer App Lifecycle + +### Initialization +- Footer apps initialize when the workspace loads +- Context consumption happens during construction +- Apps persist for the workspace lifetime + +### Updates +- Use `observe()` for reactive updates from workspace contexts +- Apps update automatically when observed state changes +- Efficient rendering keeps footer responsive + +## Common Patterns + +### Status Indicators +```typescript +@customElement('entity-status-footer-app') +export class EntityStatusFooterApp extends UmbElementMixin(LitElement) { + @state() + private status = 'loading'; + + constructor() { + super(); + this.consumeContext(ENTITY_CONTEXT, (context) => { + this.observe(context.status, (status) => { + this.status = status; + }); + }); + } + + override render() { + return html` +
+ + ${this.status} +
+ `; + } + + #getStatusIcon() { + switch (this.status) { + case 'saved': return 'check'; + case 'draft': return 'edit'; + case 'error': return 'alert'; + default: return 'hourglass'; + } + } +} +``` + +### Live Counters +```typescript +@customElement('word-count-footer-app') +export class WordCountFooterApp extends UmbElementMixin(LitElement) { + @state() + private wordCount = 0; + + constructor() { + super(); + this.consumeContext(CONTENT_CONTEXT, (context) => { + this.observe(context.content, (content) => { + this.wordCount = this.#countWords(content); + }); + }); + } + + #countWords(content: string): number { + return content.trim().split(/\s+/).filter(word => word.length > 0).length; + } + + override render() { + return html`${this.wordCount} words`; + } +} +``` + +### Validation Summary +```typescript +@customElement('validation-footer-app') +export class ValidationFooterApp extends UmbElementMixin(LitElement) { + @state() + private errorCount = 0; + + @state() + private warningCount = 0; + + constructor() { + super(); + this.consumeContext(VALIDATION_CONTEXT, (context) => { + this.observe(context.errors, (errors) => { + this.errorCount = errors.filter(e => e.severity === 'error').length; + this.warningCount = errors.filter(e => e.severity === 'warning').length; + }); + }); + } + + override render() { + if (this.errorCount === 0 && this.warningCount === 0) { + return html`✓ Valid`; + } + + return html` +
+ ${this.errorCount > 0 ? html`${this.errorCount} errors` : ''} + ${this.warningCount > 0 ? html`${this.warningCount} warnings` : ''} +
+ `; + } +} +``` + +## Best Practices + +### Performance +Keep footer apps lightweight for responsive workspace interaction. + +### Information Density +Display only essential information. Footer space is limited. + +### Context Dependencies +Always check that the context is available before accessing its properties. + +### Responsive Design +Ensure footer apps work across different workspace sizes. + +### Visual Consistency +Use Umbraco's design system for consistent styling. diff --git a/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-views.md b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-views.md index 9c21aacd57c..da55deddea3 100644 --- a/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-views.md +++ b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-views.md @@ -1,100 +1,287 @@ --- -description: Append a view to any Workspace +description: >- + Learn how to create workspace views that provide tab-based content areas for organizing different aspects of entity editing. --- # Workspace Views -{% hint style="warning" %} -This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. -{% endhint %} +Workspace Views provide tab-based content areas within workspaces, allowing you to organize different aspects of entity editing into focused interfaces. They appear as tabs alongside the default content editing interface. {% hint style="info" %} -Workspace Views was previously called Content Apps. +Workspace Views were previously called Content Apps in earlier versions of Umbraco. {% endhint %} -Workspace Views are customizable companion **tabs** with the ability to take place in any workspace. - -

Workspace Views

+## Purpose -**In Content Section** +Workspace Views provide: -With Workspace Views, editors can switch from editing 'Content' to accessing contextual information related to the item they are editing. +- **Tab-based organization** for different editing aspects +- **Contextual interfaces** related to the current entity +- **Workspace integration** with access to workspace contexts +- **Custom functionality** specific to entity types -The default workspace view is **'Info'** - displaying Links, History and Status of the current content item. - -## Example of a Workspace View +

Workspace Views

-1. Follow the [Vite Package Setup](../../../development-flow/vite-package-setup.md) by creating a new project folder called "`workspaceview`" in `App_Plugins`. -2. Create a manifest file named `umbraco-package.json` at the root of the `workspaceview` folder. Here we define and configure our workspace view. -3. Add the following code to `umbraco-package.json`: +## Manifest -{% code title="umbraco-package.json" lineNumbers="true" %} -```json +{% code caption="manifest.ts" %} +```typescript { - "$schema": "../../umbraco-package-schema.json", - "name": "My workspace", - "version": "0.1.0", - "extensions": [ + type: 'workspaceView', + name: 'Example Counter Workspace View', + alias: 'example.workspaceView.counter', + element: () => import('./counter-workspace-view.js'), + weight: 900, + meta: { + label: 'Counter', + pathname: 'counter', + icon: 'icon-lab', + }, + conditions: [ { - "type": "workspaceView", - "alias": "My.WorkspaceView", - "name": "My Workspace View", - "element": "/App_Plugins/workspaceview/dist/workspaceview.js", - "meta": { - "label": "My Workspace View", - "pathname": "/my-workspace-view", - "icon": "icon-add" - }, - "conditions": [ - { - "alias": "Umb.Condition.WorkspaceAlias", - "match": "Umb.Workspace.Document" - } - ] - } - ] + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: 'Umb.Workspace.Document', + }, + ], } ``` {% endcode %} -4. Add the following code to the existing `my-element.ts` from the `src`folder: +### Key Properties + +- **`weight`** - Tab ordering (higher weight appears first) +- **`meta.label`** - Text displayed on the tab +- **`meta.pathname`** - URL segment for the view +- **`meta.icon`** - Icon displayed on the tab +- **`conditions`** - Determines workspace availability + +## Implementation + +Implement your workspace view as a Lit element that extends `UmbElementMixin`. This creates a tab-based interface that users can navigate to within the workspace: -{% code title="my-element.ts" lineNumbers="true" %} +{% code caption="counter-workspace-view.ts" %} ```typescript -import { LitElement, html, customElement, css } from "@umbraco-cms/backoffice/external/lit"; -import { UmbElementMixin } from "@umbraco-cms/backoffice/element-api"; - -@customElement('my-workspaceview') -export default class MyWorkspaceViewElement extends UmbElementMixin(LitElement) { - - render() { - return html` - - Welcome to my newly created workspace view. - - ` +import { EXAMPLE_COUNTER_CONTEXT } from './counter-workspace-context.js'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { css, html, customElement, state, LitElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbElementMixin } from '@umbraco-cms/backoffice/element-api'; + +@customElement('example-counter-workspace-view') +export class ExampleCounterWorkspaceView extends UmbElementMixin(LitElement) { + #counterContext?: typeof EXAMPLE_COUNTER_CONTEXT.TYPE; + + @state() + private count = 0; + + constructor() { + super(); + this.consumeContext(EXAMPLE_COUNTER_CONTEXT, (instance) => { + this.#counterContext = instance; + this.#observeCounter(); + }); } - static styles = css` - uui-box { - margin: 20px; - } - ` + #observeCounter(): void { + if (!this.#counterContext) return; + this.observe(this.#counterContext.counter, (count) => { + this.count = count; + }); + } + + override render() { + return html` + +

Counter Example

+

Current count value: ${this.count}

+

This workspace view consumes the Counter Context and displays the current count.

+
+ `; + } + + static override styles = [ + UmbTextStyles, + css` + :host { + display: block; + padding: var(--uui-size-layout-1); + } + `, + ]; } +export default ExampleCounterWorkspaceView; + declare global { interface HTMLElementTagNameMap { - 'my-workspaceview': MyWorkspaceViewElement + 'example-counter-workspace-view': ExampleCounterWorkspaceView; } } - ``` {% endcode %} -In the `workspaceview` folder run `npm run build` and then run the project. Then in the content section of the Backoffice you will see our new Workspace View: +## View Lifecycle -

Workspace View Example

+### Initialization -{% hint style="info" %} -To see the Workspace View that we have created in the content section, first you will need to have some content created. -{% endhint %} +- Views initialize when their tab becomes active +- Context consumption happens during construction +- Views have access to workspace-scoped contexts + +### Tab Navigation + +- Views are lazy-loaded when first accessed +- Navigation updates the workspace URL with view pathname +- Views remain in memory while the workspace is open + +### Context Integration + +Views can consume multiple workspace contexts: + +```typescript +constructor() { + super(); + + // Consume multiple contexts + this.consumeContext(ENTITY_CONTEXT, (context) => { + this.observe(context.entity, (entity) => this.requestUpdate()); + }); + + this.consumeContext(VALIDATION_CONTEXT, (context) => { + this.observe(context.errors, (errors) => this.requestUpdate()); + }); +} +``` + +## Common Patterns + +### Entity Information View + +```typescript +@customElement('entity-info-view') +export class EntityInfoView extends UmbElementMixin(LitElement) { + #entityContext?: EntityWorkspaceContext; + + constructor() { + super(); + this.consumeContext(ENTITY_CONTEXT, (context) => { + this.#entityContext = context; + }); + } + + override render() { + const entity = this.#entityContext?.getCurrentEntity(); + + return html` + +
+
Name
+
${entity?.name}
+
Created
+
${entity?.createDate}
+
+
+ `; + } +} +``` + +### Interactive Configuration View + +```typescript +@customElement('config-view') +export class ConfigView extends UmbElementMixin(LitElement) { + #configContext?: ConfigWorkspaceContext; + + #handleConfigChange(property: string, value: any) { + this.#configContext?.updateConfig(property, value); + } + + override render() { + return html` + + this.#handleConfigChange('enabled', e.target.checked)}> + Enable Feature + + + `; + } +} +``` + +### Analytics Dashboard View + +```typescript +@customElement('analytics-view') +export class AnalyticsView extends UmbElementMixin(LitElement) { + @state() + private analytics?: AnalyticsData; + + constructor() { + super(); + this.#loadAnalytics(); + } + + async #loadAnalytics() { + const entityContext = await this.getContext(ENTITY_CONTEXT); + const entityId = entityContext.getEntityId(); + + const analyticsService = await this.getContext(ANALYTICS_SERVICE); + this.analytics = await analyticsService.getAnalytics(entityId); + } + + override render() { + if (!this.analytics) { + return html``; + } + + return html` + +
+
+ ${this.analytics.pageViews} + Page Views +
+
+
+ `; + } +} +``` + +## Best Practices + +### View Organization + +- Use descriptive tab labels that indicate the view's purpose +- Order views by importance using the `weight` property +- Group related functionality into a single view rather than many small tabs + +### Context Usage + +- Consume contexts in the constructor for immediate availability +- Use `observe()` for reactive updates when context state changes +- Check context availability before accessing properties + +### Performance + +- Keep views lightweight for fast tab switching +- Load expensive data only when view becomes active +- Use loading states for async operations + +### Conditional Availability + +Only show views when relevant: +```typescript +conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: 'Umb.Workspace.Document', + }, + { + alias: 'My.Condition.EntityType', + match: 'blogPost', // Only show for blog posts + }, +], +``` diff --git a/17/umbraco-cms/customizing/property-editors/property-actions.md b/17/umbraco-cms/customizing/property-editors/property-actions.md index e40d6b560b6..710100d733e 100644 --- a/17/umbraco-cms/customizing/property-editors/property-actions.md +++ b/17/umbraco-cms/customizing/property-editors/property-actions.md @@ -4,108 +4,62 @@ description: Guide on how to implement Property Actions for Property Editors in # Property Actions -{% hint style="warning" %} -This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. -{% endhint %} - -Property Actions are a built-in feature that provide a generic place for secondary functionality for property editors. - -Property Actions appear as a small button next to the label of the property, which expands to show the available actions. They are defined and implemented in the Property Editor, making it open as to what a Property Action is. - -## Data Structure of Property Actions - -Property Actions are an array of objects defining each action. An action is defined by the following properties: - -```js -{ - labelKey: 'clipboard_labelForRemoveAllEntries', - labelTokens: [], - icon: 'trash', - method: removeAllEntries, - isDisabled: true -} -``` - -We use `labelKey` and `labelTokens` to retrieve a localized string that is displayed as the Actions label. [See localization for more info.](../../extending/language-files/) - -`isDisabled` is used to disable an Action, which change the visual appearance and prevents interaction. Use this option when an action wouldn't provide any change. In the example above, the action `remove all entries` would not have any impact if there is no entries. - -## Implementation - -The implementation of Property Actions varies depending on whether your Property Editor is implemented with a Controller or as a Component. - -### Controller Implementation +Property Actions are a built-in feature of Umbraco that allows you to add extra functionality to a Property Editor. Think of them as small, secondary actions that you can attach to a property without modifying the editor itself. -When your Property Editor is implemented with a Controller, use the following approach for the Property Action: +Property Actions appear as a small button next to the property label, which expands to show the available actions. -```js -angular.module("umbraco").controller("My.MarkdownEditorController", function ($scope) { +## Property Actions in the UI -function myActionExecutionMethod() { - alert('My Custom Property Action Clicked'); - // Disable the action so it can not be re-run - // You may have custom logic to enable or disable the action - // Based on number of items selected etc... - myAction.isDisabled = true; -}; +
+ +

Property action in Block List

+
-var myAction = { - labelKey: 'general_labelForMyAction', - labelTokens: [], - icon: 'action', - method: myActionExecutionMethod, - isDisabled: false -} +## Registering a Property Action -var propertyActions = [ - myAction -]; +{% hint style="info" %} +Before creating a Property Action, make sure you are familiar with the [Extension Registry in Umbraco](https://docs.umbraco.com/umbraco-cms/customizing/extending-overview/extension-registry/extension-registry). +{% endhint %} -this.$onInit = function () { - if ($scope.umbProperty) { - $scope.umbProperty.setPropertyActions(propertyActions); +Here is how you can register a new Property Action: +``` +import { extensionRegistry } from '@umbraco-cms/extension-registry'; +import { MyEntityAction } from './my-property-action.api'; +const manifest = + { + type: 'propertyAction', + kind: 'default', + alias: 'My.propertyAction', + name: 'My Property Action ', + forPropertyEditorUis: ["my-property-editor"], // Target specific property editors + api: () => import('./my-property-action.api.js'), + weight: 10, // Order if multiple actions exist + meta: { + icon: 'icon-add', // Icon to display in the UI + label: 'My property action', // Label shown to editors } -}; - + }; -}); +extensionRegistry.register(manifest); ``` +### Creating the Property Action Class -### Component Implementation +Every Property Action needs a class that defines what happens when the action is executed. +You can extend the `UmbPropertyActionBase` class for this. -Follow this guide if your Property Editor is implemented as a Component. The Component must be configured to retrieve an optional reference to `umbProperty`. The requirement must be optional because property-editors are implemented in scenarios where it's not presented. - -See the following example: - -```js -angular.module('umbraco').component('myPropertyEditor', { - controller: MyController, - controllerAs: 'vm', - require: { - umbProperty: '?^umbProperty' - } - … -}); ``` - -See the following example for implementation of Property Actions in a Component, notice the difference is that we are parsing actions to `this.umbProperty.setPropertyActions(...)`. - -```js -var myAction = { - labelKey: 'general_labelForMyAction', - labelTokens: [], - icon: 'action', - method: myActionExecutionMethod, - isDisabled: false +import { UmbPropertyActionBase } from '@umbraco-cms/backoffice/property-action'; +import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property'; + +export class MyPropertyAction extends UmbPropertyActionBase { + // The execute method is called when the user triggers the action. + async execute() { + // Retrieve the property’s current state, + const propertyContext = await this.getContext(UMB_PROPERTY_CONTEXT); + + // Here it's possible to modify the property or perform other actions. In this case, setting a value. + propertyContext.setValue("Default text here"); + } } - -var propertyActions = [ - myAction -]; - -this.$onInit = function () { - if (this.umbProperty) { - this.umbProperty.setPropertyActions(propertyActions); - } -}; -``` +export { MyPropertyAction as api }; +``` \ No newline at end of file diff --git a/17/umbraco-cms/customizing/workspaces.md b/17/umbraco-cms/customizing/workspaces.md index 9606400ec88..39100651a0e 100644 --- a/17/umbraco-cms/customizing/workspaces.md +++ b/17/umbraco-cms/customizing/workspaces.md @@ -1,15 +1,16 @@ # Workspaces -{% hint style="warning" %} -This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. -{% endhint %} +Workspaces provide dedicated editing environments for specific entity types in Umbraco. They create isolated areas where users can edit content, media, members, or other entities with specialized interfaces and functionality. -A Workspace is the editor for a specific entity type. It can either be a view of data or a complex editor with multiple views. +## Key Concepts -* A workspace is based on an entity type (for example content, media, member, etc.) and a unique string (ex: key). -* Most workspaces hold a draft state of an entity. It is a copy of the entity data that can be modified at runtime and sent to the server to be saved. -* A workspace can be a single view or consist of multiple views. -* A workspace should host a workspace context, with which anything within can communicate. +**Entity-Based Structure**: Each workspace is designed for a specific entity type (content, media, member, etc.). It is identified by a unique string (such as a key or ID). + +**Draft State Management**: Workspaces maintain a draft copy of entity data that can be modified without affecting the published version until explicitly saved. + +**Flexible Interface**: Workspaces can range from single-view interfaces to complex multi-tabbed editors with specialized functionality. + +**Shared Communication**: Workspaces host workspace contexts that enable all extensions within the workspace to communicate and share state.

Workspace

@@ -17,8 +18,26 @@ A Workspace is the editor for a specific entity type. It can either be a view of interface UmbWorkspaceElement {} ``` -## [Workspace Context](extending-overview/extension-types/workspaces/workspace-context.md) +## Extension Types + +Workspaces support different extension types that work together to create comprehensive editing experiences. These extensions communicate through shared workspace contexts to provide integrated functionality: + +### [Workspace Context](extending-overview/extension-types/workspaces/workspace-context.md) + +The foundation extension that provides shared state management and communication between all workspace extensions. Start here when building workspace functionality. + +### [Workspace Views](extending-overview/extension-types/workspaces/workspace-views.md) + +Create tab-based content areas within workspaces for organizing different aspects of entity editing. These appear as tabs in the main workspace area. + +### [Workspace Actions](extending-overview/extension-types/workspaces/workspace-editor-actions.md) + +Add primary action buttons to workspace footers for user interactions like save, publish, or custom operations. + +### [Workspace Action Menu Items](extending-overview/extension-types/workspaces/workspace-action-menu-items.md) + +Extend workspace actions with dropdown menu items to provide additional functionality without cluttering the footer. -## [Workspace Views](extending-overview/extension-types/workspaces/workspace-views.md) +### [Workspace Footer Apps](extending-overview/extension-types/workspaces/workspace-footer-apps.md) -## [Workspace Actions](extending-overview/extension-types/workspaces/workspace-editor-actions.md) +Display persistent status information and contextual data in the workspace footer area for always-visible information. \ No newline at end of file diff --git a/17/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/style-menu.md b/17/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/style-menu.md index f17178b4861..e1ec6a6d51b 100644 --- a/17/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/style-menu.md +++ b/17/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/style-menu.md @@ -5,7 +5,7 @@ A Style Select Menu is a configurable extension that adds a cascading menu to th ![Rich Text Editor cascading style menu](images/rte-tiptap-stylemenu.png) {% hint style="info" %} -Any custom stylesheets associated with the Rich Text Editor will not auto generate a style select menu in the toolbar. +Any custom stylesheets associated with the Rich Text Editor will not auto-generate a style select menu in the toolbar. See the [Creating a Style Select Menu](#creating-a-style-select-menu) section below. {% endhint %} ## Adding Style Select to Rich Text Editor diff --git a/17/umbraco-cms/reference/content-delivery-api/README.md b/17/umbraco-cms/reference/content-delivery-api/README.md index 66809fb59a2..e545717967c 100644 --- a/17/umbraco-cms/reference/content-delivery-api/README.md +++ b/17/umbraco-cms/reference/content-delivery-api/README.md @@ -59,11 +59,13 @@ Once the Content Delivery API is enabled, the next step is to rebuild the Delive 1. Access the Umbraco Backoffice. 2. Navigate to the **Settings** section. 3. Open the **Examine Management** dashboard. -4. Scroll down to find the **Tools**. +4. Click the **DeliveryAPIContentIndex**. -

Use the "Rebuild index" button under Tools on the Examine Management dashboard in the Settings section.

+

Click the DeliveryAPIContentIndex on the Examine Management dashboard in the Settings section.

-5. Use the **Rebuild index** button. +5. Scroll down and click the **Rebuild index** button. + +

Use the "Rebuild index" button in the DeliveryAPIContentIndex under Tools on the Examine Management dashboard in the Settings section.

Once the index is rebuilt, the API can serve the latest content from the multiple-items endpoint. @@ -239,7 +241,7 @@ Preview: true Api-Key: my-api-key ``` -Is the API key not applied using the `Api-Key` request header, the unpublished content will not be included in the JSON response. +If the API key is not applied using the `Api-Key` request header, the unpublished content will not be included in the JSON response. diff --git a/17/umbraco-cms/reference/searching/examine/indexing.md b/17/umbraco-cms/reference/searching/examine/indexing.md index d2602f85767..bd2eea25ed7 100644 --- a/17/umbraco-cms/reference/searching/examine/indexing.md +++ b/17/umbraco-cms/reference/searching/examine/indexing.md @@ -259,7 +259,6 @@ public class ProductIndexValueSetBuilder : IValueSetBuilder [UmbracoExamineFieldNames.NodeNameFieldName] = content.Name!, ["name"] = content.Name!, // add the fields you want in the index - ["nodeName"] = content.Name!, ["id"] = content.Id, }; diff --git a/17/umbraco-cms/reference/security/two-factor-authentication.md b/17/umbraco-cms/reference/security/two-factor-authentication.md index bc8e437faac..aab07d6193b 100644 --- a/17/umbraco-cms/reference/security/two-factor-authentication.md +++ b/17/umbraco-cms/reference/security/two-factor-authentication.md @@ -100,7 +100,7 @@ public class UmbracoAppAuthenticator : ITwoFactorProvider /// The required data to setup the authenticator app public Task GetSetupDataAsync(Guid userOrMemberKey, string secret) { - var member = _memberService.GetByKey(userOrMemberKey); + var member = _memberService.GetById(userOrMemberKey); var applicationName = "testingOn15"; var twoFactorAuthenticator = new TwoFactorAuthenticator(); @@ -173,47 +173,61 @@ If you already have a members-only page with the edit profile options, you can s ```csharp @using Umbraco.Cms.Core.Services; @using Umbraco.Cms.Web.Website.Controllers; +@using Umbraco.Cms.Core.Models; @using Umbraco.Cms.Web.Website.Models; @using My.Website; -@inject MemberModelBuilderFactory memberModelBuilderFactory -@inject ITwoFactorLoginService twoFactorLoginService +@inject MemberModelBuilderFactory MemberModelBuilderFactory +@inject IMemberTwoFactorLoginService MemberTwoFactorLoginService @{ // Build a profile model to edit - var profileModel = await memberModelBuilderFactory - .CreateProfileModel() - .BuildForCurrentMemberAsync(); + var profileModel = await MemberModelBuilderFactory + .CreateProfileModel() + .BuildForCurrentMemberAsync(); + + List? providerNameList = null; + if (profileModel != null) + { + var providerNamesAttempt = await MemberTwoFactorLoginService.GetProviderNamesAsync(profileModel.Key); + + if (providerNamesAttempt.Success) + { + providerNameList = providerNamesAttempt.Result.ToList(); + } + } // Show all two factor providers - var providerNames = twoFactorLoginService.GetAllProviderNames(); - if (providerNames.Any()) + if (providerNameList != null && providerNameList.Any()) {
- foreach (var providerName in providerNames) + foreach (var provider in providerNameList) { - var setupData = await twoFactorLoginService.GetSetupInfoAsync(profileModel.Key, providerName); + var setupData = await MemberTwoFactorLoginService.GetSetupInfoAsync(profileModel.Key, provider.ProviderName); - // If the `setupData` is `null` for the specified `providerName` it means the provider is already set up. - // In this case, a button to disable the authentication is shown. - if (setupData is null) + // If the `setupData.Success` is `true` for the specified `providerName` it means the provider is not set up. + if (setupData.Success) { - @using (Html.BeginUmbracoForm(nameof(UmbTwoFactorLoginController.Disable))) + if (setupData.Result is QrCodeSetupData qrCodeSetupData) { - - + @using (Html.BeginUmbracoForm(nameof(UmbTwoFactorLoginController.ValidateAndSaveSetup))) + { +

Setup @provider.ProviderName

+ +

Scan the code above with your authenticator app
and enter the resulting code here to validate:

+ + + + + } } } - // If `setupData` is not `null` the type is checked and the UI for how to set up the App Authenticator is shown. - else if(setupData is QrCodeSetupData qrCodeSetupData) + // If `setupData.Success` is `false` the provider is already setup. + // In this case, a button to disable the authentication is shown. + else { - @using (Html.BeginUmbracoForm(nameof(UmbTwoFactorLoginController.ValidateAndSaveSetup))) + @using (Html.BeginUmbracoForm(nameof(UmbTwoFactorLoginController.Disable))) { -

Setup @providerName

- -

Scan the code above with your authenticator app
and enter the resulting code here to validate:

- - - - + + } } } diff --git a/17/umbraco-commerce/SUMMARY.md b/17/umbraco-commerce/SUMMARY.md index 04384d67cde..8026d915ed9 100644 --- a/17/umbraco-commerce/SUMMARY.md +++ b/17/umbraco-commerce/SUMMARY.md @@ -75,6 +75,7 @@ * [List of notification events](key-concepts/events/list-of-notification-events.md) * [Fluent API](key-concepts/fluent-api.md) * [Order Calculation State](key-concepts/order-calculation-state.md) +* [Order Number Generators](key-concepts/order-number-generators.md) * [Payment Forms](key-concepts/payment-forms.md) * [Payment Providers](key-concepts/payment-providers.md) * [Pipelines](key-concepts/pipelines.md) diff --git a/17/umbraco-commerce/how-to-guides/order-number-customization.md b/17/umbraco-commerce/how-to-guides/order-number-customization.md index 21e8931b988..af284566618 100644 --- a/17/umbraco-commerce/how-to-guides/order-number-customization.md +++ b/17/umbraco-commerce/how-to-guides/order-number-customization.md @@ -4,46 +4,122 @@ description: Learn how to customize the default order number generated in Umbrac # Order Number Customization -In Umbraco Commerce, the default order number generation can be customized by implementing the `IOrderNumberGenerator` interface. This interface defines two methods: `GenerateCartNumber(Guid storeId)` and `GenerateOrderNumber(Guid storeId)`, which you can override to create a custom numbering system.​ +Umbraco Commerce provides flexible options for customizing order numbers to meet your business requirements. This guide covers different approaches, from template-based customization to implementing fully custom generators. + +## Built-in Generators + +Before implementing a custom solution, understand that Umbraco Commerce includes two built-in order number generators: + +- **CompactSortableOrderNumberGenerator** (Recommended) - Produces compact, time-sortable identifiers with high scalability and multi-node support +- **DateHashOrderNumberGenerator** (Legacy) - Date-based format maintained for backward compatibility + +For detailed information about these generators and how they work, see the [Order Number Generators](../key-concepts/order-number-generators.md) key concepts documentation. + +## Before Creating a Custom Generator + +Consider these alternatives before implementing a custom generator: + +### 1. Using Store Templates + +You can customize order numbers through store-level templates. Templates allow you to add prefixes, suffixes, or formatting without writing any code: + +```csharp +// Configure templates via the Store entity +await store.SetCartNumberTemplateAsync("CART-{0}"); +await store.SetOrderNumberTemplateAsync("ORDER-{0}"); +``` + +**Examples:** +- Template: `"ORDER-{0}"` + Generated: `"22345-67ABC"` = Final: `"ORDER-22345-67ABC"` +- Template: `"SO-{0}-2025"` + Generated: `"12345"` = Final: `"SO-12345-2025"` + +This approach works with any generator and requires no custom code. + +### 2. Using CompactSortableOrderNumberGenerator + +The `CompactSortableOrderNumberGenerator` handles most common requirements: +- Compact format (10-11 characters) +- Time-sortable +- Multi-node safe +- High-volume capable (1,024 orders/sec per node) + +If your store was upgraded from an earlier version and is using the legacy generator, you can explicitly switch to the recommended generator: + +```csharp +public class MyComposer : IComposer +{ + public void Compose(IUmbracoBuilder builder) + { + builder.Services.AddUnique(); + } +} +``` ## Implementing a Custom Order Number Generator -To create a custom order number generator, define a class that implements the `IOrderNumberGenerator` interface, for example, `CustomOrderNumberGenerator.cs`: +If the built-in generators don't meet your needs, you can create a custom implementation by implementing the `IOrderNumberGenerator` interface. + +### Creating the Custom Generator + +Define a class that implements the `IOrderNumberGenerator` interface: {% code title="CustomOrderNumberGenerator.cs" %} ```csharp +using System; +using System.Threading; +using System.Threading.Tasks; using Umbraco.Commerce.Core.Generators; +using Umbraco.Commerce.Core.Services; public class CustomOrderNumberGenerator : IOrderNumberGenerator { - public string GenerateCartNumber(Guid storeId) + private readonly IStoreService _storeService; + + public CustomOrderNumberGenerator(IStoreService storeService) { - // Implement custom logic for cart numbers + _storeService = storeService; } - public string GenerateOrderNumber(Guid storeId) + public async Task GenerateCartNumberAsync(Guid storeId, CancellationToken cancellationToken = default) { - // Implement custom logic for order numbers + var store = await _storeService.GetStoreAsync(storeId); + + // Implement your custom logic for cart numbers + var cartNumber = $"{DateTime.UtcNow:yyyyMMdd}-{Guid.NewGuid().ToString("N")[..8].ToUpperInvariant()}"; + + // Apply store template if configured + return string.Format(store.CartNumberTemplate ?? "{0}", cartNumber); + } + + public async Task GenerateOrderNumberAsync(Guid storeId, CancellationToken cancellationToken = default) + { + var store = await _storeService.GetStoreAsync(storeId); + + // Implement your custom logic for order numbers + var orderNumber = $"{DateTime.UtcNow:yyyyMMdd}-{Random.Shared.Next(1000, 9999)}"; + + // Apply store template if configured + return string.Format(store.OrderNumberTemplate ?? "{0}", orderNumber); } } ``` {% endcode %} -## Registering the Custom Implementation +### Registering the Custom Implementation After creating your custom generator, register it in `Program.cs` to replace the default implementation: {% code title="Program.cs" %} ```csharp -builder.Services.AddUnique(); +builder.Services.AddUnique(); ``` {% endcode %} -The `AddUnique` method ensures that your custom generator replaces the default `IOrderNumberGenerator`. For more details on dependency injection, see the [Dependency Injection](dependency-injection.md) article. +The `AddUnique` method ensures that your custom generator replaces the default `IOrderNumberGenerator`, overriding both the automatic selection system and the built-in generators. For more details on dependency injection, see the [Dependency Injection](dependency-injection.md) article. ## Important Considerations @@ -54,3 +130,8 @@ Before implementing a custom order number generator, be aware of the following: - **Accounting Considerations:** Umbraco Commerce is not designed as an accounting platform. If strict sequential numbering is required for accounting purposes, it is recommended to integrate with a dedicated accounting system to handle such requirements. By understanding these factors, you can implement a custom order number generator that aligns with your specific requirements while maintaining optimal performance and compliance. + +## Related Documentation + +- [Order Number Generators](../key-concepts/order-number-generators.md) - Detailed documentation about the built-in generators +- [Dependency Injection](dependency-injection.md) - Learn more about registering services in Umbraco Commerce diff --git a/17/umbraco-commerce/key-concepts/discount-rules-and-rewards.md b/17/umbraco-commerce/key-concepts/discount-rules-and-rewards.md index 8d58bf60b1f..d93fdc6c71a 100644 --- a/17/umbraco-commerce/key-concepts/discount-rules-and-rewards.md +++ b/17/umbraco-commerce/key-concepts/discount-rules-and-rewards.md @@ -131,19 +131,19 @@ public class TieredPercentageRewardProvider : DiscountRewardProviderBase GenerateCartNumberAsync(Guid storeId, CancellationToken cancellationToken = default); + Task GenerateOrderNumberAsync(Guid storeId, CancellationToken cancellationToken = default); +} +``` + +The interface provides two key methods: + +- **GenerateCartNumberAsync** - Generates a unique number for shopping carts (orders that haven't been finalized) +- **GenerateOrderNumberAsync** - Generates a unique number for finalized orders + +Both methods are store-scoped, allowing different stores in a multi-tenant environment to have independent number sequences. + +## Built-in Generators + +Umbraco Commerce includes two built-in order number generators: + +### CompactSortableOrderNumberGenerator (Recommended) + +The `CompactSortableOrderNumberGenerator` is the recommended generator introduced in Umbraco Commerce 16.4. It produces compact, time-sortable identifiers with high scalability characteristics. + +**Format:** 10-character Base32 encoded ID with hyphen formatting + +Where: +- `timeComponent` - 7 Base32 characters encoding seconds since January 1, 2025 (supports ~1089 years) +- `nodeId` - 1 Base32 character representing the server/node ID (0-31) +- `sequence` - 2 Base32 characters encoding a per-second sequence number (0-1023) + +**Example:** `22345-67ABC` (hyphen inserted at position 5 for readability) + +**Characteristics:** +- **Compact** - Only 10 characters (11 with hyphen formatting) +- **Time-sortable** - Lexicographic ordering matches chronological ordering +- **Scalable** - Supports up to 1,024 orders per second per node (gracefully waits for the next second if capacity is exceeded rather than failing) +- **Multi-node safe** - Node ID prevents collisions in clustered environments +- **Visual variety** - Character rotation based on time reduces visual repetition + +**Base32 Alphabet:** Uses Crockford-like Base32 (`23456789ABCDEFGHJKLMNPQRSTUVWXYZ`) which excludes ambiguous characters (0, 1, I, O). + +**Number Template Support:** +Cart and order numbers can be formatted using the store's `CartNumberTemplate` and `OrderNumberTemplate` settings (defaults: `"CART-{0}"` and `"ORDER-{0}"`). + +### DateHashOrderNumberGenerator (Legacy) + +The `DateHashOrderNumberGenerator` is the legacy generator from earlier versions of Umbraco Commerce. It creates order numbers based on the current date and time, combined with a random string component. + +{% hint style="info" %} +This generator is maintained for backward compatibility with existing stores, but will eventually be deprecated. New implementations should use `CompactSortableOrderNumberGenerator`. +{% endhint %} + +**Format:** `{dayCount:00000}-{timeCount:000000}-{randomString}` + +Where: +- `dayCount` - Number of days since January 1, 2020 (5 digits) +- `timeCount` - Number of seconds elapsed in the current day (6 digits for carts, 5 for orders) +- `randomString` - 5 random characters from the set `BCDFGHJKLMNPQRSTVWXYZ3456789` + +**Example:** `02103-45678-H4K9P` + +**Characteristics:** +- Human-readable with embedded date information +- Random component reduces predictability +- No sequential ordering within the same second +- Collision risk increases if multiple orders are placed simultaneously +- Not suitable for high-volume or multi-node scenarios + +## How Generators Are Chosen + +Since Umbraco Commerce 16.4, the platform automatically selects the appropriate generator based on your store's state: + +- **New installations (16.4+)** - Uses `CompactSortableOrderNumberGenerator` for all new stores +- **Upgrades with existing orders** - Continues using `DateHashOrderNumberGenerator` for stores that already have orders, ensuring consistent number formats +- **Upgrades without orders** - Switches to `CompactSortableOrderNumberGenerator` for stores with no existing orders + +Prior to version 16.4, all installations used `DateHashOrderNumberGenerator` by default. + +This automatic selection ensures backward compatibility while enabling improved functionality for new stores. + +## Explicitly Choosing a Generator + +If you want to explicitly choose which generator to use, you can override the registration in your application startup. + +### Using CompactSortableOrderNumberGenerator (Recommended) + +To explicitly use the compact sortable generator (for example, when migrating an existing store to the new format): + +```csharp +public class MyComposer : IComposer +{ + public void Compose(IUmbracoBuilder builder) + { + builder.Services.AddUnique(); + } +} +``` + +### Using DateHashOrderNumberGenerator (Legacy Only) + +Only use this if you need to maintain the legacy format on a system that was upgraded: + +```csharp +public class MyComposer : IComposer +{ + public void Compose(IUmbracoBuilder builder) + { + builder.Services.AddUnique(); + } +} +``` + +{% hint style="warning" %} +Changing the order number generator on an existing store will result in different number formats for new orders. Ensure your business processes and integrations can handle mixed formats before making changes. +{% endhint %} + +## Creating a Custom Generator + +You can create custom order number generators by implementing the `IOrderNumberGenerator` interface: + +```csharp +public class CustomOrderNumberGenerator : IOrderNumberGenerator +{ + private readonly IStoreService _storeService; + + public CustomOrderNumberGenerator(IStoreService storeService) + { + _storeService = storeService; + } + + public async Task GenerateCartNumberAsync(Guid storeId, CancellationToken cancellationToken = default) + { + var store = await _storeService.GetStoreAsync(storeId); + + // Your custom cart number generation logic + var cartNumber = Guid.NewGuid().ToString("N")[..8].ToUpperInvariant(); + + // Apply store template if configured + return string.Format(store.CartNumberTemplate ?? "{0}", cartNumber); + } + + public async Task GenerateOrderNumberAsync(Guid storeId, CancellationToken cancellationToken = default) + { + var store = await _storeService.GetStoreAsync(storeId); + + // Your custom order number generation logic + var orderNumber = DateTime.UtcNow.ToString("yyyyMMdd") + "-" + + Random.Shared.Next(1000, 9999); + + // Apply store template if configured + return string.Format(store.OrderNumberTemplate ?? "{0}", orderNumber); + } +} +``` + +### Registering a Custom Generator + +Register your custom generator during application startup to replace the default implementation: + +```csharp +public class MyComposer : IComposer +{ + public void Compose(IUmbracoBuilder builder) + { + builder.Services.AddUnique(); + } +} +``` + +### Important Considerations for Custom Generators + +When implementing a custom generator, ensure: + +1. **Uniqueness** - Generated numbers must be globally unique across all time +2. **Consistency** - The same store should produce numbers in a consistent format +3. **Thread-safety** - Handle concurrent calls safely, especially for sequential numbering +4. **Template support** - Apply the store's `CartNumberTemplate` and `OrderNumberTemplate` settings +5. **Store isolation** - Consider supporting store-specific sequences in multi-store scenarios +6. **Scalability** - Handle high-volume scenarios if your store expects significant traffic +7. **Cluster-awareness** - In multi-node environments, ensure numbers don't collide across nodes +8. **Readability** - Balance uniqueness with human readability for customer communication + +{% hint style="warning" %} + Order numbers may have gaps if customers cancel or modify orders during the checkout process. Umbraco Commerce is not designed as an accounting platform. If you require strict sequential numbering for accounting purposes, integration with a dedicated accounting system is recommended. Additionally, sequential numbering can impact performance due to potential database access requirements. +{% endhint %} + +## Configuration + +Order number templates are configured at the store level and provide a way to add prefixes or suffixes to generated numbers: + +```csharp +// Set via the Store entity +await store.SetCartNumberTemplateAsync("CART-{0}"); +await store.SetOrderNumberTemplateAsync("ORDER-{0}"); +``` + +The `{0}` placeholder is replaced with the generated number from the active generator. + +**Examples:** +- Template: `"ORDER-{0}"` + Generated: `"22345-67ABC"` = Final: `"ORDER-22345-67ABC"` +- Template: `"{0}"` + Generated: `"02103-45678-H4K9P"` = Final: `"02103-45678-H4K9P"` +- Template: `"SO-{0}-2025"` + Generated: `"12345"` = Final: `"SO-12345-2025"` + +Templates are applied regardless of which generator is active, providing consistent branding across your order numbers. diff --git a/17/umbraco-engage/.gitbook/assets/External-profile-data-tab-v16.png b/17/umbraco-engage/.gitbook/assets/External-profile-data-tab-v16.png index 913f27849fac6c834c12d9c6a65d45bebec41dd7..f6390a1f002d80fe420836408d496abf587a1bba 100644 GIT binary patch literal 15050 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

BWwMf*;vIy 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�EHs*!vlfyJ_qPo$pWv3}l7T;h{OYv9ln}}@ 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�v$Cp%g&~9a!B<({>u}) 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 GJo*nsWGr_8 literal 0 HcmV?d00001 diff --git a/17/umbraco-cms/SUMMARY.md b/17/umbraco-cms/SUMMARY.md index 5acbe99f23a..f43de56b210 100644 --- a/17/umbraco-cms/SUMMARY.md +++ b/17/umbraco-cms/SUMMARY.md @@ -188,7 +188,9 @@ * [Trees](customizing/extending-overview/extension-types/tree.md) * [Workspaces](customizing/extending-overview/extension-types/workspaces/README.md) * [Workspace Actions](customizing/extending-overview/extension-types/workspaces/workspace-editor-actions.md) + * [Workspace Action Menu Items](customizing/extending-overview/extension-types/workspaces/workspace-action-menu-items.md) * [Workspace Context](customizing/extending-overview/extension-types/workspaces/workspace-context.md) + * [Workspace Footer Apps](customizing/extending-overview/extension-types/workspaces/workspace-footer-apps.md) * [Workspace Views](customizing/extending-overview/extension-types/workspaces/workspace-views.md) * [Extension Kind](customizing/extending-overview/extension-kind.md) * [Extension Conditions](customizing/extending-overview/extension-conditions.md) diff --git a/17/umbraco-cms/customizing/extending-overview/extension-types/dashboard.md b/17/umbraco-cms/customizing/extending-overview/extension-types/dashboard.md index 8ce78688c34..f7e3cd50a38 100644 --- a/17/umbraco-cms/customizing/extending-overview/extension-types/dashboard.md +++ b/17/umbraco-cms/customizing/extending-overview/extension-types/dashboard.md @@ -39,6 +39,78 @@ Even though these dashboards are useful, you might want to create your own custo You can try and [create a custom dashboard](../../../tutorials/creating-a-custom-dashboard/) as a way on getting started on this topic. +### Hiding or adding conditional rules to existing dashboards + +You might need to hide or add conditions to existing dashboards. Common use cases include hiding the Getting Started dashboard or restricting the Redirect Management dashboard to Admin users only. + +To do this, you will first need to [create an extension](../../../tutorials/creating-your-first-extension.md). For this example, which implements dashboard customizations, a descriptive name like `DashboardCustomization` works well: + +{% code title="~/App_Plugins/DashboardCustomization/umbraco-package.json" lineNumbers="true" %} +```json +{ + "name": "DashboardCustomization", + "version": "1.0.0", + "extensions": [ + { + "type": "backofficeEntryPoint", + "alias": "DashboardCustomization.EntryPoint", + "name": "Dashboard Customization Entry Point", + "js": "/App_Plugins/DashboardCustomization/dashboards-setup.js" + } + ] +} +``` +{% endcode %} + +Use the `onInit` function to configure the dashboard removal and customization. The optional `onUnload` function can clean up any customizations when the extension is disposed: + +{% code title="~/App_Plugins/DashboardCustomization/dashboards-setup.js" lineNumbers="true" %} +```js +export const onInit = (host, extensionRegistry) => { + // Remove Getting Started dashboard for all users + extensionRegistry.exclude('Umb.Dashboard.UmbracoNews'); + + // Restrict Redirect Management dashboard to Admin users only + extensionRegistry.appendCondition('Umb.Dashboard.RedirectManagement', { + alias: 'Umb.Condition.CurrentUser.IsAdmin' + }); +} + +/** + * Optional: Perform cleanup when the extension is unloaded + */ +export const onUnload = (host, extensionRegistry) => { + // Note: In most cases, cleanup is not necessary as the extension registry + // handles this automatically when the backoffice reloads +} +``` +{% endcode %} + +#### Restricting to specific user groups + +To allow multiple user groups (for example, Admin or a custom group), use the `Umb.Condition.CurrentUser.GroupId` condition with the `oneOf` parameter: + +{% code title="~/App_Plugins/DashboardCustomization/dashboards-setup.js" lineNumbers="true" %} +```js +export const onInit = (host, extensionRegistry) => { + extensionRegistry.appendCondition('Umb.Dashboard.RedirectManagement', { + alias: 'Umb.Condition.CurrentUser.GroupId', + oneOf: [ + 'CUSTOM-GROUP-GUID-1-HERE', + 'CUSTOM-GROUP-GUID-2-HERE' + ] + }); +}; +``` +{% endcode %} + +You can find user group GUIDs in the **Users > User Groups** section of the backoffice. + +Read more about the available conditions: + +{% content-ref url="condition.md" %} +[condition.md](condition.md) +{% endcontent-ref %} ## Registering your Dashboard This section dives into the Dashboard Extension Manifest, shows how to register one, and append additional details. diff --git a/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/README.md b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/README.md index 5581b2339ac..3eb5a10f7dc 100644 --- a/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/README.md +++ b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/README.md @@ -1,6 +1,53 @@ --- description: >- - An overview of the available extension types related to workspaces. + Learn about workspace extension types that provide shared functionality and enable communication within workspace environments. --- # Extension Types: Workspaces + +Workspace extensions are specialized components that enhance Umbraco's editing environments for documents, media, and members. They share state through workspace contexts. This enables coordinated functionality like synchronized actions, real-time status updates, and seamless data flow across the editing interface. + +## Available Extension Types + +Workspace extensions can be grouped into these types: + +### Core Extensions + +- **[Workspace Context](workspace-context.md)** - Provides shared state management and communication between workspace extensions +- **[Workspace](../../../workspaces.md)** - Defines the main workspace environment and routing + +### User Interface Extensions + +- **[Workspace Views](workspace-views.md)** - Tab-based content areas for organizing different aspects of entity editing +- **[Workspace Footer Apps](workspace-footer-apps.md)** - Persistent status information and contextual data in the footer area + +### Action Extensions + +- **[Workspace Actions](workspace-editor-actions.md)** - Primary action buttons that appear in the workspace footer +- **[Workspace Action Menu Items](workspace-action-menu-items.md)** - Dropdown menu items that extend workspace actions with additional functionality + +## Integration Patterns + +Workspace extensions communicate through shared contexts using these patterns: + +1. **[Workspace Context](workspace-context.md)** manages centralized state using observables that automatically notify subscribers of changes +2. **[Workspace Actions](workspace-editor-actions.md)** consume the context to modify state when users interact with buttons or menu items +3. **[Workspace Action Menu Items](workspace-action-menu-items.md)** add additional options for workspace actions +4. **[Workspace Views](workspace-views.md)** observe context state to automatically update their UI when data changes +5. **[Footer Apps](workspace-footer-apps.md)** monitor context state to display real-time status information + +### Communication Flow + +``` +Workspace Context (State Management) + ↕️ +Workspace Actions (State Modification) + ↕️ +Workspace Views (State Display) + ↕️ +Footer Apps (Status Monitoring) +``` + +{% hint style="info" %} +All workspace extensions are automatically scoped to their workspace instance, ensuring that extensions in different workspaces do not interfere with each other. +{% endhint %} diff --git a/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-action-menu-item.md b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-action-menu-item.md deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-action-menu-items.md b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-action-menu-items.md new file mode 100644 index 00000000000..6c83776811f --- /dev/null +++ b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-action-menu-items.md @@ -0,0 +1,92 @@ +--- +description: >- + Learn how to create workspace action menu items that extend workspace actions with additional functionality. +--- + +# Workspace Action Menu Item + +Workspace Action Menu Items extend existing workspace actions by adding dropdown menu options. They provide secondary functionality that relates to the primary action without cluttering the workspace footer. + +## Manifest + +{% code caption="manifest.ts" %} +```typescript +{ + type: 'workspaceActionMenuItem', + kind: 'default', + alias: 'example.workspaceActionMenuItem.resetCounter', + name: 'Reset Counter Menu Item', + api: () => import('./reset-counter-menu-item.action.js'), + forWorkspaceActions: 'example.workspaceAction.incrementor', + weight: 100, + meta: { + label: 'Reset Counter', + icon: 'icon-refresh', + }, +} +``` +{% endcode %} + +### Key Properties +- **`kind`** - Specifies which type of element should be shown (if no `element` is provided). The `default` option refers to the ``, which supports a label and an href +- **`forWorkspaceActions`** - Specifies which workspace action this extends +- **`weight`** - Controls ordering within the dropdown menu +- **`meta.label`** - Text displayed in dropdown +- **`meta.icon`** - Icon displayed alongside label + +## Implementation + +Create a workspace action menu item by extending `UmbWorkspaceActionMenuItemBase` and implementing the `execute` method. This provides the functionality that runs when a user interacts with the menu item: + +{% code caption="reset-counter-menu-item.action.ts" %} +```typescript +import { EXAMPLE_COUNTER_CONTEXT } from './counter-workspace-context.js'; +import { UmbWorkspaceActionMenuItemBase } from '@umbraco-cms/backoffice/workspace'; +import type { UmbWorkspaceActionMenuItem } from '@umbraco-cms/backoffice/workspace'; + +export class ExampleResetCounterMenuItemAction extends UmbWorkspaceActionMenuItemBase implements UmbWorkspaceActionMenuItem { + override async execute() { + const context = await this.getContext(EXAMPLE_COUNTER_CONTEXT); + if (!context) { + throw new Error('Could not get the counter context'); + } + + context.reset(); + } +} + +export const api = ExampleResetCounterMenuItemAction; +``` +{% endcode %} + +## Action Relationship + +Menu items display a dropdown menu for their associated actions: + +### Primary Action +```typescript +// The main action that appears as a button +{ + type: 'workspaceAction', + alias: 'example.workspaceAction.save', + meta: { label: 'Save' }, +} +``` + +### Menu Item Extensions +```typescript +// Multiple menu items can extend the same action +{ + type: 'workspaceActionMenuItem', + alias: 'example.menuItem.saveAndClose', + forWorkspaceActions: 'example.workspaceAction.save', + meta: { label: 'Save and Close' }, +} + +{ + type: 'workspaceActionMenuItem', + alias: 'example.menuItem.saveAsDraft', + forWorkspaceActions: 'example.workspaceAction.save', + meta: { label: 'Save as Draft' }, +} +``` \ No newline at end of file diff --git a/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-context.md b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-context.md index 2000323ca5c..e7efdcad4e0 100644 --- a/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-context.md +++ b/17/umbraco-cms/customizing/extending-overview/extension-types/workspaces/workspace-context.md @@ -1,135 +1,205 @@ --- -description: Establish an extension to communicate across the application. +description: >- + Learn how to create workspace contexts that manage shared state and enable communication between extensions in a workspace. --- # Workspace Context -The general Workspace Context is a container for the data of a workspace. It is a wrapper around the data of the entity that the workspace is working on. It is responsible for loading and saving the data to the server. Workspace Contexts are used to bring additional context alongside the default context of a workspace. +Workspace Contexts serve as the central communication hub for workspace extensions, providing shared state management within workspace boundaries. They enable different workspace components to interact through a common data layer. -* A workspace context knows about its entity type (for example content, media, member, etc.) and holds its unique string (for example: key). -* Most workspace contexts hold a draft state of its entity data. It is a copy of the entity data that can be modified at runtime and sent to the server to be saved. +## Purpose -You can add additional Workspace Contexts using the `workspaceContext` Extension Type, which allows you to inject custom logic into your own Workspace or another one. +Workspace Contexts provide: -## Example of Workspace Context +- **Shared state** scoped to a specific workspace instance +- **Communication layer** between extensions in the workspace +- **Entity lifecycle management** for workspace data +- **Context isolation** ensures workspace independence -The API will be initiated with the same host as the default Workspace Context. +{% hint style="info" %} +Workspace Contexts are automatically scoped to their workspace. Extensions in different workspaces cannot access each other's contexts. +{% endhint %} +## Manifest + +{% code caption="manifest.ts" %} ```typescript { - type: 'workspaceContext', - alias: 'My.WorkspaceContext.Counter', - name: 'My Counter Context', - api: 'my-workspace-counter.context.js', - conditions: [ - { - alias: 'Umb.Condition.WorkspaceAlias', - match: 'Umb.Workspace.Document', - } - ] + type: 'workspaceContext', + name: 'Example Counter Workspace Context', + alias: 'example.workspaceContext.counter', + api: () => import('./counter-workspace-context.js'), + conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: 'Umb.Workspace.Document', + }, + ], } ``` +{% endcode %} + +## Implementation -The code for such an API file might look like this: +Create a workspace context by extending `UmbContextBase` and providing a unique context token. Add this to your project to enable shared state management between workspace extensions: +{% code caption="counter-workspace-context.ts" %} ```typescript -import { - UmbController, - UmbControllerHost, -} from "@umbraco-cms/backoffice/controller-api"; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; -import { UmbContextToken } from "@umbraco-cms/backoffice/context-api"; -import { UmbNumberState } from "@umbraco-cms/backoffice/observable-api"; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbNumberState } from '@umbraco-cms/backoffice/observable-api'; + +export class WorkspaceContextCounterElement extends UmbContextBase { + #counter = new UmbNumberState(0); + readonly counter = this.#counter.asObservable(); -export class MyContextApi extends UmbContextBase { - #counter = new UmbNumberState(0); - readonly counter = this.#counter.asObservable(); + constructor(host: UmbControllerHost) { + super(host, EXAMPLE_COUNTER_CONTEXT); + } - constructor(host: UmbControllerHost) { - super(host, My_COUNTER_CONTEXT); - } + increment() { + this.#counter.setValue(this.#counter.value + 1); + } - increment() { - this.#counter.next(this.#counter.value + 1); - } + reset() { + this.#counter.setValue(0); + } } -// Important to export as api for the Extension Registry to pick up the class: -export const api = MyContextCounterApi; +export const api = WorkspaceContextCounterElement; + +export const EXAMPLE_COUNTER_CONTEXT = new UmbContextToken( + 'UmbWorkspaceContext', + 'example.workspaceContext.counter', +); ``` +{% endcode %} + +## Context Token Pattern -A Context Token for a Workspace Context Extension should look like this: +Always use `'UmbWorkspaceContext'` as the first parameter in your context token to ensure proper workspace scoping and isolation: ```typescript -export const My_COUNTER_CONTEXT = new UmbContextToken( - "UmbWorkspaceContext", - "My.WorkspaceContext.Counter" +export const MY_WORKSPACE_CONTEXT = new UmbContextToken( + 'UmbWorkspaceContext', // Ensures workspace scoping + 'my.extension.alias', // Must match manifest alias ); ``` -It is recommended to use `UmbWorkspaceContext` as the Context Alias for your Context Token. This will ensure that the requester only retrieves this Context if it's present at their nearest Workspace Context. Use the Extension Manifest Alias as the API Alias for your Context Token to ensure its unique. For more information, see the [Context API](../../../foundation/context-api/) article. +## Workspace Lifecycle + +### Initialization + +- Created when workspace loads +- Available to all extensions within that workspace +- Destroyed when workspace closes + +### Scoping -## Use the Workspace Context +- Context instances are isolated per workspace +- Extensions can only access contexts from their own workspace +- Context requests automatically scope to the nearest workspace -The following example declares an element that will be present in the same workspace for which the workspace context is provided. In this particular example, it is a workspace view that will be registered to the `Umb.Workspace.Document` workspace. +### Conditions + +Workspace contexts only initialize when their conditions match: ```typescript -import { My_COUNTER_CONTEXT } from './example-workspace-context.js'; -import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { css, html, customElement, state, LitElement } from '@umbraco-cms/backoffice/external/lit'; -import { UmbElementMixin } from '@umbraco-cms/backoffice/element-api'; +conditions: [ + { + alias: UMB_WORKSPACE_CONDITION_ALIAS, + match: 'Umb.Workspace.Document', // Only available in document workspaces + }, +], +``` -@customElement('example-counter-workspace-view') -export class ExampleCounterWorkspaceView extends UmbElementMixin(LitElement) { - - #counterContext?: typeof My_COUNTER_CONTEXT.TYPE; +## Entity Data Patterns - @state() - private count = 0; +### Draft State Management - constructor() { - super(); - this.consumeContext(My_COUNTER_CONTEXT, (context) => { - this.#counterContext = context; - this.observe(this.#counterContext.counter, (count) => { - this.count = count; - }); +```typescript +export class EntityWorkspaceContext extends UmbContextBase { + #entity = new UmbObjectState(null); + #isDirty = new UmbBooleanState(false); + + readonly entity = this.#entity.asObservable(); + readonly isDirty = this.#isDirty.asObservable(); + + updateEntity(changes: Partial) { + const current = this.#entity.getValue(); + if (current) { + this.#entity.setValue({ ...current, ...changes }); + this.#isDirty.setValue(true); + } } +} +``` - #onClick() { - this.#counterContext?.increment(); - } +### Server Integration - override render() { - return html` - Current count value: ${this.count} - - `; +```typescript +export class ServerEntityContext extends UmbContextBase { + #repository = inject(MyEntityRepository); + + async save() { + const entity = this.#entity.getValue(); + const saved = await this.#repository.save(entity); + this.#entity.setValue(saved); + this.#isDirty.setValue(false); } } +``` + +## Extension Communication -// Important to export as 'element' otherwise the Extension Registry cannot pick up the class. -export const element = ExampleCounterWorkspaceView +### In Workspace Actions + +```typescript +export class MyWorkspaceAction extends UmbWorkspaceActionBase { + override async execute() { + const context = await this.getContext(MY_WORKSPACE_CONTEXT); + context.performAction(); + } +} ``` -Manifest to register this: - -