From df46abc36304add20e8cac6166c4921a343b2c12 Mon Sep 17 00:00:00 2001 From: David Warner II Date: Thu, 28 Feb 2019 07:36:53 -0800 Subject: [PATCH] Modern Experience Theme Manager (#796) * Dynamic SPFx Bundling Initial Commit * Upgrade to SPFx v1.7.0 * New Modern Experience Theme Manager web part sample --- samples/js-theme-manager/.editorconfig | 25 ++ samples/js-theme-manager/.gitignore | 32 ++ samples/js-theme-manager/.yo-rc.json | 11 + samples/js-theme-manager/README.md | 72 ++++ .../js-theme-manager/assets/apply-a-theme.png | Bin 0 -> 37617 bytes .../assets/create-a-theme.png | Bin 0 -> 43014 bytes .../assets/delete-a-theme.png | Bin 0 -> 17355 bytes .../js-theme-manager/assets/theme-manager.png | Bin 0 -> 13810 bytes .../assets/update-a-theme.png | Bin 0 -> 35285 bytes samples/js-theme-manager/config/config.json | 18 + .../js-theme-manager/config/copy-assets.json | 4 + .../config/deploy-azure-storage.json | 7 + .../config/package-solution.json | 12 + samples/js-theme-manager/config/serve.json | 10 + .../config/write-manifests.json | 4 + samples/js-theme-manager/gulpfile.js | 7 + samples/js-theme-manager/package.json | 31 ++ samples/js-theme-manager/src/index.ts | 1 + .../ModernThemeManagerWebPart.manifest.json | 26 ++ .../ModernThemeManagerWebPart.module.scss | 120 ++++++ .../ModernThemeManagerWebPart.ts | 407 ++++++++++++++++++ .../webparts/modernThemeManager/loc/en-us.js | 7 + .../modernThemeManager/loc/mystrings.d.ts | 10 + samples/js-theme-manager/tsconfig.json | 34 ++ samples/js-theme-manager/tslint.json | 30 ++ 25 files changed, 868 insertions(+) create mode 100644 samples/js-theme-manager/.editorconfig create mode 100644 samples/js-theme-manager/.gitignore create mode 100644 samples/js-theme-manager/.yo-rc.json create mode 100644 samples/js-theme-manager/README.md create mode 100644 samples/js-theme-manager/assets/apply-a-theme.png create mode 100644 samples/js-theme-manager/assets/create-a-theme.png create mode 100644 samples/js-theme-manager/assets/delete-a-theme.png create mode 100644 samples/js-theme-manager/assets/theme-manager.png create mode 100644 samples/js-theme-manager/assets/update-a-theme.png create mode 100644 samples/js-theme-manager/config/config.json create mode 100644 samples/js-theme-manager/config/copy-assets.json create mode 100644 samples/js-theme-manager/config/deploy-azure-storage.json create mode 100644 samples/js-theme-manager/config/package-solution.json create mode 100644 samples/js-theme-manager/config/serve.json create mode 100644 samples/js-theme-manager/config/write-manifests.json create mode 100644 samples/js-theme-manager/gulpfile.js create mode 100644 samples/js-theme-manager/package.json create mode 100644 samples/js-theme-manager/src/index.ts create mode 100644 samples/js-theme-manager/src/webparts/modernThemeManager/ModernThemeManagerWebPart.manifest.json create mode 100644 samples/js-theme-manager/src/webparts/modernThemeManager/ModernThemeManagerWebPart.module.scss create mode 100644 samples/js-theme-manager/src/webparts/modernThemeManager/ModernThemeManagerWebPart.ts create mode 100644 samples/js-theme-manager/src/webparts/modernThemeManager/loc/en-us.js create mode 100644 samples/js-theme-manager/src/webparts/modernThemeManager/loc/mystrings.d.ts create mode 100644 samples/js-theme-manager/tsconfig.json create mode 100644 samples/js-theme-manager/tslint.json diff --git a/samples/js-theme-manager/.editorconfig b/samples/js-theme-manager/.editorconfig new file mode 100644 index 000000000..8ffcdc4ec --- /dev/null +++ b/samples/js-theme-manager/.editorconfig @@ -0,0 +1,25 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + + +[*] + +# change these settings to your own preference +indent_style = space +indent_size = 2 + +# we recommend you to keep these unchanged +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false + +[{package,bower}.json] +indent_style = space +indent_size = 2 \ No newline at end of file diff --git a/samples/js-theme-manager/.gitignore b/samples/js-theme-manager/.gitignore new file mode 100644 index 000000000..b19bbe123 --- /dev/null +++ b/samples/js-theme-manager/.gitignore @@ -0,0 +1,32 @@ +# Logs +logs +*.log +npm-debug.log* + +# Dependency directories +node_modules + +# Build generated files +dist +lib +solution +temp +*.sppkg + +# Coverage directory used by tools like istanbul +coverage + +# OSX +.DS_Store + +# Visual Studio files +.ntvs_analysis.dat +.vs +bin +obj + +# Resx Generated Code +*.resx.ts + +# Styles Generated Code +*.scss.ts diff --git a/samples/js-theme-manager/.yo-rc.json b/samples/js-theme-manager/.yo-rc.json new file mode 100644 index 000000000..7cd1a6563 --- /dev/null +++ b/samples/js-theme-manager/.yo-rc.json @@ -0,0 +1,11 @@ +{ + "@microsoft/generator-sharepoint": { + "isCreatingSolution": true, + "environment": "spo", + "version": "1.7.1", + "libraryName": "js-theme-manager", + "libraryId": "555147fb-b773-446f-aef2-1b25001f92d9", + "packageManager": "npm", + "componentType": "webpart" + } +} \ No newline at end of file diff --git a/samples/js-theme-manager/README.md b/samples/js-theme-manager/README.md new file mode 100644 index 000000000..73d63d654 --- /dev/null +++ b/samples/js-theme-manager/README.md @@ -0,0 +1,72 @@ +# Modern Experience Theme Manager + +## Summary +This sample web part provides a user interface for creating, updating, deleting and applying a Modern Experience SharePoint theme in SharePoint Online. + +The Theme Palette can be generated using the UI Fabric Theme Generator at: https://developer.microsoft.com/en-us/fabric#/styles/themegenerator + +

The following four features are available within this sample:

+ +Create a theme:
+Using a provided theme name and theme color palette a Modern Experience them is created and available at the tenant level. +![preview](./assets/create-a-theme.png) + +Update a theme:
+By selecting a pre-existing theme from the dropdown, the theme at the tenant level will be updated with the palette provided in the Theme Palette texbox. +![preview](./assets/update-a-theme.png) + +Delete a theme:
+By selecting a pre-existing theme from the dropdown, the theme will be deleted from the tenant level. +![preview](./assets/delete-a-theme.png) + +Appply a theme:
+By providing a Site Collection URL, along with a theme name and palette, the theme will be applied to the Site Collection directly without being added to the tenant Company Theme options.
+NOTE: This is a great option to provide theme management of a Site Collection without adding a theme to the "Company Themes" choices within the "Change the Look" options at the tenant level. The web part could be added to a Site Collection App Catalog to ensure availability of the web part is only available to those approved for theme management. +![preview](./assets/apply-a-theme.png) + + +## Used SharePoint Framework Version +![drop](https://img.shields.io/badge/drop-1.7.1-orange.svg) + +## Applies to + +* [SharePoint Framework](https:/dev.office.com/sharepoint) +* [Office 365 tenant](https://dev.office.com/sharepoint/docs/spfx/set-up-your-development-environment) + + +## Solution + +Solution|Author(s) +--------|--------- +js-theme-manager | David Warner II ([@DavidWarnerII](https://twitter.com/davidwarnerii) / [Warner Digital](http://warner.digital)) +js-theme-manager | Beau Cameron ([@Beau__Cameron](https://twitter.com/@Beau__Cameron) / [Blog](https://beaucameron.net/)) + +## Version history + +Version|Date|Comments +-------|----|-------- +1.0|February 27, 2019|Initial release + +## Disclaimer +**THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +--- + +## Minimal Path to Awesome + +- Clone this repository +- in the command line run: + - `npm install` + - `gulp serve` + + + +## Features +This Web Part illustrates the following concepts on top of the SharePoint Framework: + +- Using the SharePoint Online REST API to manage Modern Experience Themes + +## Additional Information: +- [Office UI Fabric Theme Palette Generator](https://developer.microsoft.com/en-us/fabric#/styles/themegenerator) + + \ No newline at end of file diff --git a/samples/js-theme-manager/assets/apply-a-theme.png b/samples/js-theme-manager/assets/apply-a-theme.png new file mode 100644 index 0000000000000000000000000000000000000000..76790e895232c0418589adf81a8594f63eb155ef GIT binary patch literal 37617 zcmdSBd0dj||1VtAqOEF9skx9#S!tO%xeKFa+Egw%X69DmQkj|(E-6q`rsaZ5F6F|Q zQ)Y_>=7Jlo;0i6KA}SRM%AzTP0s_xXP0f7IInVDo=k@&aJG@@KlAHU!`0UsF^S-W& z>s}si>sD`Gy=2LfbqCz{9a*yECkgORro0lkVtI%r1^!zKJL2ZNq=u|B3A|Yz;dIz( z$r3Dj&Em-w!24C_-Th%pmaKoN__vf4b3b&+lDumN_Bs8Y7|fFfJvt{!!YB!Qhu7|T zHr&%YY?Pm|r1QkDTb?Z;u3fpz$Xy+#_UaP<`Mz6D+pZs`K_eVC6=SnrVQ-y0*KHA% zv0)rG7ZzZ|D>Qv@=K7rvr!qk7Z2_R(=-&=MXgPp&EqB2kuqpwKoXeB?!piNW(d{f= z!s7?NEyAJX#}|>$t~{uh$p!M`^$*LBx5V>WtcaS>Omkwf?|!QF*FVGWdJD766@U7l zxrtDGrU^Z|IgI}8wu1liw%e~eWDjfGcNze%xII?n15)9?F$ z*Vu!)zQFt3gf&|gH{vc7=2dpfOln)>h}~uc)34X;aQxtL9akYk*F#x$(5&sLNH$L( zh(_nzjlX?pgKLwjMe9&W1j#oTdTJ0sL)k00I_pw7%xyI^^D>$N^3^0Dz5Dtv-*IsCr#Oe3-hFQ zUjO?3W*9FU8de2JfAwElSHPySp`pJETb@4$d@=0tw`f-^6LzmFOZLmob)rtMT(R~z zRYPF{E#p=^?CgY2YuxB|$ydv1JS!-WM(_19BbW5lSLbS$}{}>k=3R>T*i=)GXl{)?`Kz#K;?2D3zo(bf# zvR1~MLwQooC*REz&*Ju#!6J;OZGMRW9=WZwBI(%=gHX#J`Xx-2jkhy$fH+8cV%ENJ z%3fbFpc;N1xm4G#1y0Uo?*EVl44O zwB|3KIJ-X#vhrpa#>wQH4;WXi{itc&;SVJHPL+H6zm1Pyvc3Q@u@6$5XCDelSnWIa zw+W^9aVlk8m-x5|Bj7V9D*E!@7JsjmkLZ{xE7P$91_{mMk}eVE+otQk$NtA2--SA8 z#5~z!ec70j&mHd9{0m(2w|u|(U*(dX-TdYz>0~IV<|)_m^xp<4{lat!1=+n#+hLn8 z9rjDs3=+0R>W*G;Kc>*&POU&;UwL?smzF;PaSdp{SQ46@;Aaw%3!FL57AGd)`M; z&6~P#l-4xdRqO53l1_;=9U)7m(P~nzFA5+66>D_L#QPGBa>*1`g^@tuxAiWY2d5lm z?Od}BdU5h~QAqO7Bjj$gHk^p9(cUhKK(YL2P~k~3te3*A*;AMx`_kfPCUHWGSI6k$I4Aa@9bfi!e z)sj+fzx)b#S{?zSJIrTImuAg$dOFneR|h^pb7A$OTV`O1-GR^0ZI5OoqoU`$_)I~J zylB7*BYFjjfxPcYyhQ^!eA#DzFQJWxD5)J?5I3w(;oM?1L>6+koS}fFy^ps<)7tiW z_Wywn+o#niDn<;gyDUjYF(Vp5W!L%7j^jr0(W>ZGY;O!Y6T!@-#6a$CfD0#+l}G1Q3_%| ziKpR5>@ZM>gq3uNI1E}W!VIR&)P-mv&drt*`NteI#w^Ijlw~ue)=$B)rm)bU#z=o= zS<--f(ahSqd~r5D7+biw@;WKyvE<pr&T4l97*CX`jZGPhe!Xcx!%k zrhj0p(ykU4$tPsO)WuQE!bf4yY6fk2v}D0ixZOR`|`K*vMJ$>Fxj$w zuf9wMKrb&kZ@_eu%`RjriGF=Fo3X>ppijC8LY^_X%dK=+zU=K^WvYflPW!0?ZG*nW z35eW>Z$OOChMrh-14uHMUt)}$hDAvC99@1*CVvfC@QaXWY3DuDDNcU+d~;pl;`6Y+ z@fG<9|9#FE!IB9UCHR%C#_-XlrSEq0_aoI-80})qy6Wk}&!{rgtTighhj# z>X1;)k2s?ue*vLJ^I9!Ot|>{3Qc9%bfDdY=O*Sdnx+drXMeTVX3@gq0ylX}_ z=B5XcBz=sKbbBJ;d<%tW`k8}2GpC2WK z_BbNdyCP;=E~cEzn>i1MEVn7*I}l;}9auA#ui_=837i=cNJQlCU@#;8u-?&{l+pZ1 zEixCi&Ho_LTWQS^6pKc0W29a+2@Mes`%SBce0+UVV>fY=BvF6z zRlZ0ctn3_>rm<(=B&cm1GlC^tNn&BwJs+Me*lTo|xA>y_7+$>5Pi%?3XWm#G*+>+u zHZYr53|e83e|JY0Zi&a4q9nrNyY8rwCOa)!Pd-w$D$vaG?zFjT2(ueBdClf1kqmj4 zdWgvf#bn1hF0|1T&$ZNGdvBlrz+VQLe{0V^e2bRDeGiG#nC*tH7O|1hXM=>|qlQDnY{}Rqb3QX8ph3%waQP!Uu7(ur=@<_UIEv9=msCR?w(*Cx z4kGv)-smxg%3A^;_9B*2Gg8x-(GB8!wyF7RfV6^SIchpHw=oanBulDOMFbOJPt!ZF z_i>n1`B)f83;l2&zus&~YvSw1gMAvaVrTD9jVoI(5m+(uuK1SKKB*5gXPjS<9Gh#TojQi4vWNhG8?r6IH{+?a3XPYNKy`Gao1Qi1x9{*%>H;BB-Z%Iq@)0asZJW~sNaQJWZ zmS1Nl(bk?INr7jp$7$z1EinxzrGzi9istR)k9PQNg_i97#NL6P35@9)wxhCo_42w& z&lisB3VC9D_2=UhK_6ymHX}9wG$8T97+Uy{SHM0Uc29tpk~R^-KHqSpWfsBID3-S> z(8=bT%0rMd_2>h-4D(wokCCQ}7|xdGTy)ZG-Fm!-+x)R{o0{?jNTfr!@JtbDJ;gP) z#*ATmeBaoy?UK};o831Pf_pt*wZ57CsbkI0G(l>q@pO>cc9E+s!Rx}Cqc`cB3S*)m zHQpR2>%u7&t6Ly`k6E4;@zolHUtvWp78@~<|FEbLRe)f?&7xcScTu8F2Ya!s8p0d9 zky|eL3_Xr4t5}cI#JrAhOh5=e-fW*wMeA%y>DZUDZ^?RFdF#nvbwtCz`0WyzTA*Oh zptkHM+j?4V^xwqCmJlK^#_Hlb^hFUj2<>a))abQ2p#) zN#dh8xL!rX+Ca^Z(@UH3K&;!aXIN3wTB)mu2ZzYNhM1RdP3!3|KW*}y4fGz{nG$$_ zk@{(dE*;jzK&H!E(}K_a#3p69w9~yq+!qSW3HO)-Uvxz(N@+wKC-ve$@gE4z3WCfN z8EH?PUwk|e5;a^OJ*Un&ROy6($P#f5xyt-P@kW0^(inB_zu zM@mufppajMNwZ`>VO4w1+O|sxYqP>`oXEt+I1c{Csv;ytF4BjP<;^W(`-bRN&9q}v z4@$HG>W*989l1DaDTsYau{%7OytBjB&zWJU>qCabs17n?4xe>gp7pRC>!?t=U%ED) zd)y}*LMf0Afl1hyfhN0a{VVQeLh1FF|3h6Eg%X=mA1jko-S?5)U9S=Jxv|=5KK3Ej zd;oh6)&0gnV+QsjMju+nx1IQtupJaIpN*Zlk*>2WjPRzdm`S-s^m{oDWv@~G>6dX! zNnrKni@2(F!OB1(j>S68Wo;^`(8v?t38o4@Z{h~1l0D7GK-8qEYl&i2Qk>1$&U_cDa8yeP^kjjBu)Dm7e+PImI%dhOu(xK!hN($;YhXZfrkZ_uMZdoC4+@0x z`K+guffJuPN`SQgF?R$qy7v5s8iPTVT>UzzPDOfs! zGsBr#jN0VBJkr0G38&v#Dxf9j==L`~4A9Ci|KY}0)=^uw&P46g^%0k^{`@@VcjuI< zQWWtu{vpO`6ig;8aD#yW>4}<%c;XyT+7f+OME!Up3JDGVR_t6pvq7NgmxIu-E}LSF zI32&&r2G8dwOLi!xgRVLLz>osrgarAkSrC_Y3w z!;3*KYh@ml#^c1~#?n0QPfmSyECpg;%qPzxW zT0$FF@tBr~l*qE21bTbg$C(vx^`toDQ_&j<$nl}|_##ZUu&~kZEn|kr_*vii?82>d z2C+Ysj$a4lz?*PsIfB?hSqU-pH{jsQ#g@MYI9M?br#zYgXFl%ki~TbE+>ROJ|G9AQ zM_VK2fMdgzikS;g+i7Ur{n~l?Tv{Va$FUR(bhk;R;0%i|C)o}(7nb9sed`q`%ds;!hW$cfD%stq4nUz zTBo*(SGUh^#9%+{9Y1Sr_A&Ou9%5H>>_$6z(Qh(X7}%Ip}qmm=SQ&te>Pz((67xg^@+tP0xE- zYy;^4k)}-~PbkC9_1aJx^RewLY=6n(qqpI*$7+2rLgANNL_K)Yp ze(|;$JvYwUWRxdgsSUrTN89sDc?GtVWp3N2!AfJ1*f%|2lWF=VqJH%?6L7cCba2%lU zGCF*(#(YYeGek8>}mE& z9T$3Lg~{{@oe)Wjyqg#0H|jJJBflbl%^@oFpl!_?cSMnU^*JU02^V)`yW~2wOZIy# zWUQF~PLT8=48wn>UD_%fj*yo|HmbDfedSO!vTztLVQm99gt)m(>8lF6wZkB>Z*d?V z$<1?iBin|Fkr~Se>Sl-cyDvylQz(=WTj0?{rPtHVw@C;+whK)g$Jid@$O-}BSH$LfuKaj zo?rG)5VfSQWSSAWZjZe6T>9>oO1-TQM(RO>t_)7~L*{+DEuai&N&7L@c9s>fG17rs z`;&+Nl*#x>6qTU6kgU082 zHSajgFY}G(w+BJl6JoBoQ_u`8R=U6`8rPeh87baD5nQQ=eJ#GW2c2a$#S-$16SAuG zXiiCUzBJBIZDfPz*DsI&Uts6IPW8zk{XoFAi@r9?hB{+@a^^NePh$|n&IKc_F^?$v z*Tj#cV;4J4>!He(#``LfItQgW^r21jEe*{{7owCzDVbU5X5V|TmKLH9x|hTfo72TM zoiIw&n{b`?0)2(+w|61+GyJ?<>wXIi165x!jUO?`V?18`OZ+B?Q6;?Wk}cDg)i7~| zQpJ*yIyeQLFpxH=&uSJBKY}|r=$6#eSf1ZphQ4lfjk#ShuyPl2>Er{yR~wSW>gS(LjGr`F;#XGl6*8aE1HB28~d zHd?CCL1n_E)?1HXGt&p<9CxM1rs!$V-Xf!~AUP327#_%{jwCOkw(65bY^FKBhqS`~ zG)Hzi-}>i3*Y(&8=%5Ci_zFkUu+SnUKszolxZ-NTcIe_;&sN(TvT6{?pw_=UGGH!^ zyFVZYJ$)i5PI|HD&BFGF7C|Hjt8$N5R1JYmcEfB6^igc!ToJm0G91ivQSjtmf0LC3 zfUiEEec0jqi6Cl}h47%h3Jw?a&!_+UIscWFKYHUE>5Dt^-((2s^;TZmC_YIz850e@ zKyisu*gU<%*NN)sApDqLyRKU055h_++V(45D$;+VXV$hb%WRu&s@ziGuE&9t7@=h^CC(4zMO5J}%Uz0F=w|3qb1*#LZqWq0+HBF3c4}KlLigFJkT2 zIuok3U9ya8DCvm1itt5NM*r2nib@87R*UYTz?)p!C5!VbNoteg=|6SZaosw^>~4m^ zIhJj{WaKIC553d4fYd}+eJ3Sz5VMMHfSzO zKywpbmM9b6DVBq9kS^I0|6sms=R>CgsXnz=huCy)`SEf&Zag-Us>R(8+hwb${%O(JEfrlr>U1M=WC)WDj zrwbb9qhea>t0hgkVykk8sp!BtOql$W3OJtB8sGahJEAMODsNWpx~e>#hfv;u?xU0> zylX~tU)D5Oj?5I)gb<7JSv^gwW<7wB2Tb~RzRQXQQPJ%NHx$b*9mxM;!u{`=eBTyC zfEx2ZRT1@t7Sv=}$^2rEW68X9R?^Ta=|>3R@Gxp(ji)w6e&%D+rd*$2sq`xlIZ6g< zG*br27f9Bgj)FdBWQb&F(^MVWf_;J1h5HhSu_~9pf5ta8sJeIldUj|W5$$V z)txuJtL%>!rn1COXBIIl%Olimx89WMF7gNqj1m>p!pjmf1o{%m~8w(kqAj(G{dOzE?;V=rhdWf{?B3r1t4{i4{a#329E1_)uWm$Rbw< zrWptOjK7v*9ds+*bXgcm2_nr#wIxWBb_C4lKGY450Ctiy*k2Fl%mifG3w|YnyRmxa9SfMvQ>M~;M%?=hyQ_4|e zZb)F2lhVF}WqV?sjUQnSNG|0u%JknAIr#&FkL)+gj={MOpB zNXLo(-&Wh>p*t@Xf<8@buX8B?D$edm+q2YO_0!)n+{QiU=b`;Ewk5<_?o{v4a~BzQa{9R3;x3Bv}Ln2G{o22Ba^YZ{BTsTQubDF zj1hiU%)_{8+!~JZpB2W#q;gFVkUGxz<#QCY(U4#s!PVL*ci5` zmXq5VNtQa00}EMCBHPZQhH-k{X!$}LWds|aw96zZQx)+6yT1&J-8V8}#%5wx z4P9@DfBbUyY|^N}yc|J>JzF@nc9?kli7s?l04oR4;pO<=A!M*;gC*B~&Q|ACU{bU> zdMNlDtJ$cl^07_P)7*he;u)KCo`a{F?OGt@W27)tjKnQK^iSAncwTVnGj0+uU+tiU zGb{huvR-9M#Zl|!v48^X3@im%F(JN_Y1h{~Us>Ax7Rk%NEjoKiy7|k+tksD(r#}y} zZqHcAZO~5T361+zVN~Dp`4vec?9FhVcNzj)1MP$5RkP|iCIi)i%io^gS|*Q1I`u>i zh)zJ}s~Z7hB!R8i?_+{1^-mktM%^thsXUo35BaZF6 zs3=5L@)mhK-v=VBD^UWaeBrwO>8u66Ppi+RvJT+;KV83R+;RKjxQQ{umSy|~G4vp_ zzKqIRk&R1?J%K7JPDbQ@I##~GZ{CM`>sK@^*MyaE9MGBxx`wc{=6g=yDr}iL=O{Wt za)%5dk?>(HB>^>cLVn1A;mg*~i`ix9Ma`l5;Cjf=v_-sZ!rDSue4n)qlQCFC0$UZ@ zB#0cmLCt`#U34s8VJVi}qPstlv}!L*sR&&k#cI{bf^wzs-jpulCFt z&JG&+c-0w{{S?Lf6PLbR>-vcXS-JWOh zX^+)jH7AT?&B)z@wrp~zYnj}R9?iwCpZA~R_bnY#DrC0K{=kibZ5z2^cymR}qZ8nwVapnMhbE~Y$IACGjD z!yUJfgM#z1e5bbUG=)c_`Ov7$Vb60Q02>V+I~9!26!INl0WJL}LA%8cF6Dm1Xj?C` zY%wtmoYc#?J-+vZwv7^Hgq?hP*R1BO@D1gBg5DYX0ZJ56S|Q^oTv`m%1vRpyTAOkQ zD!HDQLMCSozEsKTA&sdLiR^aci~KXP0^3f{MA0gXkE^VW%P&=fDh^-W4zYC$5v7LS zf815mVB#>TP6W}3>inO?(^rj**#jC{*}C~{HruKKNC=yLe6~hiDUcpy?Y2aRG5*hE z{MU$djlm$+c1-@UjA6Y_fu#=x^|U*xhxa=L!ngt3thL$mQGgM%_xKo;*l*IPP8u-3 zfZml3+xQ6?L_4IXBu!x5$wr(ueVb6O#4^{T2PrHNk{w&_&p9@|8g^oMCeQ{b-$8ox zzKqPrPF!ufs-I<0E0PQN-KQujx}{-@7(K>t9ousgk$dp3WUP8F z97~}j6|fQaEp{2atKen?8g#XHi1Er)v%49~AM|UIC4S^9X z%(`S-XGar;8%4r8O3YT<>5yh_el+*1Svp#`ONu%+hhanxGhciHCPTVg0SLaY@CFWb z9cZ9ZjJCZ1cQrTX9#3P4CcI<|s`EQ4tVp@C)$DgjgkUo1%cj~(oFt6zAER(7nx);Gwem2`e3HI&z(lp4zF_U>65bf#9SgaYbYoYRS4Z*JJw8^}J zW5R{slpg%+MwIH2z}L=NMn zCapiseA#>&aj5s8qVIkTsIP2rd)!eo?-V;V$0yB%<{Qqzrbj8C{}q@Qv?Vy5X(Ig!A7MkUHgr0N{uO=a*?VZTip(+JZ#8Azc z)v1v3gVtumB2>2*r_@cD_5%Af7rhbaas3SeL&ODBr)%2%*8hF;EV4ngovehMs!Zs~ zkhbhYV(gxS{l4y6@>mrn-!Qpv)3wmTi(It0tix}8E}~)nOv@2k$D2(ECgj0gJzA0u zm+>2_2A0lEASv3`(#^nkSQz~!=|XOVemvHG#(25di%PHJ{T5~T(tPf~ox^Na%$rH} zg~*=;vx8f@!RHC&d?-6s5pBQ` z;(T(48{&_hl4tQAU;B1{%m3>V4HZ6xXX&Zsy1sL)x}M(gVLuh46}%_QJp7Dew^-qI z90btGJpB6q?{`%OlIe>BEmko|eu=eN>z5ai$=59JMw2Zm4s}WIOGck2EzXcaXwaHd zqvHO?XbRRp9$<5F!|re?hdPkPzn0B`zdT!}bp4C#wb)VkKv2T7lx#I-XUeVl8l8he zTiLpp#Fx~-Cc;f?)kn{@=?la<>~u@CNVCaZ%TG9<29P45w}4`yj-wxNIP$xz`hn)N zclxrfV-0iC$C4}>x$ixL_&IU}@jSKDptp%WTiD1=fp#=wiLo`#GPASoT{1gGOKGYe zh6;BU+J8D_pAo$=`U22s~m{N+)TrW0Oq$Mj%$O^Adny%6=mtH0oVu)Ep#TM#e2x&|@U z3_rJAD;r7${S-(myX`P~d)R7z(vs*tm>?Akcv4MRx#y&)P%Ogpgh@xJN%Mw?D!wR5X%KnT!7wAuhbVMb>$2Ig&-un6HQ@6HSu2FZ&bPm=xs#bq;@!XuNq`vHu z6!6{C5?Xd>Y^4LeR={r$Y*cq9=DjYHaIXYy0B;iiX(oPD!BhQQfz(V0CPagc8Vd%t z9~s!yxJqRGi)~*PconbCYH^#9n6p7}Z79MtNy=YnCb^ZFbwVpMC9%=`;S&=&#Sb@r zkInor&~v9}xpk_se`wC+mgOLiyuMI$DfNWw{roUOm;Yap54U9mUX9lZaW@!$>(&nH zWOR?$>k@NaOQO2)kHdT{<5PmCYl6$vX(K7_da!8gJPs?Kcw}J53(W+?S`&2D8fYgk z4nlO32xh!l2jjGdtJXuw=reVX6eLggJ}Tyxsbsm@XLfjDooa(=s_*?K5UuR10O~kT z#~SWYZ=-KESwGXm=w{sQT{KsVuFGLI`<~(?4x%2JNUpYX3Zldvl4j(rm{{B*Qq5Mu zUuzWtYvf0v6_`a${ik)Dvq^fMMGms)6v2#>v^7|yqn6zpX=!Bzga7c%1Fj#|NdK6= zyU|q(u=vuiS*wn1GIcInq%CWhv>sZslr!|8V#H>*a#EI;G0|;1x_RycLfg}bO)QQ> zahDO5SOthY(n|l|4-BYC?zMzxMneKCw`MrYXGo8!&q*9Pgj0VJP% z)=|=cBX}ZT^nM$uk7P+AHo5D<5ZvO2THk%+6DI%t%9kBUjaQT-w1SUoCePn{@yG-y z_Z=4A!ifD;0%E*5*b(yK{E8Ghniu$CyQJzz&4Jy(VIU3f5Iu~Wc@TrTLNxZ@pE3#% z(4GxHR0j?O{Oeuf^Phn=xDnXx^z^`}|0eAA|2x5^m^TgnS4(rXTYeB-B`PC)uYmUW zXe4v87pelL7Aj`y4jE9Jue{1$@jT=KmjG~FZK5eYJvnL{q@yqC8wE*n0w&~9Nw(zc zzR<@;Ea|~Q1oLIOuq1<_3F$>DRi0zfNdMX&yn_d7U@yS7)(CbM{8kf5KYYbs7 zB6RP&Rj|ISK0AG~>Z;s(-{2hj;j{}Q{em>&S}1{RiBA1pA8pP;JaY9&N0hsaRg3V0f@X%YzDd5Z@_-HFnK@IBR5+VNTMYgu! z{G%Az1fa!#(@DP1oqiv`wefAivarRY`UewrJ@qWZT&hWZvDlz6`M+egt>q^8Rhy)B z$pGXk%#|XDKENh(iE3Xp=RZfzA-jZOcpjxDL1jA!yj&5O1``0Cm1#(>g`!Sp?F?%1 z73w$c0t}3c2Y~HZE5LsP2z-D6fVV1j)+KREC_vSl)Mu?H=1J}$EQ}=BAX0a1(m4s4 z|1WWz94Lko)!EITkcB*#Fi?Db5EWqa&0U*9Nbj?3K`w*j@i|?TP9S}I&akZSyXn83 zCHSwFnE!iqPY}!bVHi5Sp;-?BOB@-8uiGOrq z7W{Rl@dq-klB*5fZBo|isaQt$-_#}R*)Aa#cmHNQ?ele_29|piu#bs**D3k^|74io zsVL^H2&;?`*Sst`YN;4I=Tn+gj}3PLD~vqBx8Fwk4Kg)DRC zo%jEe_fR3CmaPqC9{RUd!N3`;z@v6a7{!_)&h)1ARyA(=15k4VC&v&wze}Jvg7rV$ zH4hk#`5z|o6-rf_iN*L0FJ!sslu$*R{dGFH2iT6-qp(+{RFOsz&f&tEe|-bam8|<=8Cv z$UI8-0?Tj%?>x9BgdiIl9l)45+q-b~X?qj3?^H0@*uF}zg#P84b?ekj4!ReL#&cU% zhEspY+rLv1lhhqRCaTV2?#}KEe=rfxGMp7Q5)k(C?dT`y`jdy1!yc`pVLfzQ?kCTW zBw!vJ!ud^iLx0RWPG>gFqi$Ac2pnvAy(2uiG^bUbC7a$Yu6IY+Gd6ouCb@ zKWNcehTKY1Voy|0i+wiuEG9`OyzPg=_d1Y8rVow&vRS^jA=mmvRH5J1-BcBT)9tMzW^F2?;i5YH*zQRxvn5WikhnMoT~sX*sU+L58DN$;%rcjU(m z^CZSMS>|z&{(|_=hu5EMX-~R77T=siYCeAs*_vaw4QBU4PiBr()iHE^ZVzZ{r(fzr zqwFZd@_OA9C;&nk){oeQcimT~*7r(>{cgsVNc1yzEte1G9Zc>>)H|rkuSN9NH^=ja zbjOpTxoGUblWR|3?m~P>BHbRpsKzEipOqf{p%Oj}<-X}a0RzkP*ly?}sfOOmw9Ccv zhBnb$!qkX*f;&^#7sHeJwr^F&_K-~Zd!f+H_Jz1ao!^sKg;7EkM{qOTg7Z(zS8++w ziib_UVq(LjG3poNv<6n5GzIdPRRg|Px^DtKbZ7(O|U)PHk z7FL5|oK9ug3KXTZD(!ovRy3!jdfzL#qPl&p3EwLH_cZ%96a07(UNd3yofx{y zNVA#}m#{GubXiAIbzE{yM09B3?xb5k^_I{4d=jM$Ps#U`Ma!mA)}}Vt%7|IoyrEYp zTIwPumP%$dMi20Vx+BjbUO42)w=fTlV9iU$-TtYFX)jYqMi>1=;8him4LncVznV7) z!!(@9uzQ*>`BP6&{XWXAWq3nZLMO7u^OW9RZ$D~C%#Uc}cYx>l8~ug)r#tlg(nR1S zq2W3Gw5u0m4|SNHgdA}LR?)83My6TRr27;STFUKQ;@nYl>YY%$BAQ9wMTobkIVTBL zW!5(-`??el62b(f%}IKX^uuCHUe0j4`B!bg*_FX_uiJ-XjQY(pU}bLGhR71+tTAdf zn>XLea*SYUP87v67D=*Vjj(#zAf8P;*Z(8Z!f$XBR^iuB*O{-=&x(4LdtN)tsC!4F z?|n{uUl#AQHTnt;5lYD3I`4TupwT7pKy=1=NEc^e5JUfY-=L?i&{F2W#0sw+AwBgx zoe!P3Vr`ApyE^lv5L+8<8BN^Czf-#RAtT%TgVOWdtTp{dBz zMKfP$X*$Bg1yTp&yn)C4wI|!nBkBMc|94QrI=~jI^dH4;Yz*%0jXOweQ0o|4{{+(j zfWzZeQyI-_!icxM<30AMzHR9<{SEHrD%CtzoDl0lx+$&L+e7HR4}C!M9oQkCy1j+GjB?p(A-p0W+;9uls1Pm=JsoSk9&Ya}1xS_TiE~xY95N(Rc&y#CfLThRbTUB9klRA^zEn0opL&Y{0e)=uhFA* z_|_WCI7KJ=wUCqo{7BZ!jGCq-G1Hv6@S|?Eeua}i9Q_q1{%=*E9&8w=x49}K-ZQV=CsJJOby%iLxP940>{`a zpV`guAlA{tgOQJJ`k=)E)Y9`9?4B5zc2qRS0qXEe8Q1cf__3SMz_UkY{}et*Y0#Y% zz1;Gh%{KuzhAongGkc5U{7dU>fmwTR7cI9s@bRNVn53 z&af{7`ru~+L?4>rtlSd6J(;0RZ`#!j@&QiqiYqbhdfoMr15-BH&D;!GrOFT*@l4bC ziS0Ha3pt3+@hO7FjJD$2dhclS;^RDQ1vqYbCYK%ft%t{ z&Lhq1a)&p4Lf#yh!2gm2AG9ulonZxqd(`qxaMg9E+GP&K#~n`*7>|CfimffjB5 z_DK6@GSkYvIv{8@oZWt3`y^z%&k$dl1aoc4HYNtp?Dn6o6Ds+)SHHZSgWYTI>EC0X zH$M*Buc^VP%r^h-+MZz?#OTvsH$Dx<8{f*sB5k%2kKC=xc4Y4#glv;M)!=yf(Cm(C zqI%K@X6abh32UZJLpW`IomTDF z&hYzP{{vq5uTmX$j>>wd&Y9av4g$6PxZxabsXjSiyw&=GB?qtT*x-e#EE zk3w><1H3^qBujHc=I>Ktm1Y?0n7nw$Si<&thyK*PLvF<_g3NvPk5~fEKnP7D7SsSe zW4)tzB!Mdcg}!zWmJxo$0I-!%hpEly9_fY#0kA3tC80Gk(6h>tV%i(Ot9k|!yrX!t zw!J_U)3n(5Nqo2LO4!{@j2$ z3r+76-p8!K%qr;jM{UY9Ut!j*&Hv7Co@tu?Yvr&_7hXtn-tN2yrTNC;*FC4qM-qug z&>79SLlL_mM<>$a{SS)MWy;Vsw)DMeQ@~kk=;xGip?fgH-P$wTN7$S6!+1UVl5~Ts zr9_g;AF2~OZ$oLy(NRi+nAFB?uj(KA%=>nRp*As&BS+tW{l?Rn8{wzcwlKY3m-ivy z9`N2(61Ib_2i2OT_}zwYO>86A&$hSvj%`EM;?W&hnSz(*=9~Vq4%t`>MJqsqdCfRU zIqLmx=*e?QDMsj%13JyH=hBpRb}9R|dP7U>SbV0f(f9c6DaC>28NVS9Z|ucJi91ni za$IP@M$A6!lORYX2);^E)dgl~-;U8>y0-M8W5znGp@R|YRX@pUC|njp3snQE2>iEj zFd(0mjX-;ye$FK*@|l3#mulyKC?V>-n{4o)yV-fjyxNPd85ihedzSHlLU90ueCqg} zN-wZmX8OljIu)lMWZ)>^j2i#;x6&9=YixO!kGTKiZ?^ z^TW`JZ1(%JZ8f6x3+<==_tu`_Uk~MfZJ&W`_A6sBcAf7*(=?&+KZcw6uTu8^vo}b( zi=@bI9iCpMqpp!_Ed`;i^Y!UsZMen+hhiAy@-=hnFvWAyCbPY5uj>+-w z!n%=C<0H4sFY}JD;=L;n#1sZG%U-76@3p;3Pr#9{_y}fQhkpc}9&d<0kP_vZ z8RG*GIQBwFz-B0~>yB=i{K5~@0V~gVkl(q>h>op)^!Sc9-3f5bQKYwn(D0ffy{`i4 zoq^8306KiKrArJ(yk|=2a#`KQUu`=L4oO50;G52{^+$l2aGs8mbBLg**E)4vA2b5r z>#lsEP-<6rXik@Ao;_hGWZ4D-zxngXw02jRHwHh_ngnYxtBoZWcf1E>elY(Bd;?rf z%a+Uj_krAV-3GP)tAMuM&^_3FTcduV{vEhIn;8EzfaJt(M@X_SL@}YWq|nnPN&AD? z<5AIPOxSh3$Kq(VaHQm#wdUN?OtUm|*JQY(76~yw(%9zN*18EEt)ouzPP5kYqW_|r zoh97^2ZxXRD7?F!g>`*-s$(7}@Se669>c~^noiN{GFsD4y-sM!kaac8u&*L|9sD$e z4II1Fkh0p*8=3AUnU~x7fd{5Acx*5hX$$AVdD}DMgkjgKrZ372xh;~Z7Mca@_K$A? z2!))NImDE^8qP!2`7097*&Eeucz0lS@SgB6d)R%`Ng?dD{m=tHVP)`DtSe}ki7mH& zTEyD;YVnT8+%3|PmohtHifNcPxqVn^G8;Vx&H88PLg__;W15}+ucQW2=-wk?sNd*+ zk+Xn3wea$DhHc)~?D0J-g^-z7>Ir?0M~|tC{{n$wm=&dO5|opTCv)wD&G9#Z^ZM)< z<}6 z6YZ=Bn}_}aLm73Fy>r^U*W%YUgJcYq0;}){wr*fFX-1rTpCG$W1|~4dP<0sb2V_=s z06Md|YFAaTz;8bQX)dJD-Ak%2=7R|(Kk^4XK+fss-$i~oms#tq*bHFbT|VA@RMtGpdN-lDxi5NoeK(0 zm{5WC@~k(IQm#O2zAmhPqasnGeGfTIrBCZrIr*rJ6aBj1lNs0tV5|%Vh0Pf5Brb0G zKHC2Q9{A7VqJaJ}N2=*{F;i>lc9ueVO6|qjc{XYObAsIGS#i)0&jM^)N>r$<>Nn*` z8OhhrRX7QezkK{~ZkLV5R>>nrc{&GR50dLWZ3Xu+a(&HD;7H;z#X`CL(C1;6z~Oh{ zq@moWwkFF4Eoq=T?(hBZV`8b>Ppz63hn!XGe>jVNRJcWQb0*}1mI=$T$Tt`KyO3X^ zJmj{Rl;V22DAt^a0QU0#i-%Qo15G=%{lZ;@YWOBx_LH!;_kwj?O4Njg@rwF!q9xv0 zbw_2bDk*1B9}lw2K7VLVDRak*V^9d`{rX8}Da&=Xv^JCXM{?7Nk*ZZCGp5Z$A&kOh7Yp=c5y`JHI?nnO7g}*!lo1=XOLS+TqD_{{! z^nLb#xOJ*wRnM}LS;uy_F&e7lew6~iwxdpQj@Ig{eC?VD_fBbJ@9NL*hxRYoYt$&R zgD*8-mrwwf6i>hn^$Y=lQw?LKe3t%Qq8s3ueYKkb|IEYmgk${$&D4JBJsDpi#lo@Z zn2E!49lH>;5{ml$e7g3BmOT&{rj_6G>KU)mfBA@6(*Mgxx`@W;m{_na?#DHSxip&CR46$^*Qy_T?yerBHWM|b%Sr|QS7 z!1bsv$UIisMQvyxJfh9ps(IfTY69!cQsrm9eb?_4wCUsCr5@v7n*NT; z=}V%PR+;PFY&V9NjCzbb*e{$3sgot$ftczvUdr*JdhkYJ#3Tml)>tx)kUc-wbKtyL zb%&LdNTbtIY(ElHRl%3KyOi0cSkBwihPo6vy%lHX&cPFLwA=nb5f<)*|vXJzFb{OH$Lf=X*YPyiY7{ zt~Pf0%biF>)mJ4VEPuJJbjDjSwdOloP)Z)ic>I+J!6#g|m3FsCBFvA!YV)@I0@b^8J zQZc5Qs*oLB8l^|Xom;gcgqRTbl$FS>5W4Tgo>H}XOJ}d})&5C4wq^x!V$bIL zSPb+K0=Y(@OmJ(1XgX}iSi2M>5_?+Lm&MzYEqfemxgUi82o18%-A_+U_|n@|MgALc z?|UEiYR+9!QO6`dpU6f>4Dsa%>D3386yLQZ!PYj_b-iEV3LmKt*-|HS!dxmXTXx%w z{Skk!ibl0kwFQ32ChtS1;yx;(cQ6}1Em<8$i<~|EZ7!WaMBWM9>M={@^^{wT8EJ4> zQElzMtLxiu)^3yG`MJ#a9#gjolIL2+24_hHS*P8`r#kl!_Dx~cTX?lo|mm6g|2^)qvh!-5`T&?{CXSV7n^Q}F%ywke|*V|jH z%N&ox$^AWn%*P_N^_nPu>ls7;geLzmK?5q6aoKdkZtst-I|#$+2;0D|C$@}ge=N?A zkaes((KkzlO`8Yi-g-`m>BKzUS7(KYo^T5AuH`Ff>Hm|ESlkIrxKh(u}tl_^u((TX5*l^puAm zWTyHpUT?F$q6^tz6CN^?FsjuA8=e*YE*<gNulk8h7oE+; zE%|-4ue*%sLecSyow=wTy=f$NcYbxr{B>GJZn>0dR#yf z|N7NQvPpy*`~`c>7u+DUX4J1v>qg;vpZ{pp*X+7eOv@1YsAw#QIdDg?p{Q#E$TO_B zN)O7cX#+uYT!~NQ_YNKh8Jo^UrlorDK$K#S(4F+pQ4o!rpxV0r>T3BXu$*oMeuC}T zZw46gO;BO9`54u&D83YJ8ml%H+hKQ4Q-U3PGyA2SKe;>IgN=WjOeex`?rKo0f~Hog zLP^?<1{f8TYovyp_vw)F-r{jXAvd_8{X(ZX-T9J>jSHJ;>_?ihba6b*Yk~j0)Pa?! z@Lp#}LTEtP&vk*8DEXte_lHgSD?Qux#o;fzB^E=r_QzMM-8U(EXM|GiZ0e)n8p$Jp zS=@fj*|$m?ALWaWfJJP>$1wAM$8 zw+Gg%%_EbuVs_s2N@9>tdKizJ8<;7bjyV$lK0yO&efhxrt>*ojAYwmD5@s^ew7dMh z_W55^GVXAR4Prs_ZMx-!iV;xZKk-5&FWPKfS~KMA?=rSy+ase3yq}XxR&gMYoFCnd zE%3)2AmrNdMs>{`og5&-d(CP0OSlJaD|)I(-={?89tp+X&FpT+FXg~TyB-St^0uB( zwNCEq&wy6Q)`X}^z}`)g9AA!bhMK5xfjyGd>}HG<4Hb0xkyG3fN=9{MsWTm<#TS3t zUu>Q|R-ra!j5&ZMpgcEkefe&>2zkrc%MQz0YF8>OPp#tsB1VQ}-)e6F%mYcj15#su z_DBC^VAxx`BjS3f(CHvifa&MZF>Z*lLVWy`2lTUM(Gk*ebRRi>BKA)v#(k3?H81AGHMO;M%2A5rvXw_#F>Hk+m6l%6!{Gq!UysR7Pqjb zrE-^!ZN=T~KMP`M_X}#5WV#hk$X}|fwMF-4&@CXi*^@lv1@4VZ$oPI~SrPDo#=Y>G zWgMlO8gHR*dM@RTm9H&W<9G78&qwPVrT3MLMX8-#as2oF6~!;|6+OLUgnnM7^30-d zM)osp^2`wfbG=ZV666Azv-$FV^VmL_^Nm?{{~>y8e>7}J)MBQx0~@?2l>}+dgtUD7 zwKXDpM!6OAMbC>#U>LU^Zgt=u$UF!O-l}3$x@PdKOxabbKM=k ztn+)``mjHyGR4jCT}bb?3bM6IjXmYI3YD2n>rAg+=RNHhwr~phykztB;8J;3OZ&E? zq|m-HU{;_Tx!aDrAeqrW9&8HPr(rV@hb#Ps1=hSzh?KR;jM<6tQc7C^G=IeX12j)n zw64E+mjr2Xryq^r0f}+YC@8zB9CK%<8_x~lQ%cAF9c+vXqwXqNEX z!v*A{Nb1lzkm0pW^vHdtoqtuKu12Xit*WK`oAn5SED5N)u%9YE%OuP_U$G@6X2~A` zbnVMsN#7z9AbqXex?e4o|CoZd%nghC4{wuL+!!LVTGE*wm=P|r%&_*Ehb@B4j>WaTVK`AKXok%Q2)f@Tby;^U0wD2fuen&R*3;Q zF|P5ZqNdDr&<&q+%bAqG0Dh3mJpE3^X{&={-Nl1&T!&a`5NvQ3S8 zrnKt&r&i9cU3z0o{DZpjSjv;^Z|6ZIswn_Wf$@)0omB~K%4F-U^q{un5&igKv@5H5 zU*Ghuoq~JgPAHIZlX1VT)p^jUs`(oory7>OY#t5y_@ZXWs$Vs5rq+rp~>E2 zPY>ajgiHnXW0#zsvm?xtu$7d9dDp0ZfY#x+(^QbI%`_^iZhf7!VK8J@ctL^h72F7H z!}Tp=%8l6|J3}b-AK-Pl;!Bfo`=;ecymni{8qkr5T{o z?S#9{wT9|pv9>hx#)nRq_eES>oyZxJ_1WAkbEBpTAiD3Qh3l+!SyZ{RYv{PPkgr&S z6FgVFj$q37K|h;xJEQZ_YRYmm7g*Mr5H7pXb4-zUYEi-Q&z4hCBC6swVSk-KhR{}% z+QcqszB8U6U5aAWI27+Vzzb*E_-DcDV+ zfx|J4h4-^gZN@O1o_xD}P)#9^OSA*G@`C&=Ox1p~b*GH4PFzCwsXfCwIlJyCrG07; z`VXwbnd5C+gId6pGopCwFx+0|OgWsoZafI(?xM!Qwnh#DKLeg*QJUgL;(^GMX}-b5 ziD}0;pT2M3(W!{TA}2fPnt^oRy-SZBd`xMr;~tw^+?JnJOro~Ov6f6|kfdAQ5jejs zrZEV%^{oz9)jsIEve7&IDcFx{W6=jZeAvotMIak*%rZU%w*a%$-TiORdCpn&L*M!f zn$&u4FT2FylEzE&HCJ>?xMed5{@0Q^+t7m{PNyaW8N^QRx`zE0xWtFQ zprD6?H`Xhnq2K=H-&wW)2}t{IkU@m>>-HR+hx}Ua95nB4i zFIb6zHO4XMGFm%pH~ggJOEul4Iz*I{TVVW(h3(!^nmXJKm}Im3S_p z-IEcQqqE;R+(YuNIcTPKz)vHdN{^}afvPgoJ_V}z!QKtDNWbVjU0HADG?O<0P`8lr zOh=etF+n6JFxr<)=1t-s4r>cJ>8kUdMr+9XyD=L^gsUJ6Z)jy|UBv6kxR1K?$6Ug- z$DmgC46jvptVvU0CbBxB29n+XZL*vnmT2Gb3g?)~*K6m?oKZTwSY96L_*}n9O}LQo z)BP&5LzHD0^9GerkBDmh(j7leQ2Q^L);Y4uJtr_a&STp+asnU>nl?E?dX=At zQsC^(>|+Up5W%0t9$e9H8!Z8=?N35htIY9%t z%@F-OKbW47ymG#QU+=JcGj(yA@SBL@5*lb`n7!S_u!Ro*Y^v%ZRVNV z^VK-qqqo7mKjQ6R;(^=Hm4-!PM65`rQRdHNE5hcQp4Mll%5ra?tX6x`;UfQO57|1C z#Hzv7S-;N13o=F2g)GD`^Le>Cm`%K6!2#hRD6h@Eqg}suPRAUmep1N`g>$Jl{G}4Z zjibI9eKa7!zFyq7KlZMS`r`tGxoOj`zF5F^us!VV>Xhh$F=J!Iua~^knat86UbcG4K-H06O3F2q%c*x>;$iJgq?Vs5=?@y8(5R zuQEvbqPKmE7?W~#<>7h2S-)G%e7RH*a_8dXZ=Bdz5o8D4@aKgBS(J|9%KQEo6*T17 z^7!&8&iG%ON~<@D7}?v#Cb$C&bqS(>JNYeAH>1o2&#E8IREkgUZGwAm6zON-3QzDV z@W&0@USEoo5Y|FU@#C6H`Z`l>RgYthAuxA`Z(o+K8^1@$zcq4IbG{&Sx6pm}$`=9? zMR7w+4a|ZM<0z2_|RlU#5P$y z*rBD}5yngr6jJwysx*(ja)&|YP?hdofyJ=8a&^;4nbs;}M>7?;nQqukmvq1mi~POQ zpdQWXdaL-2y$dWI*_rU>+Q4;}>aWGBCHNJq?#_Nh`?OOn#&&BoMvXVrvi(K|MH#36kcFAauc{gl#Dv?FbKg--)7YO9g{Wo;Cb zi0sBfPM9Kffw)!h)LFnR6h;@!<)-=MShy%XVmTn4N0{+_&0Ceip~fp`S=o_SXrz8; zx`41zX!`bf%EM#kKn^QI+;7-dfT;VlymM13b-Sb5EoOr@lMzKB(|#!hbK?Z!T&Cw5 zzQ&>AkEU+KP{3*hgM8hKwh9-xJ!bgn~)HzH8UzKE*A$ zY@bJzRK-G72@&I&NmS>U?kIET-mT>qTv_n*-QQxE&KaH>KJQ@0PwJ&kn+fCEy`g=3 z`(~9sY#Xl)RJBt*Yvmmy!0Pn3k!Xl84hssvkg?2E#Y*)mJ3ff;2_#j|i`<<<*ylX!c&rHgR4Cd%`8W;`*18`poKg$DCaUl%+S0iCftf_?|xMEBBmgao6mM()#7^Wo>5ixJEU;V z!15@5oi9CX=fI;fuhgxaf#xirC1>lCxIw&=r)cLp>bd8c!pz2;!>!5WwxIEkuCdZP z>u%MfF4FzFb_==R93I?8cqwOX-eWuL(e{U&3tj7-ilq5J9l)KIUjG^p-)U7wyT&?H z9~}jL(@$Pjx$$C@&lb2(B65~$l!cVIKWR_LdmuO&-bWp(jTksc{e($CoIB`==+;DW zo4pUtwj=YCJX19;_Ipvit#Uqr1ELSxAwPtokf^b8qW3__qPJzp&|jtNF4@PKdsA+r zP`A;@unk)3NKNh=_Iuoh^HI2@^E@e?rn~Y}N%Gxlmi1O%;pUQjvbn6^ZSCtjp5GrT z-*H(hLP_|A0qL--moK$}(eoQb*YTho1GTKpsPM{%kl9na+w>BfD7n7DSG2~cfjPB# zSZ2vH5THeGkG$*O>o!4&6k-S1mF1n32|2-i@w2A>X9zPqKiCh^^#m?6JrY6AbYubj zv4o4auBfn;$I8#Bj*};W!%~GBXudc)B(h#=Kp0!v{avgk@x&6`9CCiB^}eV1FQ__a z%gava+W+`r>47|xy5s{=y{a*y=wJE_2U+F zH6qqYM*RZyV@s4thw5O6k5=O~#~p3yo|@hHXm`{6TdCbpGa*0ybYdFd1KUCDpb%bn zai%cg1RTf%r5+og2EsG=FRP6YfXY7MJ)qI@uRtw;zrC)}d#{Iq3bL0j0!E8}s3e{SvBS@2IOtIGcrSwXE7ep&!YIC9_Fn7*gAIVN-VRH6M_5L9( zh^jhPDvv$c=_chz=ppdC^&WL+SIbDb;XQlxwD&6ubXRLaTLWoZP2KiJjAfqY~5I6ddch3>|CX>8bXMqY^QHS1gltSgHxIpfLK8(Th9}<#=SZTK+?~>Lj~O zxFPP%&!P9I<-?%J-K}{~8=~&SR#Yp!PQQc@db7jl;5@&eQLsO3H`~k+JAR6^@?Ztd z#|bNWs&=I3x=Tv8y_lPbTB_E0qKTE*iEboUGq2Z{S3L05fjdpNK}dSKj1Bqej@wf||{op~>3ovifNNBeqNy}$z@q@jV{(bwDss6s^25xz`mIt)KT zF>15BCzwmOL;RgI`|NINJ+hitJk54i^bxKpnhiJU*K|FY}O>m*c&e_U1T&)S% zWMvG<$s@qU`$1fJZ8s3df{D@Dy*^fvYONoSsF<=)egBZ3zT)jfVw29re%NgB>SM|N zQpm@qAf<2gAn*!$cWf=?9{#fY97W~UM<6%DQzxd7b(lB)PI@hScaUH~AC}0ddx6h`Oz^TZQC9AHa@sAPdos6FnUbF zbub)ZD9<>Ihh0^-FH1yqx+J2xwjFU!a%vUXvmy?3Ia&QpZa~$CJl_3WZ)oe=#+szs z82`qysCFyMOFrS(n|KLDdXKFZ#}v^sMptf~cx#gB{pmpV!*2dFfM9A*?%oxoeR9|Uyt~|UWYLb+fJysT+M3!D--OPXJsN9#j%S>|IPWwe=~uU$Ba4W|{W%t-dCs<^Z1^WXFAp1y z{_~0H^oO6X_*&kkkn-Ql30{&?+HmbhLE*@CPJ0}#Mx-5YjPV-i&y*WKmFN*VttQ}W z7$UP!^euJADkATqxKI2MByJA@8pt}BFE=+6Tn1qWM^m3PHK>u>+K#Wp{aD;>MfK)s zKccq%Iy;WE&4#TSUT2R&itO$t;OdnzBdaJXF~2TjoyyYGFRokL+?vyqJnDDepI!?s zH7W7&>HJ;~le&Y@z&8GwK;#jkgIl*Emkd<_-~Y9xB{s)l>8Ogo4K?s$voMEbeBi8G z^@D#-9Uw>dC}#MT9CPQ|=$2=mFYZ#;5Z8B4UIG-{?2*Ej+`rFCH<~MY#&=EgEZ`B~ z;6J#v#^cOvkR+HYf!t&G25S2LUO?#KyTkd1*F3zPw*(lJ zxKKt#8{YRZY!l|QL>K#f@NQ)23=g{1F=MZbmp&oc$7!w%w|+Va_4;?ekYR3{SICk$ zXfm)8qgwpA2X(!bdi*rCmhl`2@2J;Vi07scLC&@c-5TKR{g@n~Ssx0K-#qt_RTQyZ z70LJbZQ8lB7pSWkfKmLWaC~*qM3Ugkje8vQNlR*S0GCm#;Q#u!o0W&88{Yp6+_o)H zp4u9$w)1P;ugYiJXxLwqg+PCUxU+18dREm=^Gd&XS@vzb5nD$sNRc5Q9A?FqE9?^% zwcMy6NBo913rj6jY_olgc$yFb^FY-IE4Sh{Nr7EH3bglnIDgV zGLfH0P08%;L7)f?G`h1I*m{5XX0l_m(5e?!2{KZ8RA0i5dTUI!-KTsog&Iu%S@5@u{)+_=~#TLa~n-SCSXmo$S5s$3VS zTc#Y-7pZWJH!QS~^0KJ5(VTA*^;+L$P{;O9Y99j8*n!rMLGWE?g}Hs-Q&~WLH_E14 zb!_1(tm*7{I3qozRP}6Hl%OoVx+hH1I?w|%s@pdB(0JJRRg1SX)kNp%fYt16R20#l z&_vyMxX<#6s>gsGwRS1kiZU=)*a|IjV9CC!CM4ppsa}(&T`Zp{UBLq!MO1kdb1;q9 zqKplB;Q!|hLJM%#g_oQqt=+~^YP~N-MQMxK=JHHY`R z+jJktU4R(vs@^@LPTkAmr=>2oE0RPzt!Nwz$x@mpRg*Qzl}S1OLX z+xbTNz?B`_q&v|vjLBXj-J&?R3?Gm3;#T6O9uKR2hzaCvyO9xLXl_0DT0TKh(&bCH z`(1J^==_2h_8M$5O0+umlVK0lPZ@#9Db6i`QlZ!ue|kaw8Fsr1EL^bWF7$eT6+3?3 z?wTWz%`*qf?S|jW2Hl#<1AG_UTqoAW(c0o+EkNkGnF zl~wE*Aqs(hfE}tzx8k%lV9GI*y$!eme79g&6qm+0V%`->#;@;GI6lD|zmc}>c;#=y z3RI(AuD|E$zVSO5@;%4pXLO2B4l+x(6SaR=-8K}%un9e{9(;wa3_IrnmQfD!^-KDv zz8~l8Sx%&qa5Lww?PGdN<&%{GsM|MAKCJYqP}O=hnQV^;t&Ukr^RwN}>Ngitw?WX% zG9&kObq9B~PcLLL#u~$FpkUHFvr+D@&7oLeXIWcL^=$r5FqPCuPP_gqNkp)Ki9Q{-u7f!mXz$hT+ zdmK>0c*7sj3MJ4XeWv!HM_-P%LVHeR_ghW7mK&s`4y! zG5$kJh)M#&z>^UQfjry8BXuFWi?%R4A|0-jD-0rq?y9zmw-2nzWc;SBfSRitVHWx- z`K4C)DIbTW5)K?CWD(;8H+qAt5`$glRqPJY`8}ve-QEUbgj8?6?+1O171jx}u~Uhi zon&{HJfb_vFd`tpV5wlR$)L`BBxA{DAI39@6ER&I=p23^yvG8ZPNVTRVI2*Q_%7lTY;mi9t%w;#Wpi#GOT3sG2`ng)D%c1qUe_9?3v03f1 zdyj^4Q-rea3;ta_fLcFNqAU-><#0on-+m{^nn`9s#;wOq-`yNOcmFpZWf@W3O;*8h zfcKinLeoi%lZ~dJo*Plz%+f)u;oSv_9@*SR?){}1KYs9#-^P~pnek_dN+zV@7Qw=S zt_3|z&hsu6M}44Xz0`wB>7-yV*AUQ*9&3DYYiGfl$T$(yz02)N%Wve~z)0ftY620* zS3V3|TX&k&&2y-h5@h2Z+{@YI=6ZS8%l*#smhHBcPq4Pso$OF5EtVL0Un0BZdif~m zWBz{Pr!m_7A` z;elc&4A4#Id0mPqo#m1v$sJ$Bh&)oU?p!9U8hfk4dRfl%^ITrg>k>@WP}Nm#Ud4pT z9nrD`s6jYVWlW;$nLo}ytmp}{ZKz0!K;khkE03mdG~QTFR~f(Hu&S==msa>9QaD`Z zU=)y-QsF-P4C?K9H&3R~W0dTHhGJ`YI8AWtF*%G+y1j{K!?@|5q*k4&Hn z`_GW>CWms)TD`QiJ52B|VQ-mF?uQK~T#3i=qrU6o zzdV2o_391@V@4wfGOb@P09wCxUs20=`++E^0z?wwkVujO^{R`TMsq(X9}W%&lD}a> zwJ#{MWZ|yPh-_v>UNQ@ALX$pB*Hk9a?T7r1AS#$wBPl)0F}1IXjVV8)5%ABlmnw)H zk7H|jHjkSMXM=EOQ`znKBDp>a5lRDO&T4`w{{8M9sV39Ao_0ykEC5w5i5I*)08o7N zyyS#D)0s@le;~c{vTDtg*SM$VAv*Q?ctZ zKEBdjO%>F|i?qKW?=!*#FSJWf&^vU5+@w{Yqm-&=XbI&4sV`lXBxFfPapUklZ1LuM zJnnQq-6ORwfgveXb=U=TYeG31C4QewZZ`+fPa_Akgk@_~WZr*`Knd0SXqg`?QF;AViSgTi{a>QX_+J1- z9!w#^FFsjj0Ch;BCanYfAOqJ(H{q82;%;outZXLF{6uWPl=?R5b0 zdr6}s&~Du0g`Am#?*GcmiM3kRRje-m&leV1zCJGH^K@@^a=0By)alOsQVP?>O^H80 z4%#nOrypzQ6MVgiIXvm>vNTXy;;o%H0o@K@Urzxn*Z{K|8(o6ut0~yIBofWbWns*n z`(Z;;JYu@E?Q?TLd zln~!GLB!dmJH)0*cBu>emTcW%H||(G#EYF0j=YR`=cjCKimhHgb^M_KH9oE%gx(k? z;xUE%iEfy#C|i7kJ7x!gSK!YtJvogwNYP>k_j_<(d%$!Ng89jUzgyv>esn)Wbq93GZ{OlMD!)%N2|n(fsk&oU6Nfj@4o5$77)|WB8l!g zGD4WV^e=bweOv@nq=VVqnN@iHT1Lq5ALB`hCVAt&Qa-N-X(6$rUCJ&?Bd%rWylO7u zv(IFgy({*Mb14B!NG&PN4<74vaHT%KwGpUYF1MA^PmxKDj}I9Zmtf~it$p2;qH+9r ze6ZI0`~$og4@`-fXiUp7F=Y5`cd1vExW!R+F{;yYi zF}2TdCQdX?U)z5ZDTAvF5aY4guYJAg+UBG<8yfv5KCA?VALdq8f> zc_@VS>q*{Xsvy2^X1q*h(L+4dRVHTU!qlz3s4a^R1$J;@MCq8M*=!Btb>x(@l!j9_eCt5*+A3^h^Z)qWiG&g+#C#c%jjGxO9HR{k1N@Ah- zP9NmR&2i}{{`e21Ibw+ zs-6>9;lzEQ#m_Y8C)hXV`}+4^IkWG0&{5S@5+eqL)!R;LhO*p*1t~hZ@KP*a10Uk3 z3EvxoP!Km};BPuc^*sc+CTtv6Ti7?Qiwn?N^y1d3ZwR1faxw~PVGE%gU!k|Z1$LVq zOkvCmG@z<3&h6XTjgbFlTTdNGcD{(8sH4I9y%6!@;kCZ|#Dz@G;4fMg(%&%>L9C___5OJC4+dIZ{LzD3NF$lj2oTfmD=%Kg<)#F zMvPVXYeL7n$H@3VH*wZDHGbmCvldpb z>q6uCFuwBA`O0eUEKgsoR$qS*zgsxtE1nxK2<|#qRabZ%6P&zeGkxjs)EfwMjdIXE zPW7TG9%ZT{xa1TZCXP#*_pSaABRG3m%xQVY(-%SpN{Un1A0c$(CFICA(;Q9~`QWOy zXyTk$8}n}9!J^oK{t+I!?O2s)-!G+BAGoglm9x=^(p(6TDp<552^UL(Z+%)ii@@-< zF75qvoky(v;2{bJZ%?C^u9*(I1jZn2jV~n?XL!BjaQDHdgTCwAzEoNV!KuW216M|C zZ8Nn}woks(B2id@6$(?5U;`Gwq7LFh_`ERR?EqTa=LJmT_$W4;S_b25C4{Igq1`lpX(j*1@SFDrNk}~B; z3-9IS*Mv;Yhxj&4E=^3PPMcP9O+8-Sn`%c&4}8BN`C`ZXPLlTWFjP|*n`~Ye+;m%T z4{YbW7|b5bA1o}}M~Gm5sVvi#iripFllFDV;e=0xbMS0OdT+3Z?MknD$6sV2s`=@l zq1m{ZL=x3;X-Zmry(t4B8Z}+$%zzi)y?Y0-a0g+;n8%Cf+ZKj25quN->yl?iKSkGZ zVrd5N5brFqGs3FF+P;(+>EuOlzf>7re=M3B`qZ!_5%C{4OkVkO z6pA0Cj+Y`G@rchrEHU<3gO+geAzNf$-Fqv^OX|b9iETx%rX*nMUmieMN84G5a-ZJ_ z*@Vdb{GjPe(LZlic@3-#R^f5A#o)mEK_;N9Tz5(ET(;{#O}@!*KYkgIdG+gCh3bXc zecG4b)SS1UQX6Yn9z5m)<=1xO%Yn^Pt(<3r8D-aQc;4{3A(^nS5hBh7Z%b}7eIm2; za7jk&LBa)Yh*(uAcRLNXYC3HDy}NBga)l8_iIU-wPnuAbo}sCn$28;Y=J1TL(lBb+ zpW#E{Bdlxzx_&7(xdA@Z`Vve$u^~i$Nm~?5SZ}sy%AfrF-4N{i!*FO~@QlQe8=4(a z-u%+qy*uZUw8I2)>YYd7kVgl7r;wI4zZo}T4ta5z%#mJ?2SOcp5lu@8Q`Ae4y^HNB zHK;>4I;N>KLi~NpLl;b=#gZH4h8&c zu+35?y97uwWa*Ya86RCEJ#e2hqPlK*UYtx=>=9)>Q}@6&q&Xf#uFju=>=mNG|5?wr z%8~5bWStcK^ZCuKiO#b!G`iianrUF*Bxk5yGUhvEX`p=#y$cy@7`6KKh3V+>J>ez_ z&F6?YsfjAHG98F>yzC$k&2X!kJ9{Wdo?6hhI}J5J$A-Rh@u9W(L7T%tXTFYgG#W~=fOvlm@yZBhgG;pZTeI}iy^ zx+R|T?sV_59K_e9WG2d-w~emOxku< zts;>1C1q&sS@c7W$6!7gzqtlnq%~soYI)+MQZ&}2I7%LP^WF$DPQ+=YWfgh`>3jxL zXAtCfdVIU|cQb#!LhzOQ>)IAupem@j0{vSMTcG_yaXT={F2oi{0Mo=8mjrD6;Y#>p$x z_lVC+bv{_xh;zF(@#Sgn`XO)w=I_+YgguK76;#V(Rt?<$S#t4c|K^t-=cQW+H#0|& zflST^T7l`>e1DShj-cAN#pwrR>hCn)0os&z5%MU@g^c51iF!lI*ZwYfU+wVLXyv4`y2;{{*_&IUwCAy#G#DhDY9uL>XtbL*>6Jzpt3h5j?Vs++)X@O*Z z{Y?T038Tt|H?IVCa`I?bspb%}mPdH2&j2MzUPwUt+bQ>B64tK9zQW34{jnd;hC;?J z1!?XWv3e?bv?aiZ)2|C}UJdNxkf}1bk$%$%994~?1#8DVSsS-@BUTUl2s=}-ofWcVt2M%!F(4w+o9vKtKrlweG8o0v;O!C?_*mkVh zL(L=wHC-#0qRNER3QFZMXGX0uC3i_yP0>1U!pd=Zl44Nd71+*9Z%6v;7D!$i zyHaYubd{C1wTbRgmmT#R>=hKsCEx56SjOhhKTs~W8-o`g%cpr4a?e9r^PCQrqsPY> zD&fq2vNYy4b_Q!Rc6+#XWBHLut5%)z7>QE6Iy(*h#yKF5W_)$7i&I3yWUsZe&Ql$r z1kO!2VrNWf;XX2$rxFNd5feSS|f-I_SD`hjH70TT(M{cDL=cF1qPC*E{z5Q$#i_ l$Y)bZgq>8IJ6F7R{%otk&NC+_z5~BwN36{A%znN7{{TehQ7r%f literal 0 HcmV?d00001 diff --git a/samples/js-theme-manager/assets/create-a-theme.png b/samples/js-theme-manager/assets/create-a-theme.png new file mode 100644 index 0000000000000000000000000000000000000000..0a80f13a5b61b945f8a85184f266f8597c5a0c36 GIT binary patch literal 43014 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%0ArE>sa0Ug58-K&I&%>q6hQhW>)9ELJAuB5y-_G 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

JpXDV?tUd%Em6!| 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 H%d!6s(omKV literal 0 HcmV?d00001 diff --git a/samples/js-theme-manager/assets/delete-a-theme.png b/samples/js-theme-manager/assets/delete-a-theme.png new file mode 100644 index 0000000000000000000000000000000000000000..9036e2e30b2177df1e9d4c7f77bc2d32c4cd0b32 GIT binary patch literal 17355 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 B<-h;{ literal 0 HcmV?d00001 diff --git a/samples/js-theme-manager/assets/theme-manager.png b/samples/js-theme-manager/assets/theme-manager.png new file mode 100644 index 0000000000000000000000000000000000000000..c6f7b3ab63f4d030085a58c699c90d5e6a2c46b4 GIT binary patch literal 13810 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 literal 0 HcmV?d00001 diff --git a/samples/js-theme-manager/assets/update-a-theme.png b/samples/js-theme-manager/assets/update-a-theme.png new file mode 100644 index 0000000000000000000000000000000000000000..80e12a67a6e0f88a7371370cb83313dda940b6db GIT binary patch literal 35285 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 literal 0 HcmV?d00001 diff --git a/samples/js-theme-manager/config/config.json b/samples/js-theme-manager/config/config.json new file mode 100644 index 000000000..6c78a9947 --- /dev/null +++ b/samples/js-theme-manager/config/config.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/config.2.0.schema.json", + "version": "2.0", + "bundles": { + "modern-theme-manager-web-part": { + "components": [ + { + "entrypoint": "./lib/webparts/modernThemeManager/ModernThemeManagerWebPart.js", + "manifest": "./src/webparts/modernThemeManager/ModernThemeManagerWebPart.manifest.json" + } + ] + } + }, + "externals": {}, + "localizedResources": { + "ModernThemeManagerWebPartStrings": "lib/webparts/modernThemeManager/loc/{locale}.js" + } +} diff --git a/samples/js-theme-manager/config/copy-assets.json b/samples/js-theme-manager/config/copy-assets.json new file mode 100644 index 000000000..3771fd04a --- /dev/null +++ b/samples/js-theme-manager/config/copy-assets.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/copy-assets.schema.json", + "deployCdnPath": "temp/deploy" +} diff --git a/samples/js-theme-manager/config/deploy-azure-storage.json b/samples/js-theme-manager/config/deploy-azure-storage.json new file mode 100644 index 000000000..b1d86a6c2 --- /dev/null +++ b/samples/js-theme-manager/config/deploy-azure-storage.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/deploy-azure-storage.schema.json", + "workingDir": "./temp/deploy/", + "account": "", + "container": "js-theme-manager", + "accessKey": "" +} \ No newline at end of file diff --git a/samples/js-theme-manager/config/package-solution.json b/samples/js-theme-manager/config/package-solution.json new file mode 100644 index 000000000..392b09d28 --- /dev/null +++ b/samples/js-theme-manager/config/package-solution.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/package-solution.schema.json", + "solution": { + "name": "js-theme-manager-client-side-solution", + "id": "555147fb-b773-446f-aef2-1b25001f92d9", + "version": "1.0.0.0", + "includeClientSideAssets": true + }, + "paths": { + "zippedPackage": "solution/js-theme-manager.sppkg" + } +} diff --git a/samples/js-theme-manager/config/serve.json b/samples/js-theme-manager/config/serve.json new file mode 100644 index 000000000..090cfe9e6 --- /dev/null +++ b/samples/js-theme-manager/config/serve.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/core-build/serve.schema.json", + "port": 4321, + "https": true, + "initialPage": "https://localhost:5432/workbench", + "api": { + "port": 5432, + "entryPath": "node_modules/@microsoft/sp-webpart-workbench/lib/api/" + } +} diff --git a/samples/js-theme-manager/config/write-manifests.json b/samples/js-theme-manager/config/write-manifests.json new file mode 100644 index 000000000..bad352605 --- /dev/null +++ b/samples/js-theme-manager/config/write-manifests.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", + "cdnBasePath": "" +} \ No newline at end of file diff --git a/samples/js-theme-manager/gulpfile.js b/samples/js-theme-manager/gulpfile.js new file mode 100644 index 000000000..7958fd5d8 --- /dev/null +++ b/samples/js-theme-manager/gulpfile.js @@ -0,0 +1,7 @@ +'use strict'; + +const gulp = require('gulp'); +const build = require('@microsoft/sp-build-web'); +build.addSuppression(`Warning - [sass] The local CSS class 'ms-Grid' is not camelCase and will not be type-safe.`); + +build.initialize(gulp); diff --git a/samples/js-theme-manager/package.json b/samples/js-theme-manager/package.json new file mode 100644 index 000000000..e8c70084c --- /dev/null +++ b/samples/js-theme-manager/package.json @@ -0,0 +1,31 @@ +{ + "name": "js-theme-manager", + "version": "0.0.1", + "private": true, + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "build": "gulp bundle", + "clean": "gulp clean", + "test": "gulp test" + }, + "dependencies": { + "@microsoft/sp-core-library": "1.7.1", + "@microsoft/sp-webpart-base": "1.7.1", + "@microsoft/sp-lodash-subset": "1.7.1", + "@microsoft/sp-office-ui-fabric-core": "1.7.1", + "@types/webpack-env": "1.13.1", + "@types/es6-promise": "0.0.33" + }, + "devDependencies": { + "@microsoft/sp-build-web": "1.7.1", + "@microsoft/sp-tslint-rules": "1.7.1", + "@microsoft/sp-module-interfaces": "1.7.1", + "@microsoft/sp-webpart-workbench": "1.7.1", + "gulp": "~3.9.1", + "@types/chai": "3.4.34", + "@types/mocha": "2.2.38", + "ajv": "~5.2.2" + } +} diff --git a/samples/js-theme-manager/src/index.ts b/samples/js-theme-manager/src/index.ts new file mode 100644 index 000000000..fb81db1e2 --- /dev/null +++ b/samples/js-theme-manager/src/index.ts @@ -0,0 +1 @@ +// A file is required to be in the root of the /src directory by the TypeScript compiler diff --git a/samples/js-theme-manager/src/webparts/modernThemeManager/ModernThemeManagerWebPart.manifest.json b/samples/js-theme-manager/src/webparts/modernThemeManager/ModernThemeManagerWebPart.manifest.json new file mode 100644 index 000000000..8fea916e4 --- /dev/null +++ b/samples/js-theme-manager/src/webparts/modernThemeManager/ModernThemeManagerWebPart.manifest.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/spfx/client-side-web-part-manifest.schema.json", + "id": "11a36ff0-b026-4860-9e92-8e3fa283ad0f", + "alias": "ModernThemeManagerWebPart", + "componentType": "WebPart", + + // The "*" signifies that the version should be taken from the package.json + "version": "*", + "manifestVersion": 2, + + // If true, the component can only be installed on sites where Custom Script is allowed. + // Components that allow authors to embed arbitrary script code should set this to true. + // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f + "requiresCustomScript": false, + + "preconfiguredEntries": [{ + "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Other + "group": { "default": "Other" }, + "title": { "default": "Modern Theme Manager" }, + "description": { "default": "Modern Theme Manager description" }, + "officeFabricIconFontName": "Page", + "properties": { + "description": "Modern Theme Manager" + } + }] +} diff --git a/samples/js-theme-manager/src/webparts/modernThemeManager/ModernThemeManagerWebPart.module.scss b/samples/js-theme-manager/src/webparts/modernThemeManager/ModernThemeManagerWebPart.module.scss new file mode 100644 index 000000000..242a319ce --- /dev/null +++ b/samples/js-theme-manager/src/webparts/modernThemeManager/ModernThemeManagerWebPart.module.scss @@ -0,0 +1,120 @@ +@import '~@microsoft/sp-office-ui-fabric-core/dist/sass/SPFabricCore.scss'; + +.jsGenericWebpartThemeGenerator { + .container { + max-width: 700px; + margin: 0px auto; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1); + } + + .row { + @include ms-Grid-row; + @include ms-fontColor-white; + background-color: $ms-color-themeDark; + padding: 20px; + } + + .column { + border:0px solid; + } + + .title { + @include ms-font-xl; + @include ms-fontColor-white; + } + + .subTitle { + @include ms-font-l; + @include ms-fontColor-white; + } + + .description { + @include ms-font-l; + @include ms-fontColor-white; + } + + .input { + display: block; + width:300px; + } + + .textarea { + display: block; + width:300px; + height:255px; + margin-bottom: 20px; + } + + .siteurl { + margin-bottom: 20px; + width:300px; + } + + #availableThemesSelect { + display: inline; + } + + .hide{ + display:none !important; + } + + .show { + display: inherit; + } + + .genericWrapper { + display: block; + } + + #themeSelectWrapper, + #themeNameWrapper, + #themePaletteWrapper, + #themeSiteURLWrapper { + margin-left:25px; + } + + .themeGeneratorURL { + color: "[theme: themePrimary, default: #fff]"; + } + + .radio { + cursor: pointer; + } + + .button { + // Our button + text-decoration: none; + height: 32px; + + // Primary Button + min-width: 80px; + background-color: $ms-color-themePrimary; + border-color: $ms-color-themePrimary; + color: $ms-color-white; + + // Basic Button + outline: transparent; + position: relative; + font-family: "Segoe UI WestEuropean","Segoe UI",-apple-system,BlinkMacSystemFont,Roboto,"Helvetica Neue",sans-serif; + -webkit-font-smoothing: antialiased; + font-size: $ms-font-size-m; + font-weight: $ms-font-weight-regular; + border-width: 0; + text-align: center; + cursor: pointer; + display: inline-block; + padding: 0 16px; + margin-top: 10px; + margin-left:25px; + + .label { + font-weight: $ms-font-weight-semibold; + font-size: $ms-font-size-m; + height: 32px; + line-height: 32px; + margin: 0 4px; + vertical-align: top; + display: inline-block; + } + } +} \ No newline at end of file diff --git a/samples/js-theme-manager/src/webparts/modernThemeManager/ModernThemeManagerWebPart.ts b/samples/js-theme-manager/src/webparts/modernThemeManager/ModernThemeManagerWebPart.ts new file mode 100644 index 000000000..215e7d7fa --- /dev/null +++ b/samples/js-theme-manager/src/webparts/modernThemeManager/ModernThemeManagerWebPart.ts @@ -0,0 +1,407 @@ +import { Version } from '@microsoft/sp-core-library'; +import { + BaseClientSideWebPart, + IPropertyPaneConfiguration, + PropertyPaneTextField +} from '@microsoft/sp-webpart-base'; +import { escape } from '@microsoft/sp-lodash-subset'; + +import styles from './ModernThemeManagerWebPart.module.scss'; +import * as strings from 'ModernThemeManagerWebPartStrings'; + +import { IDigestCache, DigestCache } from '@microsoft/sp-http'; +import { SPHttpClient, SPHttpClientResponse, ISPHttpClientOptions } from '@microsoft/sp-http'; + +export interface IModernThemeManagerWebPartProps { + description: string; +} + +export default class ModernThemeManagerWebPart extends BaseClientSideWebPart { + + public render(): void { + this.domElement.innerHTML = ` +

+
+
+
+
Modern Experience SharePoint Theme Manager
+ + UI Fabric Theme Generator + + +
+

Theme Actions

+ + + + +
+ +
+

Available Themes

+ +
+ + +
+

Theme Name

+
+ +
+
+ +
+

Theme Palette

+
+ +
+
+ +
+

Relative Site URL (ex: "/sites/SiteCollectionName")

+
+ +
+
+ +
+ Create Theme +
+
+ Update Theme +
+
+ Delete Theme +
+
+ Apply Theme +
+
+
+
+
`; + this.setupClickEvent(); + } + + /***** ***** + Create event listeners for Radio & Buttons + ***** *****/ + public setupClickEvent(): void { + + let btnCreateTheme = document.getElementById("createTheme"); + btnCreateTheme.addEventListener("click", (e: Event) => this.createTheme()); + + let btnUpdateTheme = document.getElementById("updateTheme"); + btnUpdateTheme.addEventListener("click", (e: Event) => this.updateTheme()); + + let btnDeleteTheme = document.getElementById("deleteTheme"); + btnDeleteTheme.addEventListener("click", (e: Event) => this.deleteTheme()); + + let btnApplyTheme = document.getElementById("applyTheme"); + btnApplyTheme.addEventListener("click", (e: Event) => this.applyThemeNew()); + + let radioThemeActions = document.getElementsByName("themeAction"); + let parent = this; + for (var i = 0, max = radioThemeActions.length; i < max; i++) { + radioThemeActions[i].onclick = function () { + let selectedValue = (this).value; + if (selectedValue == 'delete') { + parent.displayDeleteOptions(); + } + else if (selectedValue == 'create') { + parent.displayCreateOptions(); + } + else if (selectedValue == 'update') { + parent.displayUpdateOptions(); + } + else if (selectedValue == 'apply') { + parent.displayApplyOptions(); + } + + + }; + }; + + +} + +/***** ***** +Hide All Wrappers: +Generic method for hiding all of the form elements +***** *****/ +public hideAllWrappers(): void { + + // Hide any other elements that might have been displayed + document.getElementById(styles.themeNameWrapper).classList.add(styles.hide); + document.getElementById(styles.themePaletteWrapper).classList.add(styles.hide); + let wrappers = document.getElementsByClassName(styles.genericWrapper); + for (let i = 0; i < wrappers.length; i++) { + wrappers[i].classList.add(styles.hide); + } + + + let buttons = document.getElementsByClassName(styles.button); + for (let i = 0; i < buttons.length; i++) { + buttons[i].classList.add(styles.hide); + } + +} + +/***** ***** +Display Update Options: +This method is used to display the form elements for the Theme Update Options. +***** *****/ +public displayUpdateOptions(): void { + // Hide all wrappers + this.hideAllWrappers(); + + this.populateExistingThemes("/_api/thememanager/GetTenantThemingOptions", {}).then((success: boolean) => { + if (success) { + // Display the dropdown. + document.getElementById(styles.themeSelectWrapper).classList.remove(styles.hide); + document.getElementById(styles.themePaletteWrapper).classList.remove(styles.hide); + document.getElementById('updateTheme').classList.remove(styles.hide); + } + }) + +}; + + +/***** ***** +Display Create Options: +This method is used to display the form elements for the Theme Creation Options. +***** *****/ +public displayCreateOptions(): void { + + // Hide all wrappers + this.hideAllWrappers(); + + // Display the dropdown. + document.getElementById(styles.themeNameWrapper).classList.remove(styles.hide); + document.getElementById(styles.themePaletteWrapper).classList.remove(styles.hide); + document.getElementById('createTheme').classList.remove(styles.hide); + + +} + +/***** ***** +Display Delete Options: +This method is used to display the form elements for the Theme Deletion Options. +***** *****/ +public displayDeleteOptions(): void { + // Hide all wrappers + this.hideAllWrappers(); + + this.populateExistingThemes("/_api/thememanager/GetTenantThemingOptions", {}).then((success: boolean) => { + if (success) { + // Display the dropdown. + document.getElementById(styles.themeSelectWrapper).classList.remove(styles.hide); + document.getElementById('deleteTheme').classList.remove(styles.hide); + } + }); +} + +/***** ***** +Display Apply Options: +This method is used to display the form elements for the Theme Apply Options. +***** *****/ +public displayApplyOptions(): void { + // Hide all wrappers + this.hideAllWrappers(); + + // Display the dropdown. + document.getElementById(styles.themeNameWrapper).classList.remove(styles.hide); + document.getElementById(styles.themePaletteWrapper).classList.remove(styles.hide); + document.getElementById(styles.themeSiteURLWrapper).classList.remove(styles.hide); + document.getElementById('applyTheme').classList.remove(styles.hide); +} + +/***** ***** +Populate Existing Themes: +This method retrieves the currently available themes in the tenant and inserts the values into the dropdown. +***** *****/ +public populateExistingThemes(url, params): Promise { + + + return this.context.spHttpClient.get("/_api/thememanager/GetTenantThemingOptions", SPHttpClient.configurations.v1) + .then((response: SPHttpClientResponse) => { + return response.json(); + }).then((themeJSON: any) => { + // Clear the select + let themeSelect = document.getElementById(styles.availableThemesSelect); + themeSelect.innerHTML = ""; + + for (let i = 0, max = themeJSON.themePreviews.length; i < max; i++) { + let option = document.createElement("option"); + option.text = themeJSON.themePreviews[i].name; + (themeSelect).appendChild(option); + + } + return true; + }); + +} + +/***** ***** +Create new theme at tenant level: +Collects the data needed to create a new theme at the tenant level and passes it to the creation execution method. +***** *****/ +public createTheme(): void { + + // Gather the theme properties + let themeTitle: string = (document.getElementById(styles.input)).value; + let themePalette: JSON = JSON.parse((document.getElementById(styles.textarea)).value); + let themePaletteJSON = { + "palette": themePalette + }; + + // Pass the theme properties to themeManagerExecution method + this.themeManagerExecution(this.context.pageContext.site.serverRelativeUrl + "/_api/thememanager/AddTenantTheme", { name: themeTitle, themeJson: JSON.stringify(themePaletteJSON) }) + .then((sucess: boolean) => { + if (sucess) { + //it worked + alert('The theme has been successfully created'); + } + else { + //it didn't + alert('An error has occurred'); + } + }); + +} + + + +/***** ***** +Deletes a theme at tenant level: +Collects the data needed to delete a theme at the tenant level and passes it to the deletion execution method. +***** *****/ +public deleteTheme(): void { + + // Gather the theme properties + let themeTitle: string = (document.getElementById(styles.availableThemesSelect)).value; + + // Setup the success message + let successMessage: string = 'The theme has been successfully deleted'; + + // Pass the theme properties to themeManagerExecution method + this.themeManagerExecution(this.context.pageContext.site.serverRelativeUrl + "/_api/thememanager/DeleteTenantTheme", { name: themeTitle }) + .then((sucess: boolean) => { + if (sucess) { + //it worked + alert('The theme has been successfully deleted'); + } + else { + //it didn't + alert('An error has occurred'); + + } + }); +} + +/***** ***** +Updates a theme at tenant level: +Collects the data needed to update a theme at the tenant level and passes it to the update execution method. +***** *****/ +public updateTheme(): void { + + // Gather the theme properties + let themeTitle: string = (document.getElementById(styles.availableThemesSelect)).value; + let themePalette: JSON = JSON.parse((document.getElementById(styles.textarea)).value); + let themePaletteJSON = { + "palette": themePalette + } + + // Pass the theme properties to themeManagerExecution method + this.themeManagerExecution(this.context.pageContext.site.serverRelativeUrl + "/_api/thememanager/UpdateTenantTheme", { name: themeTitle, themeJson: JSON.stringify(themePaletteJSON) }) + .then((sucess: boolean) => { + if (sucess) { + //it worked + alert('The theme has been successfully updated'); + } + else { + //it didn't + alert('An error has occurred'); + } + }); +} + + +/***** ***** +Apply a theme to a site collection: +Collects the data needed to apply a theme directly to a site colleciton. +NOTE: This does NOT create a theme choice at the tenant level. It will directly apply the theme to a site collection. +***** *****/ +public applyThemeNew(): void { + + // Gather the theme properties + let themeURL: string = (document.getElementById(styles.siteurl)).value; + let themeTitle: string = (document.getElementById(styles.input)).value; + let themePalette: JSON = JSON.parse((document.getElementById(styles.textarea)).value); + let themePaletteJSON = { + "palette": themePalette + } + + const digestCache: IDigestCache = this.context.serviceScope.consume(DigestCache.serviceKey); + digestCache.fetchDigest(themeURL).then((digest: string): void => { + + // Pass the theme properties to themeManagerExecution method + this.themeManagerExecution(themeURL + "/_api/thememanager/ApplyTheme", { name: themeTitle, themeJson: JSON.stringify(themePaletteJSON) }) + .then((sucess: boolean) => { + if (sucess) { + //it worked + alert('The theme has been successfully applied'); + } + else { + //it didn't + alert('An error has occurred'); + } + }); + + }); + +} + +/***** ***** +Generic method for creating, updating, deleting and applying a theme. +***** *****/ +public themeManagerExecution(url: string, params: any): Promise { + + let options: ISPHttpClientOptions = { + body: JSON.stringify(params) + } + + return this.context.spHttpClient.post(url, SPHttpClient.configurations.v1, options) + .then((response: SPHttpClientResponse) => { + return response.ok + }); + +} + + protected get dataVersion(): Version { + return Version.parse('1.0'); + } + + protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration { + return { + pages: [ + { + header: { + description: strings.PropertyPaneDescription + }, + groups: [ + { + groupName: strings.BasicGroupName, + groupFields: [ + PropertyPaneTextField('description', { + label: strings.DescriptionFieldLabel + }) + ] + } + ] + } + ] + }; + } +} diff --git a/samples/js-theme-manager/src/webparts/modernThemeManager/loc/en-us.js b/samples/js-theme-manager/src/webparts/modernThemeManager/loc/en-us.js new file mode 100644 index 000000000..89f98bc1e --- /dev/null +++ b/samples/js-theme-manager/src/webparts/modernThemeManager/loc/en-us.js @@ -0,0 +1,7 @@ +define([], function() { + return { + "PropertyPaneDescription": "Description", + "BasicGroupName": "Group Name", + "DescriptionFieldLabel": "Description Field" + } +}); \ No newline at end of file diff --git a/samples/js-theme-manager/src/webparts/modernThemeManager/loc/mystrings.d.ts b/samples/js-theme-manager/src/webparts/modernThemeManager/loc/mystrings.d.ts new file mode 100644 index 000000000..dcfa15597 --- /dev/null +++ b/samples/js-theme-manager/src/webparts/modernThemeManager/loc/mystrings.d.ts @@ -0,0 +1,10 @@ +declare interface IModernThemeManagerWebPartStrings { + PropertyPaneDescription: string; + BasicGroupName: string; + DescriptionFieldLabel: string; +} + +declare module 'ModernThemeManagerWebPartStrings' { + const strings: IModernThemeManagerWebPartStrings; + export = strings; +} diff --git a/samples/js-theme-manager/tsconfig.json b/samples/js-theme-manager/tsconfig.json new file mode 100644 index 000000000..f13ec27a6 --- /dev/null +++ b/samples/js-theme-manager/tsconfig.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + "target": "es5", + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "jsx": "react", + "declaration": true, + "sourceMap": true, + "experimentalDecorators": true, + "skipLibCheck": true, + "outDir": "lib", + "typeRoots": [ + "./node_modules/@types", + "./node_modules/@microsoft" + ], + "types": [ + "es6-promise", + "webpack-env" + ], + "lib": [ + "es5", + "dom", + "es2015.collection" + ] + }, + "include": [ + "src/**/*.ts" + ], + "exclude": [ + "node_modules", + "lib" + ] +} diff --git a/samples/js-theme-manager/tslint.json b/samples/js-theme-manager/tslint.json new file mode 100644 index 000000000..23fa2aa43 --- /dev/null +++ b/samples/js-theme-manager/tslint.json @@ -0,0 +1,30 @@ +{ + "extends": "@microsoft/sp-tslint-rules/base-tslint.json", + "rules": { + "class-name": false, + "export-name": false, + "forin": false, + "label-position": false, + "member-access": true, + "no-arg": false, + "no-console": false, + "no-construct": false, + "no-duplicate-variable": true, + "no-eval": false, + "no-function-expression": true, + "no-internal-module": true, + "no-shadowed-variable": true, + "no-switch-case-fall-through": true, + "no-unnecessary-semicolons": true, + "no-unused-expression": true, + "no-use-before-declare": true, + "no-with-statement": true, + "semicolon": true, + "trailing-comma": false, + "typedef": false, + "typedef-whitespace": false, + "use-named-parameter": true, + "variable-name": false, + "whitespace": false + } +} \ No newline at end of file