From 16208b101860011272c7cbbfbcf284b38ec38207 Mon Sep 17 00:00:00 2001 From: Gildas <1122076+djhi@users.noreply.github.com> Date: Mon, 21 Jul 2025 15:34:03 +0200 Subject: [PATCH 01/22] [Doc] Bootstrap headless documentation --- .prettierignore | 3 +- Makefile | 3 + docs_headless/.gitignore | 21 + docs_headless/README.md | 54 + docs_headless/astro.config.mjs | 99 + docs_headless/package.json | 24 + docs_headless/public/favicon.svg | 1 + docs_headless/public/img/premium.svg | 1 + docs_headless/src/assets/SPA-lifecycle.png | Bin 0 -> 73102 bytes docs_headless/src/assets/data-provider.png | Bin 0 -> 23499 bytes docs_headless/src/assets/houston.webp | Bin 0 -> 98506 bytes docs_headless/src/assets/providers.png | Bin 0 -> 67857 bytes .../src/assets/tutorial_guessed_list.png | Bin 0 -> 187164 bytes .../src/components/CustomSidebar.astro | 31 + docs_headless/src/content.config.ts | 7 + .../src/content/docs/guides/Architecture.md | 304 ++ docs_headless/src/content/docs/guides/CRUD.md | 469 ++ .../content/docs/guides/DataFetchingGuide.md | 418 ++ docs_headless/src/content/docs/index.mdx | 32 + .../src/content/docs/reference/example.md | 12 + docs_headless/src/styles/global.css | 30 + docs_headless/tsconfig.json | 5 + package.json | 3 +- yarn.lock | 4846 +++++++++++++++-- 24 files changed, 5992 insertions(+), 371 deletions(-) create mode 100644 docs_headless/.gitignore create mode 100644 docs_headless/README.md create mode 100644 docs_headless/astro.config.mjs create mode 100644 docs_headless/package.json create mode 100644 docs_headless/public/favicon.svg create mode 100644 docs_headless/public/img/premium.svg create mode 100644 docs_headless/src/assets/SPA-lifecycle.png create mode 100644 docs_headless/src/assets/data-provider.png create mode 100644 docs_headless/src/assets/houston.webp create mode 100644 docs_headless/src/assets/providers.png create mode 100644 docs_headless/src/assets/tutorial_guessed_list.png create mode 100644 docs_headless/src/components/CustomSidebar.astro create mode 100644 docs_headless/src/content.config.ts create mode 100644 docs_headless/src/content/docs/guides/Architecture.md create mode 100644 docs_headless/src/content/docs/guides/CRUD.md create mode 100644 docs_headless/src/content/docs/guides/DataFetchingGuide.md create mode 100644 docs_headless/src/content/docs/index.mdx create mode 100644 docs_headless/src/content/docs/reference/example.md create mode 100644 docs_headless/src/styles/global.css create mode 100644 docs_headless/tsconfig.json diff --git a/.prettierignore b/.prettierignore index 4d29bce66b3..914b318669d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -23,4 +23,5 @@ cypress/screenshots !.yarn/plugins !.yarn/releases !.yarn/sdks -!.yarn/versions \ No newline at end of file +!.yarn/versions +.astro \ No newline at end of file diff --git a/Makefile b/Makefile index 910cb810887..e380f98f71e 100644 --- a/Makefile +++ b/Makefile @@ -117,6 +117,9 @@ build: build-ra-core build-ra-data-fakerest build-ra-ui-materialui build-ra-data doc: ## compile doc as html and launch doc web server @yarn doc +doc-headless: ## launch headless doc web server + @cd docs_headless && yarn dev + docker-doc: ## run the doc website in a docker container @docker run -it --rm \ -p 4000:4000 \ diff --git a/docs_headless/.gitignore b/docs_headless/.gitignore new file mode 100644 index 00000000000..6240da8b10b --- /dev/null +++ b/docs_headless/.gitignore @@ -0,0 +1,21 @@ +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store diff --git a/docs_headless/README.md b/docs_headless/README.md new file mode 100644 index 00000000000..fcd63ad7b36 --- /dev/null +++ b/docs_headless/README.md @@ -0,0 +1,54 @@ +# Starlight Starter Kit: Basics + +[![Built with Starlight](https://astro.badg.es/v2/built-with-starlight/tiny.svg)](https://starlight.astro.build) + +``` +npm create astro@latest -- --template starlight +``` + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/starlight/tree/main/examples/basics) +[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/starlight/tree/main/examples/basics) +[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/withastro/starlight&create_from_path=examples/basics) +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fwithastro%2Fstarlight%2Ftree%2Fmain%2Fexamples%2Fbasics&project-name=my-starlight-docs&repository-name=my-starlight-docs) + +> πŸ§‘β€πŸš€ **Seasoned astronaut?** Delete this file. Have fun! + +## πŸš€ Project Structure + +Inside of your Astro + Starlight project, you'll see the following folders and files: + +``` +. +β”œβ”€β”€ public/ +β”œβ”€β”€ src/ +β”‚ β”œβ”€β”€ assets/ +β”‚ β”œβ”€β”€ content/ +β”‚ β”‚ └── docs/ +β”‚ └── content.config.ts +β”œβ”€β”€ astro.config.mjs +β”œβ”€β”€ package.json +└── tsconfig.json +``` + +Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory. Each file is exposed as a route based on its file name. + +Images can be added to `src/assets/` and embedded in Markdown with a relative link. + +Static assets, like favicons, can be placed in the `public/` directory. + +## 🧞 Commands + +All commands are run from the root of the project, from a terminal: + +| Command | Action | +| :------------------------ | :----------------------------------------------- | +| `npm install` | Installs dependencies | +| `npm run dev` | Starts local dev server at `localhost:4321` | +| `npm run build` | Build your production site to `./dist/` | +| `npm run preview` | Preview your build locally, before deploying | +| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | +| `npm run astro -- --help` | Get help using the Astro CLI | + +## πŸ‘€ Want to learn more? + +Check out [Starlight’s docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat). diff --git a/docs_headless/astro.config.mjs b/docs_headless/astro.config.mjs new file mode 100644 index 00000000000..fcfc1783d0a --- /dev/null +++ b/docs_headless/astro.config.mjs @@ -0,0 +1,99 @@ +// @ts-check +import { defineConfig } from "astro/config"; +import starlight from "@astrojs/starlight"; + +import tailwindcss from "@tailwindcss/vite"; + +// https://astro.build/config +export default defineConfig({ + integrations: [ + starlight({ + title: "React Admin Headless", + customCss: [ + "./src/styles/global.css", + ], + social: [ + { + icon: "github", + label: "GitHub", + href: "https://github.com/withastro/starlight", + }, + ], + sidebar: [ + { + label: "Guides & Concepts", + items: [ + // Each item here is one entry in the navigation menu. + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "General Concepts", slug: "guides/architecture" }, + { label: "Data Fetching", slug: "guides/datafetchingguide" }, + { + label: "CRUD pages", + slug: "guides/crud", + attrs: { + class: "flex items-center", + }, + badge: { + text: "", + variant: "default", + class: "ee-badge", + }, + }, + ], + }, + { + label: "Reference", + autogenerate: { directory: "reference" }, + }, + ], + components: { + // Override the default `SocialIcons` component. + Sidebar: "./src/components/CustomSidebar.astro", + }, + }), + ], + + vite: { + plugins: [tailwindcss()], + }, +}); \ No newline at end of file diff --git a/docs_headless/package.json b/docs_headless/package.json new file mode 100644 index 00000000000..8ec2c4f44ef --- /dev/null +++ b/docs_headless/package.json @@ -0,0 +1,24 @@ +{ + "name": "ra-core-doc", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/starlight": "^0.34.8", + "@astrojs/starlight-tailwind": "^4.0.1", + "@tailwindcss/vite": "^4.1.11", + "astro": "^5.6.1", + "sharp": "^0.34.2", + "tailwindcss": "^4.1.11" + }, + "devDependencies": { + "prettier": "^3.2.5", + "prettier-plugin-astro": "^0.14.1" + } +} diff --git a/docs_headless/public/favicon.svg b/docs_headless/public/favicon.svg new file mode 100644 index 00000000000..cba5ac140a2 --- /dev/null +++ b/docs_headless/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs_headless/public/img/premium.svg b/docs_headless/public/img/premium.svg new file mode 100644 index 00000000000..324bd67bcba --- /dev/null +++ b/docs_headless/public/img/premium.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs_headless/src/assets/SPA-lifecycle.png b/docs_headless/src/assets/SPA-lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..fe6b89f070b01c7d07f72e7a9f07503b73361a7d GIT binary patch literal 73102 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

yMj+GRXJD;zOl+ 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 KMNUMnLSTY04y;4~ literal 0 HcmV?d00001 diff --git a/docs_headless/src/assets/houston.webp b/docs_headless/src/assets/houston.webp new file mode 100644 index 0000000000000000000000000000000000000000..930c164974ad8eb528878f15a98016249b8cf546 GIT binary patch literal 98506 zcmV(=K-s@iNk&G(fB^tkMM6+kP&il$0000G0000V0{|Zb06|PpNN2_X009|?k*wCu zybmCh^xv>#n-U`WKLL1Kfcf&30Avp6urt53B-yg7zF9V8SABtPQ}oIQ3BX?fL_^@Z zwM0kx;G-1Y1f#q);>!<6B6-O_;xn;bfk~8R zKit7mk(HW&K>;H{k|c%d|8HJFnB=*vEFoRHcM~xIvLM@T+vbTxc?6*IU|v8a^_Ls9 zZObONv7YNKPZa1Xg{`V?4;ln(RydZ|Ff%j5W@ct)9Ol5Lz~(T=5SAtHJr;YDy1uU! zR(+++j^lo>wVwOD?)U5Vkn2}O$f9j4Xd~NNC4lEW?-fikZRgjQY}>AF+g8-dK)<~Y zn!WaYM1WWm4T8Xz)>?}%t-*a3vtDy4wU4ppT5HeY!Xm;JWZOd9O4ybK2Gsl9dxY#b znK!@B$A3K@|M+kJ_;3ICZ~ypj|NpHP6@V9wFOZ3mLpT^0mNl-o_#GX!#xoy)oyzSu z`%lxO@AbnS3->?l(Z`2I08w9x?tOizgl0TAlXOdF9{X$ncCuS{OBfPYe|IW2P_~dS z#rDS>K&^>9uAAp{*Q#kwNm+ zCTMBFfNH!55KaaGx5~#~7LMMNhlT~i69PpX#^}ik-_VU&waU|_t!Kl8;3>NTyO>E4 zPyh?c2y9qPsrTfarYDQeSjs)qJF(TcPetGd@{U$C?PqfdFuJB43Zj}G)d>8)yqETC zFx2>v2S{Ua#0jw8WR`&)SO#fYG@uB?&0MI+tbZ7%P@|RsSf?y89=NssjD2S@aIPzp;cB#F7cYcEObg*l^>fLy5o$ z0>S~-&^b3Up0q!hc_hsI7TiJygh7I*u@L=%`XXvDa#%TLYeF|HZhPt$lg|#~iZYr} zMQ_+A@zMKln?~cdBp?R80ti>Tbc$8$WZyDla_BTuxF3wht4Gb008fS7XG{8nX zH5i~+iVYyksvzsV(+x_DqiVNrfs`i@{nvTVU^Adbdkqi}ts8RzsGA3SVXh6FSq~u5 zPcnF!P)kcGveR<$X0PLnP!0t z7V(J7D2R0ludW5-rGT+mZ7nxrm>mQ`(v-*IiNL*xNAb1EY>`R81mC&QEqF^IeD);x zV%n!;acv0I$-LMLx+_4X^IV8&!T_icf@_r*kbN9)vXtF-e_OtkPZDy zB#3X);;~G!rG~2>cNk9WzDwml%-^&!%)kR7DTn}1hii4~iK7%k7HZFql(tcBR3Z0}u@qE;o|_rUe&($XNj{wUA)LaU>B4Ce-Z9 z77JRZ(3^TP+@e?$pElPdgY6%3v{aM={gWG#%ss#Te2 zKAGARcEW7gxQ)WyxXXN3B8GP7%hz{z!AV=cnC8)C+|owfe6>SG0ISXZ%aLe%X(g%4wBArCQ>pQ~$o%!1|bIo!Rz zJOHO^dtw&?Y42AIuvyu!qPxGW6Rw;}xK(qFsP2!jXl;X9^?3tOJ^=(p=W2l3^;y|a z3js605Y)dL43Qw(jD_Wo{>7(3cX@er@36Z(Tpnl}D@;cJc?8ZXzC_8PDdulck5oXJ zq_Z$_c>u>22^lmzC{{0cCuQ9bsGOw05ctxJ>5n>ybuv4<^WVR%jl^Y>-EQpWhxeC7 zvBE%&3pD{e(t}zH?PG$)R-*;1T3=Qsk0P}55&8f@khE8y1eC-D2%~Lpg#sIK%TFr> zkhAg0ulptd{@petd0uApH! zC*w^BL-G=o>g|rzP-Hvf<{u2swg6Gx{x1npNN*Ycd!{u{RqKsRWX7gi67@QXV9isbG;S2MOL;Y$D&ans`BC>Pd2hn z&i=LEy%my0;~)Zw*CF0=DX!I2s+(>NZH@Q8gq6z~x=ty?pJBZ@F)~l#G!lZdPy@^hZRkM50vc&v8_H zL(x-VK-$EJ<}rU85*x;XdW*(|Hl1c|II)4)s8^92kp@;GbUo3bf9gN4gMsDjT1VX? z01fZ}n?2~xH4HzfXNo#xOaRyqEUESo`a)OGsZm%Ar%$xjJN-gsH4YpV)p&O3y-+R1VG?@GV{cSJoYkM!wxjtR#Y(U)&%5TU z&~am#R=lBUkuMhwyA`X~$-;z;rkiglNV5gB;`* ziBZQ=kCCE=62iP`7FUgsE*4vqcI#LLfO0J_L<-$I#;~(@A01sW;@%BJb9CYI?2(=V zy=&yC5~oOAL)^7OFG2Y9mDI=px0exW6#u-PDu2tq}NJ zmMUN5WqIoKK_b+X6}U|_5I!l{TJVj#k+G52hT;_295GlaZfCG}%FoNBM(xzKh|t>3 zKv^uZ)IvfPL~Du@=|TFiT1R-oEa~q$%hQAp5Uth9ovSy7?aWP+g}|(#E4~qnX!-RPn>92;#S4Mvz-KuK(y6FwnAxY+o8!a8Q6HEZDclMK zv;#z~(H3SLix(aMYb__sGIvhS-lYe%p{LmzqYJEEvb4;4-omdZ_dtE7DXeJN(3!`9 zZUug894}I^JC)aS(g4GudI2rYrR8Ixq0B>17{qcwTTpcn;Ki-8ci@BfM zp=oG3ztRX)b(2&z$P^`pY(UYa?~1Q#Kgb>Skg?a;5Z^<$OA#!^Q7}tE)s|U$qUGZB zC#S(k* zG?`{O9-8gv{;aS(e)>1#E2hz@tx)JHoBuvUEM4ad*eX5jNcogtDQxuLVnDs+cf`JO zN1oPysmcuij|OIA2wO(;F}my-!LE8NjT^jk~iS7D=4DO3V@Vt;lI*an5)KzTd~0F8a}#P5KdRW70zk5r$WK41JsNPE~sUUGNZhV6A++o zmEiH&|JlQ;=B-Ui_NG}4M_Gwhup+qkepoVvbehX;?oF&*i_*FlT=KhMf4?I^?)(G^ zxegOWA>Bo_mv=df7oCjSnl4@6GL}#OqTlxiZ#~Q!SJKyA)dC^5jq7nwyd4g3SZ1>h z(DX}UXE23RQ}Q>##!okVs9kbN*r`#X#Y^*;EiKjVWO6KJ(UWD8-2TGHzu?dQQ@`j*FZy}0&moh5SO-N5HYOav6%i{aBuqA9htTOM}SxwvA1|Z zzv6fWghgkMzv~OX=ya&o5ASv-0s>L?vu@$ElH^)9pQobkR8-D}5sVxZwTxK?4n+cw z-T_<0WTkeYY+TWYz?U@DmhWGwy_1RY#1}pOMdxZ`_&7ad+}iGj;YRN)$)xAPUaB&( z6rM&9mm)HY1|m4JS7D5y`SRb`0!*R$iFA?vz1S^tW`Y7GL`he*(Q5VQQhx zq6vj&y)q!jD=nY#_*3tC_jxiZ%?6h|#FqI0G;3*z4PicY^pxegqN2EY@`{o;zWQ-vE~6B_c_b*wy(IIs_jkXhu`-?$hNC#im4Xq z#+gj)?YsMC(A~@ntnIWwIcpKw9~z#%>RUe&=qAMO0;I#5i%zPilX_p*<6jy7qNM3B z5I+u|8=^GWQ!lSv;_+A(<(X{HM2lr9KFfV+YN5_O1$+7UD}UGS{=@A!_w16=6tx;e z3w<&ln@9Pb|Gu`o^8jBD-==M$z}jHMA!iot1!4D#(5Jibc-u;4XD${T=@TG*$@i5z zkl@4WJtUz}C!Q3Li%Ou&?0@;k|6y%!`EMTW-bk?Q5U55|#D4NiFJosxmHgj@V{aQF zmi-)OYWvAw`E7^w8w3QJsSUN*PzYp;YWY|GNM{wYS$$J~9NcH6=6Na>04nJDYs=NX zK9@1q=5vkgENOHd=pbCEwr^HnU+>RwxX}-Hy4-%TC=b9V0>(I*TzLF5{)ON1VCE^o zKitJf&9WfYE;Y8^?E4oay?%4yqWBejPmKDcQbu8^g%!)(e!cHeX-*+hcZm`j?cC}` zH0j^|g*z{|@UklV`88W6RSK$9xMs{PVImQsnnL%2JipJIv!<6(**jU_{~{1#jdslq z-&lylNI&8J*iiO{i_9yylnYou*8JNNJ^t36g?|~)K`(tx=@9saDKAhZw<1&Y%0WuE z=z2xcR}1|_C(56$}+zizc2x2@63bI_YmCmWSz)6JAqVs2zmL5yM(f_)kS=B6leyNQN zq?<=>?Ar-c0e*GSPk+-t^~ERE7748&YZP0?Dlzk2GRdGOPi%g{V`$rjBE;hIh(e6k zgh4glPA|*ZJ0C0@mxl4PH$~>Cf}$GBnHFZ*Pjzu^(dK-~^MQWZzy6!iV42S~!9Ek_?Cik?!r_}=d*PFVsyYZPg11PH zN&uxh)R*n+LSzURf8W1(ak8A$qYE8q%PV6M`LNeSCq++X*vl{+RgS$fw$@Q3d#%Q&fITXtNDB9aC|gIv5KOuL)S zJ#?HQTAWhnLcR$w>&+_fJhDaYZAK8?v;En7MS5x@I}nAl;+3YUQpX^|>rT^KPP+K# z{-N7mY?H)veCARHoETuk19Y?5QayPzQp*FlH>%~pf*2pp4=D|L#CaJ~j;Lb7P+uIk z6t|vPmNty5$qQp^+-}zODd5w9Wh}Y~1bQ|OVcU!UKmP2XAko_!eh*TW!JfBbx zDXLd?2!O`*ty*oBsh9AQHA`)R`Xe#Rxel*cq8D3V0RedJGnVA@fbK5Tv34u{#>cIxyS8+YpW0NwpDfeW|d^pc?9-*m7O`3C{-v9@uE`4I9@R1!(& zhch(ySc)+y4d5gEV5re}61fqiW=HS56$&jy9zR_oe4-S@E1oA>Yt-fou#0Xn_DDj| zrhH9MZ3MH4{6m8^7Z2D^8E{iI$~8NiJ;6=BoI8?4^aDf&$*+P>)5FX8SrM}QXb}=R z5gP8r^OfX_>O?ffxf=rsQI5j!OX|M`x*62v&TITFHSk>nr7pGD>tcWl9f5jtGseUL zpmWK~Voq3CaO>QGtcMesT0}qFCn2lN;jGC3!f~&grYv4cA+EjjNg(1-o{;7<-rV9P z1675n77{#U(Hi|#Hc+diRK7PPYpo67={r9j1EZsN^nx0|W)(*1vwBTv6>4WvNjQZH zn4eCWTn0S{y(3^>4#3D-R}cXg5K{#30?HFyqgNxe1&w(q6c;2`?Kmj8UUVuy?5zwJ zjwjVJTv)<-GYA`r#-*(XE|;=CTOt_9h1*4%fwXlPhDoX*6A(pa@PoiyWivtD%h(bW z|M@QTx*9l3sCUffw@gBZ=IsZIY`NIP?0rQ!Zs?ht2qUb6qg|*4uIE2Rq%8yhHj;Vu zQjr-*t4DX1kMF@AxrT!!~r^lEk7u@xT{VHHR4et^=!A&jH71wM$=ZhN%;^4p_(Q7;Q2OD zm)l#o2p?@;d$qf$ef@7R_`$f|dl+8w>a=Vowz|vUkMnYinKv|M+szn~=JTQf4)x@l zy0&k8URd4mOeedDz2tMDL9y%?AU<0jUhciPWFF2;#X%nS%|u;ci?ys+?}Tt z<09(Gu01tCOK8wuipPZYv9{CEUTFUis#_D?71GsE44vr`+Z9ro{@non)D<#t#q~hjeZYrX^EDR1=tPaDbJ%Xh6J@aNIzcaWglKgkn?KC=nn#Ps&lN;P zCIHL_sAAvmV{2}yAMewh>XM4~_}Q0G!cD?rJhE)1S$)3=^ za-EM!t20hT7{Q>g-v@MKs3*kJ9EO{9*`M`v9|V|~U0(;(QS_O%DXeIdTNjAn8kw5x zrZ8vuAo3kXR#rSIl!eiLF+$uh&j(YZIb4=DJbotkj^@ zfex<}k|8=wyguVZNX$yzn8`8KT|!S-zo=!_1dw>Q>HGd>4|C|HIj#?$xkR#8+;4(N{p59Im8!-R!*`g`1dY*guQ;7|#?+vQT9M`WEQM=FXULb#&&e5C0R8cjuTJ;!H z6^icay}&f7T;`g&=uX$aU>52*n9)&t(@C3TVJI!`oM(4e%T=p5oV!w&>yi-ZGdwRc zm|RE<9rT_@k?+g2h%TdeQjGD-M3zE9`*l=F9c3SiH3)Oo-+VrHZ6WQ=7BnKBtc;ax zgAvkuT9<^kv+T=_eh=NNpVcPy?wZ#vv^OKMqh?dM=8S}2sh=mCRhzl_P`W9mDXv=U zL|oVRcCvDN(SM3?vrRH!BA)0Yy3FfeU>#DCwq|t(YaNE;U)6HX91P&+o-dX<9`+cd z6UlvwN0QHfQc-`UHoBJ(P-3szv;HW8aky+0*U;AK>wEJ&nNQd-U2k{_cYCJj7_hbeh!Y`lC11P`q7v3k9FU!y~c ztzAwixwF8J$>`o{<&{rDUef@X*1c;N1RSjr2-)u5?=prj89HxYYTY?3Zt(W=(WQ2r zAB2-8zam~qqA$}P$|0cNZRF#S*-*861vti)*dye2W1bDEE{qg2aluJN=~sQHk!7h& z-@nvtqMP^DQmGd3StASP$tVT%xPISkcYj^II>Ly&2UfTRLxg;dzM@5;lisWtQG~0q z1-Z=@erD&?ZDD~HUKcfC>>DH3tle%g#hE6XzfaW|Q}!yfVs|;2|nX&l2Y?%jGZ8=a7h$vatwK^_G$rpA4#s`+Jm9F+qw%4FyTTX%jfs zymb>NZNa(E@bjVu$%(!YS%40C;pI?U%xA$OF~o_Y_a5-%i4CGUOsg!C1=K9a7i!hc zYAQDhJn<+us)r1FwypUQ2PM!+H$DfhlM6}dsNTVHPrt5BC$_NaR?U-=@_ z!Hc~QuIMa|yQtUsa5P!T$5-jBp{Z~obYok21GE&>I?#jt-B-sd*7v%dA}=~E^SN}w zlUI{_n5auvmFEIQqB|}7>{3;}SJ3+wZv=n+63*MYPMmrkCF%{Ef_cfgA1Ze}BR1B6 zdP+7DDGDH8lAL?@@9&-~!Xr##-JHO*XTKZs*DLu5BEy#Y=jQ!_d*<2T{>_AV?g})w zLtrIu8+Cv5Q19i}tKW5Kt#q2fRZ@5@5zy_F)Tk^U9tsAG49;o%EPpRFl=@ARK-+sJ zP)R8f7ofv5m&gI=nK`N_9Zyj8(z_0=O7@$;TXk=8HW3K@-fFg1bth;W+FlZ&64#SA z?bL|V39=Lg1coZl+$$}Hl|+K=C@@Wf;}R`{)Ojj$0?|BA%u_!_c^S#9>HX>(s^r<6S@R8t6E@vg5Z_5OpRmX7j(Qvmpl z=I{st?ah?ZFzIH0nTa;>trE1H6Y!Qt&)$Dg+xH3xJ|bqQdUZE&A*;3Z(W9xhr_%3l!h1y94LDN41Eel0m4LRP6bjcsqSMX+bl+R%lW4kxC)# z`SShBf1~BOL(L!rTAV47SJPtd(~q}i)JxfDeqU=n=6BdbogI!Ra61#EWj?Fqb?xb3 z-Muxd@)?7jIKhi^{hMfe%atzq+bW3;QAdy&IJ}1uZJI z^L$F(!Azew0x*cbY8KVmB5B`n@=QJRwOsvlSEz$L zL6Sn_TT(Tijf3!9m-yLvF5NHB+!pVvDtbfyj5kUNm>0^D^^V8|(jaVv^H=UqpmnW` zN|UXf4yfn8oT1dFz0w;H&;lm0`2Jrt1Za1fBBJX6^Iq=V=+=;~bFd;ADOkSIW2^Uj zKL<^N?4-V*$2HaMupseO8w-)tku=Fm1OxKkGp-RIUbK`YGs4cHu@KO;7-mPWzp4wO zB3Xy(+0pUAdlRMB?o|%Vaasf7(1u!DmGqG<`^JP;c8zYgmC5{WU!$8vy5*{Myl#E} z`l%aKNsW)yJ?RX}uO92_2GpQwPF8UMSIDlymWd+H3h1i^3eiZ`+`WJQzZ!8he+V}^ z_a;AQVM7Nl6^v?9HMyUtRAl(Bhw8Z&2$AlBe2aDFv%=OpbU%hIf{}z#3RnC>$ z69(5|**c=G+z8AKM`_1Z`@5elq)?Elr?w|y`*v($EbU;oXGQr! zz;q&bi_Yy4H8?lsxl*{(B8l&pH{4Hlfg_gGv|C+J$qeCI$jZxhpqc8gIr#o0i6Vnl zJhcq7iw)pX3YZ!$h$s)Q=J?>b`u8vr#gwKMlTy;Sl9Pv2S$NvlkwP?zuYN zGkXuJ8*#I$iGa4n43S1bKr0_qrVkr((uv>h&xMR$=205pgwJ>e{!&iimbHWzL&Aip z^+N3|JzA~Z^s2!NHWfG_f{zhEo)rzeU5*UEwq+9>;WHHqic-pdp;g1P9 z%~%W-5llG}6*?i(on~G#zT}4hPk^NRbQi4W)>$DstBGgQMpEK~LB(efMF5AdzOQOn z0UkkY;<^7y5-DbpCjvl%gj(@BS@vHmsz^Ro^h;}~ar(V7`6i_H0w`ZHWpi z@G`U%$$xz>_;i%8I~Wy|?$2C#VVk!J8?dp=?d?9g-FZac6?)4mJ)@T*LY!{R2JsD! zdYH`tO5^&g`D*`C*m#R11L!beYJzYRhKbPDK(Wv}HEP85b>K})e=S|q3+^F`2$`1t zX$VG+u|&{kbFm;Epq{wzK#CQ6&gWF5vDAGDva%oG39!HV(W)CG+S1a+Wk7H# zJ!Xo=<-v^t#d`QOmE@P7-4>y@MHzh*8E#D2bnpHfe5nau+4d5$ZqnP~b%X8pqSJ6` zudaEV+(p*S3LZ6f?mvvvD6Ipu*@(1#&gd>iiTz@ZEMRG%9Ph^PSoIUDJHkh zh-q7A>-zdkG4DE;Ned%b-(i00g}{4IbWC2$YY|#?RlUY7NJ}fW8I#&f0_G!()C#x} za7#o(5(8bvnJpu6zE!>CC;~j@lHB1IMHRH#RCi!U10unscrq|&@&NnuzGBsDcRzc7 zLCo!Io7ZJORU5vR-d%o|@6SRa^+ z6{_+>nP;g1_NJL|k#naBFeU8x*_P_wA(lG5`jU5}JoW|gz5ex+0osT)n7$?*kKHSl zwX(`A324M^0SEpU)YEn*Tn1+C9B01~;tdzr;!(^Y%!PDH-leXkmJs~wr;{wOlset$ zX`-r6a3^r#DFo&kEnd20<}D*%%#!dGO_6Tj$oz_no=Pl-qJ&@iR{-3sI|;mfrO0&n zdN+eu@H#KDv=vW-4nN^;gJF-xA|l7%(SgU5(ZjY?=~;LRQDc+(XL5+QHah$Nex{Q# zQJO&2Qxx3<+8h%hqXk5vwzW*}QbiRiMS8Bc>O`-?=cSFPZZ=CI7GeXtL*3m#O}fT= zf%mgt5PvNm&TREm0D-*`AN_b9)yV*axHgK`6(rK2B63=0>>nQhX@I1Gu9(${4O93J zy*Fia(3daMx8SJNYE#sfMF@m% zb$bv+Iy4@6^P^*ax9}4-P*oY+L@>r5?-O7jImcTTI%q6(oe(&tPZ{ITEt&)(#>|S+ zNdr(QLMYYFKm8h`&9IEXix4a+K`^o`WxExYM8UgJmS(?K^*Y_}K3g$&Z>^`l*|~%8 zn%X6(nWLa0C2k$?7;gj3Nf#sq_({*ZhG~>UScHlC5B(e!9Hw~S56mqY*McCpb-O8)?c-%~8lh_Hn{M6jHKzc{ zKE>Njzgg6Kh1Yf#x50k=Csb*H3fuzmWRu+^Kh}6IgYGio&5%CJ5Gk1sPpU$EC)sou zsE=7s>^6TW1o*N4{}Gae5#BM1RRI8e*EHnVuGWK@Ys5wAxxL$hPYe?hziPLqZ6%$X zH^M!6HH@6Ovbf3gj^~C~P|&tQc+3*A{ldsdzf}8sjbsidCQnE-w{X;{K+kdKo8l0O zqL@Nb1JH*oy&BAnN)3{aRHp*f?Fo&HOJh5Za}Wef)TYtPm4H>gJx0o~-(}COy3sC6 z@Q{?!uEG0JQyx<85^`g$GUo!hqkP^3GY6&uGVqDLp>_-*st%mZ;`mYD- zmV0jwCtee`CwjrO z3WUg!`xH!22m~M>fC1JE2`IPcwi-$Tet|W~6Irz4tl$VyM1)UiMYfL%D%>N2R<-VJ zq@7WLNQBubAXYFF&51}Szx?EWmhl{G3nc{R)L6e{6_x3@Kc)jJtqQL|$D~`@qOla# zvhZNfJd#8eWcHNNB~nIGABUwyvww~yVeCz$L+c`ulvJh!ST z8)qaCGOdMAK)w08ja@OdMJcfJEPzG?1V4$%vHhIdi<-G!AZibgvm=C7z%xSXtH33U zd7O}I=seS`+9<^afc=A?neankC-#Hi<`6dF)|LP|k_Il0gT|9j#d-hv>$`mG?<`+S z^+Y_=g38|m-6(wH^XztM+eRPXx^T9lX(K7X z;dFw>WFU8yC$x+D$O}O%2vMNax(s`<>uq5biq_Ao5KJPnEEA_8b`BX0bpuw9i@JpY z45Ai%A>MxZ_LK!zg%@xUv!qYaXQ?~NfAKP-i5WBes0dETV=pq0q}B zoW#^ryr9*bJe*X3i1bP+H1!J25l_G*POu|j;%F@lgAyK{6mK0RA!i`L;1Yobr9dTF zC5XgsRc+Q+jm-BO(w6xqUo4sim^CsLt!@|h6Vx4aZ+%RQmU@@Ok`afdoY6qkUytv1 zlsy?|v-Wc0EO%@M(bfsflTL+nKBOd24@8|}I-iW@q8Xga%GW{FK)=0+GzvT!YGsRJ z)k$dG=#E(Gbk+uI?q=A}c+fL zlGfzby(!-a6=tC@ujwy;?*U$N-zdm)kn zJdLw)1yfTV_28!ffEbDbAf$;vMzgdEbfFe$6OFKk;mUQCWgbY0J)VkKLLQzcUO`cd z+?%N^i)L{|ye#PrlQQ?~p6yol4an_p!C6^F^iNRtuKq<@P`j?JJY>_;0197!A&xSC zqGPV>jE&8+H36IQ#(^r1X``SUz}ZxZ3F!%2a3+{T_e~gTo`C?JR&uxwqV?wwM5K{8 zwK>~vc7zH_OC7oaknYGLg)x?nEiI(7_-67an!?3U0C#G0m+>j;j^)-n(C2~+tGWm@ zHJmBwon!_{Osm@-Wlm3Nt91I9J?*+l08kvUKf&OppfbY{DX%D~#?eB}blF02v&iZ-JmuT4ANfGQOl~NZc@Id}L1R zp4?w1!|J!(U;OilIf3RjwWV++N>~`k0^!NVdv!M#<_p29DeD7l!@QMZ%F*l9hv^g4 zJ;MD0ooEQ~%?yP|7S=An72@$1U{{Prv=BxmNE)iR0aBf=A^;ds0GkYW-nZv(+Xapr zVFXEH%Cx>1_*&)5xWB-N%Umr#2V~3&^eqH1VjR^uY-R9@VHK1NSYFVw)@%CCuWL~h z={YkimU*k;)70Iy@@!vwMgoL5Knb0)?*8TP(OyT#NH|U=fjHDFMiuOVBLSRCqdW(K zSudmzOd&JUU{S?pF$&!2tXd}S;`Icey02yV*ylEJDQc4u~OE ze+jn5jKQ)LQM(amh^KA?CBO^>EJG0Dwzw<=1=O?k< zC#N#mvs2T0K_52avkAO-dI|0pin?^%m@#@+D7JL}A!XQUP)WFcg#auDw^EP~4assIk zJ|?~8zTfh*iWcMA(iUzxYpA`pR_Ay+55815?Oc6|R8+R+87Uf>I z68^K)eR>-Uo*i3CF&Pj6O{_lcg75`58=#1A@UM9U@dNG7!*H!)|TrB8Z$a zar5G%T+A$&PX-XYR2{88S(l0NGbj3)x0^&_jWT4NYc!P5Rz)l#dTwzLN;@h=8EfmP zaVjF~Jo#;rcC%|b*F;Zz>2uT_X{s=P0p@cBlhf%!vU;S)rTDe~Jb(i+wKp76`S#GY zPBZc#AQDIbGl*d&1GGT}4c6-xnYtnc849Th0diTENwY4NW{+bjg0*<`8DO7*v^Pc= zk1OcTJhU3432quXKg+Z?Sx)>L547`5bjO@_Xy8^?5QoW8jE8 z`TNBCm7gc7?m?I%woH_;VAUf+u3?p=i}Fy8jv65|8h1e(Fin)M5cn*=wX6dFd}w^? z=iU08&;8iC{>UaeN~XxXkgOVR7&m6?o%U(en?#GZ7o^2|`cYgw0{jLl_^*39{Y-Tq zBFg9E+ew0maflTYED!zC&ygc0j1|T?7>ZM45(QG7#_l$AgqqEybXQ4dpyr4A6Ux=i-7U+|0G^C>3qh6N&tSCMb_S~OIds&`*D6(?Xt z*T5;LgH<9r5Is|Pvp#Fwnk(o}KZ_Rk_pf^w@?%44emV`wr7nc5n}5+e8DkMuSI(AV zDx{%79|DE|nkDVJAVG8IsXMptJo)HZBO!wO^6u4Z*RNe(-Mwl=GCC|!fSzleNbB%h z*0H|DU-(O&rX-^OBSfd3BOU8(wxHb6ra57%)NZUO5SP{}o)CBs4cwJ2jfH)KA7VfC z@u}+WzZ5k@I&gM2f zyL`#vGo~fnif{Lpl+_RV-G-}TyURBLn_{;|HMYgyx$eI(gb;4+=D|d1lI9yU`0Bo`wa9s+Xa1R=VRGMkvS~ zSt(QD__=wak^|JSe&4#6`94inNX(E^$jvpG^sC;6;y>~UD&`FaXDukD253U59D{oj zzzFNN{kmWKG?=v|g`+fGY|&J~Q_;=o-sR);_D#C|JDIjpe#m2Mgtjy0wBt0^|04=ence`BLDMD%%3o zAy?MymwX>n#4$dWxZQLp&x(l=fMDQyE@!{z*Stqo2!S%_mDDo;pvAHJG$5?Q<<)C{ zW4FKlsr{8s|NTfv(^Ie>S=ChGIOoJ{VYim!Qv)VrvAyP1@C~0(F6Knh{Z#iRS@)h= zx>0v4v1v57-?i?;HW5D;G|Ob3fXj$fZq#4$Rvw3v%b~FA?BKa)BWz~%p@4YLKl$z@ z&cD^1@FZSOPx8x zh25Rwz-fH+PyWd>_2Q+hVY~oIzc(a>0ESIoccg*!=%*f$D)2q{JnPw7Ct#2MbRHD2 zR_5+gLIL?k5x^etUUzt^bg@2J_ZzAg*S)5$h7v_ZBoKs*v_p)3!5hWed!L3mM?AXD zaAnKxp8nmxXX7kEa|#j1LM=5EsmT^9+9Ye;H}Fdpw*rNj7^G~1Z5n*-d||(@-m~& zIc@aBPvd}qc+Wrew3>6?DN)B?FWY)04X`G%f(b+;0Umf#`hY+Y>Sg5*U+KBdsJLeG zp4&N!Os;zcl1o(}PFR(gb7F&i)bz><~GaoirO}QSzcUsWa}54EYpwcgg6@%zRnjuKK<``df7PNRssx}G6PMwj1C|juwj8CZ1FeQlY>zlPf>0Z zZ0o+YPK)fWaiSb#i}AvXfmplMOKaV4gwvWYl~$IdfR|ts*P*)vFR6QjeGB297#*xd zI62D16V{?vf3fF?s{2gKwP7-zpPCC7_hz459{rQQwgBREgOdanIgYT|Ak8R}hOW2Z z1_r?XW`9DY3HCEtFT|QlD=ry2oWD*~8_sf^LR)Az(yAo1Ubllvo~OJ;gxbge`7}*x zdG2_)fAPhSQpiz6*k9uZo|@Qy>g86gyMSOK1f!n(U5^qVPjc$HSxoY6Z3G{A8sZ9{ z;0?~?{+qU>#cCC}A&c0xJ}-P75Ys#$#j6{kI>a}E7imwuOT0fR+pgq@oa_2H`;&JtYdK1`)&@dzfTEO}^}`%h#^3DK zSH?oH?zGB%msZ=ba$rK_q}`kVx)agQmdjcefx3ium2PKR99_(%uw`_8ETU-~NHvaJ zlgas&-HUmW2sjr!+ZyhP2(-k7>OD`Z;M9S+O#yQaW4O=yZAK5RaQ9icfWAwko?6_i zn6>h%%|%+Cb_%PIloB=W?YjFYO5m*mb;v@rWDrSNihCt~!el-6!xLzg3JX7s!-(9x zm8u*hvsh07e8wk~{1@{fE|F}cA15VMl-*i&2?LD$=+kE|<^VR45dktG$3Bm698f`u zail+=*hBYSmxZ4t?Co0(aP276y=bzS?Ks7Dqw)-Ar8=4Y7qO^J0WtfL;L(A^NabNL%=J^hM#)`!rH2|^CBb=S zTDyf5lTAbhoZBD%ml?hX(z*$EmQZnA1KlXEa{Q81@eE+n7JXb+7CfA8(c?@{*YvGF zysVBZ0tmstauXqwB4z?HTv93v%pm0He%`PCP`f;-c9(TC-2e*&A-#39JG__y$pAG# z%D*5BTLdBB#qiWzutHeXqTuKCOF*?=x>Zl>#slbn8AXmxdjM8GhV3QK7nb{^j|XrH zW3ke9TgnnINEDy7 z-y<2iSG+`zw8fxU(^iWc?O1HtZa!B10aluH?vx~_z&74^FRXFjjOhbSCi)3)U}=48 zvRKG(wF|t!ETXfgMIs*&1x78tjvip$A_h)OqF_cgIQ6sqv{bHvPf^XorJBvn<9o^KAaX6_%hbsLOl{pRla*oAgtd(O z0M@GYB!(eZ4x)TpwW>@pMFtsOuZz2Ml4xf0PjQR-II01PlhHdQuym(8HI;Lb7Xuf9 zIxMB(v`njX_(Fvs)x}QVui)?VWcg#Z#HP@1a(Y|U7qJ;xJI26twEU@R>_>qdgi z%$^pXti!A11!2QNUb(p7qP)Tj0Lvg@d#^)Sj^Hi%7~p64?yI^{CM#390!dA3l}XK0 z;KJOFKo0Ks5e7s^3`Cm?tH33tBg7f2eldS-p-e^5Q3c+=6L4Bf?bmTC2CI!{3|-n| zKwtAxG*OF^fmF3=#)bKD0yeo4zxZ61JI|qjLdjlt?zqFX@*f)EvISx&cw`pGLUb_ccP7 zb0QRT0aS)-Jb^+o_2Rix@E(p2WlV*~xWZ|UASGtJ2Z2B+B5o>vYLjKkRocRe*_)W$ zj)9r)uB<9V=G1Dq_y7<qcUfp=MG}NwABW@|kukd%ZoueOBM%{a>6+u$t@ z!{_un#M&=b@U^jTmEguwVAlOvzm8Ne3?hZnD=aG>msAWy!6YD&R?$Rz>h$ybbc`G$ zy}58*7#m7Ka$D%Y+h$wP+fbjouTEM7*oG&j`$cXjWmhL?K|No6tIHiDtZ6K-!0k*I zpw9=!xIiW{0oRlJTF4*KJ3}P6c(q0_$;xh&t%2~k3-`#niauCr2jeI9)TwK&o4Yx3 zFC(k$DX}vB$Yden1oSzDFQ5hwIbQHxL7!Kln8kkq{+ke{PpHt+WgW0QPsSj2z3+50 z_nS$x4fO>1sZaS?*6J#JOHJjpHX1X~mdz(&rMa|WYvs+<)@e4L|HJ4)k^6z-H^5PC==uhTZQ7B%N zJQg`^d6tbM?W-Z4Mqm0yD)6 zbSB1VMYKpGUJ!{e=3%sIl3^11&-drM5S!CbB)y5Y2n1+)ESIbsCQaBh>OK` zf8$fp!Njm)Jz^6P#vYZ$c12uMjC8QfR0<;WG7td?IPCtF}Ng10U@%MV?@%=;={^H93eZI!lr_o^Ez_&bcU(&W8CHn}5eR!=$SZKP^I;n<&jlOM;_QlU6NQKhQcoB&L!zSSES$HXSD3lc<**caigPV(lbd1?b13^I~*n?3Rb!$Hc{L#glS$3!PjxI;Ed1x zlls%wr6`pUZMZI7RBJj5R%`Q;6E+0qq>iQhNjT`9?V;$$kM9AMe&E8pe)HuxQxKSY zrqeY1B4CJuo*cxu{*YkE`XcsY$dNt$`rrL;@8bHr4!6!Jl_?IPWdb;+ZUD??7UwII zKpba+oD4U!3d~&mL%%j|mAY!d!3vIJe`FZz(D%(YB3`BxC(6kVN__>t#=08@9q0f2 zfBO3HigBsoOGhz54@A zcAF=W9dB%lOH!Swui&>iFhmG(nH;p>WBddN?Gogja=G(ZolzvHFkho%uMQ0fb;}FQAF%4q)8(0ria2;; zhRbiyzt){C<`{bbP~d$+`=O!7{`vp&hxd<-E2>T_T(r3@bm4SS&do!D$?yYE^zji1 zxGXFgdEBb-kNU}X0yjTArtQ^V2~Ln~WYPq1!T1x|1r2`P#rbdiO@H7I{<>fH#ZSEJ zb3RK~HGPR5Y7gs~qd5hA`ZK$8mbO0@OJaB~H%dwH zSNm&ROG2>>0p<7$cP_79yS#kud2Gq}9HP2MtV7racp=!paT8)kP{`kxFsNcp%E$qb zB;%zgGDkj*iE^`~U+Bf^h`3%+V%HnC*a@$ z)-W-G?yFwM)_+K=^_;*`2nN>GX_FD$ai|UT4A1dbdyjlt7f%=GjoC|@hJ;ODc>Y^H ze79s=h;2zwCW1Ny6C?w4L=E53Hkyyc3kFNjUwjnP&KIAs?J({aHD*J1cxJ>hLXObSLw#g>Znzun0|~*T%8q>g4fD1 zAT`PKd$k8+Dru2YGkhKd+^^vPd#ef362o;}3@$lR2W$WD)B zVAAg^&a7?JqLm{@qzwMBtJD?@FEI|IS+wcUulJ|uydYeYaOpiOsp2azli>8%o?YK9 zWVNFdxyAAZ#T^GB1b2|X!4&x(?Q3Ygq|hMOb3eaQ5mXK!SONaRzgf$1R)Vt&vlA zZI)b#%H1ML0iQi_{XG9wqTETH&pc`32Er&P=VKyHoDY?Doi+W4= z;17ZnzCrH3>y7Q~EVEG+6$%O@Nmnn1i=_Z`_zc?D{kxqLZKLeGqeP70=pmtQkwT+s zclPABUYP?FsYE;EFc2i7GY}eS5JtbfQ2*vxSfs)!CKt}^`F3y&si2%!D~S+lLztnzW-VpB8qJv7SzMI7axC()I#;lWfcO!Xj8et3C2T zz^v;LLBSz{9CnREvnfR^_}Bg|+s|U_!O$78GgIGFsyb8-(6g)OXQLvMDeVbv5>|Pm zZ;@0ZC0K33i!_$$kyXrE6%7+4edrM@lV}0KhAXP|HD8&Im~K()z3l<$8KP~lS$TgA zZ%K^d?Cy&pd5T=cC^CCHI8Z{x-(NvEPr_8VebcbV58f7X37j$`Z3_37e%;y{&I-T= zVqi360s^HQ6vcCP`Rq>;4eY?!n?rcB`2f zwX6IaAE{)h$biJmn6NMX{@Hij4-5dnQYcadN2ZQ9_Cyq+oXaE6en0U#nrVj)1zr^r zP?HE2PcGv|#D}7i$OU3YQhwkJWa6HR(Hg~9{*$#brfVqRT1N+>4hA-rDO;;W4g9P3 zeiTfjdrT}ZDkDB2CyNbe@$LWM#d8W0(fCvXoNW4I|3{=IGr*jL>ubMUJ>u-GK@?K3 z5RFs`6+TlbJPaDlLKs7jd>u##NW20z5rc;g8;c`vz3N#zS7x->qkT=87{AoyLLJs9 zC065$zjL%xB5t^peWH}F&<<$M&?>fBkiiasVjt8%OY6c~3#GVn8Vtbs z#*eB%@>LoesX}qy32(;K?5!6)HCq6noChIm?ebu2Z7_8N4UFBIWf(|e8ZtFnoA5Z* zYOw7Hgypk`1ey_eih8^)-byRNH(NH{G;;P-BURzXtmy1)kOhk-k|om%eMpL8GuyuzL1_t80WB`T$=EbkB$pNH9d6$g3?<$)?V$F1V;QZ3EEIIQF87rI)!R7CDlmXa%BHxfz(~;9!W3dk zhJ_PWJ5-_2+?u13*UHI<{vQ#HpUjOxe4D&k8w{O(p@v6zTGet#GnfSm@Gjuy(M#F{W?Q*EqI1CCdB}Y%(Qu>f+qR@lg!?d#M z)uRzf!#)pEUHPuC(f+Qg$iVpDP8qrS9664Ax4ea=L^r7rHUZQ7YIUxQqDKcJ0xqmkiv(or6dbgUmli5@Xgm~ z?I(-^uKs<8m^0G#UQ?uTe%v7%uQAPE^6+TS!=1uOkY7V?oaYyYx4vw6BpcCTaCXb* zTB!sSCkjNvjC2t>PR&HdU>XxVnIvk>H9@iAI5$m!pmai^>9V*wJUAlU!F@$U;6GV) zTnoi}ps+fO8Rd5bv`7}gYzm<_Wj+H1?PH({EvraeHV6xj=K<0!0S0>b%Ix=NyHPvt z1Gz2cwYNl-B}D92;h;EmReAo{Dl$OFrrewHVZ8Q2fdI9sO2uCv2}#+d|7sJ#!laAEvV7vu|I=^bQ`Oc_KQYx@89nyWnr#?@UX0ODPBzZvwes$u1eH0MLP-r zTramdnt{wQs6FU~DbPdRQf)<>DGeJ&`0xwq4c9PHRDIt|EPQ~X&-TtjNHnz2Y8ziL zBNcUnGn5swG~9r(ln_H3Bha^FF-a#B7^YK_Ptu4#-IIn{hN%fH#7IP1D)>`7fYfAz zbPif{2~x+((nPSM(1ZH-w{o!uc^YE5G>R4N^y!YwUlIm|k+Ts=alzzt2}#}-ozOXL zCi(zhoF9b~e&EHh#az%%vpqW??tRXm<}%Ne0{Qw=33w{xQ-A?R(e!5N19HxCH(nr8 z$-Nl9b+QPbVb$y6&9T`KV0wvE^;FPi1erKU<%*|Z^-AQ1FE z!QS|v_)nmmO-r}Xmk;pyo--!CCMUvr0MT?pq|HvPB^L_VgtSP7+=B;P?YwE-FTWaN zrQZ7u0VP1#9uwemT~V=Ht4|@Y9jbKEM?OR(DAL7F>IQ&$17kN-`k!!sH66$^@j?Ls zd_nqD-;tH8V=0lZtR?QyGA@{^f|3H!IIEPoae-`Cxiut$Or-zm()bI=P|vCK6J5UM zQa3P@vOHWot2pW=(qLw&Ov8uj*-ljs2B#(dCu*Jb*sl1DHGRqtsrDbj@=T=|Va5vt z-UrMpN~4~K>aKo9F!V?GzBRX;{!6SNDE<6tO5xgT<_pa*m{BeOxro%L%5hVsv~iy< z*`2=%A{-`Y{!ghEbWgn6Hb)IOicL;5TSi>tdMsn^cj<~N12fSl6LsBsElofpe%tp$ z|K9i}KX4gIxP!lCA{f+SNHf1tk_FX<=69>fRx_?rp$gW<0b1+94HM$u^Xy^e%*g|U z@#EUA(lTTDEMJ6OlgFjQ)PFBHXrixS&*r|uR6k6_UkO(75q z#4F4ZND(Hlmk=OOhKZIDb3g_}rwW$ffHawlLUTPouD)WJ-e?S>Y*1$lu|2l+-K1?!8OA{5qXZiFgVC0XeX6)v!NcFF>G8dp#1Kz2E zq3-yi_T7ynf2wRzD#jD8|Fi1_W9+)JV=293; z4b_+bz-(o&D@DH1Ne1^ibjNk*)pKJDURy5BMDA8|C8&5OR)$@wrqQ-#K)Gp(t3PE| z#~U*zhf!#W^J!Y5cbBTBB=g`M(e32nfQqp*2wUZX5A1NG3PL&C`$w*7DWoyE+{1SE z1Drc1pl3Vkp*y#uJ7i!V0GH5C47v5o-Ggh8!KeBmB~6j&e+9gC#l*t4f{Y3;7)kP|;1K%iMEN!wvTXz6OFiTjBdXR{|~$V?T9pjZP^ zJixGK>vjTa<9pfsopwPO#_r5o*j6=rVm zox;Vwh_;yH=1h6Bq#9hk7K*0=pxrXqk_ev&x?4Gv?QRfr!*u6P{<^5LA6qnfrF9c* zczJnlG?>bogX6XkcwyQ^Vd&*@Sf;q8#-N@w@~>(PV%tEeb#(NTML9ddXDTs!v|Tey zi1U&5bqt=q>3Zd!R%^`$D=6&Or6A~5S2~Sw^Cc|!A3XwD#PbH)Iwib{f2PB=S z?W%fo7k;{+f%=kSP=yefZQGEvApGn#GlQ@_ECi8!9$YqQ6gjEakt0tUv>~{C$EdlW zXdJ7vK`E{dF^u9q=Ax0EsFAaB4dqm}8UTUl@jAdq^rFHepnN`2OGNvr zL=p2j3@ojGmE{^|2}RnByIz+q2t9^_M(qBQWxxY&JqSVG9Ny#`O*RCKOnHR#Xr?h+ zMuI?LIf(l8m5XV)(md?eA>B@r&}eCb-0-0I%3!nEnj^9zQG@hp!$bp?nuw`hSxlSM znJ>JecXedFQ~1gXAU4U8rJ)3nnBJCu6>5k4EzP*$W@}gov0EgHkpXFPx zvMbUk*T(R;iV|42gR9nVj4QQ{J!e-HWfSFba5#DZO%eT4klN4{a>uJS#Xm>KR3J!v z*#$86AfcI#o3k(Bp=QEFlna=K4U)j<9kvZyDt=-=O&k*NW{5N%M2cU^Qv@Oq9|a0k ztiLuOlHqoc*cHPzDn{56ypQ=V1dT%UWEVLXO+xx~2>W#ye#^Rcyfac~QgauMGo>() z)Xl^@N}(%^AjcabFBDe9r|5;+h$+n<@e0xWgU&e) zjk=_}08S*NK=BEe)~gamQ!~99B8sY`(m4mX9gPJbye`c4c^BGjsYX1?T8n3tO%h}g zs$yTf^fwg52nSRZ8|~=$Ayy)lP>KgVaK)Ok5Oly|9&|KciVU$`G%HyLxG-(OdT?W0 z&6Xy}cC}(>9c;c9tK>!v6jT=if!p8<%N;vY?b$BP=G!99NIuvElt^L|Cwj#*IA7x- zr!<;uMX_bE}&(MQ+9r^KQYQHI}Xl+m$$4PZ2aTF0H5YNn(@44WDnw zN^Ny!kkT*ogu|0x0%^8y^x&Fs7>*Axi4Z7L7sLe^jqsJ2u64l@)FT2NSfURa)nm0> zZh(>EL4Sw^+jUyYMfUPN;%5PuzRQWSgqG^VZLLw<|Bj4I9Taepp zt--g|4<)XRcH?GjQ8O$#D9k|$vUhG@z9FK>A*5i)hYhi`AOvxX@C13R$xne2m1G4= zI4}tYad=Gd%b^y3NahBrRGUgRQp$8M62eS$3;U~?4k>)9W=QLLVwNh_8Kw(&sT)WP zw>ZB5#Q{-4$m4)wiA06mlO6y$;+OO@%!>#aFtQR(B|B@tP$PSK&xZMM-q_DznB5YM zr9y(FtKA^?rJx{kF)=>%2m)L{TmffBDt19(fcB{ZO^9o_6?6aN7%mkXOcD^tx*bXJ z;pH!$lv3zI0U!VX5&=`k+&u)%1{xolW~R>%g(rGZZ$h$KlG23 z?L$#>i8lEDOdv>5@BE1HDgifW#VXCmMl*U0?bCO7fVmYKLd51}WWi_J)8>9aAtWvP zMFDg+LGSxZ~p_)$XxEwMY&Zf4tnBuiBk+(FnD39dD}bUFq3JaKF0 zqGu&z0d}nCR6e}{E6`^ijq1sA?Gtv5V5X_%_e|%d5E3M0!w2m4q>9+P>wycjX7w5e z!WE`9*q5Ujg!WK0gAbPwB~3Hjk|6WOmPiG%#|jX!gVQjn#!cByiCwV;>BAU<#aGjG zV@gy_6yG)3i?~chuE?s8>8!RI&SbkW>m8n`J-1FlUqQu2aF;5310YCCWTF{YNHIdc z5+d$%#8_lZ4nVPYW7gwbSuG2czc0(732y8sY*#_XLT(*h+R>RP;uYI13jmP@8%V-e z&$@>h+;}9EAH8s~vQO|9FR&8NzG$(3O#_o3Y3GjtmDF0Q(Kk znO)(yxa9joDMC5cMUSjxBudPy3pY;QaP&=CO|gbyiFWUDbfbl)Te(H*7YxyEE^nAM z2&CBJm>0<^c1vZT%Dy4%xh&@}2HZ!79ESTb0*cZ{xm}cg$E7p~uMydxDY`7>kL|4{ zXj@E=bd&bR7B($s#2}^kSMQ~1R}A+a3l7;#2#Ky4i})B0@^G;7y;R?&j!2t{v{wPemm{lB)v{BxqeGY9%o?g6e2XX)h9d#g3d95Whkd~$x(u!q)kt128FpGaLC2PBKF`WRJ9U@tAn1 z38H%@|C(+X5W)yDLG!eyh_Zl;xB+JS=4_!I!f*+62rQTHHnN#;>uC^@Am~MF)wq*| zQ4|zpJndlt7VU1zK9!$VGe}wcSr;_XJ36foT08PJ*?&0S^;a%LWD$;+6i9vEQbn$A z%ywvl#(1QV3t~^VB-9AAV+fo!<^_gA3HuD&%Vi2dvIX<~LL#MRsH}C9R<(wmZ0df3 zw+s8keq#H1h!+)^Ex76~=I9i8o=wu__uSJW{M3 zg_e>l!U=axAZ0t2u2*v{(AK5mX002JAA(n4kt-Sn-dKgSlvV*qCD;%49xsz47jj-C zQMU8o5qyL8fY4KG!T6;LS*`$a4=Z1mQADYDOGe&OvRDqnokv1crfp~}-=H;&RwS^Z zBaJADW;kk1BXS|juM0l7odg+A<0=0to$Mw<4S;UU9#Hy$4$+|Hc9=Q=475p?iM(h0vBbr)eYIshOgxC*XDh)>hE6jJz5hBfEwgcJ%FSw#VAlmZUQYtkN6EU+c=s_tR+fdw;71Lmb z7cedrzz#<-MkuK?1dKtvNS~oUO0(5mI1>UQ)`g19$WUaUfxStqO2;)eI~d)%^P?7k z6a-58qV=Zvmh(*Cw_lw(jVK!=^km(ry(XDr53Lu-o<<0>4yee$^dP3Ivh5YE=IHX= zJ{pNl;?IPx2oiaIqGH|2K z4O&Iz0U8jGLz?zRCut+*KMrtoqlB1j`babwUqp!0x=vc%pw)oPof9<2IHnPAt5@e# z3KShf!uMPvNpTxZmr=xuph@TANQ_XR8@K*pha@l{tSfP(fJ;lqlqH(y`!2^=f-WS9 zIFUD@RvJ}?98@B1XJ%9>Lh*N#q6`eHvufDnsI_g`kR7qA+45O@3bB4l)GcVIEZz# zUF!mNgoFnAzP%wcvRc!t%truF6w%*@Z`LO9d+trjABdIYp@7Y@0&x zF*fAeTIOCFf=$z#S)+Xja-Qo}nR-Qh7&RGwV$D@a?QB=05^uC^^h6+-leMeK#6q+w z)~ssPtbO0!=nd@!aUca-1C(loh}W7!7S(!-Eu6E-ogcz;*MNcpC~>en{qf-9Ie9qd zmR3@gixH~AqjS(nbD0J1mRi8vxeRhI**c(~T36F|s@(46VJ-aGkkYDd>M_g>qM z)88WZ^0njl+4-7r$))^Smr3{i_~NArAdT+9wI-M~|CsUf01Pw&0?6MD5Qfsb0eqKj zhDh8V#g79t-is4Vu-&*K1Oz8;5wZoWx#3rdwcl{R`V~V&*u^C9 zn%~hrfyk}VKcD0G6s0y~S1=4vMEU1&uPWbfAL$CGOKtDVjNX8YU6o5-T7qh1=Kb=C zfitjF>)$;RfrQRYsNZD!52wgg0G7%G`$@nV7fled>_xGo9%z?ze-Rv!pu@n(kWc@{ zAErfA4Ztwyt#;pR=bS?AwuY0~V)QXPLXUxb$Cp{P`JCvs-9pi&eA%8xN160aJ7-rl zrcZR+b+ctOPw5}7J%Hr}B^PqOu}73TS=lIaMU@!B*8*a6ga=l-eVw;dzwSIgf6|dyAg%8X^ijw zr}iE>qgjY9f<(}gL3TQj_%wOxd$avo3+>iRe-FFZ?HJ?!lB|6G?tkLrd|`Rah?YNk z;vyWGGGA@#eYUk#y%hvI5Clc`;&E%3XrS-@A=tHn;$#Zl1CN7!0LI zzy!KA*#Ev5W@gspeRj-tJr}?(#*P+l`Ydxm(U9eub_=3@WCR=l7M<(47h#^NyD-R30|oE1 zecWS|8xHVk`0zB+XE~?iZJ}*-I7@-3+*df~8+lO(=5qO7JCZi*|HmO|2GI?mN}SP! zh%l`_s;Y^o$Zi>Z`c6B(K7fg^9MlWn#{nSTTeDJ5W+%q8s`ZHM$m zxCHyQTR4C-sEK)awnUy`Ge(b`!s#|bi`WvvvM6t~#WY20u|15TW9DJU19ZY*WPMhlp(engJO8(sc0GH1(3}8KqbK5XnXYT zYTU2`L;je=vt<6LHsBy*$mP+C3t&bmYcyS{kb=YELP2!iWOrtkTa8Ve;=iu(#Qgvv z+Bm4{#2tMxnZLT9FXQqG&_q@qy`6;3BO2aldkWrg5v1UE<&r1i+Y$(;7TDCm6zmgwt`t-PH^wlLovw-H(+q&8X2iZ zAh{r5jd{~_Vk}iJDaM81(XjbMoBB=m9xt9)b#ykl=P31t`st)7Fo5*35Lx3ejthY4 zz5(-HFxCiMV6xt1>v5c9LI^&&I$~&n54e9u7lRn};KIZQkVKLhPW7~mLIT*W;%Wcw zjfiSoINxQz(869Qt%pxxhkY4?7Jz?5B_pIG-K60a!Hm%IvYtlIb2}mwo(N16)bFuH zb_xcR9vJ&VX!bng8JHP(yX=}!LSs*4=shR-6c8C&r)l41yX0je#4mc}fO`*`!7;2I zL^!Cb9!Q?Zku5hPKpbRo1gHXvUpf+LeeiM;HowPyttDoA)>G8mw?m6*5%?e~mrk}K zwaZf%Rs(~q=zL?KE9Q6E7pCvZe2?J(5Qj8s^@E=N9CZMvT@1o8XD(WFiSUJ}A_KP? zvnrKhkG{)xS*HCEQTFt!Cx*8O50^Cs$Of(Qs*xZ|8=oT;w@nInk!8Kj&Shc#hxo&! zJGw#+CQu2zlnx0B9sWo=n~VVwm?VV5185?gCZpKF<-++c`|O$ip-|(|LkkvAqY{B6 z5Ysd-56DaRs{x2C%s|fzEbg=h)w}F4Ee+~X>q59k8mn;tz=2a>j3Qi#;}~PxZ}^&F zUCi(sE>LDNxRv8Ti4Q{(y! zjwrgA6ba(k5D>(0uFyO928$47v?~{0%m|Ojl+gCf zM;FAX6tdqXL+l^74FV7bkxr^TgR+~EM&%>A5k^RlBJ)wu^AQOm zT0kO#oq8ZEACpJX8imTC{stxFUqtE-V+bZ;+sATAxbem2>AX5%P@Ptc)208;WI@du zG^29zTuMot2ChOK5M%11F4Eu#tK!BYs2*pDF`g#;8Z!Kn>7~s8j?U zd!o*OG#ml0o1sNf2p~`f=}H=yWYEVv)5MFo(xFQZVYm222OZK}Dq0V=GZ5gxX|!0u zBK0ZS_FM+x3kjrlHnK$CVhFD@GBN1eOouWZ4vD*E*P(k2*udz?d|PA=FTn#JWc6|k zEI@S6#GP1^BE$+f5h^LCLx}pch?H%VPVcU&VUfeMg|cF}*A=4z1!<}v(Q2gj762X% zfb)pamJos$RBBCgm?op&x_@=jxFv?D2Mm?qDMPj-B#fw$L1J)VAQ=86<%qm?4~zx` z@DMogL*v6XZU!e+4k^x`4gYd#2IDz0utAeXtcOm4WIaw@XO3EStwR`!dfve=Wf@=? zE;y(Vy!L>II5zxV1qD>vP#26|!3@(Ns^$xah)&f#hePB54D4U)AgE^`pfL^Z8-EQavOvh}ik@u1$p&O^MgS>JZKN(uzZkQBdjgkB`5+;w5Y z#t4-T+4tUA>+_?e)S_-JKQ2SAiriVi&}K`*#MNWedYG`HHIMFSKD0lCS)9I=st^t( zVW4OoUzz~zqbP_23`BLRN{nH{L*eyz%-jqEaNbaZu%AYV=c-UX63|Tcm~c;q$uv@L zdLqEIx&@8+oUr^2@GJnsKZEecMov$VVL6M#^ulCTbuQOpkZkjAsOs z9%ig*S7MP!AnD-5GMLnPNzugq$Vf4Fzffrwi3|X66X)&W#)w1bXV=C!!h!ptO|;sB zG1t$-QF0-BS}_~_cmqV}PDOOyu-N=S=UNUo7IF0jfOZCE%QmAmGb=@tk`0d}F+h*S zWkVyhQ-U2g9c|lz1E>sv-w8@*I83u)1g8L?-) zxChqBaqh}MlM#i2N7shs_aNX5>i}D%TMPhr44%`R0Ai)d1Gc8)5V?tj<$$>*i4*{a z+_ckay~cf<%lWDfz+bMgVI??;RppXP9LEVcGjgpbiL~`g6@Ybymb7n81t)g@;}Ala zVA&JUu>|3O$xb};hzV%XPDe~T{aHNbj`bDmrQsCD7>BFy2~EL0ua0g z+YJ?1#&dg!K;$b&+s5F11g&R>=yxF5aFGuh1oy-EV@5O5Y4R40vDSz{b>4+PF;d%_ znzpiPZzv6V?OM2|Ki2VYe843D5bIT=Glktjs9{5N7TBCnw%5KnM>8Q{LuTSpT4e%Ae(iFc zq0~9BBY2iseqI(80Efpgp=K66c{E;7jVT8r*b@R)1<=r)bO>RA2#I2GG+o6mFn9zM z|03nM0FYBoTC+lSm(GLt_C*jB0PLNhG^Q6wWsxHLQ3WD!j0{E>GhnMhB#CwCT2^W+ zK=A>zqY+{?8YDXC1%w2EVok~ynQc-FJYW!*gwQHD4_X)CAnTUd5rc`bT!X?SBh2~| z{4q{bOg?HyzsXAltVn?4hnmukbO>1^E?hxz!#^Cq)J@yBC+3F@`cS#_86C*mAhM!J zC}y|?B8bW@Pf)huFujU)2b5w@3MUwWDF%cEAQ>u?Au0}vyBS95jO}!iMP8H(d_GDh zN6evSJ2}VY{8LQP&Xfe? zZNrz@paeud2UGlA<8J=uERi~lp=M<@UxwZZaIfmQ%F`2TV~HW1RBMntBeBZ8{+(q? zyo*RrVFDc{qGr9?Qit9P<;v*{Jmdfxn3HZ4BbiKY*xNNw2vZEzia+@zBDGg@Gg*x* zQ|no<4`-xZX%|5N#eh*uz7&CcO2=g^8WGw>gE3UY52D#!>o!(6%wd{69V0hXPV<^z z21N*xk?MpVpWNabdji<4lnI;p)m6Bou?egKpd=vTFkwZr>A#?J z*9dcoHwcvbZa0_`GUb_eE!(YNM;=K? z^Uxsq6AUC&&8H2k$~q{V5?wV&W`dB;eWA14a2rVs7DZ6HHEF;G9-9t=m!N9h;E{Gn z*t;QX2rPXuHyRPG#Jxh?_*(so?_%s=ir=}8Txha5vP@LX$}DOW4~X4pED!@&0lca5 zf%(&yrU6qO07sbWV9thcQD|Z$rJ$mfqAJBsiyk_x&_9?=G-IX{NMBz73=!VTD}c_~ zlaUkIF(qD`uAU7rvRv>;^<^6{Wr_5SNJ5RKw&hp0C>9F@h$}-JbE&u$IhrYu8kMX? z3|D0_#dJyWL*o@~4UdEmK>HmDAnTQkY(nDj8f!$fXUs+LSjZA@&&shi+}iD))cV0q zi3(%1Ea?l9Y#|l2XTuzt909Nn>{klf;BBO)RniG=Jh-zB3cw_i%MietK}sLdYK}++ zZ-&GJ6w4C7lc(a8Iy!;wS82l(T{n%{oOQwEW-u`<0NZ?Wc_fq$0Y-!jJ1z^la2xAU zi%_x>3_=6A3~17zqt1vn5y(F+aJ-j>!hIyEba*6HAYpHus`Dcdy(FXoH!MpJxB!v^ z(jU9{O>Uhd(j9{Z!{&}$zz_b}Ji2f6nI;ZX5f$475ZV~QD4}Dy!)X|d(k32z0*Pcw zNPquMaKwq7I$RU4P|7|NLJ11X=nFs*E|G$?EEf!BcqGf@U2&isU=EY0QbakzsB|F< zv5MLU8`Or108arGaYNhO^cE}-d(HG}O*evSV<=IICV%VjE@Iuvly>FLIFP%a4{6fB{uXgbwacx=|Y?hqyz zxQu!vEUqC%&RJfr1brw7#dXy?v)Vz*qHo%F_9}C^(>&@m&FluyL8fd58h%OXha!Wp zc7%A!3?L&qZ-%vvn5kvwz{)DU&+oGwAmh;aG}fb8NNI%{qBgBqwu2!>Z0e%C6$p+` zoeOB$38hyB9zZ2{Q0zERsq;wGQ#}%xMkrV+apN~!pjnGxV@MqrCY_q5mX*xH8crjK z*7M#pg0VM1VgF6#21T!F0^tGXbc?N-yf@!A&^M zT{_ByOTF!@aib1P0#(hC-s7-Q-s7K~Wp`kvAA|;8eH`qDet)2wTz4R6N_IQ+C5dQUbVv z6vV+1gtQ^*-l!PD8lqd_Qww1mQqe5^F}(oc3or)@05&IFKFSWTVr)exLXe@YHmHl3 zYJ!BRuz;&}$>=WJP{P00-QKh|03Usj7C`WH{4gLoPO&TuB`9=0OS-I(skCYaV?=3V zkOMrpdSvz7`WN9C29-xpBDh?I0Q(Zc@C6!#bygT#z%~mt^X9k|2PiAX%aUP{a*csS zD;g0gQSdao4>16U&pCiOY9^W;S1Z)?T3CcK9wJ8E z7imJ(8VI0s(KE|o35w6(nOitTkgl+U&s7rNFFogp+jufyw`EuoS`zi(c^cbpXJ!Syi+u8OB4ALeU}*x4^J8nnem^ z;iA~ov4Z-cW}ayQxT3kwfmyDn338n3oU|5_@R6Wur)04quz!V{2`&t#k1K_tS33^YWd^j#T|?ZgbUL*C%_tO+D9nO;#* zT*Ep2J0s1Tk1(sCI7Y0BhD-Q^eP$`Plu0>ffPgW9++VflDNn$N0>nPN05jwi3rM62 zd65JJvXLIdU>Z^;IIz^kAZQC!53}aX!`Kv;i418?U1t$s!3nUvbT8&W! z?{#3O5h{k&Obb-4E$v|if#H<>s6h-IP9wGla2|^4G4eX|#Op>6xyQQzNwJtz4>jtU zDaQo`McHHLFo@H9#ejMS0Y;r$4$7l!c&Up^bL~?F0opap(6b(NA8gQoL=}&$+iuWF zS_DaX2(7m@nh_N52Lls;F1BWXOi|hDR@lr|+H@aQuxSQ@!7pTzRpA7!3nWFuPqelC z9y~+mX5SU5GtRcPR`e8;tg_=(xq&umoKWT&Jq!(VbWv!Xw!D6n0tsQA2@b6_!aT%X zHFtVKF(mmOj3M{V4YW}Ok&6W43xZaHtu2mmj?`ET+(AHZt!LIx@kTjL+R=hEtlV^^ zkqAUfVs3h8(6(BAoFZB^W+mNOi{^&Z;e;^6X#b=?`T&N(9vhuEyr4kDHMAd=x!sF0 zK`!XT7*S!{;e(qkaJp&w2KHcLh9D{c1tRP5=3IOR|j75cO z0p{As!>NE_@C1#dmHV?B%PZ)~2iPU|lvq9rHnvnAHNEkob{P_$Bv5rpV`aY(;K zQ*~5yfYmK0m*jB>#&2u#T?on`I2{TkRJD|iYW8*qG7r&rPTN!VD{V+HB_|1p5z(I4 zl$mDYlZ8E96p1}4P*stHqBWz^)z|~x+bb+G6n2a$o|Dj#VMXMO;E)(J4bQESZZv}> zP&O*rhh=cvXod>&W&;-N3>b78f;~<;0;1@l2||AaacB@332qP6Cx?QJUZ$o!A-rWQ zLuj`LPRzAh3r~iIL=+tM*aIK_2cH94#E#>f7?V=*EP@aetw~$fn87>RWhjg=TF1aa zC<`LidDK3wB#}h3W<&=wM&R`5T4}iTm|zf9Up)>sOi+<3C<1KxMFW|}S&0tpLIo9V z6A}v7u{;Qu(Qo@rEXzb7g)~#G#0rorQkJhq7}106Pfdw1fv7xCvc!VtLh1z|KhPit zYp9fHlo55N9sywIP3$g`i7okjU1#5-RX9Qnh3{a1=1++f+cUfvd1P|2@?gk4FDu1 zhcMxQN8x_qaGG!&Y&V_>htM!Gtl>aOc?fC9&g0q-2{<|x+r^C3P0(tt98|W!!)Q{~ zn>BkPSkyt`YVN8K9tfTUbb@guP4@%l7Ty8Y5RLR}&62p<@9aNI$byqr`t zxIt+DgX`$&B7*ZkxJ`~qmUQAy^}BpG_MAz<8I!|}HJny8s<0fb$d1>F+#{m6!8-+u zN1>T~}R{{cjY21c4?TzY~&NK~=Lu^noGu z#%Wb0^$(QREFMVHNIc~1P$(iyaggM^f^dmu7k=-}?+QA}n2;0cP z$PF@o$xhCmU&=j{D(Ub_3V}uelod~RgF(Cy2FLuFZQzqvnt61Vj@S*yE znJbfI9S)$*2J5iV1B^6#$je>=hUKVu`@wQJzHDcBv@CP<6drB=)w`v&oBa(FPbMTm zfcOPfyJAgIR~70$nI?oP69O2N>{?o(nNrcDG=l{s*IJElNI(Wn*@i*@b;@K_MWc<2 z0n5Q@#wtM<%s8(KYjn$DtkqBRV@<0kdjnWsW2N(1u0DJq2qnxOo`V@a>>4yoMxjP-QR&6NL5H~jJPq_C{WsHXNS3c z&6{l(R58VDgRWS`bBPf^G@Mxzb%TU7VIh-4m|hA9H$h}1kg6pZjHvPf_7KA>DKGUa zfj5r17unN+rF#%Kh*qa(Kmj2eH1OEIau`((VmmYbCQ0&ep39l;D{!f0f+JKO%pbe z1|^lOnUv#2_8U#_)zA@pFyax8e)*8q40_3&vyr4N$FueNwINFAkKpZyPEfB8S$=qS&e35zgZYqq{Ds*&b0{Q`8`lq zIo@4=Dv8^hT0{5^&%IK7*6M)hhd>zy*kBBn21K1m86o=puF-v|V;JEZ?49*O=Qa;; zH3YYg=13$Xmj0$OgieN5g`o3H&zs@zuM8+&KElfJitxR)5}s=zlzF_RIA(&dH7NEUDhp;Ixf{Y@D9!P{5 zar=WAtSU`JC2jWeJL_B;wa43u&T(^RfXD&DDOS=Jr^*H>U1z+qYrCh$ZLW~N%S?gt z5U%ffd#yNB-dVx3%4Aq4QO=?qP|0cA8pJEvTX8-CGcg%(0aT>Bd!tEA@o2V>bk6kN z`jDeOjG!Et4xrK|B(1@{gHF=N)rtsOB;1}cMyS!4a5<#5df0EQbx#|l*1K8S9u8d_ z;Rhrj)X&Qx-%Y0kS7OY77%N$IF0`M5Y-}z)syEgr(`;c9E0*2x#*GeLvI#xRlwTOy z1F!^H0mN0IoB4U>(7YNMh>9-td+U!~Lgr~S`XT?-yR#h}KnDvqB8_b!ANZ^>(2eiN zuxj2n@bv&wMr^=}*M3*sK<5f4D817CQXV%hanw7?*$W1l+YFB#Q`LlTe^*4D?IjRU zjY0T5wP#}nr$y+z!{+2mG(hqK0bC7B3eG|Vql?chf9BOb6OG`YzNxn5NJQJw7&3lp z3LTqkZv%s2ZirpZPSaWto7LFvJKNX`CY~Kom^as#t--q(s=P3E#29g>Lnq`rfZtjPR=>N?^<_U7>q#{n0)B(e#8Jm)0FNsEr_L8AZA)%uKJy z#NLaxh?d{pcm@cG<}{E!q&L)Nr>?^i=?vf790}wqPajxz{lJm}A3!BcwB0OUt6ebs z?Z!I{0x~GJb@=+ zEYjQQX46=Xa%D|5 z;f`I>fN15siX`w5y&z=y(BVgdddGR&e2leTn%qw|hCAF+iqz^Ib<7Y{ulA0jF-Lf@ zF<{<+cq$9LE^5*5R*+9Q2?(^+1L4>EbQ*Id2)-1MDDm(}Cf{<}O7pfE_BJ-B>#+hn{%P zH8%=j{qJ`S9)lHFK|NWYchlAZ%`22`j1zoYJqD>x>;y9Ca-g6!UyDY=*Cz%fj#SuL zQtkd-npOjyTU6nM+V7_gvebA^Ifij0NwwPmYf!^G@KCB9vA3^@8`y>U#}9a9=N`{| zFd$DcmI9DH>bKHi!+F;a6O3}IE-mPsJPA}i0TE-G;J}K|A6LZX>EYx?uk)dGWnR|8 zu>Vps4v_eR z|HIahXOxfX_tV*;UH5Ep^E;(IAoozb1EXv}KUDdm;Fa;S!$4uI_}d7$XSVw*htU;U z10GS`0&tC-M~ZkqVPFjxRE%dF(Snphn8ul`-eYg8=$U5Fc5 zO60NVEp1-y4}}8FPZaiDo`3<8O%$}KD0~4O6-^bx)i42!5eyH1_Xm-b5Rw*!<1H*D z`pTsWnjrux2gTkKs1SlGoDwi;Wq@;h8)j8U}-0&5`o4fJ`; zZ-%D%IcS0WsY0a#O~Ywh!UVAD{nzqp)7^v?RI&YU|MovJRcip%Fk2h(yn#NK-XU&t zc!+W7P@-u3|?GzGn&$*sY~9v`cy@;PZd}-%si$W->D)NfH#lc|LU>P#_TJ zo*jz9ab7uuM%5pqT9jxmPkAO!P{GkkG>PL^!~X4mrpJyUcmi}bd|Gwoa%Lr@N#8b~ z7h(pb(P-Hi2X=I5bb)A0z!<^VV(=prlVnpZM>{Zwh^fb8XeR+w2^H54WG$b2{I)qI zwQM*75Dr@$Lf<#~hYvu4XbJYXd6^=jR)Wc-2Nba%Bae3w&(2%~Hb@ijymdCF7l&)z zS;DVS;cb?e>wvX_*CbXFthkzHlbS)J1ZN<`oSp*@;0@)r-OUG(-!!Y;;A9Eypz|xS z>!FDAp1ubpCjDuXdWQz4J8d5wn%lS7hlz@xgG6e2ixwV7 zgi6!F;;3Qcgzo}`Ltp{cm@DPfjcFSDiOQjUY%63M0nz$iQ3!Ned6;B+ zQ%py4s^O1IVF?4hh-jfAQnCt^+4MzkQJeC!DcF=CiW5!jLV#jIx4EwU_S~-%hY3q3 zfZzxx5%9>O4YhEG3)@L0&-5RbXRb@D zMgxk(WQC*j5x}N-;F^^InS4oxdQ2m6J4i+afA2X1+9I6(uVHF++T-RIr_Ij0}{7Fvc)1{q{?(+S$I~dOZg#4X_kkM^WEnF`L0pY<9;F25XgY& zQ(s6&P&A3?JN+Lg$y_1?E9QsE~K(Mc!`=AzI5z+<>TlW$RwlJz;w>8=Ihn!kv5 zpu*HPhXxQ_J!49%%(;`a6HtA|J7uy9PY41aqt*%to&Z=tHTRw?tF)%+0Gzu#C8=J) zDVMIb0fa=$7*)oOf>cGodVM87#t1cbV)|exI4yPFae~GxAwgevNFfjiW?Y-0qYVv69Q=Uiff zALJogqJZfGMw)6{mD3dq9{{P$K=;1YM6@r|2CMnuA}R<9QnO{e#+N`$YaoT`Nzh}6 z)>)+IaSz5)**=rL%yHBrCu>%wY5(j!dV)kQa`FytiEk+~(d4ZZ)s~uiTO=F^04>Ro z3ZWDtqN~&ja}#}S4ouUbE0^x_&%4@}6DvVBeHnnRLT~g1Dt*y?~SmZXBn3U-oLayqyUR!3RLD+@edO z7z7m=9-wrR#eRzJCuDgtG0HWpfT1D`Kq>dD;|H1PKpd0u6*y0;J5eKDJFxtaoeIHz ziZjiv6oM0!eaR!jA92PO6eVQ>V=bhOX%Axeje`61QL^*VT@EF zXr0LnuWTgd%&9!(IKxVp!Xa+UCyc-8%djDj7BC{{wU<#CQg9HI_UOQjOmi+9Do{yQ{rXjH7unk^cHl8wv9)K1^MJ?t)MOKRVm}Px^cc@nNM2auGL+SvC3?yp$u&x_<8UTaQg_>;aH* z6ueG3t};@xv<(!VrV8=~6LqYXl~Phq&r>+%gIU%vaFh(SFdKoW7VIzLIXn*_o~c7n z2;ua)Aoy`Xczc{^EFkz3mxfLwY0e}*fIBT5Wq$inzl1p&O#RHOANt6x#|kZTreqZ` zWpR-MexnH@qg7bpxZfB)Q2>y*{TwoY>h|H$;!;gGRaC_fS_{`}!nMD6pJue{*u_i~g;7AvI`tXVI&Nj|P$eeTuqnV(cq6ibi- zDhD8(IpLWjY{3d_xGKs`=%9Dp%GU-tTZa{P*>5}(*@-IRa;B7LX-*>l!kuLvAeK12 zIH?-*JL)f*WOdlNp9lq#7l4%}q3B=wqw;*gBDl%AKqf3{F`uO(5J0X!@*OXHARCFdw_170adcPi)9x%pp9~!Szd8%% zobj?qBPb97NA$ouUKyYn28MHFoBNRY`G0nyk=hdxO8}0*x$#VMf$mIOvD`s-@A>ci z!5@6>&5wR2F|;OCA(RK;WJaQx{s6w@lH2*YJ)&B)7n-wVB~gJL73e66H@RDoqPbBA z$TpVsSLI#UE)X22&7LTp>$CZtcwt!X*9L#o_NTw&cd(SD$r&~^Lg5PGgwZ$V8Y-zx z{r&j=_o46n-#_r3AA0rmH(&qr8_|WWeTug;75-2o4O3NLlz{ZYq%f4>Ol$^!qNx%W z^i!BifUH-p(Q#0rQj7xZHT7SMKW~|Vb)Ee%m*!sSyiD-US0(}X04VzaOAWM#04}ii zjoA^x`AGHIzy^Z_vB=DN40|b(GwT86AAkMT4}H%!%fJ8KZ-0LK{mfBVBWM=9D1Ig>cVg|9_Fn<5@ z_iyOX-+mL#!@kiemsi^Z6vha+y-*!h=_wL7l+#dM8xat#kPx8fYOxEmmM96g&eX~h zd4xHX;ry%rGs!aCGamVt^+Lh-fGG`hq#QBp#_V3ci0A~MC^=Q?Vt*V1pfYIzRGU~% zU?(f>Z4jF=MFCq)fB*Kk-@g6vw?BXT_Iu9fwI2d=gHVb9(n1bgsH`-WWI?iucCi=v zEL@A*qZ9`h1>MId z%W`1{qyb`CWQf^3C3OcD9*P<CP%1eV0Ct;Rex|1OP`tF@pTaADwY##Av z{Xgy13{DlGDx5GVxVv)#7vLl6brAv(6G~;$tc6}?Q{e`+vcF-XK0f04MvS3UhBX1_ z+x4>V_dovp{r7LJ7Yy*6sZlOMlE##Z!Z|7I{S>lrMhIpp1d>k21+VB6P~o8rKqF*v zm8D4PwZz|9-6m=DEw=x%ex59pH0sXTkSAy0G@RZ$G$b3+h{4Md)C|!>pM8KlEJtVo z0K(E2{c_+r?h-D1aB#1?P@9lQfd@!p$)$*=;x|cuemndI>02L}^-{tDED(&m5tFxL z2_yMMw4|UrKsTc@P1YuC_lSWh5yzS%aw(hzXAC|-33fr@1hHK4el2%>Ftl1GTM$&? zMfGA3CSAe+5~(8q;S=8+LY>sCg>VIn>0pX{vNjD%!l*U@f(YUcLGpv#OCa*Dczl2e zB`(wrC?UGOG5YrBZ|G1fL&85(Sod0@fUL!H)u2)7N~a1WBuo|DqAhuvAeW$LHY@70 zjFrR(@GwW`JI!yYDwasUf}Xt-(jS>GRY8VZ8rrR0NEG|ZW> zZeK89LTQrMFohQC)sb;XIa>21tRW99>*YRkY2)Qwrm@Sq9X&f3S zKy-1rlojkj7Mg_bj;{T_{m!bCNo_@G$^%@IN&&EzQj{dP({=YXO5vVG%1pSO;*_U4 zFXocKp%4IaRTYCuF(RdLCakSj?Vs5;mr73=)#_dh5&_-^K8Y|`n*&kcBB1E#D?ZJL z)M}J={TU5vRE%y@z@cHei?>O*73g!mz()jd6yDVVwlEFu^yI1wN$LkUdsR5MsNv z+2|q1%(AGNEM*0YwQE0mNWU@LBoZlaGt{p6WRy%%wPhu%;h-xq3}F5EE6%E_lu~kJ z{q#BDAg9b-bDkSRTnipY?;Bikm3>GtgvZ5Hj&sB0C}(-XY{+8)6$5qU2T)ndqhwKX ziAHVcVM|~Rg2Ct{7eXvWvEbwFF$J36qxoZgJY9a2kjE{EP~4yGvS?tD6J55KC2d7g z3v)~^=VNGWSPVUEjwD04jI%hPO>_Xd*#||ol+QEBKjap%0GwWHMWFTK`1X&2MTr#* z%WTgG3Wt7}O`4kZNpO~D8Wv8aS{@aceaL}Q$#MXZPKfdtv$L`T5FsT@%$bm#I+Ue6 zk)B}&tptQ7L_;x|%y^3Sx|a1HB_JB>6%T;?p}9Nd)3hvSp;kwj2F&QDWkD+ICge5= zVF^Bl&na=lxhf1xq-iy?V)4nru~G#74{^Ryc-E4fz-XEGpY-F`N8~~cDGR2C5iI&q z7IdScc3H7@FFDh0EOuzX5E)#Mz=)%OaBUMQtf9h9lM{;jg(WJV3O|NRPYPqC+IA#r zoM7hm^kyCi@q0ArP}U;CU5IoHC9Qx2irXjTG7lr#Abn$o#YoKf<};T=i!&|Ci%D$+ zBnNB?s`B=A);B;{0J63^`7>Uu?iI%n$jnMd#{A(A1Atjp`<$)IY{@7B0TwLZbCIPm zY8p?Ftj&nlqDL2cu?QpugxqscmNE&GDwf5fK(sT_6s&<+=>?SAi?k6&6o8&Y(5B6e zc>QkX-~0CGH+}myyaBn8t+L(98dt}{^I?e!I?vQ3NFT9pHI9LG5Kff9k)gz)=H3Cx z$@HnK(RHhb+=AJk;XCOqf}>0s659hHpuPI6!5MNc0Jmqx!9*>=hePKFT5iNt))S_j zO3J^<)$S`xu2$Lku_>n$ft>56g$Lh8c?WJn=s)ZPz1 zJ+k31B9^Qm3SWe&KpgGx{U)*J)~8gCwTnom?6}qLlfExtB`_+*H#ticMhfLg*bn%7 zofwNOTbmZF6+F4ky`YYjcqJ7){Kfh?Qvp(#RD|+87{EE?B89CrN=R z9FyQK^0)$3?Bh}VD1jXcu7?w6y7?@9CI%cvkoy;wd{)Q>VL3#wm@)yA`!R_~fNOnj zN6?fRXqDisL;+l)>PxTO6AWUay!smiCc9}a3B63AiSW^HCyE;U$&dt|Ak3k%9X0y_ z7i2Ew!kMZe9R-(T;K-8gF8LG4)|eEKX3^%UBru;kb)bP_+`R0tJXj zLoP605fXgoDZ;2}<~Lw9Kq(Vsin&rUXAu;!W^q=*FZe0Iq=EaA^o43n#n5Chjq7jw zsK})Vt%+EMq|{vWvO#9~HdiT2{gW~)Oss>ae91Gc3R3szHcnB(D0g9YutPGA#l(pd z%>;Y${cy_yPKdjPRVjer5fz}Yv;rYT#lwcAQ+E6mVfOp&LR^+{mMI^G?r?1 zXa>i{*sRRn#90nxC(NMEEh+--)_P)y$Z}J(Xu&AuDdF5=N4Y4n(=~u~?xxQ}J+7>& zQj~rpUw^~3T_g>ynv6F9nTP^oCj5v$BIkZ~uS+QkJz`m+Ox3Fnf!LX6qt*|foaJ0B zLIebz3UI*zNDavaSLD?)#$twGXxx4y#f93Sd;d>RR-}?cbN=}A+7&-}o5e{^dDN&Z zBX^F?b}6XX-X;R4h@2R5BxWgbBYJ^Mf#`y0X%B-;&;S+E;{bb^i;dwjC?q)RLVw6g zaPm^dxF`{r#_jO+H(mpu7+p>a8wf2mvVmx5Z}ZD$-~M#@ z7nFQTWjLopktF4$n*_`dLW#|q{Kf?(YjV-H9`>XujN3oTf@r~|*X>2UCp)&6lBiU# zq_d$)vX!1xl`O>|q;Q!oQGDzA8xOXVw)s{6p7l07;YYd^+Y9XbhE}QTC`u_gYEwdC zYNW1s0s_Q=%4CPUAE(yQEo_}OJCz^}z{MSeR5bBSm#Qwh!1V1o;64vltEEV-)w8nV zYPB#753_3co0h-f_h_^YrR)4E!vvC&aiU(30Gm25XF7q(N+F^PQ$>=FBC@bw;0|@g zby^lpZwyHcDOPV7hO28`&IH&*2`Yu;L`80R@i8`oQS!!V5||!8OThyE;J>D$EY68? zEt4^e&FTp-IGsVXAxc)4v@$d#C>|g|MAb!DV&rzy1dqgU)uI%kD!^*yL*ylnx}=qM zKY}Aih9yl_q6C(^`uu*K?oV{+iFwrAQ5jtz2gL1S07YiaD8tlAx`-En-tq(?@+cP* zTSVz=-Bn7E&!*S*Hj!AFCMkTC>KqM9!wWKvF5?7G5LmYJAAQXsFX7BPf@C;6o1rcv z5xHl`b$-lG^-NL082|}@DODLAR**WMw9J~|0Md3~EJ%&*WrkR&ytc?9h=Uk1qL?NS zr7}R4AC8@Kd54kE%Nj-%1jNU~B*O=ln^|?Dty^iwsuM zYd4iMSv20#Rge+0nn5Ay0I-O*TxR?=Gh;-Y#eE9fQP>v3+TscruuPg(sS~Q!!$f*{ z{NJX-&d^Zf0rqG2S)>RZiN4ISJS#*+SSVJ$Pe!eXOFAPKU~@2{b<2EeO^O^X$bh-% z@O9E82uZVD`QZyEV$#%zmAV1$5m_s3Im(2p&W8tP(qen45=&=E7pj)v`qA_^{B_IU zQTIOG1Hxohip+(Uf^~`PfapfsMvzPqyhQ|Y=nH?xwCa>XgoF7OU_<0KLGI^lCP9+j zyPi}oA0Fr>C7QPJ0d$Cn!cG1k_bm#^`>j?9RspCk^zvheQm_qFV=zz(SRDNWU%Hok`N!L0@xQaN8CbeW#x!mAt7d1 z1;Kj3b?wG+<$4ry$IusUb?7{nqrZ0eqZo~IdX?OtA05bEIF!{PEBkQ{gk#z?*&OFW zn_1D5P;|moTKFi)Nz{$w4pOLK79Y$Z2vf;SD~nO-a=|=YVh})lmcmeiG?gme$kL(T z{_cFc-t_I;&7XB~ztlS2M!tK{#o!5gOOyo)R|}Q%puiPKL}g%b(ystBuoj3Bkr6OK z6u2e8{j-?{e>g=ZF}g1NA=d;Qk`VAme>X}H*>6mK)KQB^w9XYOB+jzOaRuP*HAo3G zYziJh6D6e8n{Y{?ojxh7w8 zdj!}%za8)mzehu%sV9Nk15#8ey0I%TPqnQ}prSykF1jrb-V`jkqsz~Bx-4)tYP5sc zib7JUV-*HWC)kbz zayXaT{r<<_=C51MPZY42sZ3@P1ks5zWi`oRiV#7Q{O~}Tgxa^wWJTV^1b709_z3t+=Ym_&5rbG$ zX*x)=kQF&IpJv?e730x3Rx5_jqZO+~2-+zYVv+>}Te&7Xrnf+wyJcp6f)h~uPGE)i z3bvA1*Do;tju!nE9UA22HCm)`0*+xGB+pd1q2c!4Rsk<0W(-deGSFFagr^1RxEVvt z@qwI$JU8&*3IV?{2#p9&yOl^4e@It*PY=aXoJp<8$G=)J@BYB=>QnQugMrM`_ z#XEn@zo7JO`RBu*>n);g*`k6sTt%}W8qmm30_p*R1UVuNCcIpMg5#B{HZj)b57((b zS#4f&0VhDkq@Ty`c>!p}iSo#;K*8x=7n(5|Y9keDLYzY^3W9NCvE=m4col!u^;n5X znhwH~ejMc_pI4shRPakenij+Hls|$j=($4aBL*j#kBETcMhPjfXfHJc6(R_0F(|3k z`1W`H^N;e+haYi2N0E)-y9n@1g7}wh6$CQG#opcuB&-Qn(J-F4wB;qR4j)*NHdDn?5K7bk|hm>sAOj$O$Y0!;)yKnWNlo`S?` z+3$jpRJIprv8fn~VOS*!fi1uG5>qe{BNagm2Nx-jDvK=nC$pdk%aUzcj+>g9MZ?g@M7hwMwXBtHxfVgpKax6DoB=}ujPY)? zcFU?heOsc@HBL*|;xvBJfxVHEY(bjN5tLvhG<>8)u#gUirNE2BM=yQAZtiF057(hd zYF$1wmn5c$W|&P$+O>d55#Wj;Y@e{o~a4M zGmSS~jKUm0nfI#@${Ay!O00Vha2e=4Q&zF68q9%lvW|G1msVVpl!%)tHAG-yBoo_J zu%c+|R*N|2Pu&VSkWg5`O-oCZ+n0){?UyB0;Y2XvBeVc88L1-E)B-S;HJNJ8g>ZG~ z@89xA2}n+{8GwY?ub;^%L={0D#>r#_iK+)Pus8Jf?3Xu+9n1QP-WMXa;hfrR67H8>ea~d5uF# zvKFn0-XPi&3E_nYfXiWss)yntOlt=|7ATZ;57QD&wa5zW8Gk%YM%=U#zrdOA5B_iG z@h>Jvfi0I>PofI2nhLcFQt%*m<1|ah1!8R(wzj--0u!%Kx_~|=Mef@o3~srYNl{Dv zoR%1Jvo=#(wIMjBLL9|hSodH!>s?R|Owc7L6qF<@;FoGbMK*U|8Zva55F4(Qqi~^Y zBpMFCttTOb$X;+%FhZe~m{FA6Po->uoeHNAtnoiS9+7Hs>#PFGL5m1jmYmD3i(7wu z``fqQ@i)n?CC2a0705_qj!;)wkc1}|@U+-TF%Xx@@S(ZIAu0vu0>j5gM2UarLQBas ze8d|+KtHFY)~gKrjH=*??G6~~7|2#i18?edD2Y++Gd|;04pRldfz}urPob@l_0St( z7PK7uaZN7YS1dUiu&9Soh3d*jsj>ptbpj6p&@)b0qO1z+^5-|1RlTOkTP(B{QuOk- zKmB)q{2qUa47!Z#R00G~suI==L?TO223ye9^5&QQ2hYVb$T9+>6%~v~YRqECnNTSB z$1w<9-f_!6!T)Xf7>S(s%ecwCA2x!g;EzEYrd;P=Z9{;kqPvjH+o`(-GmXC0mL*t_htX;*B;p4>N>zW>s7ET0Eq*_ zwOlMgQ1(Lt_Tn6eO8xv6ZL@L)-=s{vvAr>bdYX*zc-B03WB~$-O5=kMVMc7E(|ybt zWF45Gm?WbrOf@(~kxc}TkbEnAaa^Co9gw07&J8^AqZ;PygP4tg>7}E@SBe2VnPc{p$O_@yo6} zY8`u{w!Bto9Ie19mop&pI7Kx@agqH@|EKIY4s~h)W3>w7xzlaH6r&fz>2-{WB5P3s z8RKMz3r3h8U}UF;s63*(L}B@CRv5@8z2TDdVc7Ze~Ii6h1(_^M;X_8?$!6d zay`m~D7En@xUxp<+WQNmJJnG$=%@O>GtceUVlAEvQbwuFArok&NgP9GtUwresJ=Nf zK%Bz}#p9aU+IrDH+y4xld^wtnb)$K8^ACudD|J>rfI}j0TSRhjlckcN5-L<7P>GN# ztALj)UiSmD=ujDz0(9popy2D{;Ttd6Dy@7EAFdL#`h~p9SYP?$<+MUga7$(7^_Pf9 z0Y<=v#?dN~gSSOavD?^v`yH?Ot{*1cYNv76*RQ^L@7}Ag!)hMrscv&t7ee(kfaB(1 z0175lnc1yW)QATE%>Ppc+o;8v)^WceG{8qtNUdfkJEh}ml;RKeG36^GoD;H;YaAm< zELJbT>4F=zBqVCtaW$G;UaeUdDbBPhArF7a60uIZk}!l=jpAnIJ7|DeAz(F2u~vH+ z%ZTvFD2=-XhElU-J^%sJt@wE`*Kf{t`BuKpY_(MsCJdo!U3)5m;g)ay z#hDVq?87B;tB`<-03F6^MF3T*R6_LtzalI9tqH{b-#E3p%f+eM0`vce&#pj0jAlas%0os z;AX+ZS>%rGux=t^WRNtYw}fI&hoR(vB0UOB$f~8zww%$$gTN&%B;$xuEWQ&eu%a?b zYG_WBHlX8Tf+YphH$>RORRA^dr7qc3GR5LxB$+b?&_;wrH60WKN0Q#qbMjfar!fP8?VGLD?uTq0QI zM6~ck@{F)dyCnDAMUs{xS{S4)ag?@A*-4FCyG6Bl6IL~PJV57HJvqSu7&n5`oC(M&qqtc6hQBe zw2Y%omyh6vaAV{46t%jC0Sd7MS4%vWBDNA3!Gn}~KcI}LA=)3{u41%gT;^NamiGqe z0;^Y`ExR>XWV#D$5S2LKOeND|Em=yM%{#w; zm8w=c=2oR0q0?8n$R+F+2>HPZzE)k~VQ!aYatCEpB}rw>vi_9?f?>!CnFwpeAA4A8 zE|(1k4-!a$#RFX1HGoMIMNfZ}5E}ndmlI1)rV9`VjzEmj%^w?V0l18}1WHAr1S&i< zv^k(XT#9ATnzfnGP(6Bc@=O#GpoS|oB@-D+7uIMEwwXc%IzgK|po>0BLE2V1x&Rrp!tdS7UZak5@pbdwW%h z{W4fJwqRD3gAIHyok}7yQgs?Ay$)NXa1acdF%E!*KJ<#oTLA(WG1WTCy zy8NeaW5{#LoERZ2ed?MsD}@zQ1WOwtQMD*^1!OfyRG{;#IcTXuZ^SL-NmNFPB`HTq zsb?av|I1%nU<#L_HejiHTe1p!1ZZHbfx|MxIoUVlREc9(t|lo2g|RnWC;?!Un~!1- zp{}*8BRGN77=aoF)f2C@{9ld#QyO>+H3{1603|>eD>*=JojTmW1BDZ3X)OXrm=+@g zXGU96#Ed;)n}5_eERhEkmzYcxl4guoJBkTAFbD!Rshnqmic8UZ(uu)UA~phRw^Ec$ zAv+Oj{*bBDMIU(TPoAX`QJ^7MhQrhtH*~k*=9)TUTv*zK%S^RJBfS-h5F#3L$4mr<3hG5sO9I>nU6Be! zD(O$T20(-98x<{eRIl_bQ^BTFE3fEErYc`aAwe#{kOOUaCJ>had}zwX;^g+_lw^Sx z4-jFe|0oj>R}hWzr#fOf-~qx>dpOfdKQ-!9Osz75stoSUQf)q%8U+$?Mp())!9lJQ zP7|v}1X%@8!jX~FEK!~Y@p-rgcBvFg z9i|C~+r2e1E%Jh=!Y@-1+OrhxbF|VNG0StkYl=9_K ztOb%T0%o=ruE-%Mop#AcgEQE@tDsko5(|nPr1Y!%gmEAy&y*C@C%>hVyDlrH#D+uz z@S`{kh-%Ggk2;uusXA`+_vXXIZ-9ndI4~ffi@#TG3_s-qT4FmN&E-1c+C&$lG*rN_ z*hvu)Lg$Rnh?IRybsD;qPM2XwO#+}5 z$mWA9C0SmbI1~QfOeRw36a}c|*VH8|?6M!uhg*LX(g#7Yz@m(X$Qntn(2r^At(U@- zR7l1HSap)-q*DFqLfDL{msv1pE_k(h%{|ZvPUvnlP2m9mwrD@-CtV>jMeWt*>9xho zu8xRs+5=poULqBNA88MK$|>;?DGNM`Th30dp$foF300SFjkVOft4BVg78TQV@b zJiqcoW!TNJkHr_koN}CkAXr>P2IhzFOv>Vl)&gZwq;YNoF;BNBbnPi>xf83l1lpDXFYc5?gtv&^)KEkW|ALJ$*@oTm%fx zxm+EEnAHgocmxH$DqG0Q!^%aLS^Dy;GcKL6Emuwr$(hW!tuG+paFVs>`-* zqsz8!+kC&CnVs34-HUxL&gJ>VNkp8?jEuh`0XOY4b070|H~vRin8ti zC<};+TzX(SQmM&Hldk6$|HOi%nK%zKGhZ}uqZ+-cnDx%e3VVTdCKTak3J8%>F=|67 zGprUzP*$rTSQk2S6o>FO7R{dk?NCKb#OkkqWqtAs5Jq2khoC5*TgM!`pHcBI0V2mK@ z7MIoP_B@Gscq?xvR!31p32jtLlr6ztFoA2NOq?uHAtfa$6$x+d_pB>aLB#IG4Plz{ zHGY9yY`jy20~zNh4wi&KnVfWpjwP#g6ozvW)}-^M^QceFWY`>J%N-{`;ex@#8)5}t zX5XHxH*7{$THxGbiRi$PglUv2E7Ov??r_pgfUH%QQA0N6&nRm4Lm!)C2QQv>lnlDU zoA#k`fEJQHB;ldYSwxdvrJ=TpP{&|PFD?L0vR*CXA!KRQN*eNt6UO~A5n4(;7WZ%D zmJJDP!6YjT?ZmUt#GRf#9%srfS6o7T76LW`ia_%694=+HiV^}wdO*LJd>i3%Lwo|B zo@msbJu=^Mb)j*@!LAaa;!hC=;M4@X<4Rcfr(}~cJL@lNwfwl+I zm;){sb!CjIKY0w@N_v#NiOaAj&9GAEhQyLm6Wbt%lAMu0u<7RaIi6A~Wm3cr*{kn} z$iyWp1Yx2k#Vf1|yX|p>^T()ZMj@hM?7x>a&OChaocmcE0gu%0p9WXdZMC zh-TW{7YAB>H!x@YqnNmc(paJ@$-s=Mh@(=W`}2*RG6O3}a^xD;H>jEJt$i~}jz(VD zaZ*g(m`7#D#A@)3(nqi2Kw(imu*bhjsK&ZWX*lt_m=9uEWD&R*Je{CpoXFAUF9S?} zlHFK0{6t|Va@&(Omb^3`Of5AqomMBI@JzYY$d_~gHDw!`3qv0`0#=;|D4dX3?C?Yd z9gC1%)CS9bLc@xtRk?kOVPYABYS=K%SfqVshhk|wm0T)ynh7`DnS}Q*!y233*;WMufUJi|hG8Hl&T2zh-qx8q5 zdU5x`h=g6WW<$FF0CCeuC-=4+s|nL`#gvvCM&%Xmza1U>P+ z(A~@p^GM+((wFHmg`l{N38&Pb;s05N+@_xCyk1B&E+f3}o2Wj+b}?v3;b=&y?Sh5~ z8siVNYKIOz)i$ZaI=tTkkLp#*$cK>yjp`c!JjMXDL}tUaYvs7e)xAJA9d5h#tSX8+ zmq7nxYK10|8D(O64?LxLo9?q#n?7ROK%!)*-L>WE?T~Kn(+zR-2|cT;;SY;h@buGI2PEvj`M56D+pQLGp;qgt-h<$6rnVFXi=@ig8yh zz6J@xP|Q~65@v4mMP5JmZ6!zR27?nRG?c602azI9xd~~5PjdT{IIg-lmjUpOoNfVL6`lf`4NiXq1xf-^0Q=Vg01?1yNBm3tzjRK% zzku`rU%>c3ZFg*d#LMFk;rQtbw$B5Rlri064%zGm)rHvvZicLBvO;4cE_fX9HrA7x($zp`({CxX)N z7(m*O!o%(rY&doCLfB z(mq0dZhrvpyU)8F{#*VjfUX~n?|>V|HOhzG3&4F}45kmfdf#7@W{-JVe>?a&4UKiN4b_(x9%I_Oy{=DUHjRRxq>9BWb`Y>BV z6O%MbZ@WvkaUhmg>Az7@r0HNi2ct43 zg{RS2k$3qN!83Vgf#Wtm;HIPS+4Ru?RGMy=Iu?ON%!GQ1l!iTQO5fPSNlt1(*PEJ# z{r_omSyhx1vDl{}6N)IorudK|kY+;+Xm)$Sk&e<@zR3&HNSY|J9#_NF&fE&K_KMYGjVy z#j(a5Obdd<$@QY6po3H@Tbwzb7pT45?9D%J=kxtd1m`M8^Etmp4(c5WS(5y;tGE5%tQfP+ zKBvzhMb>SjdMC&8>}clWKC0hX@JFp@D&H4C_YKL{Yn|{Hj=iLVIFZ>L90MIt*J9%G z7jGsl0>mPVbSn873*NpNZvGSY?2Nu{O{l~JQ`2OhK>6Ob;E{@} zascE!!D+xF&(!0}w=vJRk4sFyW_u>Y<6gLKx1z5>o2S+;*>K_(K%*|YkA1!i1S7W#WAO*a6l$*4_K0N2 ze`lDZWYaT8;K!`+BJcZS*?EFlTy1HgGp$C5j8JDAU>3_3!?bX8F zj~&hNCQ~^2RSCU}PWC}=RV5P1dIU$MAQE!G3o676(t$(zX)H6F_A2|lKwqN7ZA zK4nKS>wMiPllrbD%lpDUXqE?QjcD^Y=PwTUy?h2*F{<%7DqZ=D+vNQNG@Xt3twVE5 zd-Zf|q6Nv2I{QJwPTVQ3zgZ-23Mi8)p{5O1+CuFzklZfj2z$(Ks8?8B>&{MDMP`Ct z>C6dl&q~gh^h)o8OyJN}a5jX-^Nws&}f z`Dc^yW~rs08&)DTU))K$FH!f!>9;+i{GXCQB*}wIQtA_@*JfNqUCL^Mr4mMbLdm89 z>EX!SFH~yZi%DgfE?w%xV2O4r5QkkpScO zDzw@)qHxc|c`Rb~OYfLW^7%L?vf#!d(^ao?oh;1r9pGY*|G=vll{&(1ulV~HDM{I* z-YVi2Ty+}J2*?T1*S-f|eC8cN0_#oKV#Nu?J#;3Y~2oXV{sglF?8k{B`IqE7wWk2I=S+I*0&`~ z&ZD_nazHeBYa}-z>f_(20%-_4_>+>a@V)-x;lDKe;IPaNuSW%~!>eml8UB+=^LV7wo)MZ1iE*WO(92O&EB zxA7Sz>Be=(=O(q~K+CqQY4!6TYFwvwN(SiKS>0E!%LD%?hI8DpqW0 z-zI*c(n9~!+TOkbcNw&Xe>B7L-dYE)+Q{&4JY=rWuFlJ1*6Mdb>&c}-tsc@fJSz7P zNXv$W-cgaOPn~AyvXlSQFGoa#Pme5>FXcw|iY(C~uI+TC*tSB7!z)(bw+TO>(A-!K z6Rm{%fO8Lkbd-33rH|70!qAJG+Do+lNBFu5*_Wu01_gX#gda|aJCS8q|JC90OD1OO@)x90w{C1q~v*IhzR zjA(cePfGkKl-9V?w=HxKw~;?Vw&pj4{UIf5VPBIz)9b@hD#){6((baURv^}S%IM) zaf@dvs>X3QlBT^|>fibRABlf%Y5pBr*0J;jRVyr?c_2Og)KaWYEg$wgwClNC5SxDp zz^rniZdL26O0q1`Hq8fB{6LM`PlhJUBL@y;4rizI6)~PMu<++Sj_|o^W%L2 z^weeTx|nWV1+Pr1Q?J4aCspES$x{2qETld^wx3t3U>XZSYa{GnT0ZNc*4Dqhag37n zr0C~Kk4TC&re~Jt9DL%nA$Vr9oM(1p<~ne=i2junTmJQJHM%2VuYOllsH{5E3In(U zhvD%ay}bMN7+N9Cx?LuAo!Wb83^_ev2nH-jktR|wHxa*cTJgy3kl>tvqr7gRqU89f3YAxIG> za|A%^l)R`w{%{6c?0kJE|Q0}B)tb#Ho_{6D8-(my3(o#*yUPsjBQFCkq9H(g!lU(AYl~p}uBdE@&CCas=+rst{voWf9%u`{EKuz|`LrgKvtz1^gyiG18w}TNIC_;SzVut)!-*~M zWyx*!)v0W@K;Jvb`lEemX7Nmkv>g%YHipk;-lAoSlmd1sw!5}ucX`n6MJMz`C8Q2| zCq@jov?0a>*S~P3rN(rnbm|l-URn&duRs$T^V9C`s)_C~n96B)?6Du3J~v1W27Hy~ z0|^J5);x~ev_*N@2r=Hz9o@^{1ZE7|?J4qap+Z2qotq(%+sVw{JzK4cFjxUnl+YnY z_r79qkkTHCR7PxWhEL|gw&n&38;8^x3DEQ?xuX!1Fe3iL!IXET~wR5$Kh+u%~iVm+e(s87@;1a z<66WnRfW0p_)7OPH|IlX$xOSXnO^(xjB_o9kF!OZFI}5|)9i1Ojl-e1S&RLMy~_^M z5Yji4YMUHqzS+qp5+vIv(11!g z>=*{rzYl{-pIU|?o|oDn^K4E2kcKJ}Mf?u=h{_M1Pv!5((hotSKnt*j$U@qt*i|~W z&<8WDVX3HI!4}e$HpC>wUu0yi=ZTShg>^CZ1}qdt(A?=7Gl)0)aqie}ziqj^t2s!O zP&Fx8^H0_4;F*Loiep-QuRvvhbm{Qgt0p-#iSM7@v$2|dE1&kn`rAS(f(JOa(ft*+ zz?ijm!+JaY7vPwQ))^!nYChj{`sg-K^_5iUqVMe8)axGff&tpJfE((d;uin}SVz_v zii$C$JjhJ>gTq3d;WdzK_Uq8)gaLy3flbECEN&GaB!*hIk#Bg(l#w>hJVE0nk0TbSVUS zGt`lJ4=RcvNRSbkYYcfhU)b*A-Y+6JY=d|p4_>^y{sJIrA$Fso_aVN7Q6l8l@zIq2 z+!p;>r1hmMM_6G2?Cd22=&XSvjs?Dcq;>l6ja*<9PV+J4yKYhigRwF2W!+r*49~0!pBGz740U2*W zJt%W51B+d>XAv^z-6j60Xe=Bi3$|y995_ZzdN|#D#}1gomMnZAy@h~~>$GSKD!2(I zCT11AoW`(_;MGKg6!Yl1Q0=A!ly!oLha=W1TS_%fS-HBgacx63^)}xt?08ct_>5lA zT1*_oT7buBx2es$g#IieJtJf(5{MAa zclNPeSUi1jA;(-DA&HW7S7{jTOMX zEMKWddJHj#CJ%^YdMhBKk}=Gbn0c^Q78K{IPnbCE9tt6hD4WFSs2*7pSgRW44x%B2 z2y{j13_-wJ7_i&6qy3#(G8A|N8NI$JLkvOUe}&Nelr^A3FlbZwrIq$J3l+BVH{~J` zky|n}W1rC%S+vnp&DylqBfn{l5O@)aQD+8`JnUhp_PU^t`0 zYt{n%u*{kKb%pW!rZYH2W^TQjuzMe2fKmM1J{!c_14xPC*%cCIO*y|M?};#W1|xb|Sf&axYfx=;kq9{c3Sk04Xw)lX z9*q#oYjgfVE4`Kv*KDaSBvzV}<@7c&Rz`SU84wC_8tH$Zx)c&)-5!fuB`$%0n~BPf z-t%r>O3s!?OJ#p~T&mk!)2l07b@?ZoIGq-}C3MBPWD%Irgi>T(|LFHEvd*c?_y5Ej zB-9teFTs!kMXRq10b?gN2?^v2AP7d}P6KgU6#IcOenC2^%>4b^ z-=hrjx~2b}8jPpn@AJn9a;Cidpu2U~d|H=>)7ri~f8~Sh`gzFf^XbAGD;l&uX>rqD z983~`t_LJm6jVA+{zxqd=jDOxi11icys|V@N%dTH{|A1`M{$ql=bx1Q)Nv=9cic`V z?iI$l6|}bVHP&FznCy^EY22$@W4#dt3f)M$D6#aabMgUfk~G6UOK3Hppo-1zi%{=i z5H%z2M?5WTFj79I?nj{NEqmk#sg^CdmS}X}yCvU+FWjnF74Wxpf#)-Av z7e=ssj_13>T7(B4UO<|Q@Q<2v@v$ZlGYZo?8rqRpWXc0^HW$2rm|u6ZS9Y$ z;GQXl2;nWG_T_GrY) zz!?^z37k7>wJ1d!Sd8*LL>-eHS8ZA*rG6M<3J%taaHaF-r#tI>BeE z@C?njwfa%bKzwE}heA_e%3dxF?QEDmnRDV39mGcx8nFhQA5i0Q<*n&>{bBWjB3!@N zx@k9GD9LhA^q})fUp?1OD~Bm4XK2UIO=^z|n+ka6r+SMW$m9LF=Q~3{=r7BEhny0z zC;I2HxK39KDgWkCeH2=aY-$Eoo-lxJaM9t_R_#!+$Ng!Hvm3x<5#hEaTy+Vci$iKt zD_i)8zMD$j?dk9WU_HC+JYD%0n?1c8RaK0oJkwnr{?7OyRURu2LNB@$^lB7|MP-Nb zEIbxzpLpSXIcm20+Xrk_h(-OCFTydEwlvKlu%GRv4f?tG*?JDYtXmQ!u1%=%o!tCE za{O;D1lYexw33E1X#5EqRbr&MA73PeFEWskhu-3(ZrlIe{0iknCVeA&ErMbeG9+D^1cEq=B^_mnpt+@a|v15^6tpHkfF zjk!VNJA6x+>x|4GF#LQ33Lf4>>IizPoj+>5-<0N}*$9{;#c`uURxW^{bIHp5yZojL z4!9DoQk$JDhW&_rCDR$e1oLW&1E#uhANmyz-5?Oo_Nf{cUNbD=61rc5Pzs1 zIQa}tuEBa8%7c^0ALh46bYNLN5<@IX8N}0geZX!ok`X`9$yYY~L89tv6P}`*)5ncD zs;fn)-c-&o1bVd~A=s$c%emS9Ds*a4=-OHkJs4W%K zCJkpsNQ4MjebEi4Q9Jexi+m;);}ZU=F-|-JNp3N*c+!(0+;FciMSbZe7Qso)*cv1% z<;Ep8CwtGV{N3QtFQKi#2^$y6iVg&bEZNv%bA@?C9{@$&o1EwL+jdNB5%a*$&Mtis zVJB>>aWWK?Q2l!(RzREqLHbwuleh6s%c;W(H9gSRG|+ga$M)!-&tP2mWqRIhs1Tt^ zA6`wXoiZeJzu*K0Dq~Qc{Sp7=zFF@8vJkndg3V<1>1JurBm&CC+Xtqoa}(teBxZnO z8`F3c(b~`)6KOY-P=<{Un;LSe4{;+WReOzn!197~|Hl{h)|Lh#`IrU;$B!;dg^)3R-f*z*2-m zOcZ<@(Yzo_)+C*fL}m8Udi>aUTVt?TlWAllV7!skLKY{Z>vj2dQ4)lI6?oJR` z*IkrRRm48mco0oJ*{p*gW&Ik8AMBH(6NcH>qM6p$=~nj*|MrOGyJqvTJRUIa0A@ z)SYP-b3vG5f9(vA9Wj4>x-f36<5%*v=zx}@zU91wd<=W8w7S|ju)CocA}uUxD@8r# zrY5s&6Me@!(lVmCM;Fgo;g~@39%Vi+g^BecOVP4s9su5aa;%-E;q2j%^|MSHB0ZPn z)H%&Qtbw9v33wj=ypyNGlWKP(=6^za5>yM zdVxMGXArSiToY1IX>eQ*$^j!hJ>Opk;o5@DbHPF!qJ~F{rRRp@qfO)A{#YjI2W_p@5O(!c7f8o z&Td~;TULuX(AtP1%1@xgLhtYs_KtOzwfAm7O9_n#6zFfbzYVUM{v0_VsABaI2PG$# z?x=B-NU;sfiW<;dkP{MkiPSsbwky-LOk-5P+VNa8sIeq~l_mQ31;z0MDIbE)5i_8^2Ah#&zc%pdxr zM$sofAO}@GfQ=9)M+ph3qyv0so=gJKz>;kCX`_-pY?2ZG-hv6iUBjU z84Ms?pijPnj1U`>;c z8V0WGzZttTHsXBc%zr;oQf2XrZ^2GzNKNp;yzCFN|GWaZ-M>>fa7kRNl^GyYBF*6C zsW7oi5m^h8OVf14EIjXr4f?R)di|@{w)9D=;sVM9hYBij#w+vfy%NHDn#k%9BBtZl z8E0j3u^&8CXvMX1F*;x4qNbnbke!qO!nLU{sV7qO*`bHw=JhJNN(I}a&{{ozHJ<%W zC0c@`&3iDe#G5(VFxZD>hNftT*y;1DEK27wd`hTYUE9#;>B6-Rt9n){Dj;;f?vwYW z-o3LSXAi$O>@R+<&Mhy}?9j!q7kbs+ecKl(V&ZWjTJ?;X zOmM>k9z6xiv$xE>H$3~c?Wxxg&DLU4Cai!_-;>ek=gcU%3`j$9*-6Q(UU)hX5Nv(( zGnD7KsWonBqwH06Q^=WYJ`5owwo0?OyRwW>K#L_Mwq!9eisO~BVW;?fYSO}P;y9(;y~GmVdrBCAjw;TDGlHx-yS2!?lL0fBa0(&RXDF8Ys?` zoj+w5b`DCWL@L>AF>B3atv;S#v?3oHbcaK3Gg&}|Px#N$cwsxc=^DY(58-d1-kgab zIb2^XrvTHG9BK99H&SXL3yoHYR7tAHQpzY5wKI#*h0aO*pfY)x> zUt#oTq(E=32xfcWYZ3gTa0jmKS(0eN=F0SX;}Az%vp(xA@5Bc^V;&3Z5f2|HlE)>4 zVY6qt48*74^^DNXAok4IT2#K~B9nE47E!(^ygf6Nf!YGrf{IUmjcct%y&ztlFMv(% zEh}|elzF6;&+E{6vUOnHY8SIC(FRUMnksGXSJHo)*D*qDGy4x-1|Xw7y}yLOQmppj z6eh&Qp;%fcfDT}fg?nrDjvB!&-C;{e-}DKu64~|s361<2l+jjc+zyWsm(d2X{ccx4 zJv)5_P!d>T?fPsit3mG-V$M8&JsqV3qNj;GNXMA7WIz#%0iM3ARg7PL$NZ*5+VwMP3zHE z&#;}<-bl3InNQ#)dd{;o6RlTeIgN2qWj+J^s55Og?VRIrYk!%jqnQ52Y8ujcZdFx? z(m+?5Z{hc;1rLO5Gfgc+Y5@Wt(4`l@!51dbVE;Zjg|(XbfAv83>|9;wrP`ehilN;~pBg3MhmPzaBS zu!B)D-T#z=+S#Mtr*w)(_IR@=`pCj762M2(&-?ldS}{@D=u$y&Uwj(cRU9`aX{2p* zNZBCmS@tnFaVlGs8$v+O%95cXT|-{Ke31STK7Eau@S?Q-ui=ee_L2yZeMe#UZ&vzG z$y>BxsB(Mm&wE=Bf%Sdqg)J-Q3HQ@7+ov0o32$nk`{!J&D!@1X<1cJd_uc zRrYZZu;jsvijrCnULl2P)^HP$vD&M}+P8 z;;%itPS!j0+?7UUvZ=$bAkE&3l#7a#ZA&_#zb^fx)EDREdyQdvHV{TO(2)i##w<^7 zq(lcmz<5`5UgqA@P4<}_(UeWPl6y*#0(`SU?gwbx$Bd2*HMC)Zh!e4=>4As&vOzS8q)RAXe!CN!tj>1^gItvY;XDo^ytqK&!h+CD9Dz`E3;+AA z>G^E@L(c*?RZCg)Mp55pSkzF&puPO$`9Rn$Nk)`G`@0U&c?ANB540RE@HH1>A2Q3O$&zZk)lqW&&AT6BrTxBA;pNbHOi z(*86Q{dAi=xxM-vEQs@pn>PO&G=0L%D4_K!+M~yuNJI-v>{WK$fUC)G*1R`D(FKITgXOOCSaV;@%{|m?xzdN3n~x~ z`!PtQ$~Zh3<{QB2q0ipY(&ul>iowBRUa3KQT)Mzqjm}J|oER6YF+=fhE5* zYj%64ibaBO1Q$)Vzi0tA4r<);gLsrXL&Mn-ux@wy&c`OWAcpMEMy>TsQFn{F@@fZ1 zQiX-KM#D;BYT@=MMlwE*#62DctE*gNvAx-EIi}d^Dh*#;3l65jwo{Cdor^3W^YTrV zH>4c#UOP1BYv8zV$(bc5n)#ZKzjc@qD#XOu=EFeYG-!}ae5nmm{y6~3+gFVfX-EfD zC3I9^Hu{xwXcaO!Ch`kytFSifejmdSmHYJCxrOP(VQ4Vs-wo zWN(5u)0Am)h1T$W%~WlxhtVZ>8leWyw*nxUnPWl`B$kcmT7AAcOD`K=B7LEx50Fpd zJ<-{Nim*JA<}^v0<4|YV7ZZ-&0Mpza>=?A%zV6=HAusbmdxyI%V_Q;cfKLV(A0;;? zQvAOKK3bfCj5!{r)TxmZ0^UpgNW~#GRt=O|JJN-#*%AT1cJ6z4&oL-lWuFvKukrkq z-_Kk$z@Ey%A~?UoR&k@2LNRXD;piD8`VYd8<}51V5tD=Y0*Y32das?eV)fB_VL!pi z?9)1v-=Aggq@y9@(}PqYqu^f7l|ne}bLi?h+yT#Ih6~%SR?aB?NUOFELC|=ii84z$ z2hQut!nuh*0P~7@FI;kZ1~ld4H8IM2yi}u1Mf3~Df{jeR!$D^EdKc#Y`6^6hP-Dxi z^_d9ETHO1wJ&r7sU9UN@W&2?Ip3UC#G#;*;PtCg*lk5D6^$WvcAG(2ZI?-yt_ zw3}yrxA}Rl0b>KJa6m=SoU~b`oZe+%eHT+QBz1K z4^ZQd4XT0>v|}1*AcU?{TZ9aJsL+v(y|(uaS~cZ>RtFZOZaRUFQn4r>liW}yBjFQ& zE$cU25Sv(vr*rmL!V{cSL*6AM)%#L(2yigk(1yIC3hS1^2qARUo7MEhoRi9i^8qk= zfFSOP>F9oi19p*S9Vwlbnz6nc1N9KWK2_VH8V7X%=2(zvzu{~7nUXD!VXZK_39!}1 zZml11&OlZGn!}FWe67(sm(?H}G-Z5H?Lw#^A=*@>bN3t(5gP&q@gh5MPTMM6*Ac`z zW}ej`3gTDj*2c2`s6a_q%`4nYE$>FJT!$E#&2J6oC1{GkZf4Abi)^JHX(Is1QB$&OxqX8A@d`C9ebR*Iw6`hQt3T4Y5BIGRO%Fj7@2wMC^gtFT(9l zn_Fz0vaiI;&9?1SLo)T|5bVH*z5V%ASvrIh{ZR%s9>DgK1!I`X&LXE&%KPKUuDTqM zdt1Vk7b4R#=c-31tfSiIbF@?hVcoAutZr^GlxBF00|Ijcz0O_FvhS zy|ipWJ^$S^e1%d`d+CBiAVvJ1aS!{xom~17Vg9e#k%3ry2>+*6XRiAD4lWm}TZ^k1 z4pxG1t?Om6lWy>FzGhzuWAG%2k7%5+!m?`Xli>maDqPsaCc}{Sfmxytw~NLgn2S-| z6ljA#Kv$i`F9mcU1(kMhSaF9a<1ZPo=`evRUTJ}QS4l$FPGQnQf21UZLF7c1r8CT( zi;~6oQ=*jK>w76Jh+98Ps|+FeL%7om?EmHPl{!el`%HB^l1tjj1hYDi;f2KwqmTG4 zfQ4=}`5r|>iKBILXT@t0+iu%qZdi;Q<8HG`0qY+Lo%VcpIYu-={mqm|^VWw9JXla; zQE)ALEq;205Pp&x6N=BeT@xbyuJc0j!4ICjU|!s&O#+2eV-f{?Bhc(QySG!^Ou#p; zF6|^yPBiKE)X?-bKUv-(B_b;Ym&T7t6M1}5*OyLCQ2J=<5 zoXOf`(q#s@)*ffQHm9e@3yw=GUZ1zn4o9}H9MLxKD-i+#f#F<^+57EGlu=CY)^5Li z<%2YoeK&nQ>|AvPwycI1z5Qmb047QZO90<>6O_!Q1yA1!J>O^oN-+t^cMZ8`I>Os za^LxGqy=5<-fqFt&go}O$Bb77h5yT$$P^BBLi4hm5`TeZcg}%)f7UN7HL?U!mwBNj z_yPb-Q3o`-gx!{W)in>#rBx~N) zi93(Kk`HJ*FIJV>A|WbE#*xjUUYJM9Ye9dI8v;_Y0#p+c|1kGr0e_fjzI!Q2de?4E zk-%Fakt5J6Fcv{lzZLvctfhXxRzl6rzfkbRAkVA8B8;}xeh;}9t0)Y?_LSYWV2=d- zgi9fva;hZ_3Y{iE_6Fi{Np}lpW4-`Seb(HOig5Hi%?bb!Emps7ka@z z(DYB;fSwo7bdz=ntBVRnZE7v;Y@QyT#67Xn@Vb?F125Ih(TB?j>^yPEmcW^0l|h2A zaV*~jf%rTOQ0_|JT?(aQgXB)+j~go;{BmE_Wx4m=;+w)hMSm!*Zo{uIWkzWTe%mih zE4~xdfp65Hgk}ZjRkqf~GWvn0qBt1!LzR!<41vECUE$bNaFxG;ZBvB}53AR52R}_( zy>kkm`YjKLct2^MwX#j(-s_wNBoZdnJ6sX9;Cq;bcwgit>dE}XUoA+y(tOOFe&@Z| zXsW*MCTkBFcmq+8`=7@Sf7QZIivs;Rd|3gv-^Hh~k1pB!egePn-pVwG#1!9VBaH|HJ4KW(~8$RYP34+{{xpXGb|G5YF@pG4OymyhRd z+BN9>MUw~R--&P>kTL4%4@$0NTElE)mM*iXLjNY;A8tq_{>wNG_r1#kWsCIBkwp$( zSFuB1yD-rva4Y+IyN&SV3iwo7UQoSx)a5kx>fcQeQ%bWl5Ylc{{nVU)*L%gI*EjBl(P>b?ESIi}-8Tv7cxUvpuk)bPvHDa-B zKp3u|A)+((!!>4BTI1K5^~>=&{QTUtM&w@GTu9?Z@_8!M5Y#Fi!k7ztMy?pKp8$LJ z?QqdmD?VGf7fR0H3G&}OT*jeGW%}*cgeVJ;$io~Ah-v+5DNDkC*sf}GW#_?C@F1hd z0{GO_J_YlU)^9 zZFV?{+DU9?<_pfQy{ezbO?D_lbx)lsuEkVNQx_5gw(CfmR=zJFXmbu?0|NKs*!f$h zy0v3{nV4k}EmesB2WJwYdP5<%N~)RUp)G7Y$V-zVbis6+4B5=mm{7X>`Id#Q&F3Pf1 zeIDZ*_N+*76?IXFFU>p7F_(?{`o2@pa@b1sIUEQxjRzN(x7NuRIq_;U@>+D3 z)c3A0hVMC@pi(c0JQJ*dOFadME6MT|&zm^31OYn!;8xlwO{nXDOes;v10ZSW;XPiL2y^voEa(cLui22#YNo}Y-7MQ-iVb5|o5>u4= z2;3rYhT@t-OfZPyf>}Oly~MY~RODnSr>88|`sbiPKsoJoXfTdBMxX0^$8OB_p48Lq zy(xdWudl~M417D~gm|Am!61}7xLlKzqE|2nnob`c=*NCRZH)w4E#me1^%m_HjdRRy zQ`Fnq3G5h9hZp@H05Cw$zt}=*-?D$TrOQ?Sd6EwY?F9U{(`g#N;A;r819%V)#i7Jy&ZMCO3q;~zgQwS$Zh<^tnpbSV=^pjDhM<=P_3e?%4^|YI|x`w`L~y~2r=~b>Dd}2XQi|Hd*ujE{qacp-&o%v z=zX0WAb!->jH1M)0~({U=0_&5?_d6S+3I~wB74pBjJ0%f1#U`Hy`|ggPH~+a^N#w@ zaJSUNyQ-OJs^l$CX4>B!gm=TdL&3yi+RnO5DXd2Uirz445QM^eW4s7*2jiYG5bMyR z1dzSGSRWv2PdGcE%L7z#0fu|%fmMP?-Z^Rgvysw114X4^Z(!6ady#!NE*&J1EqJ0^=3$< zx`h67#*?;V@rL3sv!y*fTZ@#`W*F`CheTd1@bx@6oqeJ?MUPsHPV}kR>Wy8o8jPZ= zC*)(@z^=BB=}G~7UhczD*?Of=x9*T1OgP-1NryoO<16EZ{J;Cp^J&j9CjoqNREfA- zw`wb)qf61h4?PxH*tN#wu&dN@DiI@-5iLku3}TSn9$o)O za4evtQcRLx9LfE3LsUfd1y$TBG(H$ocz|3U*?mgMmaL_r#Bs`7o`6j8G|p*j^HN^= z#1xwnU1&@wZ6NQO(S=;oCIAofk-9gOCxP%%UG8*4t1%s*=jN&omweL}Kg$O=d0{n- z*y2!AkhstcLdkS5Tm)omL<8#nv!vJ-&_h^w{$xTZi!q0s$6_gXyw`r_ye4t02}ji^ z^}&c@6T-go-WQUX4Ps1o&;N=)Y8fh}{2TWYowtlS#)l^|7WQk^j>Eos#ex>z8lLSL zbSh=527(B>TB2ZnSC^1^`B)}C+c58u&9rLW(UqIude6majKBgL1~2jJ$R>n6ne}>_ zEJys0KMw&JXX?J17GyCliH>?r8qH5NNU!XdK!CHIT*t3i0B#9T)5BMkJX`kY7oFAl zjWW8ApF*xRN9T5K5WRg2se7!#x1x=yIHzgJmeC9%w#X~C>K+CYx}HJIa@?OOqg4Al zXU}g*wq33v;9p2KdDt9<^1fz#9JVqlQ86c7hH8X8hOcV(7qw8`>fGuuF)y1v5fW0X z6H{+C1~u2Ow)`$STZZY1Vg%~{#D2I9jBNpDH=|cfVQ&OJ!5YZ`i6xpAFfLpW4%F$NiFP@T`WAd~t1yt>j0XBZRL5X=$&u9Ui}_ zPqxRDi_W=Dwj@)lenkzC%`rk@@664f*Zw-k>C%&c>2Nv|+}6?CanD)kU2WB|dq?-l z`==ThT}7EYEy2_(5TceUL)od0Sd3<_uT34klP6Qi`4*9)x-4&8tZj(1k&OyE08A*zi2Qr;t+Dd-bL$oDIlsCrsry5)v<7Xq!og%Sr{yh*z&$ zEgE~L^)>b0;RPH{SW+7gcY_ObPPp1oxLgbJC?8Kem>qq+u{tgb^vq=~qm(Xw(W}8A z3kNFOfuxjLHMBpYu{4AlJhS6r+-m^@_K7KSe+2|eJ^o$;)94xiC7D9VUb3C3Vcm)h zogk;!0$1-vFcPDCJ`33h=j1-7x1TB{mXGx70TiN5ZL6tLYmAo!*n~~1&D+&5@MyDF z&K4)B2YD7r)E@89KV%c_MVcF#zhxvhDuhRq+#wA60XeS4&oI+m)i@t%B^0xQsT?zz z#@LKYww$4)q=?fP2yeOrT#QK^&vjGBk>O?I$R77iM?uuwMQzP(%&$n0wid| zL&r5aU5u<;y2z@Wec)rE+XsERJdfR}&_|~rpD>(DxgO&1Fdy3TnzCS)L?MsF+3&4u z_?b9<7PCaOCb3%;7(#jew~6omEOOFcIIyKl?FO$%&=K#W7la+D zMr0hB-*1Did*jGkH_)`O=6#-{aM1nD`syX(rTXE^-{jQwsKeLaz+fK?G1Q6-#KT~~ z)?(M zs9e&UrO9N~Y(hU!uQ|j`;s&w|d9DVr)*opWK&)U8H?w5L$^F|@oM&E*H^(UH*?8x(r|V#~G@k!9&@kSgO2e$(iPS?uYkQ2RPI3M{+y6l=$Y zd7V%2>H%0sODYCLm$eWNpG)@6CD0&^By^2g3mE1&0M!d#n(TC;d3l9TXsj1Ol@mIE zr}hMt(U3JD+8VfyQ?U;COKG&)#@G4L2KCYmw}mA-DQD;ikBu{Ghyx8IBsD z)W;smE)E%My% z(LeO*AX_qy{^nZE`)?eti?R0DL~`w)W?XX_q$k(($dJZK66v-TFM zsa(MwSJ_d^BDVjdffZwB+LqHL_`|;ljtvLitAqGdd;f@*GS*h0Cesu-00N|Z0PqD% z(l;L-#QbX&H7`AZX2etsB8N$j-^*|IjvO>VJn4vfIUd>f4y?=$8EcYi@5X21&XB4p@1O-iB#*Mq%E4ak z{nUt8ukz8xU+s3tk6=(z!OZ^B(3W$-@&d$M@?+gN0Ew3i9W~G_r%9}VxBw~pH)R^Z zVjz9EIk+aeuJyZBdzddCc{Iy5Ah<=8q=xPx=M4bZ6#x|)OxwSWAl+Txea}g3ObcI) zs94hpen5Awu#A6Kgo zOiyYb?dmU)6#`hq3GebG_?wY<8n_wY{NyFGiL4t;j+Me6pr&^z#a?Yi4y-RA2}^3K zBjJPO-oAg80tLrP`@FrLR~$7wjBj(8Bj%L5nQ5Z3z|PaiRv>bXX6b&5Qi!;{-eM*W z9o9#!r()kNY~7Wu?TExFj||Graf~SzGDH>I@SDJZO~cI zhhY)KH`*oEf(1oP?V~jEU^s=r(d~>1ncWO988s8r-kIeF-PpwN&L+rZEcVCfe8y}C zqt?TA8S+mnJKy=rX66o$Z$1j(1PeV*z7a+PPuY*EU^<(QTZr#3ALr*c3(N^E9bC8~ zrKF6^MHj~GOX#_e(PcRn){vV;W^$0F`=sACA66}UgAcGljAvj-+<0;z*&Ouzz`zjh z42BFKYB2e=T@b3u0jNaSRY<%b7g{K-W98cjsxHe^#2OzW@TXEQ!WR=s?wr_ME-jMd z^XrIR^qZAOXNlPTrAZs6Dr6)s(v}m5O5l~Y@(g;CIn}#PR66#Jn=+fR)Vq8fHd!sk zqz{^Wyu$gREqe%Y8>v6kmCY|XBefcfg~`Sgi?HOt?(m4vIKzcYd91!}tM{gnTb*Pr zbpNO+3ywl#uS(7j6B1P`p1O1ZKWXIqC^F+X$ z*4D$J-yjvzd&=E7SB)6~z8a(x6S?*Pullf)g8+HpO3LVlwI4ZSYuPsX42Vh8gr}Q8 zctXfXzs9$z82B8moD$8Xm2Ck4J8fF?;uXkm8J?&pcCPtl?paoMvm?Z|dYlXjlHJ2Rr8Gz(zV;PP+ob zKy4ZxDF(;#!c$V=8FcFG7nki=vKkP<^efl`(SHXo5Q+F3VPaxt{Bui}r=fPC)8iT{ zI`$@PM)wJEnd9ra=2sn$ld^Cbhpmw*;*ZoUqmDU7k&EYL7i@|G&bFs%w;l(Bsr2fM zSUzt!v#DlO>E%~?9^;}cv+NlnV{1V5;~?h1Fp3zdNB`%Fp6v@|uS0)s3vc!Ir()XW z0Nf9k<)@sk&|rQ3!=%o^?}02|03vo0#xCJp#I?CuPw(gt^%>@h8`vlC+4n~rbihXB zMaX+6*9O@Kv&3(>r#v>2SLY8nb151G9?w62$z7sPZJOXjtae8JN``z*?bm+GBWUU% z8AT0nV^Rjsp7#n=R&g|1f`#0Isx8qw1q&WP7ctV;fI2}sYO#+|9R!W2y?gBiSuB$$ z&2~$`4>ofAS`*bqB~avXLy?9m8i3vI=Rx?7O;meAg(c=?C(v`QEtm^NQ5iivi(suf zycLE*F-Hq39>k-qgtSsA4iqU!25ItRTy4`av?Tiar^R z1Z`{`0T1@AN6T)qAYOfS5`DC3ydYwj?9Ha^#loPZgW1b-0skS4zUkY2oz z%nF-LGalIVJ2`o`!!9^w{Q%nLCUAe@3&5Ev?L4=KpKqalFF2;fLhzY)G?5L-}bEt7nUj>K4N0nqQ%m$EPD>j`(H>sZ3#WoX&yY%m=YK+Kzl}5 zdTQZl@M{11v~~34X7%oO8Hkm3n1#j!t$QrnkVWrzZSV5v zkoaNU?qZ=Nd9DF%H^YbOFh;qkROL;<%}D)&!<1kyv_>WaUi4qOAQJ7WUd<64{9<|U zvYx4~vBr(lD)fD}No4tM`uZ6Hw{?nCx+ER;7o#H!&W^gc@LoBk=e$=+r~Dwam1Hdy zf@O*h7{~~~MMV}uw%0=k*Yp0Fwq|$S7=BW) zUU2f8Xm4Fw40WiW*4?ZlKQwy?Q&$-Tes+8W z>RZc>BWB89X-X#L3y+%#9b%~x+T9Xt;|vrH_C&4h%Ms*w>kLW?>W`|?zz{N0e-nK~ z$`fKZiF6@$Bzlp8T6Wq3UT_`xv(O{}cvlN&df&#_L^t7G5c@o7ToNizFb5W91Z zGK}`i{#)&j<}njKr`|5?X8!pGLI0V%ml^1U@yc2HHQ5|Sb9*yzUTHE@juJZr=V0Gt z(E(h*6+3QT52T=DY08Il~b|CYvc=N z6cr`LlxX7kl<*+Zw z6+}9QV<#W|T&KDoAp(&x4S2JhkUZRT-Yg~-$}HGA78%&Y^|K8tF8uu} z_-?yhU*i&&wWyL`-2(NR4{#%Nn4&5T!{%obN1X*5=`cEDQ-8hNcKK*u zgbTz#5%LqEnE)obn`O!H0kuJxviwEPU`xMHrFS4vW_L65g;JJ`GvQjdCBp7hn>6%p z;T?#5V+nw}W&BI5pBY!mdUvCmT?RHrq@#| zq!KFY_hr$UK4)PcQ%PVA$uu_&M$D~??Cpl=b;KSs?wr$23`B2&yge_&wR*g?o%-AJ zEn^?0R^bM<(NQ)r6U&J{aF@!S8>y;$uK7w0D+G>IeY6d9l02}>pJLuL@&%jFOdQu+-Z~@Y8a&1T&ToI?5Qlt*OB2c8T^Qnf@o8s zrCnN4Q-;Re7SC5pijb#;-S0DmrD0=5QpYjmzsMbkAn)tzfA2NJuq1jZoOAJ7dEydS zO}n^5f?Hq*w#(y80Wq+fW~5JJrue31@oca-#fE@`ezYcYh^;t~Ct4FxS7-LY{?f!07rvUc%!`6g z24O>MJh(U{de%Z63HQVzFfHUFCsS9!axY(^5bW9@5|cz13GfqF8VI1|Jap`#fnsAA*k~~Wy%r%Iz4b~#3XAOT(45dn9$W*?5d* zzNrbD1s+?N69O^<;eXqgDU5~Gl)0Z<^5!z`j>3MXF?CFG;&TvDzE~8nNmLVEj;ivH z@@AJmyH^p zkD+%cyw+FN6GKM$2XnhSzLgKiat+j*ul%7Tw0kGmGTY*Ia1c>NHnA&oW?qMc&^!6ENwQk^4}ue&?g3}yR<`0yp~ zky%EdEfqbeXqX;&1cULplWSZEVjsoUAfBt2ok$kj@c%&}bfNgE0w)8^ZZNtI%|p1z z74}xOOsNTDaV3IrR%x=rk(+J^?fHP2Y4upevkzrDkMN0)iAoFAxGrFIik5AUL_u+! zLZ}FpdXRP+a8?eXU|zkylrnlm6cklRGQOSE0{*iu{CF&?AYe<@>mREMs$dH(eI;jSEzJ|NO`z*b#cVoP18kR%wEmBed0-*dl3;d|mq zEa2M#yf;Uab_B3>sDG)ISgoO~C33tTJhw`Sd^RNE^1j{ln3g*K{$KVcm{*o6>pW)5 z>O&2H%2514Z@sPrzSW}bUljpA%0@BIRmc-MTD`bY?CRZ5Y~M@wxZwW zA?P#ezb5`TWv*;|Q#0&HrSNNnF=Os!d8-VL;J|3aA*bM>^qz?Am9Dj7VA;1 z{g&dLQHzpVJ|wrzX!pOj9;RTLU-8kT(<|&`DnePl(wT{~xai`}%}F5;=2T)R7BDex zQm#o-tWi?{1FH~cS!;yO+1bW`&X-7U5RqYfu;8~R_e1!Sg^-#%g-VT;J=+FCM@W0zQc$u6+1$r5qxX2DrC^*-WILCh}>EE=|vvsS^{G*SaV2*H*PG621M#oKNIN7Nm25GBCKf*9Wh zcb@UQs@9KLFFvpd z#3XG%gBH+vQkFi5uI%2gXet;oQ3P!ypQ^`C4)-;XFUMwtJ9^dlUQQpRoAD7t3%Gcb zVJu)AyNKgFstyYBD#mi~?_kS=A&GXVfElX#pVz$>EUNicfNb@X3>~^JZzvpHE`bEy zM}|iHB7#h8dyA{{Vht)T-z2MU>-h{Lu1!F#%PlSQ`hZp7H=PW#`L~sov7vclWO8Ha(=`EgYepSEpXb{QFtg9o4)%y zGOk#6K9mr+?S>1Q2H>oO_J`r_KMA4W=f1}1a4fbYY1*~chJDOh(?m@TabHHw*@5k~ zw-fJpKTGnPcLP{6=0#F#WoEqsLg)|pfP)inq=&xg+M*^YBeL5W%lA%CY`11c;siHK zK^#?BB=CJCXL^>5ge5yEa!I-0{nB=v6ogH2?>3;5@RYN5F@cBBBKZr$Dhw@enVNYX zNJ|(DhIV5Ubh@;xsi14&IbEtJ8&>9YMrW4-XN;g1_UOOC^26mOQI{1}R#CYzV#c&L z=@S|x2tlZ04*(yo4S3QCDCEi$*7U!C@0JR+vzR`zW+u$<`h+5R%=s8nMmxm#=wwT#opjd9rN=Sq$gv=z)! z=D2*``hbrNFFJqV#BDp3f&as$zgk)J14@nn4N{`S0~jZl#md(ca3N2;wHEvuA}|yb z2BvOnTds+COf>S&O~3jU9YHNT?XuG|zuu8P+Df>&XqOnzA+kz<*yIOj;FPm~(8N$fh1|2)B4? zej#H_bXdT*`lQpgiqOr)2wgOS&2GFjZ(&ifOw=Xah%RWU?sEZt_S32Sci%0FeLyK?pp zoioI8F&_XIdbi9cf%h%9vDpk^4PK)+Wn>L5cIEp>AY!55#px7q#Vf|${1Pl4*x(ye z;S{z;g?t$!>DGJ>RVMw3n+rENE*FlRlDhe-2q!ZQ_k-){^&0?i147fI)HB;;J@uTY zvGMK3<$6#KHWUJ9H;qN3NvQ@q>=T*(_g(sUwrUU0sl&7XldsQZY4@41m!12^k*sSB zu-v>=?dF#^Ct*l8NSPC4o4$+%n}zKxD3Rxq*9?gJ ziiAkHG&d5DyS&TS2p-vM{a&@N9mA(yeo-FhRs1I&+PQPaO7muwgp0+lCl{^4_1pje z0Ww;yyG?b}N(Is&nPi*j}+w0vn8O@Dr_` z23-OLmpCZ8cVG%x=CJUCK+t#6le)KM>Sc9=ayr!q47T4tAOcz-a^D$bh1futqhEJG z^+%+5X6LvL6-g<)q$mX+3bT~%_bABX6BR(*+-VTT=flmJ3=<>5homv5rq5XjS{0Zp zRgE?61Tnn&^GiM*wya&2@50iEQV%3RM`NBqVnw$NT;KnSeGV{KF9pgSE2nO>l0)hq z9tv}#B$g}KGvT6(;wQ9FhIaf05vu#sanUvF`VkZiah16z>+N!^uN; zyWMyfj6F*R9%fae0{Qqkn8P9q7?RM=G}|5a2g$0%j6*fgGFgH|RYdBsozK3nwg%(s z`R<5@VrmA2NRUV(p$EIsfQlhOb$t}CDy}7@G6Dbq01BSeKpR>$g@P4R7{)FKFO=_E zgd2l*oH%@zYWRGBUsk`gnEhm-q07z}65I;O75{}}Uff<4F;NgLl4^A~YG)LVRhz#n zHk+$xIv7Q=6?2d^%{`S>4Uxe@MB&My zeCJ~jnz`XEB0z_x%5hQ+8MA8qfukYmYC{h#+U);V|snJOa7usNplT!F$qJUQR6gMdYzY2T~i-42%~`NmYcJ7-pYZ1*c1f<6QT z)#u!mCV?Z+kg|#HDGq0!6XMMPfNqgQH#hAR_?$6+Y1X9ki)28HuM7RO&;9-L5wSgR zXJKA2X`J?q8mVOvje`;i482XD^U9~HtukL>9^hUmc**j;g!*~jzp<_8DXE&usxIFn z4Wn$q!|LJ(wB?*{Q^3K9*NGF!*Go zVzA~9Wn|5N+xY+mBLDy#rq?yn7;Tv_+DomXI1#zO5w|)6Q4?6!X<>Nh3J^vXtEqR36B^ z3lj4x#Fxa8@b{e>{X~s@5;_($qr^o2_Jy(=p5{F78$@DH*aaaBpHwB&=qvKCgp4`QkF z)Fj%mJ%!?&VDd-Tn?6*=Cpf?AsI*G)SaaKC(wcakYq|Zx2}i zZ|tAndIJ2ns5EpVA3bH6NY%&)7P$Lu{V1jcJ(s8c&o;bHe%n{nm8`(a#pEZKzIY?C zi*0lZc_l~ul&t+3@XR#Q_1IXmb^@PV2i@>z@iOcgHY#b4g<8it4)e(uN zj#N+*8AqK=5?A_cH%2RcWsFi%Ee5!j;LHjp#j!flG=9Cgf31G1X0a?m_96Yw8}q3| zu4HRzS$MYYrV9Ufq9c!;VE+Y)w1dXHG`(SD`Y^r0dCp`d9t89N00000Sb-I;TF=Q7K zqA1O$mYK~HUYY+y-g@>~Ynw8DWUiet#q?cp$0>WdKZ`2h@uxenz33N7Z~jAe0X$RG zU1RyASlG(MmB8HLmCrJC0Hv${Hf1moj z4;ME-!&-L6kFcFnh|!!elP3y7f|p!F>_cnGE)0)QGt!Pn;+xAP$~`qK1Am0VliBCC zjZf9Mn2gFu8%FL!?Js6nH2ad(K?d^PmBk8E5R~ElyrX~eJG6iyN&o;go-5j8M*+7E z1L9eH8g!yEuOV)ytlNB;Q_wH=+WVFrS04k1CzTzk$=JbAxbp{6GfBZAj-u%Z>Pd&A zIgQU13oTkNX$trZZRV&cZ;CRvEeyR_(Q#bU^1rw-7namzkcnH9x1|w&o|Ud|p}AY9 zQMG}2*Z6yN{+uTU7t`UUJhNVE?rtYJnfafq$^J|3eggee1B^yI6TdyKH(K`8<&-2J zIx+`3iOo$ujGgl|yZYfwn7c37H9>B4MNSN^hNoK9=GPXVtG8RA(X;flItNjFp`o{9 zAb)4prRnP$51ziM#NXc^R$i*$9}?!4N40x(c{@CMutH@TMT7e( zZoWG{p(d0|TxC(n=4u$aK)*UM^~XebcU*Ibvb)Lt;Sz(sXP|~FerVQ_~@W5Cf2cQQ`P1I87 z!h!LiIXSsppdt>a=L><|qN?J|&QG)My4ZjF$<9Exxa3>i1}5QKvumiosYHhR9BMzyJV-S4~4N z7@K4Pwa(YqZW79~Y$B_&M7Ey)4ZcxWzta(u4`AqB^`zXomShrIfyt_M!KTd)`CXNc zvFlzVrbkrFwt3?+ij{hAE)j%0V1K&Q3j>3c42Yy90Iad=v@^s4dsKiBbxn^+JwUZ- z8K5&$Qp}RYt>T}z6?m$(885;&e3fpZJhUtjx3?u7gX40uBds)mea~IssGeiX?$Mw^ z-!|RxXcC>!pZjhhocw7DfWAM45?7|gjO7#jbEg>TQ$gUNS&c@67}PPKV`P0~vt@RE zhd>Ro|E=D`uIXM8uW}g>D=X*HcZS1CV@J?vSzfJJ#toi`Q-@fm6|H&fD`!21Y%3#+ zbht$tbCm-4b48c3_IFg_@B{QaM?DCoejolczZ?u;*T9c#XpX;@^pg2=bp6M9ML@tI z1kZ4PNeO<^p}uM^=XF3b@2_rMUb$GJR&~^Fbe+1WN8!Aqe8H1#+Q0{2syk7WOf!$@ z6t(Zm;CgtSOI=X)NDPI^RSuYhR&-q51RVKk^iIY9;q@;6s)LM{N_^y3qAHBx>zqLfYVWM1fZLUr7^S9pq1~_d<~QiyfJg822L*U5 zNMd^2$JJ1jM-dXC+?5o-01w9u2tAMdVgO@q!*VO;?)aH|OMK?q$|)(&gN1oAX6{JL zrZ*&$>i_xCrc-X>OQg^xwo-p_a^h#evf<=;wYLh$kSUADh!$NvDG}B? zqdM~K9PYsX23k!*1Dm;_b!Q^MV;w91Xxqe7)^<}#)ZACy^BCzDU017zWKhH1HSn$K zMnpVXcJe-Z5^4c{krUs%kg`K^FLP(dF^m`c<_+=?XFR0kUa!K6fcdky2`V`^f2l2D z+OlhN*w$>#BKt%Ma1iiRNrf_bx7RK)B zJ_z4m=jX^|jx-YV1csNXIrCDu@n_4mYIQC8>e{crfmviIN)?aD5P%qSw8nY`|EL_2 zR?E86~}o(6jh$2&gI1w6-xCF&i??5%gc_um=+?IpKP|}_?)db@EiA=p5mv(0Uk#} z8{S^8N39hEAo5>zs{$%isOWRkA>?ivr$_0yAwAwgz~}kSiG-q%DY#9E+HZ!_e;aRA zF(rb$#*c6k??buB!EuU2;*hMd&OfS_IwRKn&WiM&Ti(sY*dZ}f3k8RDRYWvrhkx-U z3kbUEuR(ZccXvhJ{3ZIaZGV$2wnn;NsCYDGO@eh~Rh3l&M6&*;Da2<4l)~rs{0C{& z2qP9Txvfy%a11(0kcXkB1YAc0`7V*5ct$&0PxgRbMq-{Bq;i*p4ONnI$c;k|dIW&AxZe!9*XV{x>)d&`@YIs9se7GpE`+Gm%p&#(YWBcEgmuafyv ziL~Q5CWStY1lp^@XKJuWWK{O5p|StX`>sZ(z&995z~F?__GF5#4Nr=_Fg|Ui6*qeG+8ROdPG{ST ztoiO56;OWD3DihAiwTWEfR{HAJ-EzdbDUakr=x#lwd#fdIIHhbSHCNB(n|zstuyTU zxpjns46uvl7By?2O{vJ5SJMJ0=0P@X?J2GIj$*9jol~xB897M zMmMcb{o^uqe83gu`3mj7ZecS}Ss{*?%~leD2L?uBXojlmKOwmdjI5Df+>ywEUu+!X zpPGm(>w@e#pmOnlYHjv)2zxpJEBnkrcY_3u9L#7EV|PqWkaxZl&PBPQz+X6qCscOO z0>+m*r=oTRSf9KYX+Vh|Z|>kv_F-aboS;IpdVa)LBD(%M-`2j9m&xLe+(R!vKK6#r zt7gB*m8UH!WTQKN|3$A>&NT+NO%*4jT|4t<4Rhbe}oY{yOB^dpJ7 z%EyZ7QVi@#K=e8(TNsm_#t-OdUTIXB25oFPXyxF9dt~oGm%b;vbD+PtB4{c7HolZx z>Yb#>t0|b!0=pdFz7`kNE!h6F7$)BJ6NBBDadXzyKA+?A%ExS>3MSAS)bH2#u+*`b%N>fyID#>cCuZfUW@`aUaXi(YIX z^SM9{m;d7tng67wOfNmPM0Z~R2&>KMIU3D{FbHGbH=m#+t`Q`=LjJ#VB=FloH&gkh z=5->W4HInyWMBX!dHQ4# z6kp=|_JpaxiWMW$YGCL3-cR%(aJ-Ktxie!>SZ-?L&(^d|BS%3-qf*-qa)QzWVd7Bn}R}0Uo1sZQ{8#^d9^PB|KAUCS3^ArZiI(_@r-i6&75^8ghb~fdx zTm1|wo|W|SHl`$0xMuw9NILKYBbU%FefQIywm~qzbd(;l;6oeM)pBov_KSJ9oomk} zs(OdXeuszehacPhqgrlr$?(#+Nv#obFT%|8p}s{oFjw*%gW|>HbHsv%yCcWRd=Q;t z2!jj@zGbLPC@?Hlp3Mv3XG>FK&N#gUaklGFz>P1A90+>R(Q4vhBQ1>`+*p>w7$6Mk zRH`&wKt?;hvD>z%-MkWP!ed{47G$fkak8+e$p~z10jL45Mg(n4qacx;0VWFHKFbXS zSSd=TtCTbsRl~3dpom8oS*mIoE~K>&_s_`+_=K#X)lGQorG z{5h~60u`WHU$p$~^G#b+C?=z-3s#Z}na$*C9OiW+G~w5w>r#y~Z@jv1|}UC}4tV#FL<4qBf9E<#=<0QkV?>5i;XH=tDij`{q##IniXb z>zBNK{ohdeB^Qbi?A$LQLw1Z(X%a_18JuQ|H!=GU2g|t*pb&)|9}t{TF?}Ljxwtn; zqXx1Y>&qP-?ygtn=U0U#AT`ZsiCRqrw^T;2Hg!FiXEEZ$>uhh`szor6m-|&glhA?= zWEOiwuL*nxMu%Y5Vessk`#d$jGBqSSP~`A7pB}k1-_m1m$3BuMs5>&R-ija%u4yu{ z61)Y9I@^M|c(HOUVOyIg0D`VmlcctQ2O4v_VVM}X3X)@HCK&k-Y-l@|uy*4fLZ+8< z79)29(~^?`dz?VmCIy>n^7KUcfd-@vknd3Q(x8((%SV(0>||J^I{hQW5!E!1y%icz z9?V3~F$5k!hbTXShR%YbpMIDY+zBeue1QP$o3DB|1P(T-nqS2yOX)WWcqp}_7L5M4 zm#J#a_&|qIWn1SQ|HUE3ppyC}f<=J16y*MA=jPli+;Xqhj&S}bWp~Jz^vDMiHlML} zAlARjLJv4-B1RB6B*H3ZytT`7|_tMlPuM#x#XmyPbgEpZIWPA%TV0T)zSmd z4CU(fp)IwI90&RG)s-I(JT*cZ;Q79M?Ixr1yyNC-g8~+(K5TyK)%L%9U2@m!T>A8`sh8J`)IEqUp~$5b)$6mfMB?heuLT#+R8WB zUY#+jcPD*oY_ww+3X;JQ2)5r0O_IXb!Nzm}8W5Q1;YsV40Zo(21c+3gK?Ra%rg1=; z1Gw9+_yB={Oo8E<@#__?Ef`?tnT4$U5X09p3xm|bt03CK_wB|q_SE0JrXHYT?2pw< zLjXMjTUY#f3rIw<$!m*ifJC0n1rE$`nj;hg#_=;|f& z{KhcK1mkfgn<9uP;O-w-lp|qx9fH`X%83AwB^48Zk(6);VQfCVyf9RJnjz5#!bano z*x=@4qnVfUM~zC9PE+Wu>ocbay+WIoqiUNY+~AsIl4!VS2@<2P3_u3se_)=ZC;3KJfzl^JAHWq~Elr&CCjyuYME6jA>&3$>a0qkj7 z{PmG+i%kWStYfaEk_G*~LwOp5q2~F2!V3y>dFRk45QcPRB4w679&J|?0p(|mk==*x zdiSQX&llx0M7cX{G5SJ{kZ<*E;w|*gWOIAA!69~zWv_bek!)dzqEV~2SqKomGM=#k~SqAvItva((!osb=b80R2SQ@9p&{EH~pl zu9crgKw$&>NYsxmM;(>v!oN{uP#-1QMDm$4bvs03mRC0aUmP2eG5gM38u20Cw*bpu zFUp4>UFG)TENms1J-U*)X5xWgbN6h)gU!r>G{NlRH!V4xS~F&3+R zM{=J%ym^2+RdwLYhO@g3u|8D?Mb7PfC+2Evs#%{fm`0>U!{vXrt`uZ4Vky$#5{y~W z5iXb&>(>tV0SnfB&-EAL^TxEbd<$efKQt+cAQct|FgewjhdDAQUHU}NddtzR7@zZ9V;Vngg>OVz`?+@y3qPSMIK zCg(wEIzxvjQ;9k@o1055)6qld>^ahMy&ih9iT2KvI3rWn?HDk0G1WD_wUj^_gWf3Fgd;DeXCGLo_^S=)vcU=@|cs(N~I`w!rO!91X7PU=&Dna7@ zt7<8|EIM%W&@OT#K?b*h774T6%qH>UgE8((Jfk140?$Q@_IA3*P@&ls4k65F z3<_^cg*D|Hf~iUB&O>8tz5&KQIl=U~H|z;eF6a$3GdpVCwl1Ae$S^#{Wk!ZcAm_;z zF`HgIW}t7Tmy-5SXbgFCwGUnTDoxG$Z%?38x$W@A8K1n zV^joKzpSSP_HlUsbIdP;IR-=vbDh33gI&XPiWo*|f%VLgCpr)SyMVstjr{V~`}klN zv|18oGlT-L?0EVAP%Ap{5vz%OMR%a16)y5HrboKQi=;U08TH1{M`AA(h&;&$1M}M3 z1=|W8okAG5#=p3}bpjzD@aeI|uW|mixy2pXwBk1ipD3^j-{@@dDJ0@+*vXD^Gx?E# zcq;b$J$zQr5S%fxp`kr!YT8CULNBu4N?z9EoL|qYTNzyW#4%Fb)3`fBRN9g(WSTXz z>UdjRAtyqL8=2S3fQ>qog@`-HclW=n<<;Q%!lU4lwZegX~n; zA&TZ+e3{4eq}V#nQd7XuKjKSw3ENsDK9nox1KTJQ`;(kgjqO&%ekAN1a*_yGUE~(0 z)JD0wj;2G_L17Svedn84DKxKR60dd(bW`^EsV7~-3jq#Gl!eEyQE#E&$!zuu49mj? zJ&czXV$)CKE7&c^!4<`_)y;nw8c;90IcSgmgXQ&9fih#IODjZX8F&57oqKb)Rugiv zu?ch8BCy@_J1nw!?r0Q)uEm+TNZiFb;)|@xt&Pu1XmSi^m-a?U zL+25jVY;QG+;Zg)m})_>Godg>og)xOY{kFJ-&N4J@xd5!4zr% z+ukqKzATUXCh@a_N80UoQR7P%U{c*=wL`)FTRh+;_jj?~#`6h3l8JwhW^*ahxq`Ex zyWVuSJn`glY%3vA(c(WxG~fo>Q`}CQA}|or0hbyHs5tKU4@iU;RhcM&B`Z4{xFs

z=3s|R%8U-&=dcg_ky?f4Emx>n`Yzx2BHQtJQyfE^l??hSYkMbszI z`jwygG{e28q;xIqW>Qw&!gld`ZN1yo`UHko;Di6u5lps`IdSZ2)99FZeKHK6=~1u1$L zT%jc()u|NDZ)NYI!jjRELL%>}Y05TGfJ6%D3~I0)mR%1xwDIN^ulIi?t=6xC9(y3J z7}5wDjE2bHK6GF=jl{h8u#s^3g52saqP}beBk-5mj@lIMbbVD|&iqEw#C63ARLEA5 zI(AVvDRF8{FdHfR9drt7UzBAJq?Hh$0#>L1iLPIaAK-ZA)|>|I#@16z+lEp_l(%O@ z4qU81WjgItx>8sjcr(B@NqT*qc7VS~^ueaaz9EAspS4KCB3^ROe zm)4DeV&A?5M>VtO`$?IWhXniwvQ#JnnhZgVvjGRQ-p z@<<28Q4WrMc>$zVq8{;6QuKtHrdRU9&~YR#`eO zfXH5i=AmZec09IZ9d%AsIPOen7G&M7^6Xw-Cln^hW3+KK`PUx+G$sK&Ho4-vj3#I4 z?|3tlUG@!qCQ{KN+5suubZrE9AL%s!1sI-;j9Fca<u>cnyTBB%pD4E66K7iA2qyCTt}#Ir``I9|cuQ-*J*~z|`U{8;8O1fX`S>n0hgo zO6f9U#WgY~+v}S@FO*f0B>3Zq=s*sF z16gYBb)CVY&}>OmG=1{$U;6L_ii;@u$uzc^~L_HAW1Y0sgJu`^9J^_aF!r!toYvH~Vo+dm6hcP;oV zHiw~V*gx)f7f>pnZP`0^LU?s0pnlA2CPgs%Q6_{)rVXSd3(WZ3VBX)f^l}jPhQJQL zT()fdRLb_zF7FbN_29W&r21%fr#p;|qz)p?xLTig-_BLvdTYm@24_yI<)x1yJ&k-Z z;jb14rLYUW-w4Mj-ztsGE#3}ChHGYZESThn9b(4tBbn+wo8s{vL%=daa-XtO7fLwl zeYugwt*n>uZ{(AY3@dj%vVb4ARgBy?1Yw=v70_djbZDsuZ);Vxf9xL95;YwpL4W2R zbF#_bK>QT%F!zHKplHY+t~ss5^~tI9DdD~2)^8xT3tY3=x5|4gP!8-m_1#|_jxRc+ z$MzH|w%`noMh(aNcY`{(4R<=RVDnJTt8dAgw2egsMic>vZ^7m*(sd3G1n>eXCDNhp z9>W^BH2HzQd%)>kc;@jTAJGI0f^dqtm_d-cZkAYHAq$vdG}=;#w2Sgl%7S3TD@Ud{ zIH-VULjwfz8_`JOOIAckP^Qb-6-ygrpA z+_(@lk%UZP>l7TElX6baqz*baLhQVC`D6p_haweCcT#!|W4Pj;&^a(};PxOI!J^hf zpCex?bJf4Ddjd7PNsFRGN+$+@?WL{GFApN6nh}_Z?jm2VNPGHIw-9DF;a$;IXV&~I zN-;uKmq)C!1!kh{K3rmT?5CE`r4OlV=5$<(n4y)p+dnGfvn`n@9Sy8VZc? zA5v=V@ys0Q81eu_%Ez)@h0j_q{gp;&Qdb?mW8}{MlyTD!gNuzP)FpZ?nGr;rpCZXPG_)aqV z4Pj@G|8W^JMN=ShFr~6hIE`B)bT}OeSLqs%t67Vp;hlOBOJhbe?oZ)2pUQ;)90bDQHvz>H zim>2Z#;14Q-MuqM#_Vql2@4Aor%C`-9%;yA0N~K;hSDwWNS0HO6;VTD=_GFY0)vXJ z^6nB0W_zg0eg~#@a?b(p#MP12+U9=WkHDou7J#OPc)mm}6r(K~8F>Ti=t_msXwDbfco3{IOYEA8 zS`M13y$!;o+u{atkM0s<9x*9z`!POJt>o%*9Q*)GbQOtZct#=i=jlpJlHvPBW5PDP z-O{if)^da_wqQoqV&1w&dRdyVcae};nV_g9+S2Q8GPb|037qN*V(ewY9v6a2Smb`w zQ<|g2B-g>2zRB7eM12o!Ebau!+3RyWr4oOr;8Wni87rXaEsIiLZMqnC1LFGk+zJ33(E$#NagBv8+BVQ3_}ycAF_KMwEEsa- z{IGFEbTnQ%S#U3f=+%z<_HVd;rkH$(+kXb7H*xC-F&n@;?v-fcsz2m;KJ>lT0}*|T zCZm`-wa78|C&7RX=A15l93oI=A}n&#ds>{Zu5Q5+P7*X76@{tVCA|Z88UaA6{p10o z<^OXgqz&?k)Z<7E<0tPFgouf(Fzn5_sMY_QfI)?!I?L{y9j@dTRI%RbOrD|vxpM~r ze$A!7q#5zqFDzu{%>@(t7$;8aF?d3mU_PQRE8NgsxcOq#j9sY2xefQ=Lc@b@Rz@n} zT~;Nwj*aWi9qNV1wpu(iB)Jj)Kw=L;puI$y*!O(+1;$Wgi|B9s0w882zJ_3vGA|k> z8BYhU(`gs^m<^RB??5JtfCn|RuPg`72j=IF-t{!C&M${{*Bck|zs1-f-b2Ke?o>i9 zowMOb&4N2rR9l*JLKnl%3bE52@S>G2izYb^OP`7r*_YPf+iD%-=M+;|ey+*`%4VOQ zGTfhL2JpM^0peC}BHD6KuPrF94F7YXefy912x(9@bojU zauzUnR!%`QNkiGVO-@|VO<~h!b7EC3Jiew=Gki-(TDjxZ*ED8L`nRx6clt>%`Ezse z30*AqgO8XS{1gTBdFdJOS`(f7%f0a&>AflnohWwlRWZi0?jXB+RQ6}m8Uy)VhHHz$ z$M=42jla&;>%Le?e@3#8;rL$cm6B#!nWTw&!|)aJb?DZr=}`W`8SKwFrC*1M4<{uH z18iO8wKBDkBYf^$bIUoq3o3`YJ;(!6On1~c7KBEx98_ufl??)rn5f1Q+RGincM+(l zHfWI#T?(d%fO0bc14j57X=XGB0f+~QrZ!TrRrH(YS=MKSz#mB9x(GVlP3nV>6|Mre zG|Z%&Y3eTPa35=PC@+Urlx0j9Q9U}8>i$Y1qWHco7dha8J#8BaTCb^H?q@hJCaMju zkEK?S9WNikV>7YUPKs0%qQ{Z=*On$V7E*Aq+SKpXEAdBpo&2 z$9RfT2{YY#8Bjo+$`lRk0N`aBOYZ^PR>hBIphLMf=naW(-C3#SUjV!+`p&vGhrFRD-tq1MEtNs4qBfBUX zm9TtsQ zys0(14C76jYfK|>iT{Pyu(a*l7z(mfi&umkFDC9(>flK}*bt#$v9${my0L7~d*T_4 zhp!8pwOA7CQ$_96c%I(Eh_He1Li-UH>)jiKh&IZ*hSa7Y8?35Qc0 z>K$|p^1FY1%WrwY@#Mo3-l$`B_ex)T&~dZQhQaej{{m2=yCN zBj6HM$yV9nuOI@jW&4G9nZK8#J578M1rB}%`*|n9;Dg%KJfbV~iV3{iCqVMS)cGUy zjdUT>X)LrrD#Q0R%Lqmb;JY-JCK%t(l7DZbspMY-?QbSjVcN8>y9!HR2a zQp;!{G9aokajCLa=w*JB#UWhV`|Fb-9L#sGCEV`zltH{+!!3bbn0EdA+9CUi74kXj zX-R$@Y^HP?jw6&>qS^nXR~2R)=jb#W@8vF?z;F?$*B%J7t00Q+M=RuBH_N~a)>u{3 zrl#=}E%DKaKiN6AiWRzlTN&l8^)F@c5n!y+muqm6=sJHu|@gL zsFI^2gPL3u>hj2m#Zr&QDCp0cJjhtxceN`hm^}VNe5eSI$y9G2P6`r0IBLIh<96YH zU%h2beq(UQgE=085kOX!rkz7|->ftQS{{?)7#pJguA%&(Q4C1^+%{aGrvv^R?8V5g zGVv$jc0>UgJGC7{=Vie0@%!ltWi6gEeCQ;{jmUxP zvPBd>_=YPPP_Pm~z}$=w0n_s|K?C7%+klQ-e)bNTjp*+{>sjox40S6bS@Il2 zw^5U{H}uFVk8y^f#>Oy>g>g`s$$Ar>s;tp9JzZ9=eC@B@&TH#*6wG_w#hD{$j?fS1 zxypA#0~&6J=w)IL9C&&%Y_}M{o!GgRxO=h51CL`oKhn}c2w`P*vikiREXx?hIq7By z2sUh3s1;IZo^1ty4H<8A-qfhpw0uH~K=bt?1Jl})s%&*%jEz)bzZrR9Qq}=XmG)JD zVQP-7f3ncgyIxRzAt+6VdC8uvdHAHPT!OyAJBI|+uh;V%DG!Vd++FLNJ?J!ZNMt;D z#XtoAwtc4g#ojB&e?sV0+G^VS5%&;pEBftf1_dofPSIro zfc%W!lNu_|N+~}G9AKVfMk_{u`d{*`t& zfX3yLy7Ft~#!u{k#i7i}`v<`I%i731#SbE5kU=_x@cKy9rz<$XUpE>{M#aqD_Uqh_ zX>*C`5zB+>6as`B(X5NuN54HR3&x^&97eP-RCgv`NcDz-%k3kvQKi(74=-JJXZYSrbZQv=*oIx+b^4`M;hB?vLPsf5F^ua62Q-lqcM2tI3IP35MUEQHT( z<(w1+`G9;wrElGJ7+b>Tz6;`6uDx)K-%ZACnb5(`#5@QiSbREV+#am=)`jf8fc7`{{OfB--+?XEa3Mb z!$^_5eMcP4x=t9s%~C>OtcY-es8sa)VD;*hRv z-YKE@0&IctM%6~rUH5rGg!z*rcSMK_>l2mK2PiNsu_SnP(X*NoxCV)V>2^Wna|6|l znS2Q^L1N(j?<-o+W4>{jVjKcFj}A%K-ghZE#Ogd5$zNWG6xFynQM}3zxp;sXwHd_M z&Ie1XuQxp25RS3I%RX4dv3Yn#&>0#82t_kjPs*_txJ~D%Ynj^JGh~zK$(zK@F}t*= z5dH>N;&2mmr13<9)ldT`{Y;MT<=a~rwN^vs%-_@=roT2{s>!|K#OFq{m#p=9Y-;&D zD?Af7wCI#lmL+fvZ4gQ@0T%@WE7A1Z{D;z4O%gX%h3c9g88a9WtLtL|l7DZELy3~+ zK)|OjwZmI+ZOQ!O@N;|?7^G)-oYqv(d;iXzDf20$n3ElWJT0Jme#d|tnT8bA^-0aQ zN|Q@>#_cy(a-ARo=0ER%&of3RefQsAJjW_F^*0y-k<&pV09wqh_mT2**?76LkADc> z{MnDqS9&16X29}Lt8@7N?^t-k?A_v&LbsT2)qPWZFn(ag`db5sg}({_M+Qs9kOVr| z_(bX{3p{+QF~}f#(PLszduQ_jH3kxmysPscx{|<+yY2|6|IDFmqc7>9;b&qL@o_As z58+;)?Qiuio*M|xy#qE-#`%;}v~ho~)w;Gz$LgHE+b>ut(oAk41zR6c{AVuT8nL12(4Kj9Yg25C9`Y zFzPGw6t8=^vAkIMS{Drxy%sQ4?1ojLkw21VONtRZvD#}PMo>Ffy%9s%?)pK4BNN4< zz$vPa4KAlFNpVB284j3g)WshEdYDD1zR{v28fy7P!NCMeRi;lM1BB87&&D!BuOaF8 z8^r)gS**F(SdA}WyQg_@@!2T|OLv5^K0yeF8VNOrMC93Qkk#RK59~YW2u4DZ|$N>4g76)Z@$4(6cWA$+dHJfJ6ONI90+NcZ>zA6oZ;MQY2m(@AWSd0HZgMJ{j?hD%rL7 z_54Bb%P3XDZYwo#CBIColSF`Y^=26Xu%hnCn?~5v^W_u4Fr5MSYqf(Y;~SwHe;;!X zQ!sA{ksqL~aWsnMKOZiR=Jr{H!Q;#98YrS1t@*l$0Wpp$K$NNvvLe*%gu?>+RfzGt z^lriib)y<-FJv7%_y2mb-?>I%Vuq5+t_$SGjx&wIwvQ!zDY({htCNu}cp0}KLoPNj z9!b?$0?I%HQiy|mI*$M^VoxrdI9aN7QBvg3aU#A)J#z1>wbY3U1eSE@L!7A7k^k={ za0M0YS+ED6$ymYADw@^#a@xM=?#p^i!c;W{t&g2$$nZ2-qHxsn74_BtY| zN8yL&A)GpUHn3!H+>!qq!+8N_JpAL0@r~yYH?r3j4FlCfLhI|>B|@K?;KFi(0r<{Jv}4| z)NJ?Z$rNY!Q&eivs4@JGDqCnRi`Y%;%d1*zd|^1LYbSk2XfQV^7qE~1TLK49W1Mn& zKg{E---VN(2l!{RR&Du*f=4D0z5rU9IvYmo>fGNky6H^8lG1W*@$%K+pp(7DB||)` zr1pox`-SZW|K^iG{Yg6h_k}4fWdx#&#&aJ((a~4ODGUkC0Tb=F2)4)vyYD+Fb}EG4 z7}-J8K=vuUbSFHm_s*Bk@z*@l))9s(RXUCu{kCc|#5Ca4@xq?aVehI1Qy;?)%0zHYB;oLb%YQE_=>P50QivRx= zhyTSUfB%W0gHa+iDbB|kkGKUFsB62TyACOHGt8P1a5%C_lwOVs> zMj59(I%Bjcw?tDNCgr|1M^C4XR&vtxDng)^u!TME_opJ;SYARGNA*5LvOfSed0B=2V3g)>NnTMdWe!tcZaZtZco8n^o7G{;4y4lWM3X4uBHPz%5T%UDY8H zexH^OD8H$96$aK|eZ6;1aBx3+vC}!yF|U-)8Q3s9iOp(1Ao<*ntUr~@gkF!@mf)nNDf(nq1EGg;c{4YsDVj(D+h zVq%i1s($yxHk#`Lt8p1avDOMkIbCpLS7X|HDJt1FJa$aV$sGDmcq&ugE9{><&iR*| zAA-V)MsPK^RDkYslN@zzoJUel;Y8S+)4Bl~)V6w$?Y%_F2`cZ5Q-QrN&REBwX^=E5 zd@@8%t{pP5YJY}ha*#NLfZSMopNeIEu2tM6Ak&r)x+W(I){1Mufd99w2JyWtK~jzd7D=%wn;>639s?=pEarZE`1hpQbU`XW?H zB4(d~vK+zjDus^Q3xQ7YpNn8f5+`BFc6yYlftxU9*AeQX#0Ls~3w>;qhgN~>*#;9T z#csIC2U9|$y1B~-ZC0W~VccY3ZK?1`|M6U8kiq&9%0M9gtsQoLg8DN-AeulZ9?C3u)IYW!nIvdW79t3j#2 zs2%>&b5Ra@=;I)Fan2)QT(H?`Ox)(Voz(|eLjVCj1))INq>rc=l0Cp**8fJq4%SjX zW~3(-OhAmd*bksVXq3t#sM)8M8uLD~{AGs?67HhD)s0eHd<|`ENskojq{;pd%Bs-h z&0>-|bZ_#Fgu>;{QkHwfzp@AOxu~T%&n=X&xh|!2;utxpC~@Q%9CzF!JR5rYkTN(D zzlqiA;0pL;7=lNvzmjX?p#Yb9tpM$gOyaa0+wXX$%?_aWt*2#0m6NZ8ZpZFNac1OE zr=+r|9cj#Xn@3^5p^1U@^kxLqwbkQvm3?{hZ|b)?`iFFZzP}9=;heFtD`K$xAvQ7< zB-IpfM@WfWZxowX3A{i9Omr)QAk5RyfC709%2onM*#wv-oyLK%wT25Faft_f%i$03 zd2nV9noCN=#hbIOM$16UdqdstmG7G~j<9f6*^~UT!u~)oe!(QCV|yz#6QUE!Zf9^C zA5rel2)8Eb{>si%l|qWkZp zV`ceTsg4PjFO%3y;31RPEx>v`pX+Lj-L7YSp^I^HE6r3NJCJ&R-;^gmZ#a+Woo6r= zp5yO4A*dl}ZHvS@^H~}Eq9vWrq$~Q5$o`;#!WSK?aTv8%zQ!e{M?>_*Sdk^V%cG^S zz{7J2h!8;QVewaj`0gV|k5RkVeu;Mpd`^NODal}ml|GluVZw3!-Y;7Q?a<4T~G1S{mU4OPEr!G>ky|1 zv8y4?5_3PKZ5Vus?*#SC=q~k2C%VnRAE*{Qxx=!0#9cI#!C!SQIf1>wII(F(LSmVf zSy}2FI+;-4c*ABANMoLVo9Od4iuoO7kZ+JLy2_P5np$uhewlNir~B{sa8k`iW83|* znOI<@^oGy=hF5hiE|aD71rDVPk-mT0giEl=Be4>c8AO?ajF>?}(N)%lBUEyRWt93Y zPO$J0ds>H!yfyQY{MQcS8Ssj>QBh$jHZKWzT$&Mz*gFRysjj#UvX1QsJ8p&Ue;Jl+ zCfnpeF4zl!hDjr^u7Saf>?+rxgMRQ|R-=FProRcPCkYoz)HTO(#f5QjCx71QcijF{ z&OwZ5_A(jZJ zoKn=9%9Qb-(SRpD^NzPe1(zp>tbh%CckelR(Xg=<|IY82-j24i#MQftHvJs}jA8-bzd|~lN^Bp6tNBX?C1BoyQGCx&^Q74* zoY$IL%(&cK)m}}I(gAB4tJt0M8k_N!lni{BXRZgOG$TO&ScFr(Hi7umMq#u4_|^V7XmKLa5tI-g z@aVY}6%P+nCHCYdR`}iPgwYbj5!NUP>K&Qo;#FaUdf@1p~zUB1rzEP3+ZJ zt%T`zncHZ|x_kfm&ict_kPkm)La#ktL{g)*-EJ<}kxR4m6I;<`KrFU4SvsXkXFbxF zGq@K6rmr+;zN5`$4eoJ)Q{LMImLhPplpSt9f!& z2Es=2zjjzEsfNT?PNH5pyq{rh`_DU;q!JX2$2I6lCQ8}nnfrXH>8YxS(F02a4DG(d;J{^JFbXR*rs(9$_>Lwik-KF3vWnG<%% zZh~guCp|S5Vmwmpp7*1Fqh2w3ri>s2RZ5^~`bw&6H3EYmHs(A)jSH^cz%$=p%yn+h zzpeUkq=JJ@W>|OK%8F)VTmhAiXJ)z8YF%o&X)dMsJF4SA@jCCYcD=)PD=#T{4(bn1UIKdnSM7|Tbjt>s3Lh9;WP*HOVT!cl> z(fc;$97DQJ>7xGjlcUUkNtkpW91&tTF*y$;vRry~MMt^|sdRyPv5qT$Me!u~1Nbt& zh8RYWw5|u0a1xHttg1{IE%0X>Phh)5@$bnoiVwr@xzaXe77yMoz&E0Hq!CQ45Vch*HBQaHfGEHlK<)SYtD3S{B-6|?baK^ zXTi+}1F#TEq!7;aHPC)sL|9|c?UZ^8CA9fpb;}WC#)fXomO)30+Xp~~QoiBlWB@R!*FUi{P zvKu;Jr4rwi5dg0J>zrF`f|NobJ{&5f~hXsQx@!gVYH@{S}4KRI4GZ5*}puy`^kSeAnkrdB!b%F%GKY zX}cWBWW{DVL4_H{&aj4q_6$+{#FF`(#zP)kZ6_kA_ItGdu`iRNy@fSiIWWsbh91dB zoy0TQg0A8ayo#Zvn?aX9u@o?Ay;AvSOgt+Tm(g&^dV|XQGz#J8G$_eTW{Q+DhMulF=XWH%II?IAqx^^4&4V z%x~xKRa<8;k%g9k+p~w?@Xso=dW5r)Hoo2l{CCruHD-JnJXlBcW?n4kwmw z_?u>t*fXMdG2V2uu5G~0*OxoV0T{! z=+O}`a%2B{ZT3QH=t=G*@v{cNgxJYOnmLC3TeeK(cs{hauNWjWjN^peC4>*!_RyXS z#jfU*UeRHuF5ql+okG1$qiKDU{}q_9c&w`c$T+12bBcuMOU*F2wb+=&pHsV`&J*^J z<2UZh%)`Z^5t|&JED|U5d&*N_0f6UV()-sogQgA#A+rr5S4UjVpBSwnlwx~ z+;l}i$cG%4)&CwnlC4uMMA`|Of)4X0afu||bphGN9b?!%FN>~UG~w`ISi>6qoCn-@ zC{9GEj;EDOg?|}Uh}iiko*QJzAcCY*RDzOzA5sy;<3LZ|a8ogt1vwB0Oj-HYZfAPK z20B*snv?J!a?P4?UU8RORT)S;1tXu2;mE`aXyPJ&pcM~EjFEv(*Gp^_mk4htuKV)& zp8z3Ql}WfeD>nfQb)mSA-z884@cQk1$>iaOKB=Fk%p7w>Ja?fJ@n!|L`7)|AFr6yJ zv1U*EpR)X$8ZV<-#;Q$<1t#=>mnUU;IIksjzj3Bq(dguZeI4U(jER=0chkmn3e0O! zQMNW`<02kEKv_DWpGN2&B{ql6X?}+BBz>u!-=Cs%{>os2;kN>E>#Y{|e~hNz86;qZ z5hWF4TJ^rfLqN#;xZ+CvPR^P*L=%^!hg!_1qcT3KECGVDsaDc?O(22cpQlxJB`r6a zf0$Cq4+g3|Le26*=N5Cqm{QgfD6UbVUw9 zsW1Nj{yZ?4GwkzKuh%go+?NugZ(9U-kpQj0nSZ&3h!nYC9>|j%tJhTd0mP<4rga$qkP*m& zdeC7lYe5ny3l6l*FXdn;@B{W=+`JyvTl_5y;t1pKnU*8>3^AbE!kSzVh3p@gDt#fr zGHncaCMty2>Y<5coZ>K*x2aF)bw9{fsQbo3@ehqtK8d=Pes|H`c#=zWa0kaBp~D}` zxmP_N1Tm1LP7l5Y&{@q#dmYM^4nnw;AM%{u_#kSLbe&+;-5y$NUHnWqH4&+b@{IDo zQhzfq@6&6UrYfgc5m@uZx);vU2wor!fqY;ARI!phITtg{>t}ww9-Ysx%5K6!ShPt% zR3)3LUodt9nYPb+`CB;f&HK5m&xjv$>!7E1XhS(j7{zfzspAqp$gTxqM<2)hu6Zu# z1@nm=n!EU27w!RaGAdSM^v=&)xhdXT&}+r$2F64RvgO$id-L_Iz6V?L!KcOAw~j(d zKK+H_!Sucw*G$Dg>Y32k01mApWtsZCoC+!daFZQ2=T>C)mF1>P|3v#D$Pnh3Xs!0& zSjV(*wQisKTeUXZB3nzjVrMN7bXazZ?K^i81Wy~g?9h}q8m;J+nu%;&3YTEM2FnO; z-`|7jT|7!*Z1V$++yvRn$s?zqD1J-*D`|d`v3bDf--%`1`}-qb1t`nJg`iY7&&96I zB@~-2hXyRHq)@p?<;AiW=~p2o3uOBdPR>$fP)K96yg1R72V<9bfBgpl@mlH``gqmx zHKA1^ za`48a;t*T9lH@9FqcJmd@08G87A;<7x4S-w_)9V6m#btt8!N6JyO0IkDf!8gou z;PD0aK1{F$WBNTJySXG&5SdXi!xo%q6LV{{OFABS*Fga(8lbGO%iCyan@tV_X&{|n zNieo|FG%->JOwGnwIZI^>&eUp$>)5Y(MLs_LHOg489d8j%%uE^Tbr?+vJ>wEjHL$% zk%M!ql|gqlTG7){_^^GEI~gg)S74tXG>vV5qUs`ms8sQRx*m2_NE`p{yzKNcU4lv^ z*}fda$V!j44w*{&3D|oFS!tS81yPjbgUIESWB>oaJ>GGXlT6qvo9kYmqOY|xx&HC*@%`%z zc33cXgT7Vdq#P7YS}AHX&&P^Z4ony#W!~sU_DV*?ZesHLrqTw=z{h2zOkdtvZ8hS^ zz1__OvS>|GM8dRiu3x&Z?m$q&m%_R$?J8t3lFdYm+&@u$#=EE9Y(KWyJ=j&XLd;k0 zny~UORQ#COEum~Jn~$OTzMa7YPrG#5&0z|X{8$XuTp4S)+=rG-r>8AS^rmE zmD~eOCY$nyUIVt^Jdt5CnLl7(&V`*lSq?0}ChYSR$}gjAs3%UM<_trIQvns0Do|xk zW44|05UHSdCf1g=ZVu2S3LK5!-!~bLLSAyZF8!E1;%Xf=q6(6;lrd|bT^nBd0P<&%aCr6eNwulv0i?9GTYgDsJUCSAI4B}-VEk5R*HZXBy|A5(HY2*3+t93d z2_ZIJoq>Hc&AW^o*`=y4(l|qWCH%IJCQ<8vxmRh`at8B!P(&oBb%zKbEA8eX`S_eT z)M15KWY_xNFdX(WIPxg8h*2}W#T}n^vDCxGHHd1F`VSjgyVFY54D}YRqFC=yo?TWJ zfEmsv)~Q!cSg;eQoYrqxD~-qrILLU$v zZ)~nz2-fBjv{EjvO_B^v^K*;|4l`E|$rL{aSv``v%8WR8&+ry$+RNvIeDdA4o*2%p zU1)p79@8DfJqySnkwrTOAI$~cu2V<11Y&8k0G)!PImo0}LJorZAkN6`w}PhRw~r;o zJh1EN&Y6sBv4Cq=7-~MjP3qmtI0uV9hB891tQJ_S=kF!elwa(JqKt|G;|&|LD^^kD z{U{_U^Tl+58=(K160t#vsOYEknNfqo2LtEIEhJ2Iln^4Scrs=&fhE2ZxBEi4Gn*;f zgrVU5f1mU2Om-(T%+3Aatuf3OLw=447_J{71Lu1qIE_bH z2otzKto1|l%M{@&M0Mn#0SZHHrj9P@-5WQFy2I^7uz1*7CU>;wpXq$dWop;%3u%~_ zYhG+`8PosaPf4W`ei7gi9b=%(Lv8wm;iDvRGBSnEkl?LA-9F$85kchMQ-Ag z%kNDt7d+{~WeM14I?~W{mdl4wn!Zc$yr8`ks5>F0W6|(lQHkx3sfMGmU5qmOnxACl zYxguajk4>Tg@5BTlIm>Sqm~k}Q9eIdX$bo%P|VU^QQjERs~RDQlk{b<7u;ka{3WhG zFwzy9L0N+)Ro%AU)tS6e!?@4b$cQbb=9SibyZZ@eNL?pq`oV6(t85Us2J$=!r^X7*87}jcnIv=j%Pr%DHvoW_@Zp;3jVOez zYd{==4_I*>IZG};wujd3-RG(-3ugrT6z_=Q2=!#0Y4~047vJgzOuC`AXMc`9JGNdf zAR~F_-*eUe5Dsa+e~rmhPCiC$)_y(&IO49?W|dBmd#cLaBUhpZvS6LE0^050XfU|d;ZgG&m3{e&C)s zd44bA*HE?pzMZLD042bOT)U7W>7bx74PU}KT;Wa&p|V^@vIB0SchRL=*NPh#Ux1J5qj zx#;CV_jK(=|82>MceOfH>N@UAVCi%pO$diOFponQuY= zAD%oC!n1|RgqceheX|Lr&v9XZt91hJlgPQ_5fyAD8F%0w;{OW2 zYQ`i&NPS0ye79mNgm1&Ei}q9n$JzpFaQRPnf#N8#3z*h0yenB7{=K~ b6~t;_wBcJ3AWgga7~Sz~izoKbpAY~5r|m$8 literal 0 HcmV?d00001 diff --git a/docs_headless/src/assets/providers.png b/docs_headless/src/assets/providers.png new file mode 100644 index 0000000000000000000000000000000000000000..d8fb881cc5eddc9a8ef08d50ac86494c1284bc01 GIT binary patch literal 67857 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 z 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 literal 0 HcmV?d00001 diff --git a/docs_headless/src/components/CustomSidebar.astro b/docs_headless/src/components/CustomSidebar.astro new file mode 100644 index 00000000000..4b9b7eeee06 --- /dev/null +++ b/docs_headless/src/components/CustomSidebar.astro @@ -0,0 +1,31 @@ +--- +import MobileMenuFooter from "@astrojs/starlight/components/MobileMenuFooter.astro"; +import SidebarPersister from "@astrojs/starlight/components/SidebarPersister.astro"; +import SidebarSublist from "@astrojs/starlight/components/SidebarSublist.astro"; + +const { sidebar } = Astro.locals.starlightRoute; +--- + + + + + + + +

diff --git a/docs_headless/src/content.config.ts b/docs_headless/src/content.config.ts new file mode 100644 index 00000000000..d68e7959951 --- /dev/null +++ b/docs_headless/src/content.config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; +import { docsLoader } from '@astrojs/starlight/loaders'; +import { docsSchema } from '@astrojs/starlight/schema'; + +export const collections = { + docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }), +}; diff --git a/docs_headless/src/content/docs/guides/Architecture.md b/docs_headless/src/content/docs/guides/Architecture.md new file mode 100644 index 00000000000..04f41ac2411 --- /dev/null +++ b/docs_headless/src/content/docs/guides/Architecture.md @@ -0,0 +1,304 @@ +--- +title: "Key Concepts" +--- + +React-admin relies on a several design decisions that structure its codebase. + +## Single-Page Application + +React-admin is specifically designed to build [Single-Page Applications (SPA)](https://en.wikipedia.org/wiki/Single-page_application). In a react-admin app, the browser fetches the required HTML, CSS, and JavaScript to render the application only once. Subsequently, data is fetched from APIs through AJAX calls. This is in contrast to traditional web applications, where the browser fetches a new HTML page for each screen. + +![SPA lifecycle](../../../assets/SPA-lifecycle.png) + +The SPA architecture ensures that react-admin apps are [exceptionally fast](./Features.md#fast), easy to host, and compatible with existing APIs without requiring a dedicated backend. + +To achieve this, react-admin utilizes an internal router, powered by `react-router`, to display the appropriate screen when the user clicks on a link. Developers can define routes using the [``](./Resource.md) component for CRUD routes and the [``](./CustomRoutes.md) component for other routes. + +For example, the following react-admin application: + +```jsx +import { CoreAdminContext, CoreAdminUI, Resource, CustomRoutes } from 'ra-core'; +import { Route } from 'react-router-dom'; + +export const App = () => ( + + + + + + } /> + } /> + + + } /> + } /> + + + +); +``` + +Declares the following routes: + +- `/labels`: `` +- `/labels/:id`: `` +- `/labels/:id/show`: `` +- `/genres`: `` +- `/artists`: `` +- `/artists/:id`: `` +- `/artists/create`: `` +- `/artists/:id/songs`: `` +- `/artists/:id/songs/:songId`: `` +- `/profile`: `` +- `/organization`: `` + +The `` component allows react-admin to automatically link CRUD pages between them, including those for related entities. This approach allows you to think about your application in terms of entities, rather than getting bogged down by managing routes. + +## Providers + +React-admin does not make any assumptions about the specific structure of your API. Instead, it defines its own syntax for data fetching, authentication, internationalization, and preferences. To interact with your API, react-admin relies on adapters called **providers**. + +![Providers](../../../assets/providers.png) + +For example, to fetch a list of records from the API, you would use the `dataProvider` object as follows: + +```jsx +dataProvider.getList('posts', { + pagination: { page: 1, perPage: 5 }, + sort: { field: 'title', order: 'ASC' }, + filter: { author_id: 12 }, +}).then(response => { + console.log(response); +}); +// { +// data: [ +// { id: 452, title: "Harry Potter Cast: Where Now?", author_id: 12 }, +// { id: 384, title: "Hermione: A Feminist Icon", author_id: 12 }, +// { id: 496, title: "Marauder's Map Mysteries", author_id: 12 }, +// { id: 123, title: "Real-World Roots of Wizard Spells", author_id: 12 }, +// { id: 189, title: "Your True Hogwarts House Quiz", author_id: 12 }, +// ], +// total: 27 +// } +``` + +The `dataProvider.getList()` method is responsible for translating this request into the appropriate HTTP request to your API. When using the REST data provider, the above code will translate to: + +``` +GET http://path.to.my.api/posts?sort=["title","ASC"]&range=[0, 4]&filter={"author_id":12} + +HTTP/1.1 200 OK +Content-Type: application/json +Content-Range: posts 0-4/27 +[ + { id: 452, title: "Harry Potter Cast: Where Now?", author_id: 12 }, + { id: 384, title: "Hermione: A Feminist Icon", author_id: 12 }, + { id: 496, title: "Marauder's Map Mysteries", author_id: 12 }, + { id: 123, title: "Real-World Roots of Wizard Spells", author_id: 12 }, + { id: 189, title: "Your True Hogwarts House Quiz", author_id: 12 }, +] +``` + +React-admin comes with [more than 50 data providers](./DataProviderList.md) for various backends, including REST, GraphQL, Firebase, Django REST Framework, API Platform, and more. If these providers do not suit your API, you have the flexibility to [develop a custom provider](./DataProviderWriting.md). + +This approach is why react-admin components do not call `fetch` or `axios` directly. Instead, they rely on the data provider to fetch data from the API. Similarly, it is recommended that your custom components follow the same pattern and utilize [data provider hooks](./Actions.md), such as [`useGetList`](./useGetList.md): + +```jsx +import { useGetList } from 'ra-core'; + +const MyComponent = () => { + const { data, total, loading, error } = useGetList('posts', { + pagination: { page: 1, perPage: 5 }, + sort: { field: 'title', order: 'ASC' }, + filter: { author_id: 12 }, + }); + + if (loading) return ; + if (error) return ; + return ( +
+

Found {total} posts matching your query

+
    + {data.map(record => ( +
  • {record.title}
  • + ))} +
+
+ ) +}; +``` + +By using `useGetList`, you gain various benefits beyond a simple `fetch`: it handles user credentials, triggers loading indicators, manages loading states, handles errors, caches results for future use, and controls the data shape, among other things. + +Whenever you need to communicate with a server, you will use these providers. Since they are specialized for their respective domains and tightly integrated with react-admin, they will save you a significant amount of time and effort. + +## Composition + +React-admin avoids components that accept an overwhelming number of props, which are often referred to as "God Components." Instead, react-admin encourages the use of composition, where components accept subcomponents (either through children or specific props) to handle a share of the logic. + +For example, while you cannot directly pass a list of actions to the `` component, you can achieve the same result by passing an `actions` component: + +```jsx +import { Button } from '@mui/material'; +import { TopToolbar, ShowButton } from 'react-admin'; + +export const PostEdit = () => ( + }> + ... + +); + +const PostEditActions = () => ( + + + + +); +``` + +This approach enables you to override specific parts of the logic of a component by composing it with another component. + +The trade-off with this approach is that sometimes react-admin may require you to override several components just to enable one specific feature. For instance, to override the Menu, you must first create a custom layout using your menu as the `` prop, then pass it as the `` prop: + +```jsx +// in src/MyLayout.js +import { Layout } from 'react-admin'; +import { Menu } from './Menu'; + +export const MyLayout = ({ children }) => ( + + {children} + +); + +// in src/App.js +import { Admin } from 'react-admin'; +import { MyLayout } from './MyLayout'; + +const App = () => ( + + // ... + +); +``` + +Although this drawback exists, we accept it because the use of composition in react-admin makes the components highly extensible, and it significantly improves the readability and maintainability of the code. + +## Hooks + +When you find that you cannot tweak a react-admin component using props, you can always turn to the lower-level API: hooks. In fact, the core of react-admin is a headless library called `ra-core`, which primarily consists of hooks. These hooks hide the framework's implementation details, allowing you to focus on your business logic. It's perfectly normal to use react-admin hooks in your own components if the default UI doesn't meet your specific requirements. + +For example, the `` button used in `pessimistic` mode renders a confirmation dialog when clicked and then calls the `dataProvider.delete()` method for the current record. If you want the same feature but with a different UI, you can use the `useDeleteWithConfirmController` hook: + +```jsx +const DeleteButton = () => { + const resource = useResourceContext(); + const record = useRecordContext(); + const { + open, + isPending, + handleDialogOpen, + handleDialogClose, + handleDelete, + } = useDeleteWithConfirmController({ redirect: 'list' }); + + return ( + + + + + ); +}; +``` + +The fact that hook names often end with `Controller` is intentional and reflects the use of [the Model-View-Controller (MVC) pattern](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) for complex components in react-admin. + +- The Controller logic is handled by React hooks (e.g. `useListController`). +- The view logic is managed by React components (e.g. ``). +- The model logic is left to the developer, and react-admin simply defines the interface that the model must expose through its Providers. + +React-admin exposes [dozens of hooks](./Reference.md#hooks) to assist you in building your own components. You can even construct an entire react-admin application without relying on the Material UI components and use a different UI kit if desired (see for instance [shadcn-admin-kit](https://github.com/marmelab/shadcn-admin-kit), a library for building admin apps with Shadcn UI). This flexibility allows you to tailor the application to your specific needs and preferences. + +## Context: Pull, Don't Push + +Communication between components can be challenging, especially in large React applications, where passing props down several levels can become cumbersome. React-admin addresses this issue using a pull model, where components expose props to their descendants via a context, and descendants can consume these props using custom hooks. + +Whenever a react-admin component fetches data or defines a callback, it creates a context and places the data and callback in it. + +For instance, the `` component creates an `I18NProviderContext`, which exposes the `translate` function. All components in the application can utilize the `useTranslate` hook, which reads the `I18NProviderContext`, for translating labels and messages. + +```jsx +import { useTranslate } from 'ra-core'; + +export const MyHelloButton = ({ handleClick }) => { + const translate = useTranslate(); + return ( + + ); +}; +``` + +Similarly, the `` component fetches a record and exposes it via a `RecordContext`. Inside the `` component, you can use the `useRecordContext` hook to access the record data. For example, you can use it to display a map of the record's location. + +```jsx +import { ShowBase, useRecordContext } from 'ra-core'; +import { MapContainer, TileLayer, Marker } from 'react-leaflet'; + +const LocationField = ({ source }) => { + const record = useRecordContext(props); // use the RecordContext created by + if (!record) return null; + + return ( + + + + + ); +}; + +const StoreShowPage = () => ( + {/* create a RecordContext */} +
+ +
+
+) +``` + +This approach eliminates the need for a dependency injection system and provides an elegant solution to access data and callbacks from higher levels in the render tree. + +So when you write a component that needs to access data or callbacks defined higher in the render tree, you can always find a context to get it. + +Contexts are fundamental concepts in React Admin. If you are not familiar with them, don't hesitate to read the [React documentation on Context](https://react.dev/learn/passing-data-deeply-with-context). Understanding contexts will greatly enhance your understanding of how react-admin leverages them to create a powerful and flexible framework. + +## Awesome Developer Experience + +With react-admin, developers assemble application components without having to worry about low-level details. They need less code for the same result, and they can **focus on the business logic** of their app. + +We've crafted the API of react-admin's components and hooks to be as **intuitive** as possible. The react-admin core team uses react-admin every day, and we're always looking for ways to improve the developer experience. + +React-admin provides the **best-in-class documentation**, demo apps, and support. Error messages are clear and actionable. Thanks to extensive TypeScript types and JSDoc, it's easy to use react-admin in any IDE. The API is stable and **breaking changes are very rare**. You can debug your app with the [query](./DataProviders.md#enabling-query-logs) and [form](https://react-hook-form.com/dev-tools) developer tools, and inspect the react-admin code right in your browser. + +That probably explains why more than 3,000 new apps are published every month using react-admin. + +So react-admin is not just the assembly of [React Query](https://react-query.tanstack.com/), [react-hook-form](https://react-hook-form.com/), [react-router](https://reacttraining.com/react-router/), [Material UI](https://mui.com/material-ui/getting-started/), and [Emotion](https://github.com/emotion-js/emotion). It's a **framework** made to speed up and facilitate the development of single-page apps in React. \ No newline at end of file diff --git a/docs_headless/src/content/docs/guides/CRUD.md b/docs_headless/src/content/docs/guides/CRUD.md new file mode 100644 index 00000000000..424865b8061 --- /dev/null +++ b/docs_headless/src/content/docs/guides/CRUD.md @@ -0,0 +1,469 @@ +--- +title: "CRUD Pages" +--- + +Most admin and B2B apps start with a few basic screens to manipulate records: + +- A list page, including the ability to filter, paginate, and sort the records +- A read-only page displaying the record details +- An edition page, allowing to update the record via a form +- A creation page + +We call this type of interface a "CRUD" interface because it allows us to Create, Read, Update, and Delete records. + +React-admin started as an engine to generate such CRUD interfaces, and it still does it very well. **Building CRUD interfaces with react-admin requires little to no effort**, and it's very easy to customize them. + + + +## Page Components + +React-admin provides page components for CRUD operations: + +- [``](./ListTutorial.md) displays a list of records +- [``](./Show.md) displays a record in read-only mode +- [``](./EditTutorial.md) displays a form to edit a record +- [``](./Create.md) displays a form to create a record + +Each component reads the parameters from the URL, fetches the data from the data provider, stores the data in a context, and renders its child component. + +For example, to display a list of posts, you would use the `` component: + +```jsx +import { List, DataTable } from 'react-admin'; + +const PostList = () => ( + + + + + + + +); +``` + +Here, the `` component will call `dataProvider.getList('posts')` to fetch the list of posts and create a `ListContext` to store the data. The `` component will read the data from that `ListContext` and render a row for each post. That's why there is no need to explicitly pass the data to the `` component. + +## Page Context + +`` and other page components don't just fetch data; they provide a way to update the page settings: + +- Sort field and order +- Current page & page size +- Filters +- Record selection + +The [`ListContext`](./useListContext.md) exposes callbacks to update these settings, and ``'s children components like `` use these callbacks to update the data. + +```jsx +const listContext = useListContext(); +const { + // Data + data, // Array of the list records, e.g. [{ id: 123, title: 'hello world' }, { ... } + total, // Total number of results for the current filters, excluding pagination. Useful to build the pagination controls, e.g. 23 + meta, // Additional information about the list, like facets & statistics + isPending, // Boolean, true until the data is available + isFetching, // Boolean, true while the data is being fetched, false once the data is fetched + isLoading, // Boolean, true until the data is fetched for the first time + + // Pagination + page, // Current page. Starts at 1 + perPage, // Number of results per page. Defaults to 25 + setPage, // Callback to change the page, e.g. setPage(3) + setPerPage, // Callback to change the number of results per page, e.g. setPerPage(25) + hasPreviousPage, // Boolean, true if the current page is not the first one + hasNextPage, // Boolean, true if the current page is not the last one + + // Sorting + sort, // Sort object { field, order }, e.g. { field: 'date', order: 'DESC' } + setSort, // Callback to change the sort, e.g. setSort({ field: 'name', order: 'ASC' }) + + // Filtering + filterValues, // Dictionary of filter values, e.g. { title: 'lorem', nationality: 'fr' } + displayedFilters, // Dictionary of displayed filters, e.g. { title: true, nationality: true } + setFilters, // Callback to update the filters, e.g. setFilters(filters, displayedFilters) + showFilter, // Callback to show one of the filters, e.g. showFilter('title', defaultValue) + hideFilter, // Callback to hide one of the filters, e.g. hideFilter('title') + + // Record selection + selectedIds, // Array listing the ids of the selected records, e.g. [123, 456] + onSelect, // Callback to change the list of selected records, e.g. onSelect([456, 789]) + onToggleItem, // Callback to toggle the record selection for a given id, e.g. onToggleItem(456) + onUnselectItems, // Callback to clear the record selection, e.g. onUnselectItems(); + + // Misc + defaultTitle, // Translated title based on the resource, e.g. 'Posts' + resource, // Resource name, deduced from the location. e.g. 'posts' + refetch, // Callback for fetching the list data again +} = listContext; +``` + +## CRUD Routes + +You could declare the CRUD routes manually using react-router's `` component. But it's such a typical pattern that react-admin provides a shortcut: the [``](./Resource.md) component. + +```jsx + +``` + +This is the equivalent of the following react-router configuration: + +```jsx + + + } /> + } /> + } /> + } /> + + +``` + +`` defines a `ResourceContext` storing the current resource `name`. This context is used by the ``, ``, ``, and `` components to determine the resource they should fetch. So when declaring page components with ``, you don't need to pass the `resource` prop to them. + +```diff +import { List, DataTable } from 'react-admin'; + +const PostList = () => ( +- ++ + + + + + + +); +``` + +Check [the `` documentation](./Resource.md) to learn more about routing and resource context. + +## The List Page + +To build list pages, developers primarily use the [``](./List.md) component. It fetches a list of records from the data provider and delegates the rendering to its child component (often a [``](./DataTable.md), as in the example below). + +```jsx +import { List, DataTable, TextInput} from 'react-admin'; + +const filters = []; + +const BookList = () => ( + + + + + + + + +); +``` + +`` also lets you customize the UI for filters and pagination. As for ``, it provides tons of customization options, like row expanders, bulk actions, and column chooser. You can learn more in the [List Tutorial](./ListTutorial.md). + +### List Layouts + +You can use any of the following components to build the list page: + + + + + + + + + + +
+ + + + <DataTable> + + + + + <DatagridAG> +
+ + + + <SimpleList> + + + + + <Calendar> +
+ +Inside these list layouts, you can use any of react-admin’s Field components to display the record data. + +### Filter Components + + + + + + + + + + +
+ + + + Filter Button/Form Combo + + + + + <FilterList> Sidebar +
+ + + + <StackedFilters> Dialog + + + + + Global <Search> +
+ +### Buttons + +- [``](./Buttons.md#editbutton): Go to the edit page for a record +- [``](./EditInDialogButton.md): Edit a record in a dialog +- [``](./Buttons.md#exportbutton): A button to export the list data +- [``](./Buttons.md#createbutton): A button to create a new record +- [``](./SortButton.md): A button to sort the list +- [``](./SelectColumnsButton.md): A button to select the columns to display in a DataTable +- [``](./Buttons.md#bulkupdatebutton): A button to update selected records +- [``](./Buttons.md#bulkdeletebutton): A button to delete selected records +- [``](./List.md#actions): A toolbar with a create and an export button + +### Misc + +- [``](./Pagination.md): Renders the page count and buttons to navigate to the previous and next pages +- [``](./SavedQueriesList.md): Lets user save a combination of filters + +### Alternatives to List + +You can also use specialized alternatives to the `` component, which offer type-specific features: + +- [``](./TreeWithDetails.md): A tree view with a detail view for each node +- [``](./Calendar.md#completecalendar): A calendar view for events +- [``](./InfiniteList.md): A list with infinite scrolling + +## The Show Page + +Show pages rely on the [``](./Show.md) component. It reads the record id from the URL, fetches the record from the data provider, and delegates the rendering to its child component, e.g., a [``](./SimpleShowLayout.md): + +```jsx +import { Show, SimpleShowLayout, TextField} from 'react-admin'; + +const BookShow = () => ( + + + + + + + + +); +``` + +You can learn more in the [Show Tutorial](./ShowTutorial.md). + +### Show Layouts + +You can use any of the following components to build the show page: + + + + + + +
+ + + + <SimpleShowLayout> + + + + + <TabbedShowLayout> +
+ +Inside these show layouts, you can use any of react-admin's [Field components](./Fields.md) to display the record data. + +### Buttons + +- [``](./Buttons.md#editbutton): Go to the edit page for a record +- [``](./Buttons.md#createbutton): A button to create a new record +- [``](./Buttons.md#listbutton): Go to the list page for a record +- [``](./Buttons.md#clonebutton): Clone a record + +### Misc + +- [``](./Labeled.md): A component to display a field with a label + +## The Edit & Create Pages + +The [``](./Edit.md) and [``](./Create.md) components are very similar. They are useful for editing a record - either fetched from the API or a new record. Typically, the child component of these pages is a form layout, like a [``](./SimpleForm.md): + +```jsx +import { Edit, SimpleForm, TextInput} from 'react-admin'; + +const BookEdit = () => ( + + + + + + + + +); +``` + +You can learn more in the [Edit Tutorial](./EditTutorial.md). + +### Form Layouts + +You can use any of the following components to build the edit and create pages: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +Forms are very powerful in react-admin. They support default values, sync and async validation, dependent inputs, access control, sub-forms, and more. Check out the [Forms introduction](./Form.md) for more information. Inside the form layouts, you can use any of react-admin's [Input components](./Inputs.md) to edit the record data. + +### Buttons + +- [``](./Buttons.md#showbutton): Go to the show page for a record +- [``](./SaveButton.md): The submit button for the form +- [``](./Buttons.md#clonebutton): Clone a record + +### Misc + +- [``](./Toolbar.md): Customize the form toolbar +- [``](./JsonSchemaForm.md): A form based on a JSON schema +- [``](./AutoSave.md): Automatically save the form + +## Guessers & Scaffolding + +When mapping a new API route to a CRUD view, adding fields one by one can be tedious. React-admin provides a set of guessers that can automatically **generate a complete CRUD UI based on an API response**. + +For instance, the following code will generate a complete CRUD UI for the `users` resource: + +```jsx +import { Admin, Resource, ListGuesser, EditGuesser, ShowGuesser } from 'react-admin'; + +const App = () => ( + + + +); +``` + +Guesser components start by fetching data from the API, analyzing the shape of the response, and then picking up Field and Input components that match the data type. They also dump the generated code in the console to let you start customizing the UI. + +![ListGuesser](../../../assets/tutorial_guessed_list.png) + +Check the following components to learn more about guessers: + +- [``](./ListGuesser.md) +- [``](./EditGuesser.md) +- [``](./ShowGuesser.md) + +## Headless Variants + +`` and other page components render their children (e.g., ``) in a page layout. This layout contains a page title (e.g., "Posts"), toolbars for action buttons & filters, a footer for pagination, and a side column. + +But sometimes, you want to use the list data in a different layout, without the page title and toolbar, or with a different UI kit. For these use cases, you can use the headless variants of the page components, which come in two flavors: + +- **Hook**: `useListController`, `useEditController`, `useCreateController`, `useShowController` +- **Component**: ``, ``, ``, `` + +For instance, to use the list data in a custom layout, you can use the `useListController` hook: + +```jsx +import { useListController } from 'react-admin'; + +const MyList = () => { + const { data, ids, total } = useListController({ resource: 'posts' }); + return ( +
+

Posts

+
    + {ids.map(id => ( +
  • {data[id].title}
  • + ))} +
+

Total: {total}

+
+ ); +}; +``` + +If you want to use react-admin components, prefer the Base components, which call the hooks internally and store the values in a context: + +```jsx +import { ListBase, DataTable } from 'react-admin'; + +const MyList = () => ( + + + + + + + +); +``` diff --git a/docs_headless/src/content/docs/guides/DataFetchingGuide.md b/docs_headless/src/content/docs/guides/DataFetchingGuide.md new file mode 100644 index 00000000000..427a5b7cbaf --- /dev/null +++ b/docs_headless/src/content/docs/guides/DataFetchingGuide.md @@ -0,0 +1,418 @@ +--- +layout: default +title: "Data Fetching" +--- + +You can build a react-admin app on top of any API, whether it uses REST, GraphQL, RPC, or even SOAP, regardless of the dialect it uses. This works because react-admin doesn't use `fetch` directly. Instead, it uses a Data Provider object to interface with your API and [React Query](https://tanstack.com/query/v5/docs/react/overview) to handle data fetching. + +## The Data Provider + +In a react-admin app, you don't write API calls using `fetch` or `axios`. Instead, you communicate with your API through an object called the `dataProvider`. + +![Backend agnostic](../../../assets/data-provider.png) + +The `dataProvider` exposes a predefined interface that allows react-admin to query any API in a normalized way. + +For instance, to query the API for a single record, react-admin calls `dataProvider.getOne()`: + +```tsx +const response = await dataProvider.getOne('posts', { id: 123 }); +console.log(response.data); // { id: 123, title: "hello, world" } +``` + +The Data Provider is responsible for transforming these method calls into HTTP requests and converting the responses into the format expected by react-admin. In technical terms, a Data Provider is an *adapter* for an API. + +A Data Provider must implement the following methods: + +```jsx +const dataProvider = { + async getList(resource, { sort, filter, pagination }) => ({ data: Record[], total: number }), + async getOne(resource, { id }) => ({ data: Record }), + async getMany(resource, { ids }) => ({ data: Record[] }), + async getManyReference(resource, { target, id, sort, filter, pagination }) => ({ data: Record[], total: number }), + async create(resource, { data }) => ({ data: Record }), + async update(resource, { id, data }) => ({ data: Record }), + async updateMany(resource, { ids, data }) => ({ data: Identifier[] }), + async delete(resource, { id } ) => ({ data: Record }), + async deleteMany(resource, { ids }) => ({ data: Identifier[] }), +} +``` + +**Tip**: A Data Provider can have [additional methods](./Actions.md#calling-custom-methods) beyond these 9. For example, you can add custom methods for non-REST API endpoints, tree structure manipulations, or realtime updates. + +The Data Provider is a key part of react-admin's architecture. By standardizing the Data Provider interface, react-admin can offer powerful features, like reference handling, optimistic updates, and autogenerated CRUD components. + +## Backend Agnostic + +Thanks to this adapter system, react-admin can communicate with any API. It doesn't care if your API is a REST API, a GraphQL API, a SOAP API, a JSON-RPC API, or even a local API. It doesn't care if your API is written in PHP, Python, Ruby, Java, or JavaScript. It doesn't care if your API is a third-party API or a homegrown API. + +React-admin ships with [more than 50 data providers](./DataProviderList.md) for popular API flavors. + +You can also [write your own Data Provider](./DataProviderWriting.md) to fit your backend's particularities. Data Providers can use `fetch`, `axios`, `apollo-client`, or any other library to communicate with APIs. The Data Provider is also the ideal place to add custom HTTP headers, authentication, etc. + +Check out the [Data Provider Setup](./DataProviders.md) documentation for more details on how to set up a Data Provider in your app. + +## Calling The Data Provider + +Many react-admin components use the Data Provider: page components like `` and ``, reference components like `` and ``, action Buttons like `` and ``, and many more. + +If you need to call the Data Provider directly from your components, you can use the specialized hooks provided by react-admin: + +* [`useGetList`](./useGetList.md) +* [`useGetOne`](./useGetOne.md) +* [`useGetMany`](./useGetMany.md) +* [`useGetManyReference`](./useGetManyReference.md) +* [`useCreate`](./useCreate.md) +* [`useUpdate`](./useUpdate.md) +* [`useUpdateMany`](./useUpdateMany.md) +* [`useDelete`](./useDelete.md) +* [`useDeleteMany`](./useDeleteMany.md) + +For instance, to call `dataProvider.getOne()`, use the `useGetOne` hook: + +```jsx +import { useGetOne } from 'react-admin'; +import { Loading, Error } from './MyComponents'; + +const UserProfile = ({ userId }) => { + const { data: user, isPending, error } = useGetOne('users', { id: userId }); + + if (isPending) return ; + if (error) return ; + if (!user) return null; + + return ( +
    +
  • Name: {user.name}
  • +
  • Email: {user.email}
  • +
+ ) +}; +``` + +You can also call the `useDataProvider` hook to access the `dataProvider` directly: + +```jsx +import { useDataProvider } from 'react-admin'; + +const BanUserButton = ({ userId }) => { + const dataProvider = useDataProvider(); + const handleClick = () => { + dataProvider.update('users', { id: userId, data: { isBanned: true } }); + }; + return + +); +``` + +This approach enables you to override specific parts of the logic of a component by composing it with another component. + +The trade-off with this approach is that sometimes react-admin may require you to override several components just to enable one specific feature. For instance, to override the Menu, you must first create a custom layout using your menu as the `` prop, then pass it as the `` prop: + +```jsx +// in src/MyLayout.js +import { Layout } from 'react-admin'; +import { Menu } from './Menu'; + +export const MyLayout = ({ children }) => ( + + {children} + +); + +// in src/App.js +import { Admin } from 'react-admin'; +import { MyLayout } from './MyLayout'; + +const App = () => ( + + // ... + +); +``` + +Although this drawback exists, we accept it because the use of composition in react-admin makes the components highly extensible, and it significantly improves the readability and maintainability of the code. + +## Hooks + +When you find that you cannot tweak a react-admin component using props, you can always turn to the lower-level API: hooks. In fact, the core of react-admin is a headless library called `ra-core`, which primarily consists of hooks. These hooks hide the framework's implementation details, allowing you to focus on your business logic. It's perfectly normal to use react-admin hooks in your own components if the default UI doesn't meet your specific requirements. + +For example, the `` button used in `pessimistic` mode renders a confirmation dialog when clicked and then calls the `dataProvider.delete()` method for the current record. If you want the same feature but with a different UI, you can use the `useDeleteWithConfirmController` hook: + +```jsx +const DeleteButton = () => { + const resource = useResourceContext(); + const record = useRecordContext(); + const { + open, + isPending, + handleDialogOpen, + handleDialogClose, + handleDelete, + } = useDeleteWithConfirmController({ redirect: 'list' }); + + return ( + + + + + ); +}; +``` + +The fact that hook names often end with `Controller` is intentional and reflects the use of [the Model-View-Controller (MVC) pattern](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) for complex components in react-admin. + +- The Controller logic is handled by React hooks (e.g. `useListController`). +- The view logic is managed by React components (e.g. ``). +- The model logic is left to the developer, and react-admin simply defines the interface that the model must expose through its Providers. + +React-admin exposes [dozens of hooks](./Reference.md#hooks) to assist you in building your own components. You can even construct an entire react-admin application without relying on the Material UI components and use a different UI kit if desired (see for instance [shadcn-admin-kit](https://github.com/marmelab/shadcn-admin-kit), a library for building admin apps with Shadcn UI). This flexibility allows you to tailor the application to your specific needs and preferences. + +## Context: Pull, Don't Push + +Communication between components can be challenging, especially in large React applications, where passing props down several levels can become cumbersome. React-admin addresses this issue using a pull model, where components expose props to their descendants via a context, and descendants can consume these props using custom hooks. + +Whenever a react-admin component fetches data or defines a callback, it creates a context and places the data and callback in it. + +For instance, the `` component creates an `I18NProviderContext`, which exposes the `translate` function. All components in the application can utilize the `useTranslate` hook, which reads the `I18NProviderContext`, for translating labels and messages. + +```jsx +import { useTranslate } from 'ra-core'; + +export const MyHelloButton = ({ handleClick }) => { + const translate = useTranslate(); + return ( + + ); +}; +``` + +Similarly, the `` component fetches a record and exposes it via a `RecordContext`. Inside the `` component, you can use the `useRecordContext` hook to access the record data. For example, you can use it to display a map of the record's location. + +```jsx +import { ShowBase, useRecordContext } from 'ra-core'; +import { MapContainer, TileLayer, Marker } from 'react-leaflet'; + +const LocationField = ({ source }) => { + const record = useRecordContext(props); // use the RecordContext created by + if (!record) return null; + + return ( + + + + + ); +}; + +const StoreShowPage = () => ( + {/* create a RecordContext */} +
+ +
+
+) +``` + +This approach eliminates the need for a dependency injection system and provides an elegant solution to access data and callbacks from higher levels in the render tree. + +So when you write a component that needs to access data or callbacks defined higher in the render tree, you can always find a context to get it. + +Contexts are fundamental concepts in React Admin. If you are not familiar with them, don't hesitate to read the [React documentation on Context](https://react.dev/learn/passing-data-deeply-with-context). Understanding contexts will greatly enhance your understanding of how react-admin leverages them to create a powerful and flexible framework. + +## Awesome Developer Experience + +With react-admin, developers assemble application components without having to worry about low-level details. They need less code for the same result, and they can **focus on the business logic** of their app. + +We've crafted the API of react-admin's components and hooks to be as **intuitive** as possible. The react-admin core team uses react-admin every day, and we're always looking for ways to improve the developer experience. + +React-admin provides the **best-in-class documentation**, demo apps, and support. Error messages are clear and actionable. Thanks to extensive TypeScript types and JSDoc, it's easy to use react-admin in any IDE. The API is stable and **breaking changes are very rare**. You can debug your app with the [query](./DataProviders.md#enabling-query-logs) and [form](https://react-hook-form.com/dev-tools) developer tools, and inspect the react-admin code right in your browser. + +That probably explains why more than 3,000 new apps are published every month using react-admin. + +So react-admin is not just the assembly of [React Query](https://react-query.tanstack.com/), [react-hook-form](https://react-hook-form.com/), [react-router](https://reacttraining.com/react-router/), [Material UI](https://mui.com/material-ui/getting-started/), and [Emotion](https://github.com/emotion-js/emotion). It's a **framework** made to speed up and facilitate the development of single-page apps in React. \ No newline at end of file diff --git a/docs_headless/src/content/docs/mui/guides/CRUD.md b/docs_headless/src/content/docs/mui/guides/CRUD.md new file mode 100644 index 00000000000..95eee11f546 --- /dev/null +++ b/docs_headless/src/content/docs/mui/guides/CRUD.md @@ -0,0 +1,469 @@ +--- +title: "CRUD Pages" +--- + +Most admin and B2B apps start with a few basic screens to manipulate records: + +- A list page, including the ability to filter, paginate, and sort the records +- A read-only page displaying the record details +- An edition page, allowing to update the record via a form +- A creation page + +We call this type of interface a "CRUD" interface because it allows us to Create, Read, Update, and Delete records. + +React-admin started as an engine to generate such CRUD interfaces, and it still does it very well. **Building CRUD interfaces with react-admin requires little to no effort**, and it's very easy to customize them. + + + +## Page Components + +React-admin provides page components for CRUD operations: + +- [``](./ListTutorial.md) displays a list of records +- [``](./Show.md) displays a record in read-only mode +- [``](./EditTutorial.md) displays a form to edit a record +- [``](./Create.md) displays a form to create a record + +Each component reads the parameters from the URL, fetches the data from the data provider, stores the data in a context, and renders its child component. + +For example, to display a list of posts, you would use the `` component: + +```jsx +import { List, DataTable } from 'react-admin'; + +const PostList = () => ( + + + + + + + +); +``` + +Here, the `` component will call `dataProvider.getList('posts')` to fetch the list of posts and create a `ListContext` to store the data. The `` component will read the data from that `ListContext` and render a row for each post. That's why there is no need to explicitly pass the data to the `` component. + +## Page Context + +`` and other page components don't just fetch data; they provide a way to update the page settings: + +- Sort field and order +- Current page & page size +- Filters +- Record selection + +The [`ListContext`](./useListContext.md) exposes callbacks to update these settings, and ``'s children components like `` use these callbacks to update the data. + +```jsx +const listContext = useListContext(); +const { + // Data + data, // Array of the list records, e.g. [{ id: 123, title: 'hello world' }, { ... } + total, // Total number of results for the current filters, excluding pagination. Useful to build the pagination controls, e.g. 23 + meta, // Additional information about the list, like facets & statistics + isPending, // Boolean, true until the data is available + isFetching, // Boolean, true while the data is being fetched, false once the data is fetched + isLoading, // Boolean, true until the data is fetched for the first time + + // Pagination + page, // Current page. Starts at 1 + perPage, // Number of results per page. Defaults to 25 + setPage, // Callback to change the page, e.g. setPage(3) + setPerPage, // Callback to change the number of results per page, e.g. setPerPage(25) + hasPreviousPage, // Boolean, true if the current page is not the first one + hasNextPage, // Boolean, true if the current page is not the last one + + // Sorting + sort, // Sort object { field, order }, e.g. { field: 'date', order: 'DESC' } + setSort, // Callback to change the sort, e.g. setSort({ field: 'name', order: 'ASC' }) + + // Filtering + filterValues, // Dictionary of filter values, e.g. { title: 'lorem', nationality: 'fr' } + displayedFilters, // Dictionary of displayed filters, e.g. { title: true, nationality: true } + setFilters, // Callback to update the filters, e.g. setFilters(filters, displayedFilters) + showFilter, // Callback to show one of the filters, e.g. showFilter('title', defaultValue) + hideFilter, // Callback to hide one of the filters, e.g. hideFilter('title') + + // Record selection + selectedIds, // Array listing the ids of the selected records, e.g. [123, 456] + onSelect, // Callback to change the list of selected records, e.g. onSelect([456, 789]) + onToggleItem, // Callback to toggle the record selection for a given id, e.g. onToggleItem(456) + onUnselectItems, // Callback to clear the record selection, e.g. onUnselectItems(); + + // Misc + defaultTitle, // Translated title based on the resource, e.g. 'Posts' + resource, // Resource name, deduced from the location. e.g. 'posts' + refetch, // Callback for fetching the list data again +} = listContext; +``` + +## CRUD Routes + +You could declare the CRUD routes manually using react-router's `` component. But it's such a typical pattern that react-admin provides a shortcut: the [``](./Resource.md) component. + +```jsx + +``` + +This is the equivalent of the following react-router configuration: + +```jsx + + + } /> + } /> + } /> + } /> + + +``` + +`` defines a `ResourceContext` storing the current resource `name`. This context is used by the ``, ``, ``, and `` components to determine the resource they should fetch. So when declaring page components with ``, you don't need to pass the `resource` prop to them. + +```diff +import { List, DataTable } from 'react-admin'; + +const PostList = () => ( +- ++ + + + + + + +); +``` + +Check [the `` documentation](./Resource.md) to learn more about routing and resource context. + +## The List Page + +To build list pages, developers primarily use the [``](./List.md) component. It fetches a list of records from the data provider and delegates the rendering to its child component (often a [``](./DataTable.md), as in the example below). + +```jsx +import { List, DataTable, TextInput} from 'react-admin'; + +const filters = []; + +const BookList = () => ( + + + + + + + + +); +``` + +`` also lets you customize the UI for filters and pagination. As for ``, it provides tons of customization options, like row expanders, bulk actions, and column chooser. You can learn more in the [List Tutorial](./ListTutorial.md). + +### List Layouts + +You can use any of the following components to build the list page: + + + + + + + + + + +
+ + + + <DataTable> + + + + + <DatagridAG> +
+ + + + <SimpleList> + + + + + <Calendar> +
+ +Inside these list layouts, you can use any of react-admin’s Field components to display the record data. + +### Filter Components + + + + + + + + + + +
+ + + + Filter Button/Form Combo + + + + + <FilterList> Sidebar +
+ + + + <StackedFilters> Dialog + + + + + Global <Search> +
+ +### Buttons + +- [``](./Buttons.md#editbutton): Go to the edit page for a record +- [``](./EditInDialogButton.md): Edit a record in a dialog +- [``](./Buttons.md#exportbutton): A button to export the list data +- [``](./Buttons.md#createbutton): A button to create a new record +- [``](./SortButton.md): A button to sort the list +- [``](./SelectColumnsButton.md): A button to select the columns to display in a DataTable +- [``](./Buttons.md#bulkupdatebutton): A button to update selected records +- [``](./Buttons.md#bulkdeletebutton): A button to delete selected records +- [``](./List.md#actions): A toolbar with a create and an export button + +### Misc + +- [``](./Pagination.md): Renders the page count and buttons to navigate to the previous and next pages +- [``](./SavedQueriesList.md): Lets user save a combination of filters + +### Alternatives to List + +You can also use specialized alternatives to the `` component, which offer type-specific features: + +- [``](./TreeWithDetails.md): A tree view with a detail view for each node +- [``](./Calendar.md#completecalendar): A calendar view for events +- [``](./InfiniteList.md): A list with infinite scrolling + +## The Show Page + +Show pages rely on the [``](./Show.md) component. It reads the record id from the URL, fetches the record from the data provider, and delegates the rendering to its child component, e.g., a [``](./SimpleShowLayout.md): + +```jsx +import { Show, SimpleShowLayout, TextField} from 'react-admin'; + +const BookShow = () => ( + + + + + + + + +); +``` + +You can learn more in the [Show Tutorial](./ShowTutorial.md). + +### Show Layouts + +You can use any of the following components to build the show page: + + + + + + +
+ + + + <SimpleShowLayout> + + + + + <TabbedShowLayout> +
+ +Inside these show layouts, you can use any of react-admin's [Field components](./Fields.md) to display the record data. + +### Buttons + +- [``](./Buttons.md#editbutton): Go to the edit page for a record +- [``](./Buttons.md#createbutton): A button to create a new record +- [``](./Buttons.md#listbutton): Go to the list page for a record +- [``](./Buttons.md#clonebutton): Clone a record + +### Misc + +- [``](./Labeled.md): A component to display a field with a label + +## The Edit & Create Pages + +The [``](./Edit.md) and [``](./Create.md) components are very similar. They are useful for editing a record - either fetched from the API or a new record. Typically, the child component of these pages is a form layout, like a [``](./SimpleForm.md): + +```jsx +import { Edit, SimpleForm, TextInput} from 'react-admin'; + +const BookEdit = () => ( + + + + + + + + +); +``` + +You can learn more in the [Edit Tutorial](./EditTutorial.md). + +### Form Layouts + +You can use any of the following components to build the edit and create pages: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +Forms are very powerful in react-admin. They support default values, sync and async validation, dependent inputs, access control, sub-forms, and more. Check out the [Forms introduction](./Form.md) for more information. Inside the form layouts, you can use any of react-admin's [Input components](./Inputs.md) to edit the record data. + +### Buttons + +- [``](./Buttons.md#showbutton): Go to the show page for a record +- [``](./SaveButton.md): The submit button for the form +- [``](./Buttons.md#clonebutton): Clone a record + +### Misc + +- [``](./Toolbar.md): Customize the form toolbar +- [``](./JsonSchemaForm.md): A form based on a JSON schema +- [``](./AutoSave.md): Automatically save the form + +## Guessers & Scaffolding + +When mapping a new API route to a CRUD view, adding fields one by one can be tedious. React-admin provides a set of guessers that can automatically **generate a complete CRUD UI based on an API response**. + +For instance, the following code will generate a complete CRUD UI for the `users` resource: + +```jsx +import { Admin, Resource, ListGuesser, EditGuesser, ShowGuesser } from 'react-admin'; + +const App = () => ( + + + +); +``` + +Guesser components start by fetching data from the API, analyzing the shape of the response, and then picking up Field and Input components that match the data type. They also dump the generated code in the console to let you start customizing the UI. + +![ListGuesser](../../../../assets/tutorial_guessed_list.png) + +Check the following components to learn more about guessers: + +- [``](./ListGuesser.md) +- [``](./EditGuesser.md) +- [``](./ShowGuesser.md) + +## Headless Variants + +`` and other page components render their children (e.g., ``) in a page layout. This layout contains a page title (e.g., "Posts"), toolbars for action buttons & filters, a footer for pagination, and a side column. + +But sometimes, you want to use the list data in a different layout, without the page title and toolbar, or with a different UI kit. For these use cases, you can use the headless variants of the page components, which come in two flavors: + +- **Hook**: `useListController`, `useEditController`, `useCreateController`, `useShowController` +- **Component**: ``, ``, ``, `` + +For instance, to use the list data in a custom layout, you can use the `useListController` hook: + +```jsx +import { useListController } from 'react-admin'; + +const MyList = () => { + const { data, ids, total } = useListController({ resource: 'posts' }); + return ( +
+

Posts

+
    + {ids.map(id => ( +
  • {data[id].title}
  • + ))} +
+

Total: {total}

+
+ ); +}; +``` + +If you want to use react-admin components, prefer the Base components, which call the hooks internally and store the values in a context: + +```jsx +import { ListBase, DataTable } from 'react-admin'; + +const MyList = () => ( + + + + + + + +); +``` diff --git a/docs_headless/src/content/docs/mui/guides/DataFetchingGuide.md b/docs_headless/src/content/docs/mui/guides/DataFetchingGuide.md new file mode 100644 index 00000000000..278cca79065 --- /dev/null +++ b/docs_headless/src/content/docs/mui/guides/DataFetchingGuide.md @@ -0,0 +1,418 @@ +--- +layout: default +title: "Data Fetching" +--- + +You can build a react-admin app on top of any API, whether it uses REST, GraphQL, RPC, or even SOAP, regardless of the dialect it uses. This works because react-admin doesn't use `fetch` directly. Instead, it uses a Data Provider object to interface with your API and [React Query](https://tanstack.com/query/v5/docs/react/overview) to handle data fetching. + +## The Data Provider + +In a react-admin app, you don't write API calls using `fetch` or `axios`. Instead, you communicate with your API through an object called the `dataProvider`. + +![Backend agnostic](../../../../assets/data-provider.png) + +The `dataProvider` exposes a predefined interface that allows react-admin to query any API in a normalized way. + +For instance, to query the API for a single record, react-admin calls `dataProvider.getOne()`: + +```tsx +const response = await dataProvider.getOne('posts', { id: 123 }); +console.log(response.data); // { id: 123, title: "hello, world" } +``` + +The Data Provider is responsible for transforming these method calls into HTTP requests and converting the responses into the format expected by react-admin. In technical terms, a Data Provider is an *adapter* for an API. + +A Data Provider must implement the following methods: + +```jsx +const dataProvider = { + async getList(resource, { sort, filter, pagination }) => ({ data: Record[], total: number }), + async getOne(resource, { id }) => ({ data: Record }), + async getMany(resource, { ids }) => ({ data: Record[] }), + async getManyReference(resource, { target, id, sort, filter, pagination }) => ({ data: Record[], total: number }), + async create(resource, { data }) => ({ data: Record }), + async update(resource, { id, data }) => ({ data: Record }), + async updateMany(resource, { ids, data }) => ({ data: Identifier[] }), + async delete(resource, { id } ) => ({ data: Record }), + async deleteMany(resource, { ids }) => ({ data: Identifier[] }), +} +``` + +**Tip**: A Data Provider can have [additional methods](./Actions.md#calling-custom-methods) beyond these 9. For example, you can add custom methods for non-REST API endpoints, tree structure manipulations, or realtime updates. + +The Data Provider is a key part of react-admin's architecture. By standardizing the Data Provider interface, react-admin can offer powerful features, like reference handling, optimistic updates, and autogenerated CRUD components. + +## Backend Agnostic + +Thanks to this adapter system, react-admin can communicate with any API. It doesn't care if your API is a REST API, a GraphQL API, a SOAP API, a JSON-RPC API, or even a local API. It doesn't care if your API is written in PHP, Python, Ruby, Java, or JavaScript. It doesn't care if your API is a third-party API or a homegrown API. + +React-admin ships with [more than 50 data providers](./DataProviderList.md) for popular API flavors. + +You can also [write your own Data Provider](./DataProviderWriting.md) to fit your backend's particularities. Data Providers can use `fetch`, `axios`, `apollo-client`, or any other library to communicate with APIs. The Data Provider is also the ideal place to add custom HTTP headers, authentication, etc. + +Check out the [Data Provider Setup](./DataProviders.md) documentation for more details on how to set up a Data Provider in your app. + +## Calling The Data Provider + +Many react-admin components use the Data Provider: page components like `` and ``, reference components like `` and ``, action Buttons like `` and ``, and many more. + +If you need to call the Data Provider directly from your components, you can use the specialized hooks provided by react-admin: + +* [`useGetList`](./useGetList.md) +* [`useGetOne`](./useGetOne.md) +* [`useGetMany`](./useGetMany.md) +* [`useGetManyReference`](./useGetManyReference.md) +* [`useCreate`](./useCreate.md) +* [`useUpdate`](./useUpdate.md) +* [`useUpdateMany`](./useUpdateMany.md) +* [`useDelete`](./useDelete.md) +* [`useDeleteMany`](./useDeleteMany.md) + +For instance, to call `dataProvider.getOne()`, use the `useGetOne` hook: + +```jsx +import { useGetOne } from 'react-admin'; +import { Loading, Error } from './MyComponents'; + +const UserProfile = ({ userId }) => { + const { data: user, isPending, error } = useGetOne('users', { id: userId }); + + if (isPending) return ; + if (error) return ; + if (!user) return null; + + return ( +
    +
  • Name: {user.name}
  • +
  • Email: {user.email}
  • +
+ ) +}; +``` + +You can also call the `useDataProvider` hook to access the `dataProvider` directly: + +```jsx +import { useDataProvider } from 'react-admin'; + +const BanUserButton = ({ userId }) => { + const dataProvider = useDataProvider(); + const handleClick = () => { + dataProvider.update('users', { id: userId, data: { isBanned: true } }); + }; + return + +); +``` + +This approach enables you to override specific parts of the logic of a component by composing it with another component. + +The trade-off with this approach is that sometimes react-admin may require you to override several components just to enable one specific feature. For instance, to override the Menu, you must first create a custom layout using your menu as the `` prop, then pass it as the `` prop: + +```jsx +// in src/MyLayout.js +import { Layout } from 'react-admin'; +import { Menu } from './Menu'; + +export const MyLayout = ({ children }) => ( + + {children} + +); + +// in src/App.js +import { Admin } from 'react-admin'; +import { MyLayout } from './MyLayout'; + +const App = () => ( + + // ... + +); +``` + +Although this drawback exists, we accept it because the use of composition in react-admin makes the components highly extensible, and it significantly improves the readability and maintainability of the code. + +## Hooks + +When you find that you cannot tweak a react-admin component using props, you can always turn to the lower-level API: hooks. In fact, the core of react-admin is a headless library called `ra-core`, which primarily consists of hooks. These hooks hide the framework's implementation details, allowing you to focus on your business logic. It's perfectly normal to use react-admin hooks in your own components if the default UI doesn't meet your specific requirements. + +For example, the `` button used in `pessimistic` mode renders a confirmation dialog when clicked and then calls the `dataProvider.delete()` method for the current record. If you want the same feature but with a different UI, you can use the `useDeleteWithConfirmController` hook: + +```jsx +const DeleteButton = () => { + const resource = useResourceContext(); + const record = useRecordContext(); + const { + open, + isPending, + handleDialogOpen, + handleDialogClose, + handleDelete, + } = useDeleteWithConfirmController({ redirect: 'list' }); + + return ( + + + + + ); +}; +``` + +The fact that hook names often end with `Controller` is intentional and reflects the use of [the Model-View-Controller (MVC) pattern](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) for complex components in react-admin. + +- The Controller logic is handled by React hooks (e.g. `useListController`). +- The view logic is managed by React components (e.g. ``). +- The model logic is left to the developer, and react-admin simply defines the interface that the model must expose through its Providers. + +React-admin exposes [dozens of hooks](./Reference.md#hooks) to assist you in building your own components. You can even construct an entire react-admin application without relying on the Material UI components and use a different UI kit if desired (see for instance [shadcn-admin-kit](https://github.com/marmelab/shadcn-admin-kit), a library for building admin apps with Shadcn UI). This flexibility allows you to tailor the application to your specific needs and preferences. + +## Context: Pull, Don't Push + +Communication between components can be challenging, especially in large React applications, where passing props down several levels can become cumbersome. React-admin addresses this issue using a pull model, where components expose props to their descendants via a context, and descendants can consume these props using custom hooks. + +Whenever a react-admin component fetches data or defines a callback, it creates a context and places the data and callback in it. + +For instance, the `` component creates an `I18NProviderContext`, which exposes the `translate` function. All components in the application can utilize the `useTranslate` hook, which reads the `I18NProviderContext`, for translating labels and messages. + +```jsx +import { useTranslate } from 'ra-core'; + +export const MyHelloButton = ({ handleClick }) => { + const translate = useTranslate(); + return ( + + ); +}; +``` + +Similarly, the `` component fetches a record and exposes it via a `RecordContext`. Inside the `` component, you can use the `useRecordContext` hook to access the record data. For example, you can use it to display a map of the record's location. + +```jsx +import { ShowBase, useRecordContext } from 'ra-core'; +import { MapContainer, TileLayer, Marker } from 'react-leaflet'; + +const LocationField = ({ source }) => { + const record = useRecordContext(props); // use the RecordContext created by + if (!record) return null; + + return ( + + + + + ); +}; + +const StoreShowPage = () => ( + {/* create a RecordContext */} +
+ +
+
+) +``` + +This approach eliminates the need for a dependency injection system and provides an elegant solution to access data and callbacks from higher levels in the render tree. + +So when you write a component that needs to access data or callbacks defined higher in the render tree, you can always find a context to get it. + +Contexts are fundamental concepts in React Admin. If you are not familiar with them, don't hesitate to read the [React documentation on Context](https://react.dev/learn/passing-data-deeply-with-context). Understanding contexts will greatly enhance your understanding of how react-admin leverages them to create a powerful and flexible framework. + +## Awesome Developer Experience + +With react-admin, developers assemble application components without having to worry about low-level details. They need less code for the same result, and they can **focus on the business logic** of their app. + +We've crafted the API of react-admin's components and hooks to be as **intuitive** as possible. The react-admin core team uses react-admin every day, and we're always looking for ways to improve the developer experience. + +React-admin provides the **best-in-class documentation**, demo apps, and support. Error messages are clear and actionable. Thanks to extensive TypeScript types and JSDoc, it's easy to use react-admin in any IDE. The API is stable and **breaking changes are very rare**. You can debug your app with the [query](./DataProviders.md#enabling-query-logs) and [form](https://react-hook-form.com/dev-tools) developer tools, and inspect the react-admin code right in your browser. + +That probably explains why more than 3,000 new apps are published every month using react-admin. + +So react-admin is not just the assembly of [React Query](https://react-query.tanstack.com/), [react-hook-form](https://react-hook-form.com/), [react-router](https://reacttraining.com/react-router/), [Material UI](https://mui.com/material-ui/getting-started/), and [Emotion](https://github.com/emotion-js/emotion). It's a **framework** made to speed up and facilitate the development of single-page apps in React. \ No newline at end of file diff --git a/docs_headless/src/content/docs/shadcn/guides/CRUD.md b/docs_headless/src/content/docs/shadcn/guides/CRUD.md new file mode 100644 index 00000000000..95eee11f546 --- /dev/null +++ b/docs_headless/src/content/docs/shadcn/guides/CRUD.md @@ -0,0 +1,469 @@ +--- +title: "CRUD Pages" +--- + +Most admin and B2B apps start with a few basic screens to manipulate records: + +- A list page, including the ability to filter, paginate, and sort the records +- A read-only page displaying the record details +- An edition page, allowing to update the record via a form +- A creation page + +We call this type of interface a "CRUD" interface because it allows us to Create, Read, Update, and Delete records. + +React-admin started as an engine to generate such CRUD interfaces, and it still does it very well. **Building CRUD interfaces with react-admin requires little to no effort**, and it's very easy to customize them. + + + +## Page Components + +React-admin provides page components for CRUD operations: + +- [``](./ListTutorial.md) displays a list of records +- [``](./Show.md) displays a record in read-only mode +- [``](./EditTutorial.md) displays a form to edit a record +- [``](./Create.md) displays a form to create a record + +Each component reads the parameters from the URL, fetches the data from the data provider, stores the data in a context, and renders its child component. + +For example, to display a list of posts, you would use the `` component: + +```jsx +import { List, DataTable } from 'react-admin'; + +const PostList = () => ( + + + + + + + +); +``` + +Here, the `` component will call `dataProvider.getList('posts')` to fetch the list of posts and create a `ListContext` to store the data. The `` component will read the data from that `ListContext` and render a row for each post. That's why there is no need to explicitly pass the data to the `` component. + +## Page Context + +`` and other page components don't just fetch data; they provide a way to update the page settings: + +- Sort field and order +- Current page & page size +- Filters +- Record selection + +The [`ListContext`](./useListContext.md) exposes callbacks to update these settings, and ``'s children components like `` use these callbacks to update the data. + +```jsx +const listContext = useListContext(); +const { + // Data + data, // Array of the list records, e.g. [{ id: 123, title: 'hello world' }, { ... } + total, // Total number of results for the current filters, excluding pagination. Useful to build the pagination controls, e.g. 23 + meta, // Additional information about the list, like facets & statistics + isPending, // Boolean, true until the data is available + isFetching, // Boolean, true while the data is being fetched, false once the data is fetched + isLoading, // Boolean, true until the data is fetched for the first time + + // Pagination + page, // Current page. Starts at 1 + perPage, // Number of results per page. Defaults to 25 + setPage, // Callback to change the page, e.g. setPage(3) + setPerPage, // Callback to change the number of results per page, e.g. setPerPage(25) + hasPreviousPage, // Boolean, true if the current page is not the first one + hasNextPage, // Boolean, true if the current page is not the last one + + // Sorting + sort, // Sort object { field, order }, e.g. { field: 'date', order: 'DESC' } + setSort, // Callback to change the sort, e.g. setSort({ field: 'name', order: 'ASC' }) + + // Filtering + filterValues, // Dictionary of filter values, e.g. { title: 'lorem', nationality: 'fr' } + displayedFilters, // Dictionary of displayed filters, e.g. { title: true, nationality: true } + setFilters, // Callback to update the filters, e.g. setFilters(filters, displayedFilters) + showFilter, // Callback to show one of the filters, e.g. showFilter('title', defaultValue) + hideFilter, // Callback to hide one of the filters, e.g. hideFilter('title') + + // Record selection + selectedIds, // Array listing the ids of the selected records, e.g. [123, 456] + onSelect, // Callback to change the list of selected records, e.g. onSelect([456, 789]) + onToggleItem, // Callback to toggle the record selection for a given id, e.g. onToggleItem(456) + onUnselectItems, // Callback to clear the record selection, e.g. onUnselectItems(); + + // Misc + defaultTitle, // Translated title based on the resource, e.g. 'Posts' + resource, // Resource name, deduced from the location. e.g. 'posts' + refetch, // Callback for fetching the list data again +} = listContext; +``` + +## CRUD Routes + +You could declare the CRUD routes manually using react-router's `` component. But it's such a typical pattern that react-admin provides a shortcut: the [``](./Resource.md) component. + +```jsx + +``` + +This is the equivalent of the following react-router configuration: + +```jsx + + + } /> + } /> + } /> + } /> + + +``` + +`` defines a `ResourceContext` storing the current resource `name`. This context is used by the ``, ``, ``, and `` components to determine the resource they should fetch. So when declaring page components with ``, you don't need to pass the `resource` prop to them. + +```diff +import { List, DataTable } from 'react-admin'; + +const PostList = () => ( +- ++ + + + + + + +); +``` + +Check [the `` documentation](./Resource.md) to learn more about routing and resource context. + +## The List Page + +To build list pages, developers primarily use the [``](./List.md) component. It fetches a list of records from the data provider and delegates the rendering to its child component (often a [``](./DataTable.md), as in the example below). + +```jsx +import { List, DataTable, TextInput} from 'react-admin'; + +const filters = []; + +const BookList = () => ( + + + + + + + + +); +``` + +`` also lets you customize the UI for filters and pagination. As for ``, it provides tons of customization options, like row expanders, bulk actions, and column chooser. You can learn more in the [List Tutorial](./ListTutorial.md). + +### List Layouts + +You can use any of the following components to build the list page: + + + + + + + + + + +
+ + + + <DataTable> + + + + + <DatagridAG> +
+ + + + <SimpleList> + + + + + <Calendar> +
+ +Inside these list layouts, you can use any of react-admin’s Field components to display the record data. + +### Filter Components + + + + + + + + + + +
+ + + + Filter Button/Form Combo + + + + + <FilterList> Sidebar +
+ + + + <StackedFilters> Dialog + + + + + Global <Search> +
+ +### Buttons + +- [``](./Buttons.md#editbutton): Go to the edit page for a record +- [``](./EditInDialogButton.md): Edit a record in a dialog +- [``](./Buttons.md#exportbutton): A button to export the list data +- [``](./Buttons.md#createbutton): A button to create a new record +- [``](./SortButton.md): A button to sort the list +- [``](./SelectColumnsButton.md): A button to select the columns to display in a DataTable +- [``](./Buttons.md#bulkupdatebutton): A button to update selected records +- [``](./Buttons.md#bulkdeletebutton): A button to delete selected records +- [``](./List.md#actions): A toolbar with a create and an export button + +### Misc + +- [``](./Pagination.md): Renders the page count and buttons to navigate to the previous and next pages +- [``](./SavedQueriesList.md): Lets user save a combination of filters + +### Alternatives to List + +You can also use specialized alternatives to the `` component, which offer type-specific features: + +- [``](./TreeWithDetails.md): A tree view with a detail view for each node +- [``](./Calendar.md#completecalendar): A calendar view for events +- [``](./InfiniteList.md): A list with infinite scrolling + +## The Show Page + +Show pages rely on the [``](./Show.md) component. It reads the record id from the URL, fetches the record from the data provider, and delegates the rendering to its child component, e.g., a [``](./SimpleShowLayout.md): + +```jsx +import { Show, SimpleShowLayout, TextField} from 'react-admin'; + +const BookShow = () => ( + + + + + + + + +); +``` + +You can learn more in the [Show Tutorial](./ShowTutorial.md). + +### Show Layouts + +You can use any of the following components to build the show page: + + + + + + +
+ + + + <SimpleShowLayout> + + + + + <TabbedShowLayout> +
+ +Inside these show layouts, you can use any of react-admin's [Field components](./Fields.md) to display the record data. + +### Buttons + +- [``](./Buttons.md#editbutton): Go to the edit page for a record +- [``](./Buttons.md#createbutton): A button to create a new record +- [``](./Buttons.md#listbutton): Go to the list page for a record +- [``](./Buttons.md#clonebutton): Clone a record + +### Misc + +- [``](./Labeled.md): A component to display a field with a label + +## The Edit & Create Pages + +The [``](./Edit.md) and [``](./Create.md) components are very similar. They are useful for editing a record - either fetched from the API or a new record. Typically, the child component of these pages is a form layout, like a [``](./SimpleForm.md): + +```jsx +import { Edit, SimpleForm, TextInput} from 'react-admin'; + +const BookEdit = () => ( + + + + + + + + +); +``` + +You can learn more in the [Edit Tutorial](./EditTutorial.md). + +### Form Layouts + +You can use any of the following components to build the edit and create pages: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +Forms are very powerful in react-admin. They support default values, sync and async validation, dependent inputs, access control, sub-forms, and more. Check out the [Forms introduction](./Form.md) for more information. Inside the form layouts, you can use any of react-admin's [Input components](./Inputs.md) to edit the record data. + +### Buttons + +- [``](./Buttons.md#showbutton): Go to the show page for a record +- [``](./SaveButton.md): The submit button for the form +- [``](./Buttons.md#clonebutton): Clone a record + +### Misc + +- [``](./Toolbar.md): Customize the form toolbar +- [``](./JsonSchemaForm.md): A form based on a JSON schema +- [``](./AutoSave.md): Automatically save the form + +## Guessers & Scaffolding + +When mapping a new API route to a CRUD view, adding fields one by one can be tedious. React-admin provides a set of guessers that can automatically **generate a complete CRUD UI based on an API response**. + +For instance, the following code will generate a complete CRUD UI for the `users` resource: + +```jsx +import { Admin, Resource, ListGuesser, EditGuesser, ShowGuesser } from 'react-admin'; + +const App = () => ( + + + +); +``` + +Guesser components start by fetching data from the API, analyzing the shape of the response, and then picking up Field and Input components that match the data type. They also dump the generated code in the console to let you start customizing the UI. + +![ListGuesser](../../../../assets/tutorial_guessed_list.png) + +Check the following components to learn more about guessers: + +- [``](./ListGuesser.md) +- [``](./EditGuesser.md) +- [``](./ShowGuesser.md) + +## Headless Variants + +`` and other page components render their children (e.g., ``) in a page layout. This layout contains a page title (e.g., "Posts"), toolbars for action buttons & filters, a footer for pagination, and a side column. + +But sometimes, you want to use the list data in a different layout, without the page title and toolbar, or with a different UI kit. For these use cases, you can use the headless variants of the page components, which come in two flavors: + +- **Hook**: `useListController`, `useEditController`, `useCreateController`, `useShowController` +- **Component**: ``, ``, ``, `` + +For instance, to use the list data in a custom layout, you can use the `useListController` hook: + +```jsx +import { useListController } from 'react-admin'; + +const MyList = () => { + const { data, ids, total } = useListController({ resource: 'posts' }); + return ( +
+

Posts

+
    + {ids.map(id => ( +
  • {data[id].title}
  • + ))} +
+

Total: {total}

+
+ ); +}; +``` + +If you want to use react-admin components, prefer the Base components, which call the hooks internally and store the values in a context: + +```jsx +import { ListBase, DataTable } from 'react-admin'; + +const MyList = () => ( + + + + + + + +); +``` diff --git a/docs_headless/src/content/docs/shadcn/guides/DataFetchingGuide.md b/docs_headless/src/content/docs/shadcn/guides/DataFetchingGuide.md new file mode 100644 index 00000000000..278cca79065 --- /dev/null +++ b/docs_headless/src/content/docs/shadcn/guides/DataFetchingGuide.md @@ -0,0 +1,418 @@ +--- +layout: default +title: "Data Fetching" +--- + +You can build a react-admin app on top of any API, whether it uses REST, GraphQL, RPC, or even SOAP, regardless of the dialect it uses. This works because react-admin doesn't use `fetch` directly. Instead, it uses a Data Provider object to interface with your API and [React Query](https://tanstack.com/query/v5/docs/react/overview) to handle data fetching. + +## The Data Provider + +In a react-admin app, you don't write API calls using `fetch` or `axios`. Instead, you communicate with your API through an object called the `dataProvider`. + +![Backend agnostic](../../../../assets/data-provider.png) + +The `dataProvider` exposes a predefined interface that allows react-admin to query any API in a normalized way. + +For instance, to query the API for a single record, react-admin calls `dataProvider.getOne()`: + +```tsx +const response = await dataProvider.getOne('posts', { id: 123 }); +console.log(response.data); // { id: 123, title: "hello, world" } +``` + +The Data Provider is responsible for transforming these method calls into HTTP requests and converting the responses into the format expected by react-admin. In technical terms, a Data Provider is an *adapter* for an API. + +A Data Provider must implement the following methods: + +```jsx +const dataProvider = { + async getList(resource, { sort, filter, pagination }) => ({ data: Record[], total: number }), + async getOne(resource, { id }) => ({ data: Record }), + async getMany(resource, { ids }) => ({ data: Record[] }), + async getManyReference(resource, { target, id, sort, filter, pagination }) => ({ data: Record[], total: number }), + async create(resource, { data }) => ({ data: Record }), + async update(resource, { id, data }) => ({ data: Record }), + async updateMany(resource, { ids, data }) => ({ data: Identifier[] }), + async delete(resource, { id } ) => ({ data: Record }), + async deleteMany(resource, { ids }) => ({ data: Identifier[] }), +} +``` + +**Tip**: A Data Provider can have [additional methods](./Actions.md#calling-custom-methods) beyond these 9. For example, you can add custom methods for non-REST API endpoints, tree structure manipulations, or realtime updates. + +The Data Provider is a key part of react-admin's architecture. By standardizing the Data Provider interface, react-admin can offer powerful features, like reference handling, optimistic updates, and autogenerated CRUD components. + +## Backend Agnostic + +Thanks to this adapter system, react-admin can communicate with any API. It doesn't care if your API is a REST API, a GraphQL API, a SOAP API, a JSON-RPC API, or even a local API. It doesn't care if your API is written in PHP, Python, Ruby, Java, or JavaScript. It doesn't care if your API is a third-party API or a homegrown API. + +React-admin ships with [more than 50 data providers](./DataProviderList.md) for popular API flavors. + +You can also [write your own Data Provider](./DataProviderWriting.md) to fit your backend's particularities. Data Providers can use `fetch`, `axios`, `apollo-client`, or any other library to communicate with APIs. The Data Provider is also the ideal place to add custom HTTP headers, authentication, etc. + +Check out the [Data Provider Setup](./DataProviders.md) documentation for more details on how to set up a Data Provider in your app. + +## Calling The Data Provider + +Many react-admin components use the Data Provider: page components like `` and ``, reference components like `` and ``, action Buttons like `` and ``, and many more. + +If you need to call the Data Provider directly from your components, you can use the specialized hooks provided by react-admin: + +* [`useGetList`](./useGetList.md) +* [`useGetOne`](./useGetOne.md) +* [`useGetMany`](./useGetMany.md) +* [`useGetManyReference`](./useGetManyReference.md) +* [`useCreate`](./useCreate.md) +* [`useUpdate`](./useUpdate.md) +* [`useUpdateMany`](./useUpdateMany.md) +* [`useDelete`](./useDelete.md) +* [`useDeleteMany`](./useDeleteMany.md) + +For instance, to call `dataProvider.getOne()`, use the `useGetOne` hook: + +```jsx +import { useGetOne } from 'react-admin'; +import { Loading, Error } from './MyComponents'; + +const UserProfile = ({ userId }) => { + const { data: user, isPending, error } = useGetOne('users', { id: userId }); + + if (isPending) return ; + if (error) return ; + if (!user) return null; + + return ( +
    +
  • Name: {user.name}
  • +
  • Email: {user.email}
  • +
+ ) +}; +``` + +You can also call the `useDataProvider` hook to access the `dataProvider` directly: + +```jsx +import { useDataProvider } from 'react-admin'; + +const BanUserButton = ({ userId }) => { + const dataProvider = useDataProvider(); + const handleClick = () => { + dataProvider.update('users', { id: userId, data: { isBanned: true } }); + }; + return - -); -``` - -This approach enables you to override specific parts of the logic of a component by composing it with another component. - -The trade-off with this approach is that sometimes react-admin may require you to override several components just to enable one specific feature. For instance, to override the Menu, you must first create a custom layout using your menu as the `` prop, then pass it as the `` prop: - -::: code-group labels=[src/MyLayout.tsx, src/App.tsx] -```tsx "import { Menu } from './Menu';" "menu={Menu}" -import { Layout } from 'react-admin'; -import { Menu } from './Menu'; - -export const MyLayout = ({ children }) => ( - - {children} - -); -``` -```tsx "import { MyLayout } from './MyLayout';" "layout={MyLayout}" -import { Admin } from 'react-admin'; -import { MyLayout } from './MyLayout'; - -const App = () => ( - - // ... - -); -``` -::: - -Although this drawback exists, we accept it because the use of composition in react-admin makes the components highly extensible, and it significantly improves the readability and maintainability of the code. - -## Hooks - -When you find that you cannot tweak a react-admin component using props, you can always turn to the lower-level API: hooks. In fact, the core of react-admin is a headless library called `ra-core`, which primarily consists of hooks. These hooks hide the framework's implementation details, allowing you to focus on your business logic. It's perfectly normal to use react-admin hooks in your own components if the default UI doesn't meet your specific requirements. - -For example, the `` button used in `pessimistic` mode renders a confirmation dialog when clicked and then calls the `dataProvider.delete()` method for the current record. If you want the same feature but with a different UI, you can use the `useDeleteWithConfirmController` hook: - -```jsx -const DeleteButton = () => { - const resource = useResourceContext(); - const record = useRecordContext(); - const { - open, - isPending, - handleDialogOpen, - handleDialogClose, - handleDelete, - } = useDeleteWithConfirmController({ redirect: 'list' }); - - return ( - - - - - ); -}; -``` - -The fact that hook names often end with `Controller` is intentional and reflects the use of [the Model-View-Controller (MVC) pattern](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) for complex components in react-admin. - -- The Controller logic is handled by React hooks (e.g. `useListController`). -- The view logic is managed by React components (e.g. ``). -- The model logic is left to the developer, and react-admin simply defines the interface that the model must expose through its Providers. - -React-admin exposes [dozens of hooks](./Reference.md#hooks) to assist you in building your own components. You can even construct an entire react-admin application without relying on the Material UI components and use a different UI kit if desired (see for instance [shadcn-admin-kit](https://github.com/marmelab/shadcn-admin-kit), a library for building admin apps with Shadcn UI). This flexibility allows you to tailor the application to your specific needs and preferences. - -## Context: Pull, Don't Push - -Communication between components can be challenging, especially in large React applications, where passing props down several levels can become cumbersome. React-admin addresses this issue using a pull model, where components expose props to their descendants via a context, and descendants can consume these props using custom hooks. - -Whenever a react-admin component fetches data or defines a callback, it creates a context and places the data and callback in it. - -For instance, the `` component creates an `I18NProviderContext`, which exposes the `translate` function. All components in the application can utilize the `useTranslate` hook, which reads the `I18NProviderContext`, for translating labels and messages. - -```jsx -import { useTranslate } from 'ra-core'; - -export const MyHelloButton = ({ handleClick }) => { - const translate = useTranslate(); - return ( - - ); -}; -``` - -Similarly, the `` component fetches a record and exposes it via a `RecordContext`. Inside the `` component, you can use the `useRecordContext` hook to access the record data. For example, you can use it to display a map of the record's location. - -```jsx -import { ShowBase, useRecordContext } from 'ra-core'; -import { MapContainer, TileLayer, Marker } from 'react-leaflet'; - -const LocationField = ({ source }) => { - const record = useRecordContext(props); // use the RecordContext created by - if (!record) return null; - - return ( - - - - - ); -}; - -const StoreShowPage = () => ( - {/* create a RecordContext */} -
- -
-
-) -``` - -This approach eliminates the need for a dependency injection system and provides an elegant solution to access data and callbacks from higher levels in the render tree. - -So when you write a component that needs to access data or callbacks defined higher in the render tree, you can always find a context to get it. - -Contexts are fundamental concepts in React Admin. If you are not familiar with them, don't hesitate to read the [React documentation on Context](https://react.dev/learn/passing-data-deeply-with-context). Understanding contexts will greatly enhance your understanding of how react-admin leverages them to create a powerful and flexible framework. - -## Awesome Developer Experience - -With react-admin, developers assemble application components without having to worry about low-level details. They need less code for the same result, and they can **focus on the business logic** of their app. - -We've crafted the API of react-admin's components and hooks to be as **intuitive** as possible. The react-admin core team uses react-admin every day, and we're always looking for ways to improve the developer experience. - -React-admin provides the **best-in-class documentation**, demo apps, and support. Error messages are clear and actionable. Thanks to extensive TypeScript types and JSDoc, it's easy to use react-admin in any IDE. The API is stable and **breaking changes are very rare**. You can debug your app with the [query](./DataProviders.md#enabling-query-logs) and [form](https://react-hook-form.com/dev-tools) developer tools, and inspect the react-admin code right in your browser. - -That probably explains why more than 3,000 new apps are published every month using react-admin. - -So react-admin is not just the assembly of [React Query](https://react-query.tanstack.com/), [react-hook-form](https://react-hook-form.com/), [react-router](https://reacttraining.com/react-router/), [Material UI](https://mui.com/material-ui/getting-started/), and [Emotion](https://github.com/emotion-js/emotion). It's a **framework** made to speed up and facilitate the development of single-page apps in React. \ No newline at end of file diff --git a/docs_headless/src/content/docs/mui/guides/CRUD.md b/docs_headless/src/content/docs/mui/guides/CRUD.md deleted file mode 100644 index 95eee11f546..00000000000 --- a/docs_headless/src/content/docs/mui/guides/CRUD.md +++ /dev/null @@ -1,469 +0,0 @@ ---- -title: "CRUD Pages" ---- - -Most admin and B2B apps start with a few basic screens to manipulate records: - -- A list page, including the ability to filter, paginate, and sort the records -- A read-only page displaying the record details -- An edition page, allowing to update the record via a form -- A creation page - -We call this type of interface a "CRUD" interface because it allows us to Create, Read, Update, and Delete records. - -React-admin started as an engine to generate such CRUD interfaces, and it still does it very well. **Building CRUD interfaces with react-admin requires little to no effort**, and it's very easy to customize them. - - - -## Page Components - -React-admin provides page components for CRUD operations: - -- [``](./ListTutorial.md) displays a list of records -- [``](./Show.md) displays a record in read-only mode -- [``](./EditTutorial.md) displays a form to edit a record -- [``](./Create.md) displays a form to create a record - -Each component reads the parameters from the URL, fetches the data from the data provider, stores the data in a context, and renders its child component. - -For example, to display a list of posts, you would use the `` component: - -```jsx -import { List, DataTable } from 'react-admin'; - -const PostList = () => ( - - - - - - - -); -``` - -Here, the `` component will call `dataProvider.getList('posts')` to fetch the list of posts and create a `ListContext` to store the data. The `` component will read the data from that `ListContext` and render a row for each post. That's why there is no need to explicitly pass the data to the `` component. - -## Page Context - -`` and other page components don't just fetch data; they provide a way to update the page settings: - -- Sort field and order -- Current page & page size -- Filters -- Record selection - -The [`ListContext`](./useListContext.md) exposes callbacks to update these settings, and ``'s children components like `` use these callbacks to update the data. - -```jsx -const listContext = useListContext(); -const { - // Data - data, // Array of the list records, e.g. [{ id: 123, title: 'hello world' }, { ... } - total, // Total number of results for the current filters, excluding pagination. Useful to build the pagination controls, e.g. 23 - meta, // Additional information about the list, like facets & statistics - isPending, // Boolean, true until the data is available - isFetching, // Boolean, true while the data is being fetched, false once the data is fetched - isLoading, // Boolean, true until the data is fetched for the first time - - // Pagination - page, // Current page. Starts at 1 - perPage, // Number of results per page. Defaults to 25 - setPage, // Callback to change the page, e.g. setPage(3) - setPerPage, // Callback to change the number of results per page, e.g. setPerPage(25) - hasPreviousPage, // Boolean, true if the current page is not the first one - hasNextPage, // Boolean, true if the current page is not the last one - - // Sorting - sort, // Sort object { field, order }, e.g. { field: 'date', order: 'DESC' } - setSort, // Callback to change the sort, e.g. setSort({ field: 'name', order: 'ASC' }) - - // Filtering - filterValues, // Dictionary of filter values, e.g. { title: 'lorem', nationality: 'fr' } - displayedFilters, // Dictionary of displayed filters, e.g. { title: true, nationality: true } - setFilters, // Callback to update the filters, e.g. setFilters(filters, displayedFilters) - showFilter, // Callback to show one of the filters, e.g. showFilter('title', defaultValue) - hideFilter, // Callback to hide one of the filters, e.g. hideFilter('title') - - // Record selection - selectedIds, // Array listing the ids of the selected records, e.g. [123, 456] - onSelect, // Callback to change the list of selected records, e.g. onSelect([456, 789]) - onToggleItem, // Callback to toggle the record selection for a given id, e.g. onToggleItem(456) - onUnselectItems, // Callback to clear the record selection, e.g. onUnselectItems(); - - // Misc - defaultTitle, // Translated title based on the resource, e.g. 'Posts' - resource, // Resource name, deduced from the location. e.g. 'posts' - refetch, // Callback for fetching the list data again -} = listContext; -``` - -## CRUD Routes - -You could declare the CRUD routes manually using react-router's `` component. But it's such a typical pattern that react-admin provides a shortcut: the [``](./Resource.md) component. - -```jsx - -``` - -This is the equivalent of the following react-router configuration: - -```jsx - - - } /> - } /> - } /> - } /> - - -``` - -`` defines a `ResourceContext` storing the current resource `name`. This context is used by the ``, ``, ``, and `` components to determine the resource they should fetch. So when declaring page components with ``, you don't need to pass the `resource` prop to them. - -```diff -import { List, DataTable } from 'react-admin'; - -const PostList = () => ( -- -+ - - - - - - -); -``` - -Check [the `` documentation](./Resource.md) to learn more about routing and resource context. - -## The List Page - -To build list pages, developers primarily use the [``](./List.md) component. It fetches a list of records from the data provider and delegates the rendering to its child component (often a [``](./DataTable.md), as in the example below). - -```jsx -import { List, DataTable, TextInput} from 'react-admin'; - -const filters = []; - -const BookList = () => ( - - - - - - - - -); -``` - -`` also lets you customize the UI for filters and pagination. As for ``, it provides tons of customization options, like row expanders, bulk actions, and column chooser. You can learn more in the [List Tutorial](./ListTutorial.md). - -### List Layouts - -You can use any of the following components to build the list page: - - - - - - - - - - -
- - - - <DataTable> - - - - - <DatagridAG> -
- - - - <SimpleList> - - - - - <Calendar> -
- -Inside these list layouts, you can use any of react-admin’s Field components to display the record data. - -### Filter Components - - - - - - - - - - -
- - - - Filter Button/Form Combo - - - - - <FilterList> Sidebar -
- - - - <StackedFilters> Dialog - - - - - Global <Search> -
- -### Buttons - -- [``](./Buttons.md#editbutton): Go to the edit page for a record -- [``](./EditInDialogButton.md): Edit a record in a dialog -- [``](./Buttons.md#exportbutton): A button to export the list data -- [``](./Buttons.md#createbutton): A button to create a new record -- [``](./SortButton.md): A button to sort the list -- [``](./SelectColumnsButton.md): A button to select the columns to display in a DataTable -- [``](./Buttons.md#bulkupdatebutton): A button to update selected records -- [``](./Buttons.md#bulkdeletebutton): A button to delete selected records -- [``](./List.md#actions): A toolbar with a create and an export button - -### Misc - -- [``](./Pagination.md): Renders the page count and buttons to navigate to the previous and next pages -- [``](./SavedQueriesList.md): Lets user save a combination of filters - -### Alternatives to List - -You can also use specialized alternatives to the `` component, which offer type-specific features: - -- [``](./TreeWithDetails.md): A tree view with a detail view for each node -- [``](./Calendar.md#completecalendar): A calendar view for events -- [``](./InfiniteList.md): A list with infinite scrolling - -## The Show Page - -Show pages rely on the [``](./Show.md) component. It reads the record id from the URL, fetches the record from the data provider, and delegates the rendering to its child component, e.g., a [``](./SimpleShowLayout.md): - -```jsx -import { Show, SimpleShowLayout, TextField} from 'react-admin'; - -const BookShow = () => ( - - - - - - - - -); -``` - -You can learn more in the [Show Tutorial](./ShowTutorial.md). - -### Show Layouts - -You can use any of the following components to build the show page: - - - - - - -
- - - - <SimpleShowLayout> - - - - - <TabbedShowLayout> -
- -Inside these show layouts, you can use any of react-admin's [Field components](./Fields.md) to display the record data. - -### Buttons - -- [``](./Buttons.md#editbutton): Go to the edit page for a record -- [``](./Buttons.md#createbutton): A button to create a new record -- [``](./Buttons.md#listbutton): Go to the list page for a record -- [``](./Buttons.md#clonebutton): Clone a record - -### Misc - -- [``](./Labeled.md): A component to display a field with a label - -## The Edit & Create Pages - -The [``](./Edit.md) and [``](./Create.md) components are very similar. They are useful for editing a record - either fetched from the API or a new record. Typically, the child component of these pages is a form layout, like a [``](./SimpleForm.md): - -```jsx -import { Edit, SimpleForm, TextInput} from 'react-admin'; - -const BookEdit = () => ( - - - - - - - - -); -``` - -You can learn more in the [Edit Tutorial](./EditTutorial.md). - -### Form Layouts - -You can use any of the following components to build the edit and create pages: - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -Forms are very powerful in react-admin. They support default values, sync and async validation, dependent inputs, access control, sub-forms, and more. Check out the [Forms introduction](./Form.md) for more information. Inside the form layouts, you can use any of react-admin's [Input components](./Inputs.md) to edit the record data. - -### Buttons - -- [``](./Buttons.md#showbutton): Go to the show page for a record -- [``](./SaveButton.md): The submit button for the form -- [``](./Buttons.md#clonebutton): Clone a record - -### Misc - -- [``](./Toolbar.md): Customize the form toolbar -- [``](./JsonSchemaForm.md): A form based on a JSON schema -- [``](./AutoSave.md): Automatically save the form - -## Guessers & Scaffolding - -When mapping a new API route to a CRUD view, adding fields one by one can be tedious. React-admin provides a set of guessers that can automatically **generate a complete CRUD UI based on an API response**. - -For instance, the following code will generate a complete CRUD UI for the `users` resource: - -```jsx -import { Admin, Resource, ListGuesser, EditGuesser, ShowGuesser } from 'react-admin'; - -const App = () => ( - - - -); -``` - -Guesser components start by fetching data from the API, analyzing the shape of the response, and then picking up Field and Input components that match the data type. They also dump the generated code in the console to let you start customizing the UI. - -![ListGuesser](../../../../assets/tutorial_guessed_list.png) - -Check the following components to learn more about guessers: - -- [``](./ListGuesser.md) -- [``](./EditGuesser.md) -- [``](./ShowGuesser.md) - -## Headless Variants - -`` and other page components render their children (e.g., ``) in a page layout. This layout contains a page title (e.g., "Posts"), toolbars for action buttons & filters, a footer for pagination, and a side column. - -But sometimes, you want to use the list data in a different layout, without the page title and toolbar, or with a different UI kit. For these use cases, you can use the headless variants of the page components, which come in two flavors: - -- **Hook**: `useListController`, `useEditController`, `useCreateController`, `useShowController` -- **Component**: ``, ``, ``, `` - -For instance, to use the list data in a custom layout, you can use the `useListController` hook: - -```jsx -import { useListController } from 'react-admin'; - -const MyList = () => { - const { data, ids, total } = useListController({ resource: 'posts' }); - return ( -
-

Posts

-
    - {ids.map(id => ( -
  • {data[id].title}
  • - ))} -
-

Total: {total}

-
- ); -}; -``` - -If you want to use react-admin components, prefer the Base components, which call the hooks internally and store the values in a context: - -```jsx -import { ListBase, DataTable } from 'react-admin'; - -const MyList = () => ( - - - - - - - -); -``` diff --git a/docs_headless/src/content/docs/mui/guides/CreateReactAdmin.mdx b/docs_headless/src/content/docs/mui/guides/CreateReactAdmin.mdx deleted file mode 100644 index 120f5882938..00000000000 --- a/docs_headless/src/content/docs/mui/guides/CreateReactAdmin.mdx +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: "The create-react-admin CLI" ---- - -import { PackageManagers } from 'starlight-package-managers'; - -# `create-react-admin` - -Use `create-react-admin` to quickly bootstrap a react-admin project using [Vite](https://vitejs.dev/). It's the preferred way to create a new react-admin application. - - - -## Usage - - -Or - - -This will create an empty react-admin application in a directory called `your-admin-name`, powered by [Vite.js](./Vite.md), and install the dependencies. - -You can run the app with: - -```sh -cd your-admin-name -npm run dev -``` - -**Tip**: If you need to pass extra options, depending on the command you choose you may need to add `--` before the arguments: - - -Or - - -```sh -# `npx` doesn't require the `--` before the arguments -npx create-react-admin@latest your-admin-name --interactive -# `npm create` does require the `--` before the arguments -npm create react-admin@latest your-admin-name -- --interactive -``` - -## Options - -The command accepts the following options: - -* `--interactive`: Enable the CLI interactive mode -* `--data-provider`: Set the data provider to use ("data-fakerest", "data-simple-rest", "data-json-server", "supabase" or "none") -* `--auth-provider`: Set the auth provider to use ("local-auth-provider" or "none") -* `--resource`: Add a resource that will be initialized with guessers (can be used multiple times). Set to "skip" to bypass the interactive resource step. -* `--install`: Set the package manager to use for installing dependencies ("yarn", "npm", "bun" or "skip" to bypass the interactive install step) - -## `--interactive` - -When using this option, the terminal will ask you to choose: - -* a [data provider](./DataFetchingGuide.md#the-data-provider) -* an [auth provider](./DataFetchingGuide.md#authentication) -* the names of the [resources](./Resource.md) to add -* the [package manager](#package-manager) to use to install the dependencies - - - -## `--data-provider` - -`create-react-admin` currently supports five presets for the application's data provider: - -* `fakerest`: A client-side data provider that use a JSON object for data, powered by [FakeRest](https://github.com/marmelab/FakeRest). -* `json-server`: A data provider based on the [JSON Server](https://github.com/typicode/json-server) API -* `simple-rest`: A data provider for [simple REST APIs](https://github.com/marmelab/react-admin/tree/master/packages/ra-data-simple-rest) -* `supabase`: A data provider for [Supabase](https://github.com/marmelab/ra-supabase/tree/main/packages/ra-supabase). The auth-provider and resources steps will be skipped. -* `none` (default): To configure the data provider yourself - -You can set your data provider directly with the `--data-provider` option: - -```sh -npx create-react-admin@latest your-admin-name --data-provider json-server -``` - -## `--auth-provider` - -`create-react-admin` currently supports two presets to set the application's auth provider which are: - -* `local-auth-provider`: Hard coded username/password. -* `none` (default): No authProvider. - -You can set your auth provider directly with the `--auth-provider` option: - -```sh -npx create-react-admin@latest your-admin-name --auth-provider local-auth-provider -``` - -## `--resource` - -`create-react-admin` creates an empty app by default. You can initialize CRUD pages for some resources with the `--resource` option: - -```sh -npx create-react-admin@latest your-admin-name --resource posts --resource comments -``` - -**Warning:** the `--resource` flag is incompatible with a `--data-provider supabase` due to a specific [`` component](https://github.com/marmelab/ra-supabase/tree/main/packages/ra-supabase#usage) from `ra-supabase`. - -## `--install` - -`create-react-admin` can install dependencies using any of the following package managers: - -* `npm` (default) -* `yarn` -* `bun` -* `pnpm` -* `none` (if you want to install dependencies yourself) - -You choose an alternative package manager with the `--install` option: - -```sh -npx create-react-admin@latest your-admin-name --install bun -``` diff --git a/docs_headless/src/content/docs/mui/guides/DataFetchingGuide.md b/docs_headless/src/content/docs/mui/guides/DataFetchingGuide.md deleted file mode 100644 index 85912c6aa48..00000000000 --- a/docs_headless/src/content/docs/mui/guides/DataFetchingGuide.md +++ /dev/null @@ -1,423 +0,0 @@ ---- -layout: default -title: "Data Fetching" ---- - -You can build a react-admin app on top of any API, whether it uses REST, GraphQL, RPC, or even SOAP, regardless of the dialect it uses. This works because react-admin doesn't use `fetch` directly. Instead, it uses a Data Provider object to interface with your API and [React Query](https://tanstack.com/query/v5/docs/react/overview) to handle data fetching. - -## The Data Provider - -In a react-admin app, you don't write API calls using `fetch` or `axios`. Instead, you communicate with your API through an object called the `dataProvider`. - -![Backend agnostic](../../../../assets/data-provider.png) - -The `dataProvider` exposes a predefined interface that allows react-admin to query any API in a normalized way. - -For instance, to query the API for a single record, react-admin calls `dataProvider.getOne()`: - -```tsx -const response = await dataProvider.getOne('posts', { id: 123 }); -console.log(response.data); // { id: 123, title: "hello, world" } -``` - -The Data Provider is responsible for transforming these method calls into HTTP requests and converting the responses into the format expected by react-admin. In technical terms, a Data Provider is an *adapter* for an API. - -A Data Provider must implement the following methods: - -```jsx -const dataProvider = { - async getList(resource, { sort, filter, pagination }) => ({ data: Record[], total: number }), - async getOne(resource, { id }) => ({ data: Record }), - async getMany(resource, { ids }) => ({ data: Record[] }), - async getManyReference(resource, { target, id, sort, filter, pagination }) => ({ data: Record[], total: number }), - async create(resource, { data }) => ({ data: Record }), - async update(resource, { id, data }) => ({ data: Record }), - async updateMany(resource, { ids, data }) => ({ data: Identifier[] }), - async delete(resource, { id } ) => ({ data: Record }), - async deleteMany(resource, { ids }) => ({ data: Identifier[] }), -} -``` - -**Tip**: A Data Provider can have [additional methods](./Actions.md#calling-custom-methods) beyond these 9. For example, you can add custom methods for non-REST API endpoints, tree structure manipulations, or realtime updates. - -The Data Provider is a key part of react-admin's architecture. By standardizing the Data Provider interface, react-admin can offer powerful features, like reference handling, optimistic updates, and autogenerated CRUD components. - -## Backend Agnostic - -Thanks to this adapter system, react-admin can communicate with any API. It doesn't care if your API is a REST API, a GraphQL API, a SOAP API, a JSON-RPC API, or even a local API. It doesn't care if your API is written in PHP, Python, Ruby, Java, or JavaScript. It doesn't care if your API is a third-party API or a homegrown API. - -React-admin ships with [more than 50 data providers](./DataProviderList.md) for popular API flavors. - -You can also [write your own Data Provider](./DataProviderWriting.md) to fit your backend's particularities. Data Providers can use `fetch`, `axios`, `apollo-client`, or any other library to communicate with APIs. The Data Provider is also the ideal place to add custom HTTP headers, authentication, etc. - -Check out the [Data Provider Setup](./DataProviders.md) documentation for more details on how to set up a Data Provider in your app. - -## Calling The Data Provider - -Many react-admin components use the Data Provider: page components like `` and ``, reference components like `` and ``, action Buttons like `` and ``, and many more. - -If you need to call the Data Provider directly from your components, you can use the specialized hooks provided by react-admin: - -* [`useGetList`](./useGetList.md) -* [`useGetOne`](./useGetOne.md) -* [`useGetMany`](./useGetMany.md) -* [`useGetManyReference`](./useGetManyReference.md) -* [`useCreate`](./useCreate.md) -* [`useUpdate`](./useUpdate.md) -* [`useUpdateMany`](./useUpdateMany.md) -* [`useDelete`](./useDelete.md) -* [`useDeleteMany`](./useDeleteMany.md) - -For instance, to call `dataProvider.getOne()`, use the `useGetOne` hook: - -```jsx -import { useGetOne } from 'react-admin'; -import { Loading, Error } from './MyComponents'; - -const UserProfile = ({ userId }) => { - const { data: user, isPending, error } = useGetOne('users', { id: userId }); - - if (isPending) return ; - if (error) return ; - if (!user) return null; - - return ( -
    -
  • Name: {user.name}
  • -
  • Email: {user.email}
  • -
- ) -}; -``` - -You can also call the `useDataProvider` hook to access the `dataProvider` directly: - -```jsx -import { useDataProvider } from 'react-admin'; - -const BanUserButton = ({ userId }) => { - const dataProvider = useDataProvider(); - const handleClick = () => { - dataProvider.update('users', { id: userId, data: { isBanned: true } }); - }; - return - -); -``` - This approach enables you to override specific parts of the logic of a component by composing it with another component. -The trade-off with this approach is that sometimes react-admin may require you to override several components just to enable one specific feature. For instance, to override the Menu, you must first create a custom layout using your menu as the `` prop, then pass it as the `` prop: +For instance, the `` component accepts an `accessDenied` prop that allows you to define what to render when users don't have the required permissions: ```jsx -// in src/MyLayout.js -import { Layout } from 'react-admin'; -import { Menu } from './Menu'; - -export const MyLayout = ({ children }) => ( - - {children} - -); - -// in src/App.js -import { Admin } from 'react-admin'; -import { MyLayout } from './MyLayout'; - -const App = () => ( - - // ... - +import { CanAccess } from 'ra-core'; +import { PremiumStatsFeature } from './PremiumStatsFeature'; +import { UpgradeToPremium } from './UpgradeToPremium'; + +export const Dashboard = ({ children }) => ( +
+ }> + + +
); ``` -Although this drawback exists, we accept it because the use of composition in react-admin makes the components highly extensible, and it significantly improves the readability and maintainability of the code. - ## Hooks -When you find that you cannot tweak a react-admin component using props, you can always turn to the lower-level API: hooks. In fact, the core of react-admin is a headless library called `ra-core`, which primarily consists of hooks. These hooks hide the framework's implementation details, allowing you to focus on your business logic. It's perfectly normal to use react-admin hooks in your own components if the default UI doesn't meet your specific requirements. +`ra-core` consists of hooks and headless components that hide the framework's implementation details, allowing you to focus on your business logic. -For example, the `` button used in `pessimistic` mode renders a confirmation dialog when clicked and then calls the `dataProvider.delete()` method for the current record. If you want the same feature but with a different UI, you can use the `useDeleteWithConfirmController` hook: +For example, the `useDeleteWithConfirmController` button used in `pessimistic` mode renders a confirmation dialog when clicked and then calls the `dataProvider.delete()` method for the current record. If you want the same feature but with a different UI, you can use the `useDeleteWithConfirmController` hook: ```jsx +import { useDeleteWithConfirmController, useRecordContext, useResourceContext } from 'ra-core'; +import { Button, Confirm } from 'my-awesome-ui-library'; + const DeleteButton = () => { const resource = useResourceContext(); const record = useRecordContext(); @@ -230,11 +203,11 @@ const DeleteButton = () => { The fact that hook names often end with `Controller` is intentional and reflects the use of [the Model-View-Controller (MVC) pattern](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) for complex components in react-admin. -- The Controller logic is handled by React hooks (e.g. `useListController`). -- The view logic is managed by React components (e.g. ``). +- The Controller logic is handled by React hooks (e.g. `useDeleteWithConfirmController`). +- The view logic is managed by React components (e.g. ``). - The model logic is left to the developer, and react-admin simply defines the interface that the model must expose through its Providers. -React-admin exposes [dozens of hooks](./Reference.md#hooks) to assist you in building your own components. You can even construct an entire react-admin application without relying on the Material UI components and use a different UI kit if desired (see for instance [shadcn-admin-kit](https://github.com/marmelab/shadcn-admin-kit), a library for building admin apps with Shadcn UI). This flexibility allows you to tailor the application to your specific needs and preferences. +React-admin exposes [dozens of hooks](./Reference.md#hooks) to assist you in building your own components. You can construct an entire react-admin application by using one of our UI packages such as `ra-ui-materialui` for Material UI components or [shadcn-admin-kit](https://github.com/marmelab/shadcn-admin-kit) for Shadcn UI or build your own UI layer. This flexibility allows you to tailor the application to your specific needs and preferences. ## Context: Pull, Don't Push @@ -242,15 +215,20 @@ Communication between components can be challenging, especially in large React a Whenever a react-admin component fetches data or defines a callback, it creates a context and places the data and callback in it. -For instance, the `` component creates an `I18NProviderContext`, which exposes the `translate` function. All components in the application can utilize the `useTranslate` hook, which reads the `I18NProviderContext`, for translating labels and messages. +For instance, the `` component creates an `I18NProviderContext`, which exposes the `translate` function. All components in the application can use the `useTranslate` hook or the `` component, which reads the `I18NProviderContext`, for translating labels and messages. ```jsx -import { useTranslate } from 'ra-core'; +import { Translate, useTranslate } from 'ra-core'; -export const MyHelloButton = ({ handleClick }) => { +export const MyHelloButton = () => { const translate = useTranslate(); + const handleClick = () => { + alert(translate('root.button.hello_world.message')) + } return ( - + ); }; ``` @@ -301,4 +279,4 @@ React-admin provides the **best-in-class documentation**, demo apps, and support That probably explains why more than 3,000 new apps are published every month using react-admin. -So react-admin is not just the assembly of [React Query](https://react-query.tanstack.com/), [react-hook-form](https://react-hook-form.com/), [react-router](https://reacttraining.com/react-router/), [Material UI](https://mui.com/material-ui/getting-started/), and [Emotion](https://github.com/emotion-js/emotion). It's a **framework** made to speed up and facilitate the development of single-page apps in React. \ No newline at end of file +So react-admin is not just the assembly of [React Query](https://react-query.tanstack.com/), [react-hook-form](https://react-hook-form.com/) and [react-router](https://reacttraining.com/react-router/). It's a **framework** made to speed up and facilitate the development of single-page apps in React. \ No newline at end of file From 09d2d443f022f1b84e574071905551002aef181d Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Kaiser Date: Wed, 20 Aug 2025 10:38:30 +0200 Subject: [PATCH 13/22] add astro-rehype-relative-markdown-links --- docs_headless/astro.config.mjs | 12 ++- docs_headless/package.json | 1 + .../docs/headless/reference/example.md | 4 +- .../content/docs/shadcn/reference/example.md | 4 +- yarn.lock | 82 ++++++++++++++++++- 5 files changed, 96 insertions(+), 7 deletions(-) diff --git a/docs_headless/astro.config.mjs b/docs_headless/astro.config.mjs index dd3df21e817..33d371d8a12 100644 --- a/docs_headless/astro.config.mjs +++ b/docs_headless/astro.config.mjs @@ -9,6 +9,7 @@ import rehypeCodeGroup from 'rehype-code-group'; import expressiveCode from 'astro-expressive-code'; import { pluginFullscreen } from 'expressive-code-fullscreen'; import { pluginCollapsibleSections } from '@expressive-code/plugin-collapsible-sections'; +import rehypeAstroRelativeMarkdownLinks from 'astro-rehype-relative-markdown-links'; // https://astro.build/config export default defineConfig({ @@ -117,7 +118,16 @@ export default defineConfig({ mdx(), ], markdown: { - rehypePlugins: [rehypeCodeGroup], + rehypePlugins: [ + rehypeCodeGroup, + [ + rehypeAstroRelativeMarkdownLinks, + { + // Do not apply a base segment to the transformed URL path + collectionBase: false, + }, + ], + ], }, vite: { plugins: [tailwindcss()], diff --git a/docs_headless/package.json b/docs_headless/package.json index 0d11fc07905..ae2376f5d63 100644 --- a/docs_headless/package.json +++ b/docs_headless/package.json @@ -20,6 +20,7 @@ "@types/react-dom": "^19.1.6", "astro": "5.12.6", "astro-expressive-code": "^0.41.3", + "astro-rehype-relative-markdown-links": "^0.18.1", "expressive-code-fullscreen": "^1.0.0", "react": "^18.3.1", "react-dom": "^18.3.1", diff --git a/docs_headless/src/content/docs/headless/reference/example.md b/docs_headless/src/content/docs/headless/reference/example.md index 21f89e86abd..67a413b37e8 100644 --- a/docs_headless/src/content/docs/headless/reference/example.md +++ b/docs_headless/src/content/docs/headless/reference/example.md @@ -8,5 +8,5 @@ Less concerned with telling a story or addressing a specific use case, they shou ## Tests -- [General Concepts](/guides/architecture) -- [Data Fetching](/guides/datafetchingguide) +- [General Concepts](../guides/Architecture.md) +- [Data Fetching](../guides/datafetchingguide.mdx) diff --git a/docs_headless/src/content/docs/shadcn/reference/example.md b/docs_headless/src/content/docs/shadcn/reference/example.md index 21f89e86abd..fe5b7488a0f 100644 --- a/docs_headless/src/content/docs/shadcn/reference/example.md +++ b/docs_headless/src/content/docs/shadcn/reference/example.md @@ -8,5 +8,5 @@ Less concerned with telling a story or addressing a specific use case, they shou ## Tests -- [General Concepts](/guides/architecture) -- [Data Fetching](/guides/datafetchingguide) +- [General Concepts](../guides/Architecture.md) +- [Data Fetching](../guides/DataFetchingGuide.md) diff --git a/yarn.lock b/yarn.lock index 75f1559326e..60c98fd5b24 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7769,6 +7769,24 @@ __metadata: languageName: node linkType: hard +"astro-rehype-relative-markdown-links@npm:^0.18.1": + version: 0.18.1 + resolution: "astro-rehype-relative-markdown-links@npm:0.18.1" + dependencies: + catch-unknown: "npm:^2.0.0" + debug: "npm:^4.4.0" + github-slugger: "npm:^2.0.0" + gray-matter: "npm:^4.0.3" + is-absolute-url: "npm:^4.0.1" + unified: "npm:^11.0.5" + unist-util-visit: "npm:^5.0.0" + zod: "npm:^3.23.8" + peerDependencies: + astro: ">=2 <6" + checksum: f1819464b8ba0d27dcb7656c7b1115ea750b3e0968bbee0d1eb2a6d7b96217dc98822fbbe20a3b43cc7ffaf6957cf44e99d6332702b7b3bf5204c7319976b399 + languageName: node + linkType: hard + "astro@npm:5.12.6": version: 5.12.6 resolution: "astro@npm:5.12.6" @@ -8599,6 +8617,13 @@ __metadata: languageName: node linkType: hard +"catch-unknown@npm:^2.0.0": + version: 2.0.0 + resolution: "catch-unknown@npm:2.0.0" + checksum: eee47640c39949ab732885f7962dafed4cb61d42502d04719045ebdca30e31e361e703df9c4db4061dd3e5977612cc72e404d117fbeabfbf17f1fa14e0d8e7eb + languageName: node + linkType: hard + "ccount@npm:^2.0.0": version: 2.0.1 resolution: "ccount@npm:2.0.1" @@ -11638,6 +11663,15 @@ __metadata: languageName: node linkType: hard +"extend-shallow@npm:^2.0.1": + version: 2.0.1 + resolution: "extend-shallow@npm:2.0.1" + dependencies: + is-extendable: "npm:^0.1.0" + checksum: ee1cb0a18c9faddb42d791b2d64867bd6cfd0f3affb711782eb6e894dd193e2934a7f529426aac7c8ddb31ac5d38000a00aa2caf08aa3dfc3e1c8ff6ba340bd9 + languageName: node + linkType: hard + "extend@npm:^3.0.0, extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" @@ -12831,6 +12865,18 @@ __metadata: languageName: node linkType: hard +"gray-matter@npm:^4.0.3": + version: 4.0.3 + resolution: "gray-matter@npm:4.0.3" + dependencies: + js-yaml: "npm:^3.13.1" + kind-of: "npm:^6.0.2" + section-matter: "npm:^1.0.0" + strip-bom-string: "npm:^1.0.0" + checksum: e38489906dad4f162ca01e0dcbdbed96d1a53740cef446b9bf76d80bec66fa799af07776a18077aee642346c5e1365ed95e4c91854a12bf40ba0d4fb43a625a6 + languageName: node + linkType: hard + "h3@npm:^1.15.3": version: 1.15.3 resolution: "h3@npm:1.15.3" @@ -13853,6 +13899,13 @@ __metadata: languageName: node linkType: hard +"is-absolute-url@npm:^4.0.1": + version: 4.0.1 + resolution: "is-absolute-url@npm:4.0.1" + checksum: 6f8f603945bd9f2c6031758bbc12352fc647bd5d807cad10d96cc6300fd0e15240cc091521a61db767e4ec0bacff257b4f1015fd5249c147bbb4a4497356c72e + languageName: node + linkType: hard + "is-alphabetical@npm:^2.0.0": version: 2.0.1 resolution: "is-alphabetical@npm:2.0.1" @@ -14039,6 +14092,13 @@ __metadata: languageName: node linkType: hard +"is-extendable@npm:^0.1.0": + version: 0.1.1 + resolution: "is-extendable@npm:0.1.1" + checksum: dd5ca3994a28e1740d1e25192e66eed128e0b2ff161a7ea348e87ae4f616554b486854de423877a2a2c171d5f7cd6e8093b91f54533bc88a59ee1c9838c43879 + languageName: node + linkType: hard + "is-extendable@npm:^1.0.0": version: 1.0.1 resolution: "is-extendable@npm:1.0.1" @@ -15403,7 +15463,7 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": +"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": version: 6.0.3 resolution: "kind-of@npm:6.0.3" checksum: 61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 @@ -19441,6 +19501,7 @@ __metadata: "@types/react-dom": "npm:^19.1.6" astro: "npm:5.12.6" astro-expressive-code: "npm:^0.41.3" + astro-rehype-relative-markdown-links: "npm:^0.18.1" expressive-code-fullscreen: "npm:^1.0.0" prettier: "npm:^3.2.5" prettier-plugin-astro: "npm:^0.14.1" @@ -21361,6 +21422,16 @@ __metadata: languageName: node linkType: hard +"section-matter@npm:^1.0.0": + version: 1.0.0 + resolution: "section-matter@npm:1.0.0" + dependencies: + extend-shallow: "npm:^2.0.1" + kind-of: "npm:^6.0.0" + checksum: 8007f91780adc5aaa781a848eaae50b0f680bbf4043b90cf8a96778195b8fab690c87fe7a989e02394ce69890e330811ec8dab22397d384673ce59f7d750641d + languageName: node + linkType: hard + "semver-compare@npm:^1.0.0": version: 1.0.0 resolution: "semver-compare@npm:1.0.0" @@ -22396,6 +22467,13 @@ __metadata: languageName: node linkType: hard +"strip-bom-string@npm:^1.0.0": + version: 1.0.0 + resolution: "strip-bom-string@npm:1.0.0" + checksum: 5c5717e2643225aa6a6d659d34176ab2657037f1fe2423ac6fcdb488f135e14fef1022030e426d8b4d0989e09adbd5c3288d5d3b9c632abeefd2358dfc512bca + languageName: node + linkType: hard + "strip-bom@npm:^3.0.0": version: 3.0.0 resolution: "strip-bom@npm:3.0.0" @@ -24701,7 +24779,7 @@ __metadata: languageName: node linkType: hard -"zod@npm:^3.22.1, zod@npm:^3.24.2, zod@npm:^3.24.4": +"zod@npm:^3.22.1, zod@npm:^3.23.8, zod@npm:^3.24.2, zod@npm:^3.24.4": version: 3.25.76 resolution: "zod@npm:3.25.76" checksum: 5718ec35e3c40b600316c5b4c5e4976f7fee68151bc8f8d90ec18a469be9571f072e1bbaace10f1e85cf8892ea12d90821b200e980ab46916a6166a4260a983c From 72a2acd253c8ff10212bc8b685fdeb624a95eed3 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Kaiser Date: Wed, 20 Aug 2025 11:19:41 +0200 Subject: [PATCH 14/22] add deploy workflow --- .github/workflows/deploy-doc-headless.yml | 51 +++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/deploy-doc-headless.yml diff --git a/.github/workflows/deploy-doc-headless.yml b/.github/workflows/deploy-doc-headless.yml new file mode 100644 index 00000000000..ca7ec11cde6 --- /dev/null +++ b/.github/workflows/deploy-doc-headless.yml @@ -0,0 +1,51 @@ +name: πŸ“• Deploy headless docs +on: + push: + branches: + - main + pull_request: # TODO remove + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +permissions: + pages: write + contents: write + +jobs: + deploy: + name: πŸ“• Deploy headless docs + runs-on: ubuntu-latest + + env: + PRODUCTION_REMOTE: https://git:${{ secrets.DEPLOY_TOKEN || secrets.GITHUB_TOKEN }}@github.com/${{ vars.DEPLOY_REPOSITORY || github.repository }} + + steps: + - name: πŸ“₯ Checkout repo + uses: actions/checkout@v4 + + - name: βš™οΈ Setup node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: yarn + + - name: βš™οΈ Setup git + run: | + echo Deploying to pages to $PRODUCTION_REMOTE + git remote set-url origin https://git:${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY} + git remote add production $PRODUCTION_REMOTE + git config --global user.email support+actions@github.com + git config --global user.name github-actions-bot + + - name: πŸ“₯ Download deps + run: yarn install --frozen-lockfile + + - name: πŸ”¨ Build + run: cd docs_headless && yarn build + + - name: πŸ“‘ Deploy GitHub pages + run: npx gh-pages --remote production -d dist -b ${{ vars.DEPLOY_BRANCH || 'gh-pages' }} + env: + GITHUB_TOKEN: ${{ secrets.DEPLOY_TOKEN || secrets.GITHUB_TOKEN }} From 87f92b96b649bb4ca47d2f0b9a0723ea7d70b0ba Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Kaiser Date: Wed, 20 Aug 2025 11:39:55 +0200 Subject: [PATCH 15/22] fix deploy workflow --- .github/workflows/deploy-doc-headless.yml | 11 +-- package.json | 2 + yarn.lock | 88 ++++++++++++++++++++++- 3 files changed, 95 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy-doc-headless.yml b/.github/workflows/deploy-doc-headless.yml index ca7ec11cde6..77bea0b2dd6 100644 --- a/.github/workflows/deploy-doc-headless.yml +++ b/.github/workflows/deploy-doc-headless.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest env: - PRODUCTION_REMOTE: https://git:${{ secrets.DEPLOY_TOKEN || secrets.GITHUB_TOKEN }}@github.com/${{ vars.DEPLOY_REPOSITORY || github.repository }} + PRODUCTION_REMOTE: https://git:${{ secrets.DEPLOY_TOKEN }}@github.com/${{ vars.DEPLOY_REPOSITORY }} steps: - name: πŸ“₯ Checkout repo @@ -43,9 +43,12 @@ jobs: run: yarn install --frozen-lockfile - name: πŸ”¨ Build - run: cd docs_headless && yarn build + run: | + cd docs_headless + yarn build + cd .. - name: πŸ“‘ Deploy GitHub pages - run: npx gh-pages --remote production -d dist -b ${{ vars.DEPLOY_BRANCH || 'gh-pages' }} + run: yarn gh-pages --remote production -d docs_headless/dist -b ${{ vars.DEPLOY_BRANCH || 'gh-pages' }} env: - GITHUB_TOKEN: ${{ secrets.DEPLOY_TOKEN || secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.DEPLOY_TOKEN }} diff --git a/package.json b/package.json index 68850ff2f2e..07f5fcac4f4 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "@storybook/test": "^8.6.11", "@types/babel__preset-env": "^7", "@types/eslint-plugin-jsx-a11y": "^6", + "@types/gh-pages": "^6", "@types/jest": "^29.5.2", "@types/react": "^18.3.3", "cross-env": "^5.2.0", @@ -62,6 +63,7 @@ "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-testing-library": "^7.1.1", "full-icu": "^1.3.1", + "gh-pages": "^6.3.0", "global-jsdom": "^9.0.1", "globals": "^16.0.0", "husky": "^2.3.0", diff --git a/yarn.lock b/yarn.lock index 60c98fd5b24..999a3ee8655 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6134,6 +6134,13 @@ __metadata: languageName: node linkType: hard +"@types/gh-pages@npm:^6": + version: 6.1.0 + resolution: "@types/gh-pages@npm:6.1.0" + checksum: d8bf644822df211accac9cff24fcc0a5155fd715d05bc1698175623f5cde1aff81c302e7e38f7105e0fa0fe7ab24d7009d8dbb875897af669f48e06c3c20484c + languageName: node + linkType: hard + "@types/graceful-fs@npm:^4.1.3": version: 4.1.6 resolution: "@types/graceful-fs@npm:4.1.6" @@ -7877,6 +7884,13 @@ __metadata: languageName: node linkType: hard +"async@npm:^3.2.4": + version: 3.2.6 + resolution: "async@npm:3.2.6" + checksum: 36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 + languageName: node + linkType: hard + "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -9095,6 +9109,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^13.0.0": + version: 13.1.0 + resolution: "commander@npm:13.1.0" + checksum: 7b8c5544bba704fbe84b7cab2e043df8586d5c114a4c5b607f83ae5060708940ed0b5bd5838cf8ce27539cde265c1cbd59ce3c8c6b017ed3eec8943e3a415164 + languageName: node + linkType: hard + "commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" @@ -10538,6 +10559,13 @@ __metadata: languageName: node linkType: hard +"email-addresses@npm:^5.0.0": + version: 5.0.0 + resolution: "email-addresses@npm:5.0.0" + checksum: fc8a6f84e378bbe601ce39a3d8d86bc7e4584030ae9eb1938e12943f7fb5207e5fd7ae449cced3bea70968a519ade560d55ca170208c3f1413d7d25d8613a577 + languageName: node + linkType: hard + "emittery@npm:^0.13.1": version: 0.13.1 resolution: "emittery@npm:0.13.1" @@ -10987,7 +11015,7 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^1.0.5": +"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" checksum: a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 @@ -11929,6 +11957,24 @@ __metadata: languageName: node linkType: hard +"filename-reserved-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "filename-reserved-regex@npm:2.0.0" + checksum: 453740b7f9fd126e508da555b37e38c1f7ff19f5e9f3d297b2de1beb09854957baddd74c83235e87b16e9ce27a2368798896669edad5a81b5b7bd8cb57c942fc + languageName: node + linkType: hard + +"filenamify@npm:^4.3.0": + version: 4.3.0 + resolution: "filenamify@npm:4.3.0" + dependencies: + filename-reserved-regex: "npm:^2.0.0" + strip-outer: "npm:^1.0.1" + trim-repeated: "npm:^1.0.0" + checksum: dcfd2f116d66f78c9dd58bb0f0d9b6529d89c801a9f37a4f86e7adc0acecb6881c7fb7c3231dc9e6754b767edcfdca89cba3a492a58afd2b48479b30d14ccf8f + languageName: node + linkType: hard + "filereader@npm:>= 0.10.3, filereader@npm:^0.10.3": version: 0.10.3 resolution: "filereader@npm:0.10.3" @@ -12549,6 +12595,24 @@ __metadata: languageName: node linkType: hard +"gh-pages@npm:^6.3.0": + version: 6.3.0 + resolution: "gh-pages@npm:6.3.0" + dependencies: + async: "npm:^3.2.4" + commander: "npm:^13.0.0" + email-addresses: "npm:^5.0.0" + filenamify: "npm:^4.3.0" + find-cache-dir: "npm:^3.3.1" + fs-extra: "npm:^11.1.1" + globby: "npm:^11.1.0" + bin: + gh-pages: bin/gh-pages.js + gh-pages-clean: bin/gh-pages-clean.js + checksum: c9c063c24ee986a1a964afa3984e62b18677a369417ed51605877bd6263d6e3b7f7c813c9e3470ce6d64191b2fc792ef50e8cf2f60ec65e0560088c147442d81 + languageName: node + linkType: hard + "git-raw-commits@npm:^3.0.0": version: 3.0.0 resolution: "git-raw-commits@npm:3.0.0" @@ -12778,7 +12842,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:11.1.0": +"globby@npm:11.1.0, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -19962,6 +20026,7 @@ __metadata: "@storybook/test": "npm:^8.6.11" "@types/babel__preset-env": "npm:^7" "@types/eslint-plugin-jsx-a11y": "npm:^6" + "@types/gh-pages": "npm:^6" "@types/jest": "npm:^29.5.2" "@types/react": "npm:^18.3.3" cross-env: "npm:^5.2.0" @@ -19978,6 +20043,7 @@ __metadata: eslint-plugin-react-hooks: "npm:^5.2.0" eslint-plugin-testing-library: "npm:^7.1.1" full-icu: "npm:^1.3.1" + gh-pages: "npm:^6.3.0" global-jsdom: "npm:^9.0.1" globals: "npm:^16.0.0" husky: "npm:^2.3.0" @@ -22534,6 +22600,15 @@ __metadata: languageName: node linkType: hard +"strip-outer@npm:^1.0.1": + version: 1.0.1 + resolution: "strip-outer@npm:1.0.1" + dependencies: + escape-string-regexp: "npm:^1.0.2" + checksum: c0f38e6f37563d878a221b1c76f0822f180ec5fc39be5ada30ee637a7d5b59d19418093bad2b4db1e69c40d7a7a7ac50828afce07276cf3d51ac8965cb140dfb + languageName: node + linkType: hard + "strong-log-transformer@npm:2.1.0, strong-log-transformer@npm:^2.1.0": version: 2.1.0 resolution: "strong-log-transformer@npm:2.1.0" @@ -22979,6 +23054,15 @@ __metadata: languageName: node linkType: hard +"trim-repeated@npm:^1.0.0": + version: 1.0.0 + resolution: "trim-repeated@npm:1.0.0" + dependencies: + escape-string-regexp: "npm:^1.0.2" + checksum: 89acada0142ed0cdb113615a3e82fdb09e7fdb0e3504ded62762dd935bc27debfcc38edefa497dc7145d8dc8602d40dd9eec891e0ea6c28fa0cc384200b692db + languageName: node + linkType: hard + "trough@npm:^2.0.0": version: 2.2.0 resolution: "trough@npm:2.2.0" From 66928c9ae9b635e1c31baf93455b7f97d37fd894 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Kaiser Date: Wed, 20 Aug 2025 11:42:19 +0200 Subject: [PATCH 16/22] fix workflow main branch name --- .github/workflows/deploy-doc-headless.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-doc-headless.yml b/.github/workflows/deploy-doc-headless.yml index 77bea0b2dd6..f6c84fa18fb 100644 --- a/.github/workflows/deploy-doc-headless.yml +++ b/.github/workflows/deploy-doc-headless.yml @@ -2,7 +2,7 @@ name: πŸ“• Deploy headless docs on: push: branches: - - main + - master pull_request: # TODO remove concurrency: From 3ec9c14338ee53bc8d90d1f39a1db3c09955bc5b Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Kaiser Date: Wed, 20 Aug 2025 13:38:00 +0200 Subject: [PATCH 17/22] fix basepath --- docs_headless/astro.config.mjs | 3 ++- docs_headless/src/content/docs/index.mdx | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs_headless/astro.config.mjs b/docs_headless/astro.config.mjs index 33d371d8a12..2c3a4070923 100644 --- a/docs_headless/astro.config.mjs +++ b/docs_headless/astro.config.mjs @@ -123,7 +123,7 @@ export default defineConfig({ [ rehypeAstroRelativeMarkdownLinks, { - // Do not apply a base segment to the transformed URL path + base: '/ra-core/', collectionBase: false, }, ], @@ -132,4 +132,5 @@ export default defineConfig({ vite: { plugins: [tailwindcss()], }, + base: '/ra-core/', }); diff --git a/docs_headless/src/content/docs/index.mdx b/docs_headless/src/content/docs/index.mdx index e42f76ac03a..d776b01ceb0 100644 --- a/docs_headless/src/content/docs/index.mdx +++ b/docs_headless/src/content/docs/index.mdx @@ -8,10 +8,10 @@ hero: file: ../../assets/houston.webp actions: - text: Headless - link: /headless/guides/architecture/ + link: /ra-core/headless/guides/architecture/ icon: right-arrow - text: Shadcn UI - link: /shadcn/guides/architecture/ + link: /ra-core/shadcn/guides/architecture/ icon: right-arrow --- From 7f91218a012d38f6df208592fc2254cf6b4d0fa2 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Kaiser Date: Wed, 20 Aug 2025 13:52:38 +0200 Subject: [PATCH 18/22] try adding site --- docs_headless/astro.config.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/docs_headless/astro.config.mjs b/docs_headless/astro.config.mjs index 2c3a4070923..0f7403d3fc7 100644 --- a/docs_headless/astro.config.mjs +++ b/docs_headless/astro.config.mjs @@ -133,4 +133,5 @@ export default defineConfig({ plugins: [tailwindcss()], }, base: '/ra-core/', + site: 'https://marmelab.com', }); From 222dad80acb2f8baca336db13ca6353c036e8568 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Kaiser Date: Wed, 20 Aug 2025 13:56:11 +0200 Subject: [PATCH 19/22] add nojekyll --- .github/workflows/deploy-doc-headless.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy-doc-headless.yml b/.github/workflows/deploy-doc-headless.yml index f6c84fa18fb..7cd81ac4f18 100644 --- a/.github/workflows/deploy-doc-headless.yml +++ b/.github/workflows/deploy-doc-headless.yml @@ -46,6 +46,7 @@ jobs: run: | cd docs_headless yarn build + touch dist/.nojekyll cd .. - name: πŸ“‘ Deploy GitHub pages From 199d91dfc1237da153e3895a126ad64ef1bb2c7d Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Kaiser Date: Wed, 20 Aug 2025 14:01:42 +0200 Subject: [PATCH 20/22] remove nojekyll --- .github/workflows/deploy-doc-headless.yml | 1 - docs_headless/astro.config.mjs | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy-doc-headless.yml b/.github/workflows/deploy-doc-headless.yml index 7cd81ac4f18..f6c84fa18fb 100644 --- a/.github/workflows/deploy-doc-headless.yml +++ b/.github/workflows/deploy-doc-headless.yml @@ -46,7 +46,6 @@ jobs: run: | cd docs_headless yarn build - touch dist/.nojekyll cd .. - name: πŸ“‘ Deploy GitHub pages diff --git a/docs_headless/astro.config.mjs b/docs_headless/astro.config.mjs index 0f7403d3fc7..1482396a983 100644 --- a/docs_headless/astro.config.mjs +++ b/docs_headless/astro.config.mjs @@ -134,4 +134,7 @@ export default defineConfig({ }, base: '/ra-core/', site: 'https://marmelab.com', + build: { + assets: 'assets', + }, }); From 0fbf3fe32621c63ecb951cc25893325001472261 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Kaiser Date: Wed, 20 Aug 2025 18:02:03 +0200 Subject: [PATCH 21/22] remove shadcn, simplify content organization, update gh link and favicon --- docs_headless/astro.config.mjs | 113 ++--- docs_headless/package.json | 69 ++- docs_headless/public/favicon.ico | Bin 0 -> 5430 bytes docs_headless/public/favicon.svg | 1 - .../src/components/CustomSidebar.astro | 3 - .../{headless => }/guides/Architecture.md | 4 +- .../content/docs/{shadcn => }/guides/CRUD.md | 2 +- .../guides/datafetchingguide.mdx | 6 +- .../src/content/docs/headless/guides/CRUD.md | 469 ------------------ docs_headless/src/content/docs/index.mdx | 13 +- .../docs/{headless => }/reference/example.md | 0 .../docs/shadcn/guides/Architecture.md | 304 ------------ .../docs/shadcn/guides/DataFetchingGuide.md | 423 ---------------- .../content/docs/shadcn/reference/example.md | 12 - docs_headless/src/styles/global.css | 2 +- yarn.lock | 12 - 16 files changed, 78 insertions(+), 1355 deletions(-) create mode 100644 docs_headless/public/favicon.ico delete mode 100644 docs_headless/public/favicon.svg rename docs_headless/src/content/docs/{headless => }/guides/Architecture.md (99%) rename docs_headless/src/content/docs/{shadcn => }/guides/CRUD.md (99%) rename docs_headless/src/content/docs/{headless => }/guides/datafetchingguide.mdx (98%) delete mode 100644 docs_headless/src/content/docs/headless/guides/CRUD.md rename docs_headless/src/content/docs/{headless => }/reference/example.md (100%) delete mode 100644 docs_headless/src/content/docs/shadcn/guides/Architecture.md delete mode 100644 docs_headless/src/content/docs/shadcn/guides/DataFetchingGuide.md delete mode 100644 docs_headless/src/content/docs/shadcn/reference/example.md diff --git a/docs_headless/astro.config.mjs b/docs_headless/astro.config.mjs index 1482396a983..0750e0af0e8 100644 --- a/docs_headless/astro.config.mjs +++ b/docs_headless/astro.config.mjs @@ -4,7 +4,6 @@ import starlight from '@astrojs/starlight'; import react from '@astrojs/react'; import mdx from '@astrojs/mdx'; import tailwindcss from '@tailwindcss/vite'; -import starlightSidebarTopics from 'starlight-sidebar-topics'; import rehypeCodeGroup from 'rehype-code-group'; import expressiveCode from 'astro-expressive-code'; import { pluginFullscreen } from 'expressive-code-fullscreen'; @@ -17,97 +16,49 @@ export default defineConfig({ starlight({ title: 'React Admin Headless', customCss: ['./src/styles/global.css'], + favicon: '/favicon.ico', social: [ { icon: 'github', label: 'GitHub', - href: 'https://github.com/withastro/starlight', + href: 'https://github.com/marmelab/react-admin', }, ], - plugins: [ - starlightSidebarTopics([ - { - label: 'Shadcn UI', - link: '/shadcn/guides/architecture', - icon: 'open-book', - items: [ - { - label: 'Guides & Concepts', - items: [ - // Each item here is one entry in the navigation menu. - { - label: 'General Concepts', - slug: 'shadcn/guides/architecture', - }, - { - label: 'Data Fetching', - slug: 'shadcn/guides/datafetchingguide', - }, - { - label: 'CRUD pages', - slug: 'shadcn/guides/crud', - attrs: { - class: 'flex items-center', - }, - badge: { - text: '', - variant: 'default', - class: 'ee-badge', - }, - }, - ], - }, - { - label: 'Reference', - autogenerate: { - directory: 'shadcn/reference', - }, - }, - ], - }, - { - label: 'Headless', - link: '/headless/guides/architecture', - icon: 'open-book', - items: [ - { - label: 'Guides & Concepts', - items: [ - // Each item here is one entry in the navigation menu. - { - label: 'General Concepts', - slug: 'headless/guides/architecture', - }, - { - label: 'Data Fetching', - slug: 'headless/guides/datafetchingguide', - }, - { - label: 'CRUD pages', - slug: 'headless/guides/crud', - attrs: { - class: 'flex items-center', - }, - badge: { - text: '', - variant: 'default', - class: 'ee-badge', - }, - }, - ], + sidebar: [ + { + label: 'Guides & Concepts', + items: [ + // Each item here is one entry in the navigation menu. + { + label: 'General Concepts', + slug: 'guides/architecture', + }, + { + label: 'Data Fetching', + slug: 'guides/datafetchingguide', + }, + { + label: 'CRUD pages', + slug: 'guides/crud', + attrs: { + class: 'flex items-center', }, - { - label: 'Reference', - autogenerate: { - directory: 'headless/reference', - }, + badge: { + text: '', + variant: 'default', + class: 'ee-badge', }, - ], + }, + ], + }, + { + label: 'Reference', + autogenerate: { + directory: 'reference', }, - ]), + }, ], components: { - // Override the default `SocialIcons` component. Sidebar: './src/components/CustomSidebar.astro', }, }), diff --git a/docs_headless/package.json b/docs_headless/package.json index ae2376f5d63..619c446f75d 100644 --- a/docs_headless/package.json +++ b/docs_headless/package.json @@ -1,37 +1,36 @@ { - "name": "ra-core-doc", - "type": "module", - "version": "0.0.1", - "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", - "preview": "astro preview", - "astro": "astro" - }, - "dependencies": { - "@astrojs/mdx": "^4.3.1", - "@astrojs/react": "^4.3.0", - "@astrojs/starlight": "0.35.2", - "@astrojs/starlight-tailwind": "^4.0.1", - "@expressive-code/plugin-collapsible-sections": "^0.41.3", - "@tailwindcss/vite": "^4.1.11", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", - "astro": "5.12.6", - "astro-expressive-code": "^0.41.3", - "astro-rehype-relative-markdown-links": "^0.18.1", - "expressive-code-fullscreen": "^1.0.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "rehype-code-group": "^0.2.4", - "sharp": "^0.34.2", - "starlight-package-managers": "^0.11.0", - "starlight-sidebar-topics": "^0.6.0", - "tailwindcss": "^4.1.11" - }, - "devDependencies": { - "prettier": "^3.2.5", - "prettier-plugin-astro": "^0.14.1" - } + "name": "ra-core-doc", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/mdx": "^4.3.1", + "@astrojs/react": "^4.3.0", + "@astrojs/starlight": "0.35.2", + "@astrojs/starlight-tailwind": "^4.0.1", + "@expressive-code/plugin-collapsible-sections": "^0.41.3", + "@tailwindcss/vite": "^4.1.11", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "astro": "5.12.6", + "astro-expressive-code": "^0.41.3", + "astro-rehype-relative-markdown-links": "^0.18.1", + "expressive-code-fullscreen": "^1.0.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "rehype-code-group": "^0.2.4", + "sharp": "^0.34.2", + "starlight-package-managers": "^0.11.0", + "tailwindcss": "^4.1.11" + }, + "devDependencies": { + "prettier": "^3.2.5", + "prettier-plugin-astro": "^0.14.1" + } } diff --git a/docs_headless/public/favicon.ico b/docs_headless/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..963afd8ad0163a3adba6d9a83962f5759554398f GIT binary patch literal 5430 zcmd^C3s93+7LM(9Dpd=mOW{x;clnY-s*j9M#~ zMy!VN=yg!D!?m8NYtXJePaCwfbz1j@e92GXc<|@W*J(w5VCw3(pZB+JDBNfYXEqqY zS#J|L@{JN+GOFWU8|UdRZFIL^n{_?G?NSZTv9)xQSzCFqZKbQ-n(TQ?3>wS)t(pk` z_;^C|UkJB;UY)?sxVmTKv6`4Q!>AWj@|^D#`+nYxI8f?sq!NcYA1w=Bms#Ms{3X9M z+-9sY*0G@`iIa|NqN+IOhqOL4KaE%9!+Kbg;3@fYa$tI)k2&$fSnXHA*+rXJbwp+f z$EF^A*-rQ`My>&AxK&+&$FlmfUm8<*MVl?#tKwW5q~X?3#dE${o#>Z++H2+L*>QW$ zajYqRaj@xV70>BRudJ&;*3(&V&eyUq&sBdE`5zE|NO(&j_&Sm=%v z>3MbZ_JU$)r0#ZZa;iAkq(d5Ei!rl%lJ9Du6o)#V=vVZg=~XC33Fai;aam-I(DWf~ zO@h}6@fI`X&n=Bv@$~xNaW-12<=k)gW9zdF5LN`9-ILB3~ zRPU34?>wBBPgozuxm4xgz$|(n3=9k`MyxWKOma(9-ko`eZNw z-er(FV}QdE2VG~@R6MpZi=l?4IgMxhym%rijyg5OkyLKlm__cQKPU16td^uqv zerWvtBYeBJ<$q9qO0zB_`sn4YMo^KuO=_^p;-`7q+QV48!`@Z~*7T@PwC6w8UvAW1 z9O-$f^b38soWRMxe>Q8*bTV!qOW;+;It`Qs7(sQ&DyYebKVZJbQH1FNGiS~O7K_ys z8yoBNIvG43&&AZ#^d6yQ%y*j;H$6DzxESl8b^o=r7_K@$o;4mdiC(Se zgN#A4l?CN7c5o$}1=WXn0yA3&>8#nafyrc2I%sNYf|HYD8JZH(Y#i+EMOs=~ zprN5b(azS?0#mEiQqc}h=6NqeDDp9bZ{0oxp_4A)S=WMRlsn;9b+5Exdne_MKMc1+go zl;Es__@IM+0f7-3O#KeV`yar<1v;Q^KYbREC-KE;_DU%D;xnk&Za-X(XU2ru|I+@N zjJS03H4ai@8)K&Cb2~TBDZu`c3 z(XYYBIFP=jB5)a$e;q5>mz-jQdB|@|^J%RLF#$=K4V9mgPz$(mFf_L^-X}lbZ7CF@ zPYckeMXtJVE5@-|k{roTOiZ*YjP=btW50mvYX}YPhe`I6_+uPIK_)1F%~)L~H~k06 z$@xDXkISzKF#>UjC521JX%ar&`yfWX`)6?8O&99-`sX$mWi7b6f1BXjFP1&ebJlx- zk2DkTRpn9Zfb4+_+brQbLAbE-$ zyw$#`J~KMAE+aClA!i?vnJ;wKr*gj#doL1y?6c5jW6Y&Zf4OsF@8+9=xZo0h+qP_T z4X8~G&#pThDH3lrpOl}|m0yKt*3K zU*6N5Sbt=1aGw3brsLL{nCGj2=rI}pMK4e4E9rsH2O2~5PPYNXec9(u^xsST!x31Y z&7suS5K6rD{EcTb-JF*_&q(qvB7KLF^LPUX;W)NNrpPa3hF zcX@}qRJ_F$&lmewbeIaCoC_odC)du09POFl|XD9Rz zJtlhGQ}p&)-Oc;Trr3)qC-I|fCv^^E@CrU+7WtTi&{-F9EHrShI3E1zdX>BC>9Z4x zkx?`n?;O+IAJlaqw1j8i$umG1NB>rT+5Jj_XL_;MBC5W=$Ys0-qW?(^BDtDl@evel zSXt6sdYt`e_;Jh#fJ{bwjrL5EuYL!5%{LVjltJRAR1L+nl?&Mw5jJH-Y$n!o3v$;} zp0J$@c@E6hx~wFBdFMa;egSCcQ;k5^6fyp7dY~^bM@jt9rh0j2habko|Gb}JTdD77 zaA}vH5cf_z*+Thj&G@zP`Rn zTK4N?5DZ*bdeAx|Ryp1=O=y1lIXF1T#`|Y0O-JiN zehE}ujYppj(732m6Y{;b?^owX zS{KB+NBGG=S^X%Jr%pHBH`+NDZ7JyQ?@ykNZn`y$Nh-?7N55!JNB94{hJE^f_4jYt C$|cqS literal 0 HcmV?d00001 diff --git a/docs_headless/public/favicon.svg b/docs_headless/public/favicon.svg deleted file mode 100644 index cba5ac140a2..00000000000 --- a/docs_headless/public/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs_headless/src/components/CustomSidebar.astro b/docs_headless/src/components/CustomSidebar.astro index 6c7981ef7ab..7680d21177f 100644 --- a/docs_headless/src/components/CustomSidebar.astro +++ b/docs_headless/src/components/CustomSidebar.astro @@ -2,7 +2,6 @@ import MobileMenuFooter from '@astrojs/starlight/components/MobileMenuFooter.astro'; import SidebarPersister from '@astrojs/starlight/components/SidebarPersister.astro'; import SidebarSublist from '@astrojs/starlight/components/SidebarSublist.astro'; -import StarlightSidebarTopicsSidebar from 'starlight-sidebar-topics/components/Sidebar.astro'; const { sidebar } = Astro.locals.starlightRoute; --- @@ -23,8 +22,6 @@ const { sidebar } = Astro.locals.starlightRoute; }); - - diff --git a/docs_headless/src/content/docs/headless/guides/Architecture.md b/docs_headless/src/content/docs/guides/Architecture.md similarity index 99% rename from docs_headless/src/content/docs/headless/guides/Architecture.md rename to docs_headless/src/content/docs/guides/Architecture.md index 673a2162aa8..9d193db7617 100644 --- a/docs_headless/src/content/docs/headless/guides/Architecture.md +++ b/docs_headless/src/content/docs/guides/Architecture.md @@ -8,7 +8,7 @@ React-admin relies on a several design decisions that structure its codebase. React-admin is specifically designed to build [Single-Page Applications (SPA)](https://en.wikipedia.org/wiki/Single-page_application). In a react-admin app, the browser fetches the required HTML, CSS, and JavaScript to render the application only once. Subsequently, data is fetched from APIs through AJAX calls. This is in contrast to traditional web applications, where the browser fetches a new HTML page for each screen. -![SPA lifecycle](../../../../assets/SPA-lifecycle.png) +![SPA lifecycle](../../../assets/SPA-lifecycle.png) The SPA architecture ensures that react-admin apps are [exceptionally fast](./Features.md#fast), easy to host, and compatible with existing APIs without requiring a dedicated backend. @@ -58,7 +58,7 @@ The `` component allows react-admin to automatically link CRUD pages b React-admin does not make any assumptions about the specific structure of your API. Instead, it defines its own syntax for data fetching, authentication, internationalization, and preferences. To interact with your API, react-admin relies on adapters called **providers**. -![Providers](../../../../assets/providers.png) +![Providers](../../../assets/providers.png) For example, to fetch a list of records from the API, you would use the `dataProvider` object as follows: diff --git a/docs_headless/src/content/docs/shadcn/guides/CRUD.md b/docs_headless/src/content/docs/guides/CRUD.md similarity index 99% rename from docs_headless/src/content/docs/shadcn/guides/CRUD.md rename to docs_headless/src/content/docs/guides/CRUD.md index 95eee11f546..424865b8061 100644 --- a/docs_headless/src/content/docs/shadcn/guides/CRUD.md +++ b/docs_headless/src/content/docs/guides/CRUD.md @@ -414,7 +414,7 @@ const App = () => ( Guesser components start by fetching data from the API, analyzing the shape of the response, and then picking up Field and Input components that match the data type. They also dump the generated code in the console to let you start customizing the UI. -![ListGuesser](../../../../assets/tutorial_guessed_list.png) +![ListGuesser](../../../assets/tutorial_guessed_list.png) Check the following components to learn more about guessers: diff --git a/docs_headless/src/content/docs/headless/guides/datafetchingguide.mdx b/docs_headless/src/content/docs/guides/datafetchingguide.mdx similarity index 98% rename from docs_headless/src/content/docs/headless/guides/datafetchingguide.mdx rename to docs_headless/src/content/docs/guides/datafetchingguide.mdx index 504ffb89a2b..11a710690f6 100644 --- a/docs_headless/src/content/docs/headless/guides/datafetchingguide.mdx +++ b/docs_headless/src/content/docs/guides/datafetchingguide.mdx @@ -1,7 +1,7 @@ --- title: "Data Fetching" --- -import { SuccessCase } from '../../../../../../packages/ra-core/src/dataProvider/useUpdate.optimistic.stories.tsx' +import { SuccessCase } from '../../../../../packages/ra-core/src/dataProvider/useUpdate.optimistic.stories.tsx' You can build a react-admin app on top of any API, whether it uses REST, GraphQL, RPC, or even SOAP, regardless of the dialect it uses. This works because react-admin doesn't use `fetch` directly. Instead, it uses a Data Provider object to interface with your API and [React Query](https://tanstack.com/query/v5/docs/react/overview) to handle data fetching. @@ -9,7 +9,7 @@ You can build a react-admin app on top of any API, whether it uses REST, GraphQL In a react-admin app, you don't write API calls using `fetch` or `axios`. Instead, you communicate with your API through an object called the `dataProvider`. -![Backend agnostic](../../../../assets/data-provider.png) +![Backend agnostic](../../../assets/data-provider.png) The `dataProvider` exposes a predefined interface that allows react-admin to query any API in a normalized way. @@ -365,7 +365,7 @@ If a relationship component doesn't fit your specific use case, you can always u React-admin offers powerful realtime features to help you build collaborative applications based on the Publish / Subscribe (PubSub) pattern. The [Realtime documentation](./Realtime.md) explains how to use them. -These features are part of the [Enterprise Edition](https://react-admin-ee.marmelab.com)React Admin Enterprise Edition icon. +These features are part of the [Enterprise Edition](https://react-admin-ee.marmelab.com)React Admin Enterprise Edition icon. ### Realtime Data Provider diff --git a/docs_headless/src/content/docs/headless/guides/CRUD.md b/docs_headless/src/content/docs/headless/guides/CRUD.md deleted file mode 100644 index 95eee11f546..00000000000 --- a/docs_headless/src/content/docs/headless/guides/CRUD.md +++ /dev/null @@ -1,469 +0,0 @@ ---- -title: "CRUD Pages" ---- - -Most admin and B2B apps start with a few basic screens to manipulate records: - -- A list page, including the ability to filter, paginate, and sort the records -- A read-only page displaying the record details -- An edition page, allowing to update the record via a form -- A creation page - -We call this type of interface a "CRUD" interface because it allows us to Create, Read, Update, and Delete records. - -React-admin started as an engine to generate such CRUD interfaces, and it still does it very well. **Building CRUD interfaces with react-admin requires little to no effort**, and it's very easy to customize them. - - - -## Page Components - -React-admin provides page components for CRUD operations: - -- [``](./ListTutorial.md) displays a list of records -- [``](./Show.md) displays a record in read-only mode -- [``](./EditTutorial.md) displays a form to edit a record -- [``](./Create.md) displays a form to create a record - -Each component reads the parameters from the URL, fetches the data from the data provider, stores the data in a context, and renders its child component. - -For example, to display a list of posts, you would use the `` component: - -```jsx -import { List, DataTable } from 'react-admin'; - -const PostList = () => ( - - - - - - - -); -``` - -Here, the `` component will call `dataProvider.getList('posts')` to fetch the list of posts and create a `ListContext` to store the data. The `` component will read the data from that `ListContext` and render a row for each post. That's why there is no need to explicitly pass the data to the `` component. - -## Page Context - -`` and other page components don't just fetch data; they provide a way to update the page settings: - -- Sort field and order -- Current page & page size -- Filters -- Record selection - -The [`ListContext`](./useListContext.md) exposes callbacks to update these settings, and ``'s children components like `` use these callbacks to update the data. - -```jsx -const listContext = useListContext(); -const { - // Data - data, // Array of the list records, e.g. [{ id: 123, title: 'hello world' }, { ... } - total, // Total number of results for the current filters, excluding pagination. Useful to build the pagination controls, e.g. 23 - meta, // Additional information about the list, like facets & statistics - isPending, // Boolean, true until the data is available - isFetching, // Boolean, true while the data is being fetched, false once the data is fetched - isLoading, // Boolean, true until the data is fetched for the first time - - // Pagination - page, // Current page. Starts at 1 - perPage, // Number of results per page. Defaults to 25 - setPage, // Callback to change the page, e.g. setPage(3) - setPerPage, // Callback to change the number of results per page, e.g. setPerPage(25) - hasPreviousPage, // Boolean, true if the current page is not the first one - hasNextPage, // Boolean, true if the current page is not the last one - - // Sorting - sort, // Sort object { field, order }, e.g. { field: 'date', order: 'DESC' } - setSort, // Callback to change the sort, e.g. setSort({ field: 'name', order: 'ASC' }) - - // Filtering - filterValues, // Dictionary of filter values, e.g. { title: 'lorem', nationality: 'fr' } - displayedFilters, // Dictionary of displayed filters, e.g. { title: true, nationality: true } - setFilters, // Callback to update the filters, e.g. setFilters(filters, displayedFilters) - showFilter, // Callback to show one of the filters, e.g. showFilter('title', defaultValue) - hideFilter, // Callback to hide one of the filters, e.g. hideFilter('title') - - // Record selection - selectedIds, // Array listing the ids of the selected records, e.g. [123, 456] - onSelect, // Callback to change the list of selected records, e.g. onSelect([456, 789]) - onToggleItem, // Callback to toggle the record selection for a given id, e.g. onToggleItem(456) - onUnselectItems, // Callback to clear the record selection, e.g. onUnselectItems(); - - // Misc - defaultTitle, // Translated title based on the resource, e.g. 'Posts' - resource, // Resource name, deduced from the location. e.g. 'posts' - refetch, // Callback for fetching the list data again -} = listContext; -``` - -## CRUD Routes - -You could declare the CRUD routes manually using react-router's `` component. But it's such a typical pattern that react-admin provides a shortcut: the [``](./Resource.md) component. - -```jsx - -``` - -This is the equivalent of the following react-router configuration: - -```jsx - - - } /> - } /> - } /> - } /> - - -``` - -`` defines a `ResourceContext` storing the current resource `name`. This context is used by the ``, ``, ``, and `` components to determine the resource they should fetch. So when declaring page components with ``, you don't need to pass the `resource` prop to them. - -```diff -import { List, DataTable } from 'react-admin'; - -const PostList = () => ( -- -+ - - - - - - -); -``` - -Check [the `` documentation](./Resource.md) to learn more about routing and resource context. - -## The List Page - -To build list pages, developers primarily use the [``](./List.md) component. It fetches a list of records from the data provider and delegates the rendering to its child component (often a [``](./DataTable.md), as in the example below). - -```jsx -import { List, DataTable, TextInput} from 'react-admin'; - -const filters = []; - -const BookList = () => ( - - - - - - - - -); -``` - -`` also lets you customize the UI for filters and pagination. As for ``, it provides tons of customization options, like row expanders, bulk actions, and column chooser. You can learn more in the [List Tutorial](./ListTutorial.md). - -### List Layouts - -You can use any of the following components to build the list page: - - - - - - - - - - -
- - - - <DataTable> - - - - - <DatagridAG> -
- - - - <SimpleList> - - - - - <Calendar> -
- -Inside these list layouts, you can use any of react-admin’s Field components to display the record data. - -### Filter Components - - - - - - - - - - -
- - - - Filter Button/Form Combo - - - - - <FilterList> Sidebar -
- - - - <StackedFilters> Dialog - - - - - Global <Search> -
- -### Buttons - -- [``](./Buttons.md#editbutton): Go to the edit page for a record -- [``](./EditInDialogButton.md): Edit a record in a dialog -- [``](./Buttons.md#exportbutton): A button to export the list data -- [``](./Buttons.md#createbutton): A button to create a new record -- [``](./SortButton.md): A button to sort the list -- [``](./SelectColumnsButton.md): A button to select the columns to display in a DataTable -- [``](./Buttons.md#bulkupdatebutton): A button to update selected records -- [``](./Buttons.md#bulkdeletebutton): A button to delete selected records -- [``](./List.md#actions): A toolbar with a create and an export button - -### Misc - -- [``](./Pagination.md): Renders the page count and buttons to navigate to the previous and next pages -- [``](./SavedQueriesList.md): Lets user save a combination of filters - -### Alternatives to List - -You can also use specialized alternatives to the `` component, which offer type-specific features: - -- [``](./TreeWithDetails.md): A tree view with a detail view for each node -- [``](./Calendar.md#completecalendar): A calendar view for events -- [``](./InfiniteList.md): A list with infinite scrolling - -## The Show Page - -Show pages rely on the [``](./Show.md) component. It reads the record id from the URL, fetches the record from the data provider, and delegates the rendering to its child component, e.g., a [``](./SimpleShowLayout.md): - -```jsx -import { Show, SimpleShowLayout, TextField} from 'react-admin'; - -const BookShow = () => ( - - - - - - - - -); -``` - -You can learn more in the [Show Tutorial](./ShowTutorial.md). - -### Show Layouts - -You can use any of the following components to build the show page: - - - - - - -
- - - - <SimpleShowLayout> - - - - - <TabbedShowLayout> -
- -Inside these show layouts, you can use any of react-admin's [Field components](./Fields.md) to display the record data. - -### Buttons - -- [``](./Buttons.md#editbutton): Go to the edit page for a record -- [``](./Buttons.md#createbutton): A button to create a new record -- [``](./Buttons.md#listbutton): Go to the list page for a record -- [``](./Buttons.md#clonebutton): Clone a record - -### Misc - -- [``](./Labeled.md): A component to display a field with a label - -## The Edit & Create Pages - -The [``](./Edit.md) and [``](./Create.md) components are very similar. They are useful for editing a record - either fetched from the API or a new record. Typically, the child component of these pages is a form layout, like a [``](./SimpleForm.md): - -```jsx -import { Edit, SimpleForm, TextInput} from 'react-admin'; - -const BookEdit = () => ( - - - - - - - - -); -``` - -You can learn more in the [Edit Tutorial](./EditTutorial.md). - -### Form Layouts - -You can use any of the following components to build the edit and create pages: - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -Forms are very powerful in react-admin. They support default values, sync and async validation, dependent inputs, access control, sub-forms, and more. Check out the [Forms introduction](./Form.md) for more information. Inside the form layouts, you can use any of react-admin's [Input components](./Inputs.md) to edit the record data. - -### Buttons - -- [``](./Buttons.md#showbutton): Go to the show page for a record -- [``](./SaveButton.md): The submit button for the form -- [``](./Buttons.md#clonebutton): Clone a record - -### Misc - -- [``](./Toolbar.md): Customize the form toolbar -- [``](./JsonSchemaForm.md): A form based on a JSON schema -- [``](./AutoSave.md): Automatically save the form - -## Guessers & Scaffolding - -When mapping a new API route to a CRUD view, adding fields one by one can be tedious. React-admin provides a set of guessers that can automatically **generate a complete CRUD UI based on an API response**. - -For instance, the following code will generate a complete CRUD UI for the `users` resource: - -```jsx -import { Admin, Resource, ListGuesser, EditGuesser, ShowGuesser } from 'react-admin'; - -const App = () => ( - - - -); -``` - -Guesser components start by fetching data from the API, analyzing the shape of the response, and then picking up Field and Input components that match the data type. They also dump the generated code in the console to let you start customizing the UI. - -![ListGuesser](../../../../assets/tutorial_guessed_list.png) - -Check the following components to learn more about guessers: - -- [``](./ListGuesser.md) -- [``](./EditGuesser.md) -- [``](./ShowGuesser.md) - -## Headless Variants - -`` and other page components render their children (e.g., ``) in a page layout. This layout contains a page title (e.g., "Posts"), toolbars for action buttons & filters, a footer for pagination, and a side column. - -But sometimes, you want to use the list data in a different layout, without the page title and toolbar, or with a different UI kit. For these use cases, you can use the headless variants of the page components, which come in two flavors: - -- **Hook**: `useListController`, `useEditController`, `useCreateController`, `useShowController` -- **Component**: ``, ``, ``, `` - -For instance, to use the list data in a custom layout, you can use the `useListController` hook: - -```jsx -import { useListController } from 'react-admin'; - -const MyList = () => { - const { data, ids, total } = useListController({ resource: 'posts' }); - return ( -
-

Posts

-
    - {ids.map(id => ( -
  • {data[id].title}
  • - ))} -
-

Total: {total}

-
- ); -}; -``` - -If you want to use react-admin components, prefer the Base components, which call the hooks internally and store the values in a context: - -```jsx -import { ListBase, DataTable } from 'react-admin'; - -const MyList = () => ( - - - - - - - -); -``` diff --git a/docs_headless/src/content/docs/index.mdx b/docs_headless/src/content/docs/index.mdx index d776b01ceb0..5e6299068ad 100644 --- a/docs_headless/src/content/docs/index.mdx +++ b/docs_headless/src/content/docs/index.mdx @@ -1,17 +1,14 @@ --- -title: Welcome to Starlight -description: Get started building your docs site with Starlight. +title: React Admin Headless +description: Headless core of React Admin template: splash hero: - tagline: Congrats on setting up a new Starlight project! + tagline: Headless core of React Admin image: file: ../../assets/houston.webp actions: - - text: Headless - link: /ra-core/headless/guides/architecture/ - icon: right-arrow - - text: Shadcn UI - link: /ra-core/shadcn/guides/architecture/ + - text: Get started + link: /ra-core/guides/architecture/ icon: right-arrow --- diff --git a/docs_headless/src/content/docs/headless/reference/example.md b/docs_headless/src/content/docs/reference/example.md similarity index 100% rename from docs_headless/src/content/docs/headless/reference/example.md rename to docs_headless/src/content/docs/reference/example.md diff --git a/docs_headless/src/content/docs/shadcn/guides/Architecture.md b/docs_headless/src/content/docs/shadcn/guides/Architecture.md deleted file mode 100644 index 78b0150bc87..00000000000 --- a/docs_headless/src/content/docs/shadcn/guides/Architecture.md +++ /dev/null @@ -1,304 +0,0 @@ ---- -title: "Key Concepts" ---- - -React-admin relies on a several design decisions that structure its codebase. - -## Single-Page Application - -React-admin is specifically designed to build [Single-Page Applications (SPA)](https://en.wikipedia.org/wiki/Single-page_application). In a react-admin app, the browser fetches the required HTML, CSS, and JavaScript to render the application only once. Subsequently, data is fetched from APIs through AJAX calls. This is in contrast to traditional web applications, where the browser fetches a new HTML page for each screen. - -![SPA lifecycle](../../../../assets/SPA-lifecycle.png) - -The SPA architecture ensures that react-admin apps are [exceptionally fast](./Features.md#fast), easy to host, and compatible with existing APIs without requiring a dedicated backend. - -To achieve this, react-admin utilizes an internal router, powered by `react-router`, to display the appropriate screen when the user clicks on a link. Developers can define routes using the [``](./Resource.md) component for CRUD routes and the [``](./CustomRoutes.md) component for other routes. - -For example, the following react-admin application: - -```jsx -import { CoreAdminContext, CoreAdminUI, Resource, CustomRoutes } from 'ra-core'; -import { Route } from 'react-router-dom'; - -export const App = () => ( - - - - - - } /> - } /> - - - } /> - } /> - - - -); -``` - -Declares the following routes: - -- `/labels`: `` -- `/labels/:id`: `` -- `/labels/:id/show`: `` -- `/genres`: `` -- `/artists`: `` -- `/artists/:id`: `` -- `/artists/create`: `` -- `/artists/:id/songs`: `` -- `/artists/:id/songs/:songId`: `` -- `/profile`: `` -- `/organization`: `` - -The `` component allows react-admin to automatically link CRUD pages between them, including those for related entities. This approach allows you to think about your application in terms of entities, rather than getting bogged down by managing routes. - -## Providers - -React-admin does not make any assumptions about the specific structure of your API. Instead, it defines its own syntax for data fetching, authentication, internationalization, and preferences. To interact with your API, react-admin relies on adapters called **providers**. - -![Providers](../../../../assets/providers.png) - -For example, to fetch a list of records from the API, you would use the `dataProvider` object as follows: - -```jsx -dataProvider.getList('posts', { - pagination: { page: 1, perPage: 5 }, - sort: { field: 'title', order: 'ASC' }, - filter: { author_id: 12 }, -}).then(response => { - console.log(response); -}); -// { -// data: [ -// { id: 452, title: "Harry Potter Cast: Where Now?", author_id: 12 }, -// { id: 384, title: "Hermione: A Feminist Icon", author_id: 12 }, -// { id: 496, title: "Marauder's Map Mysteries", author_id: 12 }, -// { id: 123, title: "Real-World Roots of Wizard Spells", author_id: 12 }, -// { id: 189, title: "Your True Hogwarts House Quiz", author_id: 12 }, -// ], -// total: 27 -// } -``` - -The `dataProvider.getList()` method is responsible for translating this request into the appropriate HTTP request to your API. When using the REST data provider, the above code will translate to: - -``` -GET http://path.to.my.api/posts?sort=["title","ASC"]&range=[0, 4]&filter={"author_id":12} - -HTTP/1.1 200 OK -Content-Type: application/json -Content-Range: posts 0-4/27 -[ - { id: 452, title: "Harry Potter Cast: Where Now?", author_id: 12 }, - { id: 384, title: "Hermione: A Feminist Icon", author_id: 12 }, - { id: 496, title: "Marauder's Map Mysteries", author_id: 12 }, - { id: 123, title: "Real-World Roots of Wizard Spells", author_id: 12 }, - { id: 189, title: "Your True Hogwarts House Quiz", author_id: 12 }, -] -``` - -React-admin comes with [more than 50 data providers](./DataProviderList.md) for various backends, including REST, GraphQL, Firebase, Django REST Framework, API Platform, and more. If these providers do not suit your API, you have the flexibility to [develop a custom provider](./DataProviderWriting.md). - -This approach is why react-admin components do not call `fetch` or `axios` directly. Instead, they rely on the data provider to fetch data from the API. Similarly, it is recommended that your custom components follow the same pattern and utilize [data provider hooks](./Actions.md), such as [`useGetList`](./useGetList.md): - -```jsx -import { useGetList } from 'ra-core'; - -const MyComponent = () => { - const { data, total, loading, error } = useGetList('posts', { - pagination: { page: 1, perPage: 5 }, - sort: { field: 'title', order: 'ASC' }, - filter: { author_id: 12 }, - }); - - if (loading) return ; - if (error) return ; - return ( -
-

Found {total} posts matching your query

-
    - {data.map(record => ( -
  • {record.title}
  • - ))} -
-
- ) -}; -``` - -By using `useGetList`, you gain various benefits beyond a simple `fetch`: it handles user credentials, triggers loading indicators, manages loading states, handles errors, caches results for future use, and controls the data shape, among other things. - -Whenever you need to communicate with a server, you will use these providers. Since they are specialized for their respective domains and tightly integrated with react-admin, they will save you a significant amount of time and effort. - -## Composition - -React-admin avoids components that accept an overwhelming number of props, which are often referred to as "God Components." Instead, react-admin encourages the use of composition, where components accept subcomponents (either through children or specific props) to handle a share of the logic. - -For example, while you cannot directly pass a list of actions to the `` component, you can achieve the same result by passing an `actions` component: - -```jsx -import { Button } from '@mui/material'; -import { TopToolbar, ShowButton } from 'react-admin'; - -export const PostEdit = () => ( - }> - ... - -); - -const PostEditActions = () => ( - - - - -); -``` - -This approach enables you to override specific parts of the logic of a component by composing it with another component. - -The trade-off with this approach is that sometimes react-admin may require you to override several components just to enable one specific feature. For instance, to override the Menu, you must first create a custom layout using your menu as the `` prop, then pass it as the `` prop: - -```jsx -// in src/MyLayout.js -import { Layout } from 'react-admin'; -import { Menu } from './Menu'; - -export const MyLayout = ({ children }) => ( - - {children} - -); - -// in src/App.js -import { Admin } from 'react-admin'; -import { MyLayout } from './MyLayout'; - -const App = () => ( - - // ... - -); -``` - -Although this drawback exists, we accept it because the use of composition in react-admin makes the components highly extensible, and it significantly improves the readability and maintainability of the code. - -## Hooks - -When you find that you cannot tweak a react-admin component using props, you can always turn to the lower-level API: hooks. In fact, the core of react-admin is a headless library called `ra-core`, which primarily consists of hooks. These hooks hide the framework's implementation details, allowing you to focus on your business logic. It's perfectly normal to use react-admin hooks in your own components if the default UI doesn't meet your specific requirements. - -For example, the `` button used in `pessimistic` mode renders a confirmation dialog when clicked and then calls the `dataProvider.delete()` method for the current record. If you want the same feature but with a different UI, you can use the `useDeleteWithConfirmController` hook: - -```jsx -const DeleteButton = () => { - const resource = useResourceContext(); - const record = useRecordContext(); - const { - open, - isPending, - handleDialogOpen, - handleDialogClose, - handleDelete, - } = useDeleteWithConfirmController({ redirect: 'list' }); - - return ( - - - - - ); -}; -``` - -The fact that hook names often end with `Controller` is intentional and reflects the use of [the Model-View-Controller (MVC) pattern](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) for complex components in react-admin. - -- The Controller logic is handled by React hooks (e.g. `useListController`). -- The view logic is managed by React components (e.g. ``). -- The model logic is left to the developer, and react-admin simply defines the interface that the model must expose through its Providers. - -React-admin exposes [dozens of hooks](./Reference.md#hooks) to assist you in building your own components. You can even construct an entire react-admin application without relying on the Material UI components and use a different UI kit if desired (see for instance [shadcn-admin-kit](https://github.com/marmelab/shadcn-admin-kit), a library for building admin apps with Shadcn UI). This flexibility allows you to tailor the application to your specific needs and preferences. - -## Context: Pull, Don't Push - -Communication between components can be challenging, especially in large React applications, where passing props down several levels can become cumbersome. React-admin addresses this issue using a pull model, where components expose props to their descendants via a context, and descendants can consume these props using custom hooks. - -Whenever a react-admin component fetches data or defines a callback, it creates a context and places the data and callback in it. - -For instance, the `` component creates an `I18NProviderContext`, which exposes the `translate` function. All components in the application can utilize the `useTranslate` hook, which reads the `I18NProviderContext`, for translating labels and messages. - -```jsx -import { useTranslate } from 'ra-core'; - -export const MyHelloButton = ({ handleClick }) => { - const translate = useTranslate(); - return ( - - ); -}; -``` - -Similarly, the `` component fetches a record and exposes it via a `RecordContext`. Inside the `` component, you can use the `useRecordContext` hook to access the record data. For example, you can use it to display a map of the record's location. - -```jsx -import { ShowBase, useRecordContext } from 'ra-core'; -import { MapContainer, TileLayer, Marker } from 'react-leaflet'; - -const LocationField = ({ source }) => { - const record = useRecordContext(props); // use the RecordContext created by - if (!record) return null; - - return ( - - - - - ); -}; - -const StoreShowPage = () => ( - {/* create a RecordContext */} -
- -
-
-) -``` - -This approach eliminates the need for a dependency injection system and provides an elegant solution to access data and callbacks from higher levels in the render tree. - -So when you write a component that needs to access data or callbacks defined higher in the render tree, you can always find a context to get it. - -Contexts are fundamental concepts in React Admin. If you are not familiar with them, don't hesitate to read the [React documentation on Context](https://react.dev/learn/passing-data-deeply-with-context). Understanding contexts will greatly enhance your understanding of how react-admin leverages them to create a powerful and flexible framework. - -## Awesome Developer Experience - -With react-admin, developers assemble application components without having to worry about low-level details. They need less code for the same result, and they can **focus on the business logic** of their app. - -We've crafted the API of react-admin's components and hooks to be as **intuitive** as possible. The react-admin core team uses react-admin every day, and we're always looking for ways to improve the developer experience. - -React-admin provides the **best-in-class documentation**, demo apps, and support. Error messages are clear and actionable. Thanks to extensive TypeScript types and JSDoc, it's easy to use react-admin in any IDE. The API is stable and **breaking changes are very rare**. You can debug your app with the [query](./DataProviders.md#enabling-query-logs) and [form](https://react-hook-form.com/dev-tools) developer tools, and inspect the react-admin code right in your browser. - -That probably explains why more than 3,000 new apps are published every month using react-admin. - -So react-admin is not just the assembly of [React Query](https://react-query.tanstack.com/), [react-hook-form](https://react-hook-form.com/), [react-router](https://reacttraining.com/react-router/), [Material UI](https://mui.com/material-ui/getting-started/), and [Emotion](https://github.com/emotion-js/emotion). It's a **framework** made to speed up and facilitate the development of single-page apps in React. \ No newline at end of file diff --git a/docs_headless/src/content/docs/shadcn/guides/DataFetchingGuide.md b/docs_headless/src/content/docs/shadcn/guides/DataFetchingGuide.md deleted file mode 100644 index 85912c6aa48..00000000000 --- a/docs_headless/src/content/docs/shadcn/guides/DataFetchingGuide.md +++ /dev/null @@ -1,423 +0,0 @@ ---- -layout: default -title: "Data Fetching" ---- - -You can build a react-admin app on top of any API, whether it uses REST, GraphQL, RPC, or even SOAP, regardless of the dialect it uses. This works because react-admin doesn't use `fetch` directly. Instead, it uses a Data Provider object to interface with your API and [React Query](https://tanstack.com/query/v5/docs/react/overview) to handle data fetching. - -## The Data Provider - -In a react-admin app, you don't write API calls using `fetch` or `axios`. Instead, you communicate with your API through an object called the `dataProvider`. - -![Backend agnostic](../../../../assets/data-provider.png) - -The `dataProvider` exposes a predefined interface that allows react-admin to query any API in a normalized way. - -For instance, to query the API for a single record, react-admin calls `dataProvider.getOne()`: - -```tsx -const response = await dataProvider.getOne('posts', { id: 123 }); -console.log(response.data); // { id: 123, title: "hello, world" } -``` - -The Data Provider is responsible for transforming these method calls into HTTP requests and converting the responses into the format expected by react-admin. In technical terms, a Data Provider is an *adapter* for an API. - -A Data Provider must implement the following methods: - -```jsx -const dataProvider = { - async getList(resource, { sort, filter, pagination }) => ({ data: Record[], total: number }), - async getOne(resource, { id }) => ({ data: Record }), - async getMany(resource, { ids }) => ({ data: Record[] }), - async getManyReference(resource, { target, id, sort, filter, pagination }) => ({ data: Record[], total: number }), - async create(resource, { data }) => ({ data: Record }), - async update(resource, { id, data }) => ({ data: Record }), - async updateMany(resource, { ids, data }) => ({ data: Identifier[] }), - async delete(resource, { id } ) => ({ data: Record }), - async deleteMany(resource, { ids }) => ({ data: Identifier[] }), -} -``` - -**Tip**: A Data Provider can have [additional methods](./Actions.md#calling-custom-methods) beyond these 9. For example, you can add custom methods for non-REST API endpoints, tree structure manipulations, or realtime updates. - -The Data Provider is a key part of react-admin's architecture. By standardizing the Data Provider interface, react-admin can offer powerful features, like reference handling, optimistic updates, and autogenerated CRUD components. - -## Backend Agnostic - -Thanks to this adapter system, react-admin can communicate with any API. It doesn't care if your API is a REST API, a GraphQL API, a SOAP API, a JSON-RPC API, or even a local API. It doesn't care if your API is written in PHP, Python, Ruby, Java, or JavaScript. It doesn't care if your API is a third-party API or a homegrown API. - -React-admin ships with [more than 50 data providers](./DataProviderList.md) for popular API flavors. - -You can also [write your own Data Provider](./DataProviderWriting.md) to fit your backend's particularities. Data Providers can use `fetch`, `axios`, `apollo-client`, or any other library to communicate with APIs. The Data Provider is also the ideal place to add custom HTTP headers, authentication, etc. - -Check out the [Data Provider Setup](./DataProviders.md) documentation for more details on how to set up a Data Provider in your app. - -## Calling The Data Provider - -Many react-admin components use the Data Provider: page components like `` and ``, reference components like `` and ``, action Buttons like `` and ``, and many more. - -If you need to call the Data Provider directly from your components, you can use the specialized hooks provided by react-admin: - -* [`useGetList`](./useGetList.md) -* [`useGetOne`](./useGetOne.md) -* [`useGetMany`](./useGetMany.md) -* [`useGetManyReference`](./useGetManyReference.md) -* [`useCreate`](./useCreate.md) -* [`useUpdate`](./useUpdate.md) -* [`useUpdateMany`](./useUpdateMany.md) -* [`useDelete`](./useDelete.md) -* [`useDeleteMany`](./useDeleteMany.md) - -For instance, to call `dataProvider.getOne()`, use the `useGetOne` hook: - -```jsx -import { useGetOne } from 'react-admin'; -import { Loading, Error } from './MyComponents'; - -const UserProfile = ({ userId }) => { - const { data: user, isPending, error } = useGetOne('users', { id: userId }); - - if (isPending) return ; - if (error) return ; - if (!user) return null; - - return ( -
    -
  • Name: {user.name}
  • -
  • Email: {user.email}
  • -
- ) -}; -``` - -You can also call the `useDataProvider` hook to access the `dataProvider` directly: - -```jsx -import { useDataProvider } from 'react-admin'; - -const BanUserButton = ({ userId }) => { - const dataProvider = useDataProvider(); - const handleClick = () => { - dataProvider.update('users', { id: userId, data: { isBanned: true } }); - }; - return