diff --git "a/gen/docstore.json" "b/gen/docstore.json" new file mode 100644--- /dev/null +++ "b/gen/docstore.json" @@ -0,0 +1 @@ +{"docstore/metadata": {"d33dcef9-811c-4877-ba22-b17e4d133446": {"doc_hash": "63ab721d33d522b10bc8604d7e68dba25d9367192339b7e26a2772ea92fea859"}, "81739346-75c5-440f-b912-c9176f5053c9": {"doc_hash": "39980e760b12669a25a8f49b491ff2c8148504e0b7bc703dee1b2d4185528190"}, "630a934b-5287-4c49-8154-0bac47f9ea34": {"doc_hash": "82e60a9661162af2c00fdea32b1e57ead48b3d45bcc40952bdd6204dd1a2eefa"}, "935f16db-76d4-4008-83b7-f372e9cdb12b": {"doc_hash": "6d3f177f0453a9bd4cde27f7186bbaa593cc5eaf8a3fb6992f51e31f295d92fa"}, "c559db73-5d8a-42d3-8c77-48293f89dc65": {"doc_hash": "366d3cf304f72062dc2973916e7ee793bc2059a984aeef0c64e685babd76d361"}, "8ebdddeb-f607-46e1-b85d-7f39a8bccb9b": {"doc_hash": "6c99d6fc8080940faa0da17a05bf22c96f08aa045dda0229839ddd3ae2b4f176"}, "43543171-e694-468c-8aba-4a691f538106": {"doc_hash": "15578b724ddb0e4ff28eebe355ad096e903e2188367e8c3e01537b985936d7bb"}, "4beb44e0-b079-4041-ac8e-10e65242380f": {"doc_hash": "075d6a359ee0089150093b4a32f08876cc5a1eef46759a65ec0e4b3528ea9e47"}, "b1d1b528-9eea-4198-a74b-d57f16112374": {"doc_hash": "24b62b31680d0b23cb89d4d4d43bd78a5efa7699be384b265c5a81d2ca3d3135"}, "d2df3686-41c6-4dd5-adf2-8e69c5586270": {"doc_hash": "1e7090dab695466e50c15c4aa8d524533da6f57493961996e5ded4914af2155a"}, "b934be95-f8fc-43a4-ae20-22989392b870": {"doc_hash": "edf73539b01c228d50c14caec1dfd8264aa7a111c4cf33608872d3b70f77136d"}, "73981f32-3dc6-4fe2-8c04-15c790c3e1fe": {"doc_hash": "8338cfcda54e4d4a91171d18424ec60b3d798cc14eaf5879a89a16bf124d78d6"}, "760353fe-a00a-4f8e-8f2b-cdad5b29af4a": {"doc_hash": "8f4b9be0046484f6b9704c9dc50cf2e8dc589c2934e3c1b3cf5c80246b985968"}, "f1c2e95d-e8e4-48f3-a18d-e278cea28f88": {"doc_hash": "8dac6bdc85512d7d0e8cb1cbd9c59ef5d2124dd9e1349b097063a0e53152ed21"}, "d675300b-9fce-4538-a4b0-6f2c4ad610b7": {"doc_hash": "e2552c94ff7e1b2094a1a35e437cbd6b8a2c41fdc698ad053cf98f0436e05ae6"}, "4319f288-98ba-4a07-bf30-12039cb35a3b": {"doc_hash": "075b74aee1ca74a258245e50db73149f06934cae99daa4e44e1bc613eb1659e3"}, "1cb8ba0c-fcdc-4881-bcc0-765066756cea": {"doc_hash": "50a6fe8b7fb9133f8f805905d1673d100587eaf5f4589ec96f4b4295a2e19462"}, "e42f20e1-c0be-45ed-b649-cc469e303923": {"doc_hash": "90fe4ee5cadbce511f859eac6cdc6cfdc4f955c03959c1f21f2fbdc7347320b1"}, "9754078c-c393-4134-8118-84ef5a4ec20b": {"doc_hash": "c9562d52d44be102053d30f5fea009076aa68cde26af0f3a5dd3ba7bb97bc8e2"}, "c67d367c-8b36-4d78-b1a2-5ef3f622a62f": {"doc_hash": "54b7656f894cbac63e76adb1d775210340a2dbcd8da69bfc8b4648e719069777"}, "3d3c42be-ee56-41c4-9a9e-f2f921ad5015": {"doc_hash": "5e61311ad82d3800182491479469b721b67df61f350fe389d91b6d8bade9e9dc"}, "54d0e438-aff6-4279-b3f5-d789dcac8298": {"doc_hash": "eb5358334d85a42608e16c6995c42879e9d193225a18ae2a8863575dc9102875"}, "d5c6ec4a-5f78-428d-926b-52a51b9452e1": {"doc_hash": "8e8086abbe94d733f0ad18e81d0686edb9998557e8eeea0d3f43fddb11b7abfc"}, "bdb944d4-63e7-4f12-9ccf-b736249f89fd": {"doc_hash": "d6131c5ad81410ef8f0d76c5ddef4e29a755b99a191b9d16f251f0ab55179074"}, "9a85db8d-fe67-4c49-a737-db14139831bb": {"doc_hash": "a38a9653623defdb25f800a33b4c2b4ab6b14125355e0033341589547121e27b"}, "5ab779a3-1216-46a4-850d-a2e3cfd6b83c": {"doc_hash": "122cd9a37cbee8e32479bc87dc08f23e29239bdb6573746d5eaebea70f732b3b"}, "441a55c0-c331-40e0-9452-d49c8332fff6": {"doc_hash": "d2848bea301ec5bb5231bd9680ae964c2018e615a29458784e03ee6bf51471ca"}, "6979d524-2f53-441b-9ca1-a4749d88fdba": {"doc_hash": "9d10423e7e80a58976f2ceb9659b14194209af1596aab130ecd3b4936affda1d"}, "eddcc4ee-4a41-4c0a-a25c-78bccd389936": {"doc_hash": "22f042551a2aefee532d5ffd7a73d8b5adaac3a7c0bb0b776c39e117e8128330"}, "4fbe9a25-91ac-45c7-9910-50099c5401ca": {"doc_hash": "834e2b7701f994158628671a56e11e123a5783fc6466ad774ec93ea99921b5ac"}, "a87f62b2-558c-4a5e-a8f8-1fe024dd264c": {"doc_hash": "3d9347ed4dff4e2c444209dca04d6fbf458a482d5ee8d1acd9d2bc20bfd6a6ae"}, "6ef469a1-01e0-4872-85ca-dddec4c57707": {"doc_hash": "8a368ce0470b62b608328b6e6197c00ad686dfefd1fd974614c76c1e592c81e7"}, "f1973931-8b2d-4fc2-9e36-e7f7583c5d82": {"doc_hash": "a0265c9579b6b65d7ea6a8179b8de92956e9e124a9e9fe204d38036767f226c7"}, "15059657-8fd9-449b-a356-ca8a99e2b111": {"doc_hash": "440cd321973c230350de98c1cb594832f3071ca1c71169f856b644f1712b5832"}, "7c192707-7c5b-4fba-9651-1f25d96cba00": {"doc_hash": "5162a0f82f153246d35d024e6a1b3c01bd2b650b479cc28e4c97806f0d754e6a"}, "22d137f0-ec93-4ea9-8c8d-5a9d3a01d904": {"doc_hash": "a23fb103cfb63a221c455c1e3169b5852294b2205a164c64c0f5e7e76de2cacf"}, "a17d53aa-5b88-4a50-b7ff-1d56d3ab7f09": {"doc_hash": "26b901065a5a711d3f8ad3a92b186f4898aff4680ed82395ab353d829871c310"}, "65a5b424-9528-4f97-acdc-43019f8eb111": {"doc_hash": "8611a661ef5a5db98ba6c84d044cace00a22085f732a4bb06455ed866d60336e"}, "e216818b-28ac-42de-a60b-f299859e968e": {"doc_hash": "42badbd50a20620ee68eff7998d6442fcef14ee4dc29534839369a9febb76bfe"}, "435798af-fbbe-4611-9733-8f2fdd401428": {"doc_hash": "bf1cfe5841f41a724b200c272fa10013aa603ddb3cee5de4047561579c7ac64e"}, "4fe263ed-152f-4240-bb43-2affad0166a5": {"doc_hash": "c6e4f748a0b6d7b2a97706331c1230b336f0f784f5ab3b01e1463cde07f23edd"}, "4ecebb00-0dfe-445a-8279-8e3a0557d3ae": {"doc_hash": "3d27344b5ce7074e4e67287213711f2dac0579f46c05b4d97795e776975a85d3"}, "d926343e-2365-4de7-97d4-f5d0303c95eb": {"doc_hash": "88679526baf134c702631a149f6b4c5cba454cbf5418f9c33198bf6a72e07061"}, "a167faa6-650b-418f-8a61-0f0d101cc161": {"doc_hash": "2f983f1892f384e4ffcda5d03a4810523f13bbeb554cc62f7b6a6e06e61dbda9"}, "a610a10e-ba66-48b7-8ebe-734868bb1c60": {"doc_hash": "df7812d13b81e0b06aff477a32e4f63976b7daf376bcd540ebc36e0ca60b83ec"}, "6dd1cb20-564c-4e3e-afbe-cc2dc687522a": {"doc_hash": "07b03a218c27ecedd64f42e037bfb1c91122c4c82f9583516e81f5e1822d05b1"}, "acf13854-529c-4b03-82be-b9e96ed5a4b0": {"doc_hash": "bede622c3ec49a10250229503217a64b39b2d456a3928f30dca87a551fc2d3b5"}, "cfcbd9c9-24b7-4f43-996d-918221f14b6f": {"doc_hash": "6defc2cb0fa88176d2f8c974361387d9fcaa9ee1820acb663789de9af44ca5f9"}, "ccbde9b5-3cec-4579-8c1a-05dbba6bdedd": {"doc_hash": "dd9a145f4deec16c53df4bd39a85abd93db6a73483cc0772a7da7c330051b309"}, "ba2c9da4-b8d2-4e05-ae1b-f3d522f9688f": {"doc_hash": "83e7f7fffcf95ea5e11e23d23fa7e77f15d2a09c4fb329c55ec4878ff707c1c3"}, "0ac558d3-a107-4b97-8797-fa65a6e5c248": {"doc_hash": "9618d1fbc6ac36c00e37a3a42939467c1653e4d8a73e91fa97889af247e57520"}, "f658c726-6286-4429-89c0-06ccacfe8488": {"doc_hash": "08158de2bfc25982920f6246e8cba43455e8de6086e17c4c27f564a345bb7578"}, "408201f6-2ebc-4f2a-8d9f-f65a62619eb7": {"doc_hash": "a520e8fc9f789f21a65dbe05688eb143116a322477f184d6442598731fe0e7e4"}, "0db5c4a4-4bae-46de-b3bc-7da7fce494ca": {"doc_hash": "fd33beac694b708be1aa9d961da8cc3bc710f42a7a499dff32facef133ca6a76"}, "6010f816-93e5-40f0-9ab8-c8ba0995ff3e": {"doc_hash": "41de1321d71f036f59c6f59f5f2dcf03dc660a58c91f4496168abd041eb0b00e"}, "1f221282-aa00-4549-b5d9-35c82803f1d9": {"doc_hash": "12e72c5011b2edc310e6ad0b8e5176c817163ad8903f2cbb97e60298e67ef854"}, "2566a117-a230-4925-9869-892ac73bcafe": {"doc_hash": "9e97a5c8b9a16a5adbf08f89fd62ef40e1d2229c631af5856bf0b447ee0602ad"}, "e9b367f6-6da5-4876-b321-e5339bf264a7": {"doc_hash": "f0400960e85d312df939178200966f1bee5d92afc7ac505d22dcd2fa17b5e7fb"}, "d0d195f8-9c79-49f9-bf00-50e40d5b8d22": {"doc_hash": "69e857e68f743b0af9b9f7b3d4481b20fb3c5080c3126144fca7d63e00159b81"}, "2d7f157f-779d-4e7e-8015-f6e05275b833": {"doc_hash": "c7dd633f4e49e65d21133709070800a39b87a7667bcceb974cd51641d9331088"}, "c1c4201c-f444-4d78-83ab-5faa5340d8d0": {"doc_hash": "cb7a92595501ff0cc674435eb9f760dae6d3d26042023a82ea11456d01fc8990"}, "142c467c-f0ce-48b1-b658-2ba37dd02387": {"doc_hash": "8a509f9427dec8080cbb0aed2e64b8e309ef5fc72cf7eb4880557de135bc677e"}, "1cc359a3-8995-4d23-9657-25049d5803a1": {"doc_hash": "4cdc74a73cdf4f5430d1f161e93f2bac57e312a1874e0ac7b5414348116aacbe"}, "82b82f6a-8331-4706-94ad-d1647432901b": {"doc_hash": "b38620d621b29311a248a6d5d8e9cafd6c3a9ebc700b0305d1489855b4ec3a9f"}, "e554411a-930f-4c29-b9d2-5b157b031b9c": {"doc_hash": "d136ca7aafb9246c4d8d622bd15b9cb46a5ba70fdb62465a1af05184d9084696"}, "e0f3b408-2e7e-4fb9-bdf4-1546ed2a34b3": {"doc_hash": "6b96f87feddac93cb1ffaf75ce99c171511127b8ba319dd065c8796ab8a3ea5d"}, "468a7a0d-9fa5-4518-b0f7-5fa55c6aec89": {"doc_hash": "7c343cbaba06ac47344ed09d36eb674ad5e27041f1dfb7c66d41767fbe4735b4"}, "35ef8a34-a351-4a39-aef3-0999cd865b4b": {"doc_hash": "1bf0a8689e79ce74adb7b28bff4f78a9cd4d6ec6871ece7f3036c362f9282cf7"}, "4e91567c-770a-46f7-8d17-84b7ef8a00e1": {"doc_hash": "93ac71341ca2298e09d1088706648cfbc2f648ae95b2b814be797126141726b4"}, "2b89fd00-438d-4cf4-9e81-d48b0394f432": {"doc_hash": "399bea49e1cf95ff1c894893ce65ed9a4e8ee929e9457bc6691a5d264b606de3"}, "b0bc439f-dc48-489d-8f47-ae6a3b9134e7": {"doc_hash": "598cd6617dabdc83d0feca72bb13f52f563490bcf7d1f79f5479134de55be291"}, "e6898a83-0800-4165-b8b7-2f97d17dd442": {"doc_hash": "5067cf96f55ffbe32e70eb8ed72b427ca161f0e4e35d997e832eca9f457671df"}, "b6d04257-e356-47e3-9348-118c410d2d01": {"doc_hash": "2c5b549e100162d4bffee88ae416ab18ae4ec2c874509906a326a30b4ee2fe08"}, "cbf11523-368e-41a9-8462-26b6016459c2": {"doc_hash": "39819ed3b81b418f27e43cb695c7f9b321faece622e06093c3e4e6a750a1cd22"}, "f2663c1f-f11e-4456-aa73-52058fb1f810": {"doc_hash": "5ef5d547ea1f5fec36674748cdeb2a03484fbeb98cf173a0a39e0ef88bb91966"}, "e193a3f7-6496-4cff-8d99-b9932fe85d4a": {"doc_hash": "6e6d9bd9909b5e6fbd6ebbce59ae930bd764e676e32135eb71b954aeb5ad890d"}, "fb0bc33c-0104-4351-9a88-4371d549b045": {"doc_hash": "8e2d901b5a872467a53ae8042283619adb03441c7a40efa42ebc571ab9b3f0ac"}, "8286beb5-2897-4723-8955-15bd3ec7b974": {"doc_hash": "4928a6711d3564d962b778aaf68265100309111c73759c3c6f7b6cf3cafdbc6b"}, "33c6bfbb-af78-4af8-9422-cdaf8782a531": {"doc_hash": "75309bc1c3c8f5cfd0314be064df84f7755facfa05385f2af6816bcb1201d47b"}, "5ecbc694-328b-442b-b485-26b59b8e7ffe": {"doc_hash": "244e086c21711da8d5ebaa192a49844780010235eabb2f582d923fee2e4c08bf"}, "e1365385-b9ae-4b80-b914-829f08aa6062": {"doc_hash": "0a53b76ca7da71b6d72234c590a705c2d9f2edb64083190918b1d0f1add6303d"}, "25bdacbe-ad82-49d0-8a08-d12b464a07d8": {"doc_hash": "24c446c446376da59f1b433061cbe5b0099cb54676242206f4b1533bb888f04d"}, "81ade61a-902c-459e-a856-cdb846dad6d9": {"doc_hash": "a6425266b321cd351c1d00d8b226bb9ba844de70462e16081f4e9b446b438bd6"}, "a4ee67fa-bc9e-4fd0-bd08-0f0e662bc965": {"doc_hash": "5ca75a8c16611658d72bd1664ff42eb5f5f9b6b3a100b008b600d14a9a2542e7"}, "0bda94d7-4ec6-4960-84c6-b4d663cd6e0e": {"doc_hash": "4451a2ff266fe0be9521848679f84e5b3d5a69f7be139c29fc4604f150cd3f05"}, "a887b3f0-0a47-4028-a212-fe2e5beba62b": {"doc_hash": "df39fdbd8ae28ce3ffacc349cafed60778af8bad01e4a1ceb2e12c1b6343c140"}, "a03f5083-86d2-4e58-8873-491b51ddc6cd": {"doc_hash": "890438574bfd704dd9d7cb8e3550bebd880f2ab6b53c7d97e685e3ffa12d20d4"}, "e5fdbdd2-86aa-4f96-8473-f0ce293b0321": {"doc_hash": "fc0ed8703d31dcdbdc0ddac4fed0c3af609b51acda0160ab5e2cf454663591ac"}, "b068438f-df1b-4fd7-b729-3669aebb160f": {"doc_hash": "de830d475974a908f04d689ada3753a43b3d60307c86e599420931d3d4eb34d9"}, "c8bf059b-5ff6-4022-bc6c-eb4bf0bca4be": {"doc_hash": "fcba8d2497abd3fb4458c97aed30dc2051b57f330ee3a52a81dab9cba8d6d0ad"}, "c48cccfa-ab8b-4b0f-bd05-e13fde0e393a": {"doc_hash": "4546119f8149df3317c6938bbe1c02e9e08111606e1e0e4a76432f3f8580dfa4"}, "3ec777b0-0544-4e56-8144-1c12e1802698": {"doc_hash": "b50f2df7ddd6e8a26185f4ed1e0e512ccbfb6db3fa415d620762b0e93e57beec"}, "d168367f-92de-4a38-8cab-ab567f97fed8": {"doc_hash": "1a18d8430db99a423043cd5cb462fdc42d3b6e7d43cf8ca63cdf0127f6fd5b47"}, "d72c8c58-cd23-4766-bcb9-091b205a5e1e": {"doc_hash": "556cb77123461bada7105313720ae5676eb9ea19c71241cd625d0016d7318dd8"}, "b8c62aaa-117e-4a8e-87f0-24626a54d266": {"doc_hash": "387e00ac2b71fe1c167596a94eafc17eba39f913930155b46de0b309a0a426eb"}, "5716488c-43e2-4c89-b7cc-430258673200": {"doc_hash": "4ae9792e6bc2f706950d9a2a62190511136813dd0c84930e66c358081e20439b"}, "1ff25416-4c95-49c7-8b4d-711999987599": {"doc_hash": "1ab4f085ed20fd02465c49a89d4ed2f9fa23f47ddef03d3d5c3d2482c50db98e"}, "955d2c39-6f59-47cd-bf1b-084c55fb896d": {"doc_hash": "af46ac061afd1aa64588e16634cac6326f8bad520319dfe8a1fa342a5595b246"}, "cacc392a-ebe8-4bf8-b316-632e2537370a": {"doc_hash": "19eab4b9a100b9cbe435663259243574a856229b3acdb6b4540ce6f5dbbe8116"}, "6b50b255-7a04-4ae2-ba05-cd323007367e": {"doc_hash": "b2259311adffab2096d9819b7967bd841220f327dbd3539cff52ab31f4d88629"}, "fccc91f3-27b6-4f08-8712-de56b486399c": {"doc_hash": "2a75377b8f6243aa24299fcbe83b07759e3672b34fedcca1330f707bf7e2de88"}, "37520d21-4e38-407a-b9a0-078e921dc6fc": {"doc_hash": "f5496804e7163e3e9922c6d426c5a52aa0b6ba28a2968558ab1277b8ee9e7734"}, "24bbc1e8-361b-4b02-b448-74ef632135a7": {"doc_hash": "a631e46a9d8eee7547bec0cdb4c6446513f5f8e29bd3e0d4a0c1df8b4aea3f66"}, "9e5daa55-e1cc-45b0-a6f6-696fec7a5ffe": {"doc_hash": "79a8172008023ff6b3e1bb916c60aa73d964081ff34218de0c566bf7335fc413"}, "6738bf5e-dc11-4e1b-acf2-1adfee17bcf4": {"doc_hash": "6350a8e52caee7181ad80b17b378b17dbcb14ba50f9536319268253c2f975354"}, "647cf230-01ea-4d55-8306-4b3762885235": {"doc_hash": "670abe6f06ffdc72bbff03a166785502c0ac0fe5bd8e2010836795d23a3326e2"}, "aded2923-cb85-4908-b352-e06380cffb5a": {"doc_hash": "a4945b89927352d12dcf349a2a9b0b1fefec9bd2b261d70325df3109a34c80d4"}, "6ba4915c-7c20-4da0-a722-99500b352966": {"doc_hash": "4e1c55dac35e3e9bc24d3bcaffba5d472a049774299458cda389f1da1eb2e92e"}, "e3013511-6d21-4bd5-8e35-62efe7ce6df8": {"doc_hash": "1e9ea6a9b2ca06602d26ef6ada6d2d349ccaadaf381fb85f51da80a0e207ab6c"}, "356962c1-b56e-4811-9164-b7e95cbfaf84": {"doc_hash": "a9a029199d703c61d4b2a90bde8dc92bfb68edf8b582ec836a75dc96feeeeb1d"}, "cc30703c-02a5-44ff-ab94-409b3b91867b": {"doc_hash": "ab19e3b87a9c5c4d9ab799e2790a9b249a3dc7c7eca9a43f6b93ca59896665c3"}, "34532850-716f-48ae-9bce-a230287ceafd": {"doc_hash": "5a2766db79f5284e13de4f551f23e861b2c5df84a6fe0b5d1c5c645f6d806639"}, "ac8432f1-cb02-4e71-8b16-5d3a548a2b05": {"doc_hash": "23c1cfc39a6ec0892d1e0ffb0c9322aa92296d7b67e7d3955c41f4897ab62e11"}, "872fdb8a-d4d6-4caa-b19e-14b9b3b4f9df": {"doc_hash": "085ae207436a2a87c2c209862ad2bd1c4414fbb4eb33f630d314eb85cb767f48"}, "9e8b939e-9ad9-4a4a-8b0b-27dde7c581ee": {"doc_hash": "5a42c28a6f63aa9d19b84d3667221d60e491f6317af0439fe17b5815ea9dc1c6"}, "940e3670-5c7b-4be8-8422-3f1e4ab4a59a": {"doc_hash": "da84cf1bb86e4b0c0772c716b141e5ca1b3f475097771bd6fc6e4bc882da55fd"}, "5993368e-7d77-41f0-b51e-88112e006ea0": {"doc_hash": "4b2a4eca4a3b4bd7c60f3f0bdf56bdb247aacf3f52da7353d1864f39cf137e35"}, "6335f574-0b2d-482b-8797-91aa1195db2e": {"doc_hash": "f6d127ef5efdbb72d62af91f8e175376ae4bbae3800348db6b0560927fde7883"}, "41bc1e9a-d7f0-47d8-8b55-58bb18cfec5e": {"doc_hash": "8ab54e06e24c0c7d1fb5a6cb41d2e7b2b6227bd60bb79f042e12e508ab0d8e2a"}, "e6b349d5-c818-41b4-8ea7-7d0cf73ad132": {"doc_hash": "16e579ee8b49323a36ce78684637e881fb65aa82ace3c1f5ebb1c02c4e12aaae"}, "99d4edca-3483-4665-9bba-dc866478b2fb": {"doc_hash": "9644f6105a003f55159af4deeef3bf36a61b78cafd941e563ddd33372747e3d4"}, "f8c7b7b5-9346-4a7a-ad29-8ed8bb79df87": {"doc_hash": "440f26c9be319b349afd688d73e4dd9d90b7a7a41c3da6bedc02408efdabb49a"}, "9d560c52-2643-4cb3-acb7-b3fa96265e1b": {"doc_hash": "32b666f74006864b835144b57fbfbbb0cdd24a8606d8e94610fc061126a2d343"}, "f64b40e9-9087-4cae-813e-52f49e876bbf": {"doc_hash": "d234a98a2d7d8785174b6bcc49e4ace05a94235eaa7a6cad239f5e0ec3bc0569"}, "e3371448-78e7-480a-a7ea-bc0b5b9394ad": {"doc_hash": "26ee9622047d8421e9b0f86a9df7f635267214226f71925e7cb8d5197bdad0b9"}, "83fec48b-3923-48a3-a24d-de7e78439326": {"doc_hash": "dfceee017fc8d70b92d14485b9fc72252d6488b7874c689b5b0e72cdb437ca6e"}, "c4abd4b3-29c6-4375-91fc-274314c12c88": {"doc_hash": "b4c7f7eb5d009509ed010c817a41c9416bc8cc02db5ba1d6a49226009458ab9c"}, "8367f398-922d-431e-95ef-eec4381b78ed": {"doc_hash": "3c0960edd702c8fa9afcaae4678e6f69852c58958ebac47f776af6907dcbf26f"}, "3cd81bc6-ab97-4988-97c1-3fc111c8db05": {"doc_hash": "7fc6f6b5718e60e7734cae03b899cb25d9c51494c102eb087a47b137275698ef"}, "3e619ea8-e8a6-4244-87db-ba1bcc62a6fe": {"doc_hash": "d66ee7b24ab6daeafb5530072ebe224417dc78c5d459de7f1c2e9fd087ebbf6e"}, "5c0355ba-d984-40e4-adf1-7b83f2aeb60e": {"doc_hash": "09c38f65fd5e2a6f7e3bf6c5a2bb89d561af08b52f4c5d7f6835cc802b7bdf58"}, "dc480c4d-5579-4bae-8f57-4fee0f2dbe6e": {"doc_hash": "53823f9607752720fd032b42eff67930c15f0485cc27a6bcf10c7560f78441df"}, "ed3397a7-8734-42e2-b3d7-5aaa20c272ca": {"doc_hash": "c456507f1779357b163604d72762061b7602ee4cd27046c485c05d581f9f0397"}, "c638594f-6bb2-4d89-83df-b6ca4809060b": {"doc_hash": "2823203bd59f0e55a34d7474e9b6492712e2a5f8a72b6ed905e199527c96528d"}, "84c97e89-effa-48b4-85ba-2fa86ea745e6": {"doc_hash": "a8703c4690bfd98092d44815ee7a9dea6fd25eb6726e27abb9da940a8af07161"}, "324e9837-ffb3-4ecd-90a6-e7dde72d6415": {"doc_hash": "12d3b06680572709fa6206e407c227cf1006b6746f48f2e7b7e734e966915ad5"}, "5976fe6a-f28a-4a16-b399-38d9ecd0eece": {"doc_hash": "8d82b1f2bbec48dffaa868aed1d76be622ebd39401967be63609432547fc9c59"}, "8429eff1-8b97-42aa-8ad8-c5f95d3a7f37": {"doc_hash": "83a9e311ca62b93b62a06b2ffa0e3b2629b9a70e1a6b933c1383fbc30dc87f38"}, "fff59f0a-fd83-4ea1-80ce-375e87191de7": {"doc_hash": "64dd0e0db6105391d09e23a6a7ae1eaf341876e164fd3d3de9ff57127467b360"}, "24b33dfb-9d7e-47c6-838b-82fe8a73ef24": {"doc_hash": "5fa47040af42a9af251862d2d7f35e0d5cd318c286b63c05c338bd72c55a35a3"}, "df25f0eb-bb63-44bb-8e91-03a932a6da63": {"doc_hash": "05928ff7f353342abe807b980bd55e20d46869f1d173bac86b73afc115d47441"}, "1c24a641-1f30-4efd-8180-7f926266d917": {"doc_hash": "8d9d39f625d0860fef69f28c281c9665597fccf5e63168083a20faf887fe2a15"}, "ee83851b-77d2-4f97-8910-ee65c490f010": {"doc_hash": "91dfee18ffcd0ff3fbc15805f3452d5408d240a1cece00dd74bd01dc3f95f8e6"}, "03dc371b-3b5d-40c5-a563-e35dc4901f87": {"doc_hash": "1afb0608ade8931763dd5af42e08681917a09b71445f25938184afba2544b42c"}, "1f61dd6a-7eb5-4be8-810a-6583403edb35": {"doc_hash": "4c4298cadd9fa3ea87ce575f97bc9a6fc72f74fdfd3b6bae176b92573d42439e"}, "8fe3b7b6-8362-403e-9307-cae984e91111": {"doc_hash": "801fe6140b1950cc3f03520ae0f1fed786938d927e63ea9f350dbbe6198362fd"}, "9256af8d-b98c-4f9b-b4e1-4db798848b19": {"doc_hash": "3ebacb951f41587e1e24da9d3a7bedcede4c2e4e5af6437851119568bc5ef459"}, "10e32b23-f8b8-4a7b-9388-b13b651b37b6": {"doc_hash": "81ab977c08f397297e9f3b8aca5cd94deedfce811670cefeb4188369e2a2b0d8"}, "8d6f5de6-10bc-4840-b2e9-44a3d11a7ced": {"doc_hash": "d795cbdf78165de0866c7d9d8d6e5b6b61e4a571aec295265a6fc9dd1a927a12"}, "9c0242dd-bff9-4abb-b5d1-67a24a1d7f6e": {"doc_hash": "467ed14e1c0eb2b4863ed52c62b55387f2e507c067f7822b65f098ef0e8f7eee"}, "6b7cadfe-134b-4f61-97c8-7521832e6c5d": {"doc_hash": "7e325fa071ef188bac3522ea1e9f0a4161afa1a1437712a0861d5641bd82e8d8"}, "ad20234a-aa6a-40b1-a9f2-c6273d0e930b": {"doc_hash": "7a1e104a0423588c465450255d6988cf8ff8247127839729fd406241e26bf3a1"}, "d141e0eb-c7a6-4f13-bab1-d57fe1d9889e": {"doc_hash": "e9e8cfea77446d823f73ff0d7b29c210e614808f51bd7099767931c7638d8dcc"}, "c502d62c-889b-4d7b-a7af-8447ec3b9e72": {"doc_hash": "6061606da8725469ce18764d283ad096dca2034824e25f5bd767deb7f5b1ee29"}, "4d8d659a-d645-4a00-acdb-68bc64b2c144": {"doc_hash": "6bed7fcd5a5a36684aa6be1c2cdd262fd742a905144fb6c5fd9f24f32835296a"}, "6b399054-5acf-44df-bb55-6f735302d90b": {"doc_hash": "6392532f2b67d03cb84ea4a112a5a954cfd28d896eb6569dc36e341f9cc09b4c"}, "59fa0dba-1390-4a43-a7d1-b7371a844d92": {"doc_hash": "09c23659fca191e74b68501e99f7871d8cda3eaa5fede359b22f93bf8af503d1"}, "0f83a4f1-6e16-43fd-8333-da3844daf658": {"doc_hash": "7d0088d03a21b5ef99e174184e0966be79a5d5d007dfaaee90b9866c84c473ef"}, "a47f2554-e401-463e-95ce-60db5075e8da": {"doc_hash": "d3aeeca7897385c80bd63d21eb8a5bd9bc2555b7993e659c9be0e6b2c3097eb0"}, "dec70d41-f5fb-45bf-b64c-99bd05694e6d": {"doc_hash": "afd46d2c067a6bd05cd80407dc919c472c4998c91d6562963a65abe486a110f6"}, "c6a5f5fa-ebd3-498b-a792-3f8f920633f1": {"doc_hash": "cb2d8e7f322ffd8ed487f9703e035c1af39fba8890e55605a148a48b39069f03"}, "4cffc8d2-8a76-4bf5-b918-df4672ca4571": {"doc_hash": "a4002d0ff55bdda427c4c4a54e12403e33b365af3d51dc11d791d56d6d6a11d5"}, "3884edec-2543-4a67-b401-e21cd328943b": {"doc_hash": "143fa143e3da5923c69de775c86313f1e73ec4105f5b130e04e935f34227727d"}, "9c7227cb-160b-42d1-b9f2-23682f7960aa": {"doc_hash": "9dff192d58367c0e52b12397399367ea9deb3f105a68af85b704fcc285e9962e"}, "ddca0b96-1c8a-44ed-8ab5-a61888246229": {"doc_hash": "73b048906028c20de3dcf3a1623b4d98da5cc8f2d21b891bcd4de1bd745446da"}, "c9297870-e6b1-4d3d-88ff-86981bfb7285": {"doc_hash": "6056f425ec8b6a557393da1998fd1fb444a8a149d060ea17ed9ba57d58533f94"}, "cf3b369a-28e0-41dd-a2f8-ef67fb9135ba": {"doc_hash": "e8b226ed43b518c8569ea9bb10a69730da8d149330f005d2c7bad16d017c70ac"}, "dadd25ee-8138-47a6-a12c-1223a1c78578": {"doc_hash": "a760eceb72e8844ac6ae214a47cc5bef0b1692c64fcf002bffedd6c7717c4b3e"}, "087b8d58-e945-4658-b51e-762e834e038d": {"doc_hash": "bd341994e35bf078a6b92d3b59da02a2d3ec3c2675f8a6a1a95ec51cceff5fc8"}, "06c20c5d-ca73-46b6-ac8f-0a46fe98152e": {"doc_hash": "90ae35f9ad33fc0a50d67e881c62a64fbec437e3f62497ab4e80e3a08df7831a"}, "ef3d7fd7-7d28-44e0-a174-b6a4d4dbccb9": {"doc_hash": "7d5dd0b4e47ac478149d0c79b20accca982657bd35a19aa85f64feefcceab8a2"}, "45251639-7a4e-4917-960b-b76695482ea1": {"doc_hash": "b42eb11d6910d7c561180b930039f92916a40672ae90eaf8fa75c00839164784"}, "4c00e8ea-b8b9-4cee-9109-351e86824d92": {"doc_hash": "5a7c32da8057c8f374620c130e2ea3bab81bdd036f4d1f1d079e860a8769656b"}, "e1ebe385-8735-48e9-8fb5-64229d959f70": {"doc_hash": "396e879db915518091f118892826c22049c4040369b8226dbdd68ad522bfe8da"}, "3509da68-2b8d-4155-bd4f-241a960681cd": {"doc_hash": "9c63927c813c5ba2f0c2287618dbf545f78efe26b749d84b2aedf6d1241901d8"}, "5efc0236-e09e-4630-bfed-96a2b4b10f5e": {"doc_hash": "b09f4e4ec683df0d65c00d95c1c75eb9987b95e120902e404f63873279cc30e4"}, "9a32e112-ea41-4c54-ae78-5a6c48a170d5": {"doc_hash": "5e48f29516a81ab348890e7d3a0d927b0a6fb4b3ef583dfa6958547f0fc3085f"}, "7afa0a22-42f2-416f-88ce-c28f1aeae204": {"doc_hash": "3a548ed7aed4e5b114fb38504c94026bf873bb533eeae34a439ad960531e9471"}, "0e20d78a-776d-495a-ac53-0cc553c55bdd": {"doc_hash": "80dcb095da54603116f533afbad11eaf46a7b000c3aac94b23d0a0751d66c293"}, "2e815f8c-a85f-4fcd-bfa5-ae6e578b8a4b": {"doc_hash": "78bb15fba52fc50719c077d21d653ecfc5702c55b8febf5958bd6b8cef644a42"}, "12770a76-14f2-4754-9ad7-67e6185071a4": {"doc_hash": "f832fa5d5e4068592e10e0b469fbdb16df862714ff6f69ad394cb7b8a1023867"}, "0a4f17e8-3b50-4819-b9cb-73ef0997d5b4": {"doc_hash": "b96b2707994de7b0d49d4dec2a0c5b190fc73ed6305dc560dbf42071cadda5fe"}, "a5368953-312f-45ce-9712-bc12d144e104": {"doc_hash": "e4c1532222caa5935d3ef97f6e7ca35ade6e6f6297231d5e4e0f50a6c24a616d"}, "06fdae31-be22-442e-af9a-273dc0bad18d": {"doc_hash": "5cb0fb4e72a856e94329a6204a343a00a5f6ef137be24c38bb4fc79e7a2d6c88"}, "9139c2d2-8a52-42b2-99ce-c20989b1adb3": {"doc_hash": "f7c35c7e37c9c9b04316357ffd6a00db351863598dc11a9b687f0d8ab9276ee6"}, "2b9bd700-1945-45dc-a9bb-abd05d43c8ff": {"doc_hash": "b2b18c02f0f14d6a53dee21708f3a7bea1bc9694e3da13eb7c56dfb1e4db4e2e"}, "add47b6d-7ada-4f6d-b741-64ac27c03a18": {"doc_hash": "da7631e2f9c540fb2d3987cf749d9f68c16ec83b1923a04449a80f91c1e2a23b"}, "c34bca40-2940-46e8-b91e-dc64a010e31c": {"doc_hash": "96a7237e5aa9eedf07adea0245c7b1aa988b13da84d1668d89abc0eb9a6f497a"}, "7d72ad7d-7884-41d2-b415-989adb35b8cd": {"doc_hash": "5ee1c7058ce78590c974b21f4138d9ee6a7493c7dd275cd3eb77c11562b81e53"}, "b5ce2e1e-6ff1-4924-af86-9b184d601cde": {"doc_hash": "e2c9418e39c21c90f4d1b08bcd15b46d9c7d2b1c1bfb9ca035237e243406bc0b"}, "e8350a37-9748-4489-924b-ea59f8583379": {"doc_hash": "0bfbb673990c0f1d1bed51a59ccc26762047d7feb58b80702b4b3842b5131cde"}, "2c3638cc-bb42-4666-b449-d6f5a4af8da0": {"doc_hash": "e027827c8732182a9c6001d647d282b74bb0fca27ed22515f1c8a848975e018f"}, "d2ebf18e-ac06-4f02-8a0f-455d0898cb72": {"doc_hash": "cc257d1bb7214b2f562025bb00d32b2d9fcc1b5b0661e919e65f726e8a80cda0"}, "dd180e5b-d1c4-4464-868c-cfc17ac33f8c": {"doc_hash": "cded31f5507cd362b0f95f3a6e38212173f655f619a32eb3437de5734e5e849b"}, "59c4b57b-ec47-49b9-b517-ceb29335a9e1": {"doc_hash": "98371d7bd17b88fc81ad68026b52565b4bde2acfc38b356df73916c907ae2935"}, "f65738de-41db-4dfc-b4ad-5f514956be9c": {"doc_hash": "6e154226a5b42b00f60995c01d589851ea96bfbb5cc4644d729f38584eebed1e"}, "c8f93c91-39fa-4d49-8d78-2272fca73a8d": {"doc_hash": "a6740780fb7510d601a583273671338be3495f09e03a009d7944a41ce381074b"}, "04f07c16-0533-4ea5-bc0f-8c2484915a14": {"doc_hash": "1a10ed80e625e51e1076431065f9274da07ab845455456967569cf6fc9d9d6b1"}, "1dd90bc4-1e7c-4878-8d2b-7f170c68f54f": {"doc_hash": "27982628f8159086accc2e6cffb84ae00f832002be487a507ad7b13558f5b810"}, "d7e98457-8334-4b1c-8935-b7f49af555af": {"doc_hash": "e78bf1bf895b62fca2cada6482f7d75478344d4211f5b1c599dd44e5ecbc5a53"}, "8d501f99-c052-45e4-b423-4e1c61188d59": {"doc_hash": "82f07c8595630f4c49f427e0c8d38f7f05657dd1d5493141e500e20897777097"}, "5f9aad39-0aef-4c2c-98cd-14ddeb72e58b": {"doc_hash": "8d63f0783d2ee81f74e0d4a846781effeb40297908bb6c994a216ad69bd694f1"}, "da2473e1-9a22-4651-8b32-93be9079ffcf": {"doc_hash": "0edc056fa122c69f2149e0084f0b39a9725196a61adfaee343a35d58fa25acf4"}, "fcbb4837-df5e-48f0-91d6-66b35b1800db": {"doc_hash": "1ddf041af2dae2985aca76ec7096d687738b1625549f824b146fa9aae0fe9994"}, "bb6bb3e4-3a7a-45cc-95ce-f77583629569": {"doc_hash": "91c2363ad448fdde8a4e258db37fe4d9580df3a754d12be4811381b7d1b8b71e"}, "8ed492eb-c39e-4ecf-b559-dd2243446ad4": {"doc_hash": "0956e5a4968cb584f5a67b26ad7f8cb3eba48d401d3999f3e59175e45608e180"}, "3c388d3d-0eac-4108-8bbc-ac4da25a6275": {"doc_hash": "855fa7d8a59192571e855d87fd492de124fefcaff840cca87c78ce91cf936a10"}, "e5444a2b-d50e-4bf9-8bd5-dd541ab37cfa": {"doc_hash": "d36eba71acdd4fdd7fbff107c899aa8d147f3ea90666293dbc35cc012571f508"}, "7a75a122-34cc-4fab-8aa0-d38beb2bfcc9": {"doc_hash": "e34d2842e446a64f0b5cf4ae6689990675570cde61fca757cc9e37c7c7c95eee"}, "f9e4d986-3952-46d1-9653-ef0530a3602d": {"doc_hash": "c124ce3135108b1eccdf452a2f3d8f7516176fc1f9a7464910f83e47b4782e42"}, "3dc8f002-f527-42a8-941d-2106568feb19": {"doc_hash": "fb575d2490ff22eb73c3d324a2e616d9985e3565d823d953ed43a40c680375b4"}, "2411193e-8b54-4a82-8eb0-e71f4d24434a": {"doc_hash": "6cbaa5f1e1c42fc27ece4dd2b0a6efb0d8c3baceb1d0c08af8b1db04c6daff28"}, "d6b99dd1-3159-4382-8842-1fd299afd250": {"doc_hash": "a74aa40405fb6434471b2a3507d380f4d20f0e6fde9f09ab568bfc80a5aee782"}, "b94cc6d4-4596-4603-a05c-7dedd351c29a": {"doc_hash": "45bc3ef90aa61d4254f423636ad25593faf44086b630293e33947acfb7934809"}, "52e7462d-8f64-4f6b-b90c-4c7fc01f912a": {"doc_hash": "bee21d98ee7d6b381088b7305eac4e280c20d5f6ff5d59a6e697e6503513842f"}, "d01f316f-abff-44da-97df-b402711b4d95": {"doc_hash": "0c7ff8c5624fd2571a2e43bd806f7e60844350fdacec2c61b1aa1f9d1c53d213"}, "47464796-5f47-488b-a791-ad1ae227007b": {"doc_hash": "4efddc74f85a6d8b58e67c2e9f5fde57927eba10084c303a2eadd80cf1c2cd29"}, "6672e7b6-04a4-44be-b010-3c258a283e13": {"doc_hash": "aebfe1a6a6ed3604b73d639f29ffe2e09cbc718029f615e4e20c1c5658d8a444"}, "8f3b340a-e3c1-4b36-932c-398a14bcf21e": {"doc_hash": "8bdf04f293f7161a712019e5048383b8daa393bb1bfb09455b29436af4feebfe"}, "6cb13c0d-02fc-4ac1-9e78-2841dcf78cb8": {"doc_hash": "80feed0f819e81a30efb333dc0c0a1b60bd4522e721a895bf8fe3d58bf74ef32"}, "cb47a9d0-dbe1-4bcc-9281-19e20523b0c6": {"doc_hash": "a343316f71f2329ad1efa57f597ad71f68b8935eb88080f4ae9ccf24fa6ba96a"}, "e5963c06-bb6e-4d26-a3e9-d789f6588477": {"doc_hash": "0b46f1bb874add5f48075a672fb7121dad2f420b66b11af404ec19622e068890"}, "09f34a80-7d37-4e71-b277-a75bbff0c9eb": {"doc_hash": "2ffbb7afd7418fd423d45fd8c6e094f1b63a268136e155c77e9b80d929f5a4e9"}, "8de0d0c9-31f3-41af-bd87-aa8a116c1d4f": {"doc_hash": "3ff5d043aa3c24cabca1b7f0c70c9d4dafe9d86908a97b9e9d5ad9788ed8ec76"}, "76509b09-ef13-4503-88bd-71fbeae32f93": {"doc_hash": "77d5c760dfece9228688e990499ca91157677c4eff1210a33aa5e430a54520c9"}, "74559d62-5a91-4981-8fa0-1bb241e88b37": {"doc_hash": "6cbdee25852c590ff65b8f6d9224d703373ab9acfd1d3947bde5d16c29a8e0ad"}, "1fd4af23-2b2f-4d6c-a872-2bbb9b78f5e1": {"doc_hash": "11d38be3e79747076a1db8f1efa66c6bc23247bf506fc7a711d221ea20f2261e"}, "df9ff403-845f-44d2-a70f-ff64d66ca50a": {"doc_hash": "ad445ea2a0b4ad9874c7c600c6907c91209fbdbc99bcd7975e6529ea99bbc904"}, "8a84b427-ea7b-4253-99f2-165886852715": {"doc_hash": "59815ba43d85ce5c3916f40e77d23e8d7c3bbcfbcf79eb41431fc1838d706b5d"}, "993ce89f-5709-41f7-bdec-f6719061d1e5": {"doc_hash": "37c1c04fe065fe79b30e43687afd71892e566f92cf97ce9fe63f138ca3a9221f"}, "f1d50ab3-3d56-4b2f-8c6f-f1804c1d3c7d": {"doc_hash": "647f7d010e6375e991f50f57cb8ab5136cfa1c0c3a3980c79d451d3a763fd487"}, "3fbead78-dab7-4896-9cc3-0812f896c55d": {"doc_hash": "11a330feff9c23b9bb3a287d3961ffc9678c983dc73c5172f37f57f08d5d8157"}, "8bcc8a9e-0470-4954-a24d-b08116d67327": {"doc_hash": "6a056b3b6e8c22736c719287d76e307ed2f1a3eefec582bebe462a61251a5145"}, "423594fe-812f-4102-b9b5-7da67c83fcb0": {"doc_hash": "8626b586acf869722fd7b20f001abac1173a46d0fa1d68e457a32aaaf9e136f0"}, "6f2c55a0-2443-47c8-a574-46434f1e157a": {"doc_hash": "a3b209295f63613e3e0d85ffa50772ec67e93504c5a7f4ace0c79e316024539d"}, "abd050a2-1f70-49d8-b798-242e7e018319": {"doc_hash": "65ec32ad1865a68a9698a774e25270368df3455d1a8861d0ce9e498b4b9697a8"}, "04e60fef-39e3-43cd-8e43-72c06e63f7c8": {"doc_hash": "3866b24495b57868781fed9ce366e1a0c527bdc4770ab6c3af8b98c3c3e919eb"}, "9463b6a0-fd67-422b-85ae-5c4be577bcf1": {"doc_hash": "ff1b14b6b2d2d8766e14f78a5416b3faf9d61c0a36214e02d0267ab2c1145fe9"}, "31be7407-0282-499f-8814-8d077a59a7a4": {"doc_hash": "5a073905092494acc534f8379abeb8023beb4c1f169b9118a83a4dabbb66dba4"}, "d3f084df-fe5a-4c90-829f-492225e1bc58": {"doc_hash": "2dfd984c42b79aec9f63bf1c4ea54e1e65b8ead524a0b27b73e423a6ada18064"}, "260785ed-c96a-4312-949f-020237c0014d": {"doc_hash": "301be368cbf25dc84da57c9b6ec1c3e941ce908cf790e3261da00bd8b2241b9d"}, "8a36a683-7a84-439f-9451-160515d9093b": {"doc_hash": "a0dc1f5ab4a39017ebc1d2f40fa783b37d8ff76bd194358f724e170ef2fc59b5"}, "da39804b-82da-4229-bd25-bfa375423bc0": {"doc_hash": "c3968ac3f3ce6abf520715d9a1acf9725c05cd3580144a8683d8e5777050c6be"}, "4bf2338c-f9d5-47b8-a6d2-02c390438ed3": {"doc_hash": "9b4a94baa53ab061389b84e883c6d31fcc9d2f98f0761bff63c712998e784402"}, "356b6d18-4142-443a-9183-4c00fc9fb697": {"doc_hash": "bc6a19e97aa93e857d2960d8b7cb4cda16157f7582fa8a3143b6853919d3261c"}, "6d880b02-a5b2-494c-a9d8-33b118276ec8": {"doc_hash": "46d076c399d29eafee414582176815b25b6b843cba8be0ca97d647bcf76db27f"}, "322db41b-073d-40cb-9830-80b528266a71": {"doc_hash": "1a93818a0e98303d6898b5221f2e79560fe3a6936f5d976f034ff9e831498cad"}, "9fbadeac-d473-4461-8324-9a7ea0dc0037": {"doc_hash": "76b12c193acc97ea3d5af3e6fb47a83aa32e982a2eb1c8776d5882f017190b02"}, "6641541e-c1df-4c90-bb15-7c1c208a03cc": {"doc_hash": "2430d0ff0a1e0a941312a3b14816fec6fdb3de8b10e965a1fe539e98358ecc26"}, "e8415ffc-aa02-42f6-92f6-23e15d07b3b9": {"doc_hash": "058f390bc39a92179d1802dc08c3f816dc4db5879b13c57c473cb0eafe15a423"}, "51d5ba87-6fdd-4272-a4d5-86bd9bb7b019": {"doc_hash": "7b79c322e13592d1a64618334abcd30e33fd712c44e5d28b76bc8f02f8cfc1ae"}, "367ac20d-e2b8-4a6c-a0a0-5c2ffd771c2a": {"doc_hash": "bd5b308015ef87e7e4a43425e85e35a1f114b5640499eb9a3d9bfeb73d7e57be"}, "798051b1-3e4c-478d-9c2a-771d5ff4081b": {"doc_hash": "a45950b6f5fedf38de665ebfe280c4615d20bc909833accd4a2b3054f474346e"}, "f42569c5-8699-4ab4-9f31-c55f089d3983": {"doc_hash": "70b4f28b0a2e8f0be9e5fa7c0ee06363c0fb56c4e44bbcc81168de3777a5cff1"}, "15073601-a8f6-4338-bf25-ad54a931427a": {"doc_hash": "7c2ae7e77bc51994a2d33935d11295197f6e12f9a07b399a7f43757168341e96"}, "602c06a6-c258-4dce-9e13-72a3be8caa64": {"doc_hash": "aac0ae600a98ae69fe79ccb9e3bc82c290dc05f360b70d4187a832ccd509d249"}, "a4d91326-7871-4b43-aae3-cd856fd4799a": {"doc_hash": "b65af21d1f1fe05254eab4b3cb445a673cb643a9818a67a824aecd476434742e"}, "424007d3-f082-488f-a01d-cba128afa9d7": {"doc_hash": "8905dac926cbef66d8d6461b8f4b7b8fc16305e035829ccf8b8f6671bf9160cb"}, "544931fd-6ecc-4964-b8d9-e91d32b1fe00": {"doc_hash": "30293139fd6b599db38363d3f86694874a80a07f1895a05ba292e7b2302b1a50"}, "ab7d6c26-36a0-4738-9c86-411a25fc02a8": {"doc_hash": "bd03e64c5a5c971c110c4cfd4cdf7fb0867f9add00cafda65f0d075111f8fc2a"}, "87f20e31-4b51-4c2a-9495-9d068b50e675": {"doc_hash": "174a592f850068657e010c1b089c2c7a45e276c8bff30bbf98bb3425ac96fb92"}, "040fcfb0-ad5e-4715-ab42-eb3faf0fbe0b": {"doc_hash": "dbece9e9ec088bf55ea2d3c5f206c8a3241b5014806a174fd0b7a020da83d5c2"}, "62168885-39f9-4995-8b2c-c13693db1342": {"doc_hash": "2a53323ed236be531b47d3e4a7142623877d5783b054c75cd27839c0ebb0a77b"}, "4fab5d29-9607-4028-b735-f4e5dd63d2ab": {"doc_hash": "b9d13994c896553c0e93b34ad1f06d08444d2c0c73b5ac99b018b3edcb9b5411"}, "65088b92-c30e-4ce0-afc7-32fce0fbcb70": {"doc_hash": "efdfc9ad7df3a322a4c8242b3d4c74fe81533e760a4ba97c17c6f579e1841bdd"}, "b033f8c6-bb0e-45e3-9d41-eee8fb2b5259": {"doc_hash": "5a4999c8a2e210f06115d22d92d19cccb0188fad5c8c4d66c3272f6953eeca18"}, "e6fe6c7f-799a-402c-8caa-3cb0448b81fb": {"doc_hash": "86cfda440551ca4149d60702680352c04ded6bf7f0fab16f6820d04c25d33730"}, "f137234d-81d7-4247-aa17-ce9c57bd9f1d": {"doc_hash": "bc9cfd338b58e930439b9ba9f2c6f019d717b1413e454064dab1b88268883b15"}, "28ae479f-38ae-46c9-b10c-d03c0c38bde1": {"doc_hash": "c1bec14d0eaea58648dab53a33a3763eacca2f379f41ada21cfb0488899c58b2"}, "bc85e102-e272-4df2-a5cc-a736c947d1f4": {"doc_hash": "7da953f402444b1301f55073f2007c6e4787d3a984508cd170392b10cec74c8c"}, "62112b81-11d7-4bc1-8520-a05247504945": {"doc_hash": "0ddf27a603ed93d395e8bd91064bfcc0d702e4ea2841aea00d90b21b0da58681"}, "034648e2-18e6-414c-9877-efd6e07aef31": {"doc_hash": "1dfeb9ce4b471f06dacb7d760ed872654afe044ab3f06bf37cf7113802ae996a"}, "171370bd-6dd7-4868-ba00-f25649bd9da6": {"doc_hash": "8b3729ea15f458575b9a6dfe4c9d6f3f1f21f357d072b26ab8f33e21b5da39f7"}, "142ba94c-4445-42f3-ad40-db69f599f395": {"doc_hash": "ae35e0c8e0dd649e3064bae7bb1ed65f412983a1b3e2cc8f2e193841fed90dc4"}, "8653ef90-de35-421f-8d54-1fc44b3ddac4": {"doc_hash": "67236303ebfdcf7253be32f57fd07782d528595bbfebbc2fa861a567a08202df"}, "bf9d4d52-1f0f-42ab-bac3-4fd855b011fa": {"doc_hash": "bf02e37e2021b10560e5b281ed3e50ced257c0984f92fde93e4a610e3bc991db"}, "1352fe77-0c32-46df-ac07-266b9b517dab": {"doc_hash": "57865876e935cfc18a4d66a7642c10c982e8915e314e0977ad248a1f6c4263b8"}, "b9c11abf-1f0b-42b7-8216-57440d2420ef": {"doc_hash": "a1dfe714c43f3204b299a1bc13acb782b6f8ae7c19ce9c674b0dbd796c4f79a0"}, "def74948-f73f-4887-b549-e28ab0173c91": {"doc_hash": "69889a202be3e0e4c29db255c38a2d9d52af70c0292512164341a4949a2d53ff"}, "96a45c2b-7f0c-467f-8d4c-bee4cbfd6b3b": {"doc_hash": "9da6371fd588721a5f97c873dfe5937086fbc55def384834cc6a48af48e4f217"}, "c683ed5e-3789-480f-a522-841d046d9eab": {"doc_hash": "3438ee09d9f41142e0be5e94a790f8b02d84906c9fbd47a6a6cda3382f86b328"}, "f123d174-cafb-46ad-bec9-794b2fe2376b": {"doc_hash": "be7f920b357f9eddd3e39082335ddf7a89ef44710f97ce749754eb0bf564e286"}, "b184721b-e1b7-463d-b2fa-5d9dcfe5c189": {"doc_hash": "d0212400a98336fd3fad78e1db83d49690619f517750671d79b6ea8961acfa3d"}, "8c805cab-bf36-4680-985c-0769ff20541b": {"doc_hash": "54e53feb83bd9c2c0921b4a359d8cd1b5d3e9a7c9cc841ba58f7a1c66bf0164f"}, "e0e6fdf8-58fb-4c8e-8538-ab9701d8fadb": {"doc_hash": "4677ffac6ba5de903865bc6b58ab3d7908ff6bdacbb4f38867863d6e6f7b7af0"}, "2ebbc82e-c9dd-4df5-9616-ae652c17b4a7": {"doc_hash": "2fca822969c2c9f86b9944d624ad570c713fa3fcfce83c0ba76dc55049db5975"}, "50864516-f35a-44cf-b202-19bc1c0d5802": {"doc_hash": "ff1387c4cdf4556a82a592566f68b97071001e04329e862235e471ecd44e753f"}, "c5353d97-5190-4ae1-96d0-4d35e0886b4b": {"doc_hash": "f244cfae71c18f6f820230f30b8caf29fc348258a6527cc482de30583a9991e8"}, "17cba339-d6e5-4b63-b2e3-cd33b2df0260": {"doc_hash": "53f4b71a4bf669d78274e4c6a558b45071b1ac124b69e5e414cff564b136aacb"}, "07e9943d-32ea-4349-9e6d-ec7e8d0d89c6": {"doc_hash": "1eb9b784af6095f14ea3675b2f8bd823ac0c2c9e19753ccc2d5d03be3fb6e197"}, "14727df4-f28e-4c15-92c1-acaadb9110e6": {"doc_hash": "17c445b556a7e9829e97be333bc506af49a8f9978a610ac42db4efada04ec400"}, "4f4ec3dd-9183-46e4-a1c4-f26b64247367": {"doc_hash": "77c51474be90743659023aace3ef658de1e24936ee42db3ce5f4c143538a0e0d"}, "beaf68d8-ca0b-42d3-b748-1866a562734e": {"doc_hash": "e02b2113339966ded33919f0c08dd773495ee1490737d3d43b826b4c525fe6c8"}, "a842918f-13c6-4966-b0d6-156431cfa40f": {"doc_hash": "65193bb62e8444777ce14a187649b0d4e830b5f1f60f5a9cde1080c7f2ec3655"}, "c29f9817-a360-4689-89de-941ec28a47f3": {"doc_hash": "bc6ba5085d14afda13c3c79721adff193e8a67823518eb4c70d58d0e77095619"}, "0f674963-2693-442f-874c-7cda011b53cb": {"doc_hash": "4e1b3fccbec50cb881bdab9dab0b750343960449685045be75c517fe0ef23f8c"}, "f259735a-edc5-49ef-a265-1f8c76f8fb43": {"doc_hash": "62ada12b80f6ec4c08182ecb531bbfa2643bc83d68760d21d2818af6a41a594a"}, "2df2b9d2-5c3c-4b5e-ad9f-9a31194042e9": {"doc_hash": "38e698354c64aa55da427c6ee9fd172a0d215a56717099618af6601e86ba0b0c"}, "0229cb1d-b699-443c-aaac-1302c6fc8276": {"doc_hash": "86b2e460858ef2ad222abfffca64b6f09d33bdeed8cd82927e266b8a94e0a110"}, "c1a74242-397e-4ed2-a42c-687b590ae2b4": {"doc_hash": "d58c57c1653ee2ef3e00369b4c54d0f6b9030c43423f0fa83a0b616d036375ba"}, "94b4af93-112e-4e3e-bdb0-2f1a2ba32375": {"doc_hash": "5a47eba9fc7e4940101e990891e08f6af9092f929cb63c8bd89a6cbadef03a7e"}, "70dde8d8-35e6-43fd-a9bb-c96085690190": {"doc_hash": "050247b106270f2a8bb6c6b583928645e6c2320022ed095db0e249298a2eaa9e"}, "151bbd77-bc1d-4177-b7c7-d0192ed5620c": {"doc_hash": "73010294fe89c30c136f46d175d160675fa2f20cccdecc15437fe3bfad1d27c7"}, "ca4b1d6e-b618-4e05-a497-2ab3110e3974": {"doc_hash": "a459a3ca029dda9c47be2715a65834b56732043f4fd8601922605c8d787fb696"}, "79c7d9d7-c031-4a16-8631-1f2b1524bd0c": {"doc_hash": "8ecea0b17a08f50bc10ae1e42706250dbbc114d49d9270446fe24d617433411e"}, "d19f6f43-c357-4444-8a7d-7a3298325cae": {"doc_hash": "8995da69694fed0b60f8045ca3063b42419769161d902a962449ba3824ac4da5"}, "46233eb3-fb13-472f-8c53-e39018444eb1": {"doc_hash": "0d670fc5d890256840f8e9e5f2ce10725066036149f609c0deca5da60eb51d9a"}, "fd0af4fb-a493-4093-a8b4-03f3822dec41": {"doc_hash": "b5f28ea986652cc22b5837a59ce4ce3936ad257a11872bf0db71b4cab94b1a2c"}, "0dcba7b8-28c9-462c-bcef-69c7bce441ea": {"doc_hash": "66b2c40f6345d055dd710a60189d8038b7a1c4c77bfdf89b8c6eae4b849f056e"}, "c2dad965-2247-40fa-a9d6-e8ce2416a1fc": {"doc_hash": "06fd4737f82b7d2d5fb8804abdaa93aa2f73ee7c3e2653e95ce0899c492d8fbf"}, "1e86bde2-8aa8-4d62-a8d0-e80ac9bf5335": {"doc_hash": "c6f4f3b490ebf676e8e3133856e79908af3b464747c69fdd40cd19713a701897"}, "2d9ced9e-f4f0-4703-8df5-54e0c45d7e01": {"doc_hash": "2de33668e5453622577b415c6c595dd7183cc5a777a9482930a4e868ec5db441"}, "a52519a5-2962-4e20-9c6f-45381daaf52c": {"doc_hash": "1131a828dc339dfc0ef9d057648025d763875a4830288c3c74b79317e4d6b334"}, "5a7b93a5-16fe-42de-b188-d99739846b5f": {"doc_hash": "25e8b72881cf6b177eafc03c44288670abf05fbc976f7d127bdf587e5ea21ecf"}, "1cdde311-2255-47ae-83a4-871734964504": {"doc_hash": "9d28bb241ea4eedd3a83f008b732e1ec3eed8a27ca1be9bc48e18deea433555a"}, "473eea42-e62f-4f96-b358-92575c6d3d0e": {"doc_hash": "28a75a975d761106608c1bcede41a230f1bab28d24bd70faa24527f1b6983d79"}, "602698dd-9193-4556-848e-3080ed29ecbc": {"doc_hash": "cd46a00ee952d7791ec8657f70554d312d4c1dfbffca30818d16b56acad61346"}, "65d45d63-e68c-45dd-9e6d-967672befec8": {"doc_hash": "7a900fa954e5dde5bb35f0a4fbc56f91de64101f0c0274f9f69edd6b46ce3508"}, "e96ab8db-19b0-46a4-a91c-993df86c0654": {"doc_hash": "56d2e93c6a88e4a6ca4c11714cc6aabfa9ad8ab2db9eaf36697cde0928a3419e"}, "2cc9f710-684f-4b9b-a8b7-ebf64ee81146": {"doc_hash": "10e8753436dfded785854c5d0c8bc68151d0da501a8ec68b4a242b0992bc6845"}, "7c5dc41b-b417-472a-a1c8-87ebb027418d": {"doc_hash": "f430b95e69fc30b84b4b8b3fa5bc72f0ae3a4e6e81fc0ad0d509039418439e22"}, "a0500c90-6438-44a4-89cc-7423923d4484": {"doc_hash": "97cbb65c4699d315ef31d15c3e68e8ca3de3269995e15b02d84ed4494fd8a09d"}, "6879da9e-e19a-4d5d-a8e1-0bb343839dcf": {"doc_hash": "7a124fdc8e2a41d009741914f7a1a339ae65c7a7f1c3c67a19557f71395d680a"}, "11d63da9-e046-455c-9333-4bd6ca960275": {"doc_hash": "7fc25dc5d66250f5f5bbcb7fe9191a474947b1abd75bc4b52809e6f6af9c9bc6"}, "38a14522-d8a8-4c6d-88d2-e194dbacb72a": {"doc_hash": "270ea4f5789b7c4493e1deab438c2487256fc56e0071cfd9ce959e5081465a46"}, "6e284b11-216f-4867-bd84-1c88c8b79c38": {"doc_hash": "13dc09237890c1099f1b875a8ddaa13edb7c28348100592ab4e0016c5ecc918b"}, "dc224d87-2e4c-4b3b-ba34-e5e5a2a6c007": {"doc_hash": "c0d04b156c223d1142edce9a5063c61662b4aea1844682b352b76908db1a4b20"}, "8e8f751c-5477-4bde-8eb6-486db5d2e989": {"doc_hash": "2b01a95f8f4ddb6da827f42c25c0315597d946c188aff85c932dd33b1a7ed461"}, "e3594a4a-47e5-49c4-923d-0b0ceb8c3b3f": {"doc_hash": "8b1f75b450b6f447b190ab1c6db2ddfbe3af0f5b7c9c443f3c2349012ff51656"}, "57d29748-d9ca-43a9-8651-811c879d2d47": {"doc_hash": "b66a38260b838b9b11aa5e6603d3eac3561e01a04a234da6d903e31e2bfdcc93"}, "ebe7fb2c-58ed-47a7-ad9c-5afd88d65161": {"doc_hash": "81f31948507a162246cfb4d896600af63a3975ef2c098c93d26d026a57e9886f"}, "fcb35369-3cfa-4e14-ac98-597d3d0a8866": {"doc_hash": "ad4c20372210562bb551c2d19037aa831cbcd0b7d9abd30c3e39b7a288288c76"}, "618f536c-0c96-4460-986f-4be792022690": {"doc_hash": "c4204115b5cead5fa36f94439b90048985607d86d26ec98f4dd86257b1a74c72"}, "458ad8a4-7ed5-4c84-b282-93e9a180bf76": {"doc_hash": "f9bba0bab8cbed1999a358d655ddaf71ecf70951e331b4478ae2b1932ce4093a"}, "35b4246f-5a16-498a-9690-68d3a20df5f9": {"doc_hash": "d7b42bfad56e016459d17028d497b5cd0be8d03f40e2ecf46a41510386952aa3"}, "2faf9263-e04f-4ef2-9d18-6bd4a61e92ac": {"doc_hash": "7534ce22bacdd5cf50352be3161b6a3725e5e93c7452bd7251dc068284744f47"}, "37dffa22-1c67-48ad-b19d-d674078dcad0": {"doc_hash": "311a4ff2f4337e2b1337d438bf681d85321a2563dca1a08c5cdfc74170867cf9"}, "ccd3dd78-d223-4ea1-96f9-926f62db7889": {"doc_hash": "3162ff95b474052e0d98b848134e490e29827d5cce8277c09e4fb09ec652b5fe"}, "bf6a7a58-7839-4931-8626-ad2195164f3e": {"doc_hash": "375e95461af14b2452e83f17774f0e070b798f13631e9cb3452b5642f8d0e423"}, "5e4e8090-9d15-46d2-a23c-10973a455625": {"doc_hash": "348fac429373481c72f0356be443b1e0cdb2ad34b8da63274491f1067adc60b6"}, "b856360e-ac61-464b-9f8f-cf3bc03434b5": {"doc_hash": "74e911e65d2f750bf77355e41b0f417b04264a8e001f3968cdf39c908dcb67c1"}, "dd2aed69-43a9-4a0c-97f2-13374cd3f28e": {"doc_hash": "897078709f044b02f397f9aba96d6921f9b20c8ac9dcb966a4f20a00385b07a3"}, "0140f80d-63a7-43d6-b44c-970ec2d06fdf": {"doc_hash": "a629448761b79c8cf4688923d5e8766690fd0baaeaf3851fd3d83c26f0e7d2bc"}, "66b095f7-d23f-45ed-ad6d-4615d2216e5c": {"doc_hash": "e46e33407b6ae25d968fb91ab160b7a18c671bfe7d79e44dd40fffb697077537"}, "8f204a51-d397-4e59-9b54-82f3a7a9e990": {"doc_hash": "3a8e68da7b350d1c448cac7cc4615087f67d76b5d6440ed208814a1a54392be8"}, "1bb93057-9767-4f5d-ab23-94a0b5cd6b48": {"doc_hash": "b03d4a2c08d9a841bb167064d6235e6dbb75e8274f6136d23d784a3097a5ac7b"}, "eba43996-fb12-46ae-b942-78fcf68e7d01": {"doc_hash": "588a51b42b1396871746e5c0e99a1d4d45f6a4006b0648397ae7ff94c721fead"}, "d1dc290d-08ba-4a0d-8ca6-35a766d8787c": {"doc_hash": "20d8660b511807dc237ef0d6851fcc97b305d1705f4a89c1d008e3441737a858"}, "a4243b4a-7c00-4cc5-ae5e-0f08778810c0": {"doc_hash": "2698ed0c0caa8836f081eae601c54f43421d5db61ea0183b50bd65cf2a37e625"}, "df2e52eb-b462-414c-9895-6204f6cba088": {"doc_hash": "afe5f6f7ce97f8fe29feb85fdc4203383ebda4a5e699c5926ba468cb0a1cd428"}, "3cb51d2c-4f7e-4636-9656-ed03b0d63ed9": {"doc_hash": "3bc3891e56f570bf88738be0a2fdcca359782d3a924a6921e8ffbb481b1af42b"}, "64b776b0-1e4e-495f-85ab-c1063a6734ea": {"doc_hash": "2fe8cd73ed9de0861d28292689259440c7c61f8e2da8c26e7502b4dfe3ce19b0"}, "219c6433-665b-4662-aa77-1eb3152e8f93": {"doc_hash": "8aaf4ea9729d5e60015015d6050f934311fe96c56394dbe252a41c650c9c816e"}, "c1e95537-7170-4c8e-b718-e34e57dbe676": {"doc_hash": "c85638ddc2b8d06d6f40e9662e7ab87d4678dd59764eea0c6c58c02fc64e4f02"}, "883be2f5-67b4-4088-86fc-ce579cb52516": {"doc_hash": "2c20c9ae376885e6e68e04133df20eb36bbb12a86ed1d6268f3215695122b326"}, "3afb111f-56de-4db6-8894-b65ff3d42978": {"doc_hash": "511b9eef275b8076a3a81b2a2fa521699068f140a43e718d77733dc0aa525d6a"}, "e9183d6c-9c30-40c0-ba82-5d0b247b8e8b": {"doc_hash": "04c5e44ae0391ce071bd749687c80e3c77e3b9d7a346526d16b177fe2d251af8"}, "5fdf7a05-9a33-4054-899c-c5d0bda98d72": {"doc_hash": "97ea8b09490af8afc7288e488b9e761f759a2cc61db32da93a70def47436cefd"}, "2124a341-7c9d-4c64-a59e-f28fc1c56d03": {"doc_hash": "4fb81f36b1c7a7e4b8bead058ee8e5dcdcbfc9d47bda5d0cbc13a83b2ab88950"}, "919945d3-970f-4e84-b542-e0df00cd9868": {"doc_hash": "d1f8cb7678daa2c62e504c37b92eeb539ed17940943aff2f29762a0c0496eea3"}, "0a405421-f144-4507-a511-34e76db4c89b": {"doc_hash": "e417beeaf2bee6879b33075295bb9a5fc492dc9a7a1aa11a80c2afce79dac987"}, "9d4097d3-f12f-4396-b909-464e6505c9bb": {"doc_hash": "13c9a8b3ceb508a929b6ac1756f5b7cff4817c2e09691ca3c7b60bfc496dd414"}, "2e8a203c-4ae4-4c77-87ef-677b01cc7b83": {"doc_hash": "497ab65a8e164095886e002565f9a701fec46bb67ee25497d6f6db830efc1b0b"}, "6e7ca8ee-ce97-4731-84a1-328378cd8cc8": {"doc_hash": "57dcb63e4f826c29671f2339054e361f9b8d5fbccf39e6bc51c860d7b5725eea"}, "b1428690-9b86-4061-b135-915ef4138124": {"doc_hash": "044ce49dcdb1a9b0acff16e5df9cc76e243a31f355e6f148c7fdd7e3a411cb5a"}, "7c473d8b-e2d1-4798-85e5-79587bcb3dad": {"doc_hash": "afdd2b3c8d3687b0dc0d9043ae020ee2391b82f5ed78acb5b297830051db5d32"}, "58c35737-c0ce-4da0-816c-93c47c0f9486": {"doc_hash": "f1d31189bef9fff05fc4f0ff2333b173e7df31aaafe292b749eb7b6fb52e2e32"}, "89764d9d-e9e4-4b09-b81b-5d4d0493804d": {"doc_hash": "c03a8bbbc1ffa06f54ac1dd825906cd93f0a0fc425400ebaebcac393b49ce2e7"}, "da6b90e2-0281-418f-906f-b4dc8573a31b": {"doc_hash": "13289bb4cd7d229cc29ec658c71c66786aff96a9414b40079cd241f7c29b2f3e"}, "15e4d5ec-0499-4e11-bd05-b9934c30168a": {"doc_hash": "0a9de0c3a632392b0345d543664ca2b096e36f9abd5a6d10449423e8185c04eb"}, "7b10a137-58b8-4c9a-8784-91af765bd51b": {"doc_hash": "2c5291c7656f029d631dcb4d233dd9a8ebd7100bca9a42a313516ccf5dad6199"}, "bfb408c6-3bae-4f26-ade6-baaa1795264f": {"doc_hash": "79b672ced256c77f5ff721a21a88acc1a1978086714431f78f876a0fb9739eb4"}, "176610cf-5a5b-4529-8a12-124613951273": {"doc_hash": "425d46fc53e096897da13afa0e2bf2b77c56ca5990144da5093e35ca86215470"}, "89fd767d-f2da-400a-b488-f78766dca3dc": {"doc_hash": "63aac256f90c5f77d5cd0b008d28fa1069e063e37b0bfda6cd39f429b2991b7a"}, "86b264af-8754-4316-89f2-eec596b1153d": {"doc_hash": "d445b13cdfadf35444723fab783f5bb94ea8a0feb696e4a8b5d7ef42a1dbab79"}, "ffc5c094-7dac-4f54-8e71-35405d094f4d": {"doc_hash": "b173558917194ec1edd10db5ed16cab0400844c4bb5dd5c9e81f18b95af2d064"}, "fa0d9fa6-5ecb-4add-af26-251be9f44d66": {"doc_hash": "b5cc1c78e31b0eafbfd80b96f65c5310f54c48f6066463e69673a962f37db05c"}, "949a04ea-9458-44a1-90e7-21518fbca2cd": {"doc_hash": "4798acbbe76debad8062d562d33fd5551c544138dc9d732906d213461cf41616"}, "b471b744-fb4e-4b9d-9d62-5428f8635845": {"doc_hash": "8a773cd52a4c898df4cf5796fdaa68fad5fe67b5482db67589e5df468ae2792c"}, "8fa54cd0-9561-4302-ba9a-963055ec7d7b": {"doc_hash": "86a1b528547efbae57efc2d4c1ed678e2429136a4e64391fed34521808f15b8e"}, "4b1fc1e7-6b1e-43b7-af14-0092390410ab": {"doc_hash": "3676413a098f5584fa0fcc6a5d12c13b8e0191a0f8bad34bc140afdd417e04c4"}, "f2e14b05-0bc7-4fe0-a829-5ad20475e440": {"doc_hash": "0dc8913b953fb76da7a7283ddb348c1283e968c1a2dfc26927e9c1662fbabe7b"}, "405659ec-d03a-4c46-8404-dd86c5fef24e": {"doc_hash": "01f900fd61cf75aab48758efd68f8c4df8dc63206a9c4d23bca6df441337c3c1"}, "dee77364-0b29-431b-9694-55afa90f4e1e": {"doc_hash": "eff1f4d19bea92801d789e878d1ddb3c7080f7ab13b3d353034e7cb78189e05c"}, "bcf8e45c-68e1-4cb5-8e3b-3f48b994092a": {"doc_hash": "8426bb1b96d84e432fbb5ed1ddf302ec942d316ea54552cb9c6e9277f80329d0"}, "a34895e7-6e1b-4303-8234-420d77315a8c": {"doc_hash": "3eb31f58ea0341acb1f1e9dd3776128284648400e9b768098a4a4918edb18488"}, "7e3b8aa8-3049-42ef-8138-e4a426fb1370": {"doc_hash": "5bb105b7f4cc166c9a244a32cb98625495217013b4e25bf951ea5507a35202d5"}, "78fd639a-1bf3-449f-a0b1-4bdbff773458": {"doc_hash": "2f0172cf2c970701c1225891c18817e55508e8d1be3b96bf76e749448b1552ed"}, "44521809-a70e-4d8e-ba91-55cef7f2a87c": {"doc_hash": "3eaf3aa33944bfabd322992f2f0c229d9a350126af0ac65118daec145bc7a6ee"}, "ec449c9d-ffe5-44ad-9160-454154c7daab": {"doc_hash": "175c29a4d28e54cb203c9e7789498f7147e3890234d64d893bbabdb32198294c"}, "4126c5e2-8a73-4bd5-9792-4cc2be6faf48": {"doc_hash": "bfd978ac34b5e4128c871fedb09c3a808e303cb0870583cfd7b8af892e92c2a9"}, "6893b9aa-6dff-4543-be6c-93817b6fdaed": {"doc_hash": "64f7a34da40def0a8c799d7d5d4d3c41942699e9ac417aa3be37b47a857d5161"}, "988a83dc-617e-4139-9343-86f22056096c": {"doc_hash": "0bf886c27b24fea1c29d55e84f8b64c9e676440c0e961385b9eaaa8288afcb3c"}, "478dcea2-6b5d-4b84-a730-b6016f449048": {"doc_hash": "a5b593bc2d3a1a78c99c59eb1316589f077ada80fe0562ded82d93f5a4d9df02"}, "e44e50e0-9a96-4af6-985a-e99c0b1f26bd": {"doc_hash": "149ede092252aaf5e21e91de1981abd79a211694e21d5d036952adbf1d5575e1"}, "7125c9f8-a701-4ed4-b858-9ad3da26c72c": {"doc_hash": "8721fa3c211409f7f160bb576c624b6130a242b64343af4fc44f4233363e18dd"}, "676e159c-48a8-4238-8892-8531bb1c89c2": {"doc_hash": "abdd54d6c4f2e965c13deda54e1addc21e0d258951d5eed220f0d0c660c56f4e"}, "6cc624e7-c3d5-434a-bb91-e722f6ad1b18": {"doc_hash": "2641e69c1420deb58001368a5c68a73eabe44b670c0cd1a63db0870e13a4408f"}, "a7a124d9-d521-428e-a21b-53022f590b50": {"doc_hash": "3d4d6db6fce8531809c481f358a7c792c71f4578451ca73245450f46e1e5b610"}, "f22385ff-aa51-4f0c-b94f-74feee84cbd0": {"doc_hash": "c6681196896bfd0900579af05f7652d9a16c269f5a14ff7aee31067bb755d6bb"}, "de605bd4-2119-4f59-8c28-65d4867a3ff1": {"doc_hash": "8e2a93f2d639919165f41c1d206104581ed74f747183aaf82109793efa8706f1"}, "84ce1bbd-c3aa-4bee-9c81-036a5b1bfcd5": {"doc_hash": "e94e20fe16e5defbaa2f34ef6c0d087a7755970159240cd9f611456e02c572ee"}, "ccc48f18-4597-4717-8d85-07e525532c06": {"doc_hash": "796e6d7a6532cc6b7598efeb9e269887b069abf07e9ed14ec6e3326069b6f81e"}, "e2cef8f3-968c-4bf8-8efb-17b62d223fdf": {"doc_hash": "ef33741b9857deff4f31a7acd5cb6acc7354e758940e3610539a439c77f6ab08"}, "c851c9fc-d2af-4187-a479-3fba2141bf65": {"doc_hash": "ad864f95342b0063aed51d9420a8df2a8af69b36e8ac9f7943f266b5f32eff6a"}, "11539700-c3b6-43b3-a18b-80e57a02bc1f": {"doc_hash": "fe931d2dfde658447d3e8198233bd5477abae109972f21002d13930d5ab47d86"}, "7c40b50f-3bce-41bd-a4c3-f9e0d2042ce0": {"doc_hash": "69c0e7387ab985987c3c86886e022c660a27994b397b6b78416108554dd54b15"}, "fe3178be-9837-49e6-a472-92d010e3307e": {"doc_hash": "6e55ba58f2bef334c22549cf1ec602e9edea9b1e640050c43164cca4f945be6a"}, "135f60b4-75b0-4310-8fdb-a3400a066a16": {"doc_hash": "3bbc008a38bc146f254e93dc8c85dd6eeff304add59fbadb46359452d75d0e52"}, "fbb13cb6-8579-4e5a-9de3-09452747bbc0": {"doc_hash": "2a86e89b2a5746e1053ff40b6c3ce51a12d7f4d930e1f10fed69ff632c0a70b7"}, "9cbc0e78-1d6a-4ccc-8a39-096ef3059b22": {"doc_hash": "5e034d8ce3678f2c1a10318bfc6aaa78393ea3fd6d060149f21d669c080a3977"}, "3d79603c-228c-48c2-a686-7608f887e635": {"doc_hash": "84552c1199a93fd4652f49e847903a1fee28d31b30a1f42d3a52329381a92890"}, "27da4392-c88b-4667-a025-ded7ed251842": {"doc_hash": "1bec6d4b75fbae75ccf5fe6c33d4971d49adb7e7f6faf312a02547277ea4fc59"}, "4a2e083d-eb23-4d0f-9401-759383518a32": {"doc_hash": "74877ef0f20e387929478321d3eb6cb67fdf7183fbb382a6c6e893fbb418efe5"}, "0f1bddf8-4d80-4349-a4b9-e5fa9c43feeb": {"doc_hash": "0cb977c8c11facc75804bd9c9b3af8b5d506e121f41520fb084ad885dd8a3d9f"}, "8678027a-7928-48f1-8f33-253a5cfd6d26": {"doc_hash": "d9f4b3ab1bdffb20f239de2aa960b9513f93b6bc7f1f5646bf0e6ad6dc41f847"}, "86f638a8-cad9-4e97-8a54-00ea4f2349e9": {"doc_hash": "64f7c9eacc104f97a26480f94c4f1a805378682fbcee39d75ad1a0e377140b79"}, "bfdd24e6-fe43-4e2c-86c8-04dd303c0de3": {"doc_hash": "163a00914e248e9956bf69a63e284056cab8270073d4711b1820d77e54107076"}, "6dd858ac-76de-434a-8304-e54c48307d55": {"doc_hash": "04ec81e56dddffa20b1969a6ede57938de7ab6802a970cc69d5f96356c4c7b27"}, "a7f8f8ce-2435-455c-af3f-368f61a5324d": {"doc_hash": "1e352c14943394851eccc77e9b9469ed10882bb2bca81bb4200b7c0d6f55a664"}, "2964273b-a714-4d66-95d7-9a6f10b18db0": {"doc_hash": "39320c966712724ab1334deb882c07bf12af6f69fd574cc5ca0fff290a440498"}, "cb3e35e9-fbe4-438f-8d47-bbc4b5047d82": {"doc_hash": "d1b689ea63a4428134656db09f70ad83d1f019e526296086bb096b0ab3c4790f"}, "9c31ff3a-aed0-4515-8c9d-e99c48a93494": {"doc_hash": "d6e9f4c76fb5a87fc466822684cf3982942c7bf3f8791af77fdc83f01196b5b5"}, "35f77308-d4a7-47d4-b147-a73aec4620eb": {"doc_hash": "86808e7a85786c76d1ed5fe9e43679105a05438b6c3c6d473db123044196e996"}, "abc41903-1dbc-4833-b51f-44ce1be4ec73": {"doc_hash": "40b42323c146f00ee027f767147369fb90d883a0db41024d4f85a25195bb5a37"}, "e670ffd6-f058-4fe7-8c90-476ed2f9beb9": {"doc_hash": "861c811b17b666ea7391e9cb591fd37f0b8c14c9e0c013c8e857cd48e3b98b2b"}, "732e8ca1-b13f-4be7-a120-1d49506606b6": {"doc_hash": "f3e8c0567c0c7d1f24abe306f09ea7fee28faa4e3a1f4fbeaf482d303ff767c1"}, "6b527ed1-0508-43c6-ac51-9b7c9492f638": {"doc_hash": "2059dc16e71cbfebf3371ccb36dec0b9491ec667a2c888ec371038da5b3c6152"}, "b4669aa0-c395-4a48-af39-d32afe3f5a0f": {"doc_hash": "7d1c04edf7e84c6a7fcd149c7780bf0be8e66468b7cce4635c5202d188d4f66c"}, "85263f6a-6f44-4c57-853b-baecc6a03254": {"doc_hash": "8e98deeb3eedf687ce5d2313b2945ff0f40d461b15341c87686fb91938449fa1", "ref_doc_id": "d33dcef9-811c-4877-ba22-b17e4d133446"}, "32c8a043-aeb9-461a-bf52-d7ec107cf7c0": {"doc_hash": "295bfc30193e502a3d304149ca6cbe0064086de4db685400b01a4e4e0732a862", "ref_doc_id": "81739346-75c5-440f-b912-c9176f5053c9"}, "e58a55cf-3d17-45f2-bd42-bc815f82b35e": {"doc_hash": "18e25d7eeeb6ae20f8f286a559fcd63730ffb74e291e97ba02540faae99526ff", "ref_doc_id": "630a934b-5287-4c49-8154-0bac47f9ea34"}, "cfaad92e-8653-451c-b09d-70ae00d97afe": {"doc_hash": "633b7bf6a0f14c00dbd68eebb89b12f51ae1010eef95867c39ee634900cd55dc", "ref_doc_id": "935f16db-76d4-4008-83b7-f372e9cdb12b"}, "37acc96a-84ba-49ac-b717-ed85b3bc3569": {"doc_hash": "45d276a94bb914dab8bfd71639591fb75bca47553e5cd20f14bd6c1b92db2e17", "ref_doc_id": "c559db73-5d8a-42d3-8c77-48293f89dc65"}, "9019895b-946a-4d9e-9305-14bc28546d84": {"doc_hash": "a8860937c428428f3aa6d504b29ecbf45897a78e6fc7f12616b8491a3939a40a", "ref_doc_id": "8ebdddeb-f607-46e1-b85d-7f39a8bccb9b"}, "52b15560-c8fb-4058-b86c-333bd0b49614": {"doc_hash": "802da9afecfb40deaf8b1b5b8a5bf7ae52c2d835e560d281a36d1a3787719d6c", "ref_doc_id": "43543171-e694-468c-8aba-4a691f538106"}, "54b63699-3a38-4596-bd37-cd4dc1b045d4": {"doc_hash": "70b79fa41df0b5ad26e1980731a1a76bbc75a06b28fd10391fdf920161dbd298", "ref_doc_id": "4beb44e0-b079-4041-ac8e-10e65242380f"}, "4bd5774c-2844-4ef6-a663-07ff6cb45cdb": {"doc_hash": "0ae4db7b06af01c9c3bab609d45dde4c0bc5c493d4a5580e67792833f563172c", "ref_doc_id": "b1d1b528-9eea-4198-a74b-d57f16112374"}, "9398631a-b8ab-45a0-b2ce-adc2f33987f3": {"doc_hash": "dff33651c7fe5735c68f33c7ffa800130cd8e215ddf50255495a79777a1f9529", "ref_doc_id": "d2df3686-41c6-4dd5-adf2-8e69c5586270"}, "414ad929-ff88-4971-8fde-738ea93ab076": {"doc_hash": "a9b1e18df81891d2a7268d0241bf19238476353bbe5a1dc1f539ae49360fff1a", "ref_doc_id": "b934be95-f8fc-43a4-ae20-22989392b870"}, "94ffce9e-fd29-4d9f-a07e-a50db41ecae3": {"doc_hash": "307e711bb47a72bdf3d81718579a0a608f7ebadc2f3463723b864c822f83ea79", "ref_doc_id": "73981f32-3dc6-4fe2-8c04-15c790c3e1fe"}, "b06bbcfe-0272-4244-b6aa-cbbf77bee23b": {"doc_hash": "fa40cd8bdd274bd431e8111742dbf110b9a0af9bfa34682ef9fb1b73c0813b9b", "ref_doc_id": "760353fe-a00a-4f8e-8f2b-cdad5b29af4a"}, "6664f368-38cd-4e2f-b46d-e84917f6e77d": {"doc_hash": "328bacd53ecbd4d4c8853132df65c5c357b1fa663169f0e7263dc256d31ab890", "ref_doc_id": "f1c2e95d-e8e4-48f3-a18d-e278cea28f88"}, "0ce90919-2b73-43b9-973b-3c1b00b570c3": {"doc_hash": "49e26bd7afb0a9c79f5ed85734c55b4d695c0d145ad486b7fdff9498dd2c1c00", "ref_doc_id": "d675300b-9fce-4538-a4b0-6f2c4ad610b7"}, "dc3223d8-c591-4131-9d81-c2454fc2b982": {"doc_hash": "65a123ebf3b9636ff684d1ed5ecb133aa0955c8f71d4ecedeaf3358c218ee4b6", "ref_doc_id": "4319f288-98ba-4a07-bf30-12039cb35a3b"}, "de8ebb46-d083-4ee5-b94e-f1fe8b9cb58e": {"doc_hash": "b45e37d5aafdc6b4e7ee798486aa2f38e9388f3ff71e4fb37293e711822d02fa", "ref_doc_id": "1cb8ba0c-fcdc-4881-bcc0-765066756cea"}, "f0f18f30-6c16-4f79-996d-b14218e7dfcb": {"doc_hash": "c74a1864de3ae9be9fe6735f19a8ef4b98e9d1991c0a7134c7ed25639778e0c2", "ref_doc_id": "e42f20e1-c0be-45ed-b649-cc469e303923"}, "e3118f9e-14c1-422a-b652-dfad78377e0b": {"doc_hash": "6334989450e261f3e4e287ab85bdd40850347976cd5a16e83dc837c827abd97d", "ref_doc_id": "9754078c-c393-4134-8118-84ef5a4ec20b"}, "16b3bb29-6737-47dc-84ff-2e34afeac191": {"doc_hash": "b9106732de636045a25fcf3c6d70881d38c23457fe09d699d8fc1139adc1c8cb", "ref_doc_id": "c67d367c-8b36-4d78-b1a2-5ef3f622a62f"}, "2bfb313a-e252-4911-aaea-082b8a06803c": {"doc_hash": "c898f34bcfdf0811500904be06d7d4009bbfd3e8a8dfd9c5029646f8161387ec", "ref_doc_id": "3d3c42be-ee56-41c4-9a9e-f2f921ad5015"}, "2d2ec94a-091c-41b7-a189-99c240480104": {"doc_hash": "8e48eccd719e6599075ca1774c8e1d0f7214843707333219a8a12ada4c9d207c", "ref_doc_id": "54d0e438-aff6-4279-b3f5-d789dcac8298"}, "8cbc39e8-c6d0-44e5-999a-4a30865bb75e": {"doc_hash": "47b0deed6aa3ca8d18c21f0c3ee34c0cfe0974c824e9947ffa00c11feb77ca9f", "ref_doc_id": "d5c6ec4a-5f78-428d-926b-52a51b9452e1"}, "eb9a1450-0e18-4cbe-a585-6edd6b323420": {"doc_hash": "fa21a8d9b9bc99cb5c917531386b0fbd7ce4359acf85ac858230072b374fe00c", "ref_doc_id": "bdb944d4-63e7-4f12-9ccf-b736249f89fd"}, "b5d894b1-5d06-40e2-8803-3b05136422b6": {"doc_hash": "1c3d7a70045def857373f2179314d2dc991a400f1f28ccdc1d5af03d427a9555", "ref_doc_id": "9a85db8d-fe67-4c49-a737-db14139831bb"}, "69e733ab-e1f9-41bb-b37d-fbd5f06d2d01": {"doc_hash": "374f058f37a568f3e5cbd5a4ab834df43dade1daa4921995e92c171a089d6c2c", "ref_doc_id": "5ab779a3-1216-46a4-850d-a2e3cfd6b83c"}, "7eb89bdd-8f0c-45fc-a91c-5322a1ae711d": {"doc_hash": "a7311daae36e56505050c9e61c8d942041b778a7b0c77489d5d8d01aaf16e60c", "ref_doc_id": "441a55c0-c331-40e0-9452-d49c8332fff6"}, "4681d307-db85-4fc0-9f68-88fa9ceaa0c8": {"doc_hash": "be188ae0b10eb14c07bb0fefaeae69b82e19b2f3249663d2594d9a7865b0b4c1", "ref_doc_id": "6979d524-2f53-441b-9ca1-a4749d88fdba"}, "88e22c40-71b4-47df-9864-3db709c4c6a2": {"doc_hash": "0ccb2a715fa4a267ce6f6ef3fa8b0769731fcd09b2e4a74591e8a28bc64e85ac", "ref_doc_id": "eddcc4ee-4a41-4c0a-a25c-78bccd389936"}, "791640e5-5db2-4bfe-993c-faa30657d4b0": {"doc_hash": "c9aa68a33e63d89569e3e101abc17ebb40c93469c50dda06b03d62fec658df77", "ref_doc_id": "4fbe9a25-91ac-45c7-9910-50099c5401ca"}, "333b7296-660e-4fcc-83fa-a165ee938f0c": {"doc_hash": "259ac914a53f5ef2e7b874b034bd1fcad6eb793b6ed43cb2b36bf8660a2d6d06", "ref_doc_id": "a87f62b2-558c-4a5e-a8f8-1fe024dd264c"}, "c1b77c7c-6fb2-406e-9017-2d01bd786b90": {"doc_hash": "c8f325f182415af3dd40ef99ab5166ad9e13332f4ac27dcd7ba7f9acce15d2da", "ref_doc_id": "6ef469a1-01e0-4872-85ca-dddec4c57707"}, "2d5515ef-ab44-4b83-9f3d-a4b4473dafb9": {"doc_hash": "75afa9b555b3c33ec347a0dd0fc3fe929a7b952a79aeb3fd455c6876d8cb4ed6", "ref_doc_id": "f1973931-8b2d-4fc2-9e36-e7f7583c5d82"}, "79308bcc-3894-4555-a5a6-de70dea038cf": {"doc_hash": "6223c154f2b9082a92d3352b7be9243f1ecee6739e296bee1e3127f653604e20", "ref_doc_id": "15059657-8fd9-449b-a356-ca8a99e2b111"}, "c941fd97-6f1d-491d-ac80-b0f12fbde8d3": {"doc_hash": "9b2755f5a4c4b3b4f9382fc2949224d6ba68022b5325b57f44f3d4c2934994a6", "ref_doc_id": "7c192707-7c5b-4fba-9651-1f25d96cba00"}, "f36cf6b4-3949-4c1e-a2e7-08abe9347df0": {"doc_hash": "cb7cba17d2142f533201ad0f211e2b8541420aaedf49d3d86cf8844fd96e7f17", "ref_doc_id": "22d137f0-ec93-4ea9-8c8d-5a9d3a01d904"}, "a7287b4c-c6dc-4e20-975d-ec49a38e470f": {"doc_hash": "f70d9e452b7bb1c9b9e787ac39acd52be6a25e07ab75e48d89b5b4fdcbc1d5b2", "ref_doc_id": "a17d53aa-5b88-4a50-b7ff-1d56d3ab7f09"}, "ad149351-6ecd-47fa-86e4-93b1c38727ff": {"doc_hash": "b89ec055583ba0b61154ef91fb8a45a0cde0f9a39483366c3aaa3538560e872a", "ref_doc_id": "65a5b424-9528-4f97-acdc-43019f8eb111"}, "5958bedb-5ff7-4ab4-bc28-4ba91589719d": {"doc_hash": "73d876bf78162ef09ce441532a74983b2398f05c83664782fb9554555979f93d", "ref_doc_id": "e216818b-28ac-42de-a60b-f299859e968e"}, "ee920357-cb2c-4dd0-ba12-0afb14d91d61": {"doc_hash": "160480cb0833a6572143ab2bacb4035549d9d615651618a0190e4888b13c84fe", "ref_doc_id": "435798af-fbbe-4611-9733-8f2fdd401428"}, "09d6f71d-593e-4cf5-bd42-f829d4112fed": {"doc_hash": "fe00a113522f8b27ce638b0dce3cca6783a7f5bd63a9d4c4f15a1192d89b9652", "ref_doc_id": "4fe263ed-152f-4240-bb43-2affad0166a5"}, "61571715-9c34-4f8b-8935-509142863bc8": {"doc_hash": "f7afff45d3549089acb7be42c90c1eca7d4eb63219f1aa03bd3157813e0616db", "ref_doc_id": "4ecebb00-0dfe-445a-8279-8e3a0557d3ae"}, "3a49fb03-7c1a-4bd3-8b64-9ee13b96304b": {"doc_hash": "88d1ae2b1c05bca66d8f8123fc26a3ba5165d7705ca847eb6073ce38fc4071c7", "ref_doc_id": "d926343e-2365-4de7-97d4-f5d0303c95eb"}, "18cd8329-d075-4585-a8d5-44ee7501c6ba": {"doc_hash": "2c852fb228345beed1b635b0c020de0ba6c26a8c1d928ae180f3edc1296826a1", "ref_doc_id": "a167faa6-650b-418f-8a61-0f0d101cc161"}, "add5ebb8-29c7-480d-9f2f-6302faf7edcc": {"doc_hash": "49df18c1dd5832d5b3f9b2b537cd3a594ac92e93e6f1e4d878aa8d3fa4cb107e", "ref_doc_id": "a610a10e-ba66-48b7-8ebe-734868bb1c60"}, "2d27c53c-bbb4-4519-bcdc-6d1b322bac98": {"doc_hash": "517bb11c043587d6310917b3cd08ea8d30dacdcaef84afa7b7957f53112a09bf", "ref_doc_id": "6dd1cb20-564c-4e3e-afbe-cc2dc687522a"}, "27042a8f-7fc9-4bc6-99a5-f9bda0126d75": {"doc_hash": "60b62bfd6ad81347cafe24c9bc2ec66c3ac67d71b79f5174ede4db96f2290258", "ref_doc_id": "acf13854-529c-4b03-82be-b9e96ed5a4b0"}, "a643a70b-73a5-4f4b-b225-4707cd2e1cf8": {"doc_hash": "71bb5bad1aa3ed9451b528cd71ecafa7f41a52de4768e51e20614505ce9fe6f5", "ref_doc_id": "cfcbd9c9-24b7-4f43-996d-918221f14b6f"}, "ac11663d-4073-4658-9576-513402d70608": {"doc_hash": "c4076aadf41265d0238f04d6c64670f64faef9e3f1b1ea24e61229738ca24b03", "ref_doc_id": "ccbde9b5-3cec-4579-8c1a-05dbba6bdedd"}, "a8b51a7e-1144-41df-be77-566a225270a0": {"doc_hash": "3697bbea0f695139028d0aef113e644de7241b37e3274ef417529496f524c9e3", "ref_doc_id": "ba2c9da4-b8d2-4e05-ae1b-f3d522f9688f"}, "bc844cbb-bb2e-45f4-abf6-81bf106ea583": {"doc_hash": "819e56c7a896e59a8d1ab07b6e53cbe7822a920ef8e703a98568c5ffaa6dd229", "ref_doc_id": "0ac558d3-a107-4b97-8797-fa65a6e5c248"}, "0cf43976-0890-463c-b32d-244fc5e44dda": {"doc_hash": "0bf78a3b8a13ed8ff19040eb89772a5b00aa46a881ae226b5ed11a28006f851a", "ref_doc_id": "f658c726-6286-4429-89c0-06ccacfe8488"}, "62f34ff7-0ba6-4f66-96cd-18ae41d44fab": {"doc_hash": "57888ee6de3e423bc9eb2590d9f53a5359b0fb6d29ff528eedf98ddc0b6529a0", "ref_doc_id": "408201f6-2ebc-4f2a-8d9f-f65a62619eb7"}, "f8304870-a2e8-4bf3-85fd-f0a1c5b095a7": {"doc_hash": "617dfea2ed322f18b2f6ff1e13f3241fbfa2ad4c074145240cff6ed6ce142dc9", "ref_doc_id": "0db5c4a4-4bae-46de-b3bc-7da7fce494ca"}, "7639ca07-ca2e-4062-b900-b30655fc9627": {"doc_hash": "befd8021b4dfe3f5beeef89018ec093fd06335748e551e57d3345d4a1027839b", "ref_doc_id": "6010f816-93e5-40f0-9ab8-c8ba0995ff3e"}, "c4da8a5f-5d54-41b7-8d90-4cfd401f9a38": {"doc_hash": "44adfea954762e25cace7cc57bb442ded0bc992c32362626c89703f9efae5872", "ref_doc_id": "1f221282-aa00-4549-b5d9-35c82803f1d9"}, "47df6df8-9f1a-4d7c-8d88-b40c0ca1886e": {"doc_hash": "916e209fa849b54687a2c826a9922c71c4b07834b0dd5386662276fc48972983", "ref_doc_id": "2566a117-a230-4925-9869-892ac73bcafe"}, "de2abf1f-c48f-4a7b-aeab-31b3545d5f53": {"doc_hash": "680edcda0cea98c381195ec86cbb8ef97d4670a88bad2ab09eb29091242279ce", "ref_doc_id": "e9b367f6-6da5-4876-b321-e5339bf264a7"}, "682d956a-911d-4fb8-8726-ed6a54eb7c0b": {"doc_hash": "0cc938069138dd88dbdca404dd541299bad2032fb48c3b56bc643cc7030c742e", "ref_doc_id": "d0d195f8-9c79-49f9-bf00-50e40d5b8d22"}, "8fd915cf-b629-43c5-a6dd-5e6e0dbd6833": {"doc_hash": "4fc93d543f8858ffe6ed5f35948480ad115061245621d49016ea19e65eba246a", "ref_doc_id": "2d7f157f-779d-4e7e-8015-f6e05275b833"}, "4ce03f2e-0b56-4236-bde4-a8719060fc99": {"doc_hash": "be755d5926e38bda1c10a4d187ccbe0beb5b588570c561d33e5b97fbf275c8fc", "ref_doc_id": "c1c4201c-f444-4d78-83ab-5faa5340d8d0"}, "7a58dbb3-7541-4d00-bc47-3b3e45c3f3de": {"doc_hash": "aac500decf3ebd8cfb4c119b7766c0ee3f8e2bf155aa0e26c5b7ff7ddc2a5e0b", "ref_doc_id": "142c467c-f0ce-48b1-b658-2ba37dd02387"}, "00b97aa6-a3f5-4859-8788-cbd770957004": {"doc_hash": "41bce43dba27fcf4558f815c68242b72ceec2ed627539a47c9128618522fe40c", "ref_doc_id": "1cc359a3-8995-4d23-9657-25049d5803a1"}, "c460f74e-9e54-4183-91b3-1b60d8df6d3b": {"doc_hash": "d0e7a667e019043061516134722e9c891e1db0f853ebfe54e1a5d84f7129a738", "ref_doc_id": "82b82f6a-8331-4706-94ad-d1647432901b"}, "294e69e5-d76b-448f-92e2-abf8ee80ebd7": {"doc_hash": "9373a081979227f94276bd6ac689464bf93fe330363d4e5127f83a5a9cb59df0", "ref_doc_id": "e554411a-930f-4c29-b9d2-5b157b031b9c"}, "810c5fc4-e352-4064-9d97-75cdfbe101ef": {"doc_hash": "366ba4e8facaf1fe265595eea0df42a1b5e396cbae7acb0421224413225e79cd", "ref_doc_id": "e0f3b408-2e7e-4fb9-bdf4-1546ed2a34b3"}, "a44bf914-9f62-4616-b58b-7ac8c7f472cd": {"doc_hash": "a88af81e9ff86601d5136e9f87c8c9b877177ce02054d4704a212c1ea1290658", "ref_doc_id": "468a7a0d-9fa5-4518-b0f7-5fa55c6aec89"}, "7d019073-fdf2-4d5d-b146-e05c0d3a97bc": {"doc_hash": "558df3c0cc7af6f66d648b198103c2362f9101e1d1dca8ef90e99d8e59a6df99", "ref_doc_id": "35ef8a34-a351-4a39-aef3-0999cd865b4b"}, "7be442bb-ccca-4e69-adb4-11f361e0a738": {"doc_hash": "f5bef87ee822212d2e2100bbbe12d856c4a3713466b94fbb1f2c0cbaaa28fd88", "ref_doc_id": "4e91567c-770a-46f7-8d17-84b7ef8a00e1"}, "86720040-4b24-4f57-8e79-6081af655b4c": {"doc_hash": "6ab72b3cf5377097f36845e0c6bb47f167b1c01edfed9a0d80141eec2e96acf7", "ref_doc_id": "2b89fd00-438d-4cf4-9e81-d48b0394f432"}, "2e2278d9-0a27-4449-9e8f-9dcec3877053": {"doc_hash": "6690d9a73eeda4dae1975e77cd5275143484e10c8a0fdaec2422e1f0992f2f42", "ref_doc_id": "b0bc439f-dc48-489d-8f47-ae6a3b9134e7"}, "bc0323ae-fba1-4316-9500-c4a75a38cc1a": {"doc_hash": "5fc9c3c4f272d879ea7b8be2e26a27a490550e067f21004cd26166472da1ce7b", "ref_doc_id": "e6898a83-0800-4165-b8b7-2f97d17dd442"}, "66d1c691-0240-4d84-a82d-819c2542415e": {"doc_hash": "2d95c7fb3693104f9053291737187cee8d1d7df670b361943b0c0f80ad83ccd9", "ref_doc_id": "b6d04257-e356-47e3-9348-118c410d2d01"}, "69a92504-73d3-413c-b733-466df9d9441d": {"doc_hash": "3304f11eee4f91b109ea885c0e6274d7d05c01de3e691db7540ab7a0d50c06fe", "ref_doc_id": "cbf11523-368e-41a9-8462-26b6016459c2"}, "5ed3b8d7-9563-4677-890e-d2adfaa1037d": {"doc_hash": "abc937dc1bdcfc306f21d66e5bf896b39abd5a364bbdc3a30ac751ea472a93b6", "ref_doc_id": "f2663c1f-f11e-4456-aa73-52058fb1f810"}, "b492d61f-de1a-43c6-a43b-454e4203e325": {"doc_hash": "82221674daaffe2b47c93bfde686c0d11da536c0fa3b1c72a55fb05873449266", "ref_doc_id": "e193a3f7-6496-4cff-8d99-b9932fe85d4a"}, "b0c726ea-9206-4871-851e-f439811d5879": {"doc_hash": "50c871829e94d58cda327bb11e743164a1b8513512258b03159756bb4a93a39a", "ref_doc_id": "fb0bc33c-0104-4351-9a88-4371d549b045"}, "44734187-e1b8-4f3a-a3c8-b0f95321e772": {"doc_hash": "eacfa5a3cda65d96aebca478d4b6c7cd93b0587226afcb8cc9caf417f4c06f5d", "ref_doc_id": "fb0bc33c-0104-4351-9a88-4371d549b045"}, "378213fc-0b67-4a83-9647-ee04bbf97355": {"doc_hash": "076a13a97d5417ed5c8fb8f65700052a8d40796ed39932fb8dac4c9a4b5708d0", "ref_doc_id": "8286beb5-2897-4723-8955-15bd3ec7b974"}, "b9dbae4e-ab15-4540-bfa8-97dc73790528": {"doc_hash": "8f959af1df82bb663efc3eebed3558aa21d08c7d5e834d6c05ff966d938b8552", "ref_doc_id": "33c6bfbb-af78-4af8-9422-cdaf8782a531"}, "2aa73dfb-9d99-46db-94c1-cb96b7696db6": {"doc_hash": "6f04e4ac37689314406fb032238272f5a74c203db70ae645b9f267f0e2d77465", "ref_doc_id": "5ecbc694-328b-442b-b485-26b59b8e7ffe"}, "d321a6c0-2252-47e1-a68e-dc2306e2c08f": {"doc_hash": "7a6a7da39d929c10fc83a5a6aa658183587cfa5d76d67b661aac9b72801978ef", "ref_doc_id": "e1365385-b9ae-4b80-b914-829f08aa6062"}, "9af1e4c3-93ab-4e4a-a390-1ba49e2c2808": {"doc_hash": "01de536c20670364d255ddc440891d3a8d888ee3150faf7f937e4c7a81974550", "ref_doc_id": "25bdacbe-ad82-49d0-8a08-d12b464a07d8"}, "d5464ae1-655a-4810-b616-88e67f76dd86": {"doc_hash": "12a6ca913eae458c62a93ba6519119bd4ab2185b4f1b25dadee98ba7388f2303", "ref_doc_id": "81ade61a-902c-459e-a856-cdb846dad6d9"}, "83642f97-7055-43c4-8026-8b082bf0a824": {"doc_hash": "32bbe096bd96e13a6cf321a1d654f656a71cb89028975492eec759941077ab4e", "ref_doc_id": "a4ee67fa-bc9e-4fd0-bd08-0f0e662bc965"}, "1b735144-0c6b-406a-bdcf-2dce90c5bfc4": {"doc_hash": "6fe5e870f6f680c21f84b3f0c69ed85d18efee88972b288449365b3b1bd3b277", "ref_doc_id": "0bda94d7-4ec6-4960-84c6-b4d663cd6e0e"}, "6a9bb807-8089-4cd8-a455-23246b5a4c11": {"doc_hash": "3455d7e1653af67e385e979c4e6179febc907d2d91e0a688ecef01073bf987d5", "ref_doc_id": "a887b3f0-0a47-4028-a212-fe2e5beba62b"}, "f53632e8-59e4-4444-af03-7d5636feaa7f": {"doc_hash": "a19af37457e96edec44d601bd72a922022b200142c6555091778667a68f4904f", "ref_doc_id": "a03f5083-86d2-4e58-8873-491b51ddc6cd"}, "807a3fba-73ee-4ca4-baf6-cdd8477dcbb0": {"doc_hash": "1044b9662f1c1c28082cc38ac34286b5785df41c4e0bb8c88b9ca30823d67395", "ref_doc_id": "e5fdbdd2-86aa-4f96-8473-f0ce293b0321"}, "03f7699d-4c9e-48d6-a9cd-8e6cb462cfb0": {"doc_hash": "f74ea9b3103c49837ddec195e55580ccc367a9be5cda46c9ddd05d601c703b03", "ref_doc_id": "b068438f-df1b-4fd7-b729-3669aebb160f"}, "1a49fdea-1c40-454c-8d80-4679b7c0e529": {"doc_hash": "6b3202de6129ff21ad863e49add0f518893beac6945651e56316d0cc6650ac16", "ref_doc_id": "b068438f-df1b-4fd7-b729-3669aebb160f"}, "6faa2c10-e8ab-4cf2-b608-42a51bc2ea70": {"doc_hash": "eaaeceb15f471c2af20737da6ba5e5a783cccf909342946cc75b99ec1197d9bc", "ref_doc_id": "c8bf059b-5ff6-4022-bc6c-eb4bf0bca4be"}, "a2043e36-30c2-45a4-b520-b703b4fc9837": {"doc_hash": "fc6f5a2fc443c4b9d6736e3f203a0523e19f4295887bf831ffc1735f333c3fe9", "ref_doc_id": "c48cccfa-ab8b-4b0f-bd05-e13fde0e393a"}, "cc987a2c-4324-4992-90f5-f1152af1a23b": {"doc_hash": "b3667a19d8e19f056ab2ba942eb2fb0e8f5301ef668733ce6e7032bf9a698118", "ref_doc_id": "3ec777b0-0544-4e56-8144-1c12e1802698"}, "66cdc670-3b07-4974-947e-30962f8b3c44": {"doc_hash": "8a577616cefbecf07a6cc9ff752d45421022ed91d425a07bc70334caf8c7deef", "ref_doc_id": "d168367f-92de-4a38-8cab-ab567f97fed8"}, "9c9f963c-3822-4b08-916e-ffeeae65d015": {"doc_hash": "9b2f1d4d4f3500f8759bd1c91118ef6143b51b81b4bb38a0bc523e71fb2cdd10", "ref_doc_id": "d72c8c58-cd23-4766-bcb9-091b205a5e1e"}, "03b57f90-1abd-4323-9db0-7701bf1da0d9": {"doc_hash": "354006f35f3bc2df0cf0866a1cdb3a1384505018c9a781f401c908a81165f990", "ref_doc_id": "b8c62aaa-117e-4a8e-87f0-24626a54d266"}, "79b89516-ac29-4429-8fc2-80c541ebbc17": {"doc_hash": "a40b64d3af20335c7739fa46fefa927c1a82d010847e51c1f4d1715f97fd5384", "ref_doc_id": "5716488c-43e2-4c89-b7cc-430258673200"}, "fab64a12-4527-4570-9d6e-213b67372b79": {"doc_hash": "ee88fb51b3aad5e6ecd80afcf32bc5bce5726c3499b8fbd293a93700d1ddf6cd", "ref_doc_id": "1ff25416-4c95-49c7-8b4d-711999987599"}, "e7c716b3-837c-4a12-b431-99dfa8f88c46": {"doc_hash": "b4ab3149f612ba3d90ad51b4ff255e53fe7c582fdb5c0c15bd2aa9a661078231", "ref_doc_id": "955d2c39-6f59-47cd-bf1b-084c55fb896d"}, "3bfb85d3-9adc-49b0-837b-47db4f36bf23": {"doc_hash": "22d9013267516dfd0d074139f3b8f1e18b87ace0569eac1ad3e3c68ef026c351", "ref_doc_id": "cacc392a-ebe8-4bf8-b316-632e2537370a"}, "e6ce7c09-756b-4b22-847a-07e922c812fa": {"doc_hash": "c8a2bb6dd89aca164123402d73dfb540167cf2d2cacb5c8be7de4881aae4fd70", "ref_doc_id": "6b50b255-7a04-4ae2-ba05-cd323007367e"}, "35b06307-a07a-4b5c-8f32-fa5f4b798465": {"doc_hash": "1af9e34d54096886a01f5a43ebce8435ecb59ed31a808d5d3089ac917991c253", "ref_doc_id": "fccc91f3-27b6-4f08-8712-de56b486399c"}, "0797e0b2-0379-4bac-930f-eaba2a869412": {"doc_hash": "8af5dd2d6cdedd20b052a350239f1ec10692d43448cc1981bda0eacdce39fec9", "ref_doc_id": "37520d21-4e38-407a-b9a0-078e921dc6fc"}, "c58ccef6-5108-4574-a0c2-513174f8f9fa": {"doc_hash": "9ef459932e95267ea30d0762834f944a6f23ac50331b3723a26c05a7b331c0f5", "ref_doc_id": "24bbc1e8-361b-4b02-b448-74ef632135a7"}, "70bf8a0b-c84d-4c1b-b9b6-0b4d6dcc1370": {"doc_hash": "206467afa0d8966e38b8c8c3fe549ed4686aee60df080d6c366b4c4b158aa570", "ref_doc_id": "9e5daa55-e1cc-45b0-a6f6-696fec7a5ffe"}, "6094576a-7d5f-4858-9b53-1f2e3e09b97d": {"doc_hash": "f76826d0c52156e841b99b2dc583a7928b1f94d8d0384a787b60493833d94a0d", "ref_doc_id": "6738bf5e-dc11-4e1b-acf2-1adfee17bcf4"}, "6e7b4b7c-b751-4015-983f-7ff109ff6c5a": {"doc_hash": "5ad729ca561f4bf19f1c4208b6d020febf30a26f13081a1284365e587a670733", "ref_doc_id": "647cf230-01ea-4d55-8306-4b3762885235"}, "f34c3b68-1270-489b-ac46-9c1986713908": {"doc_hash": "f4d1c40656670ee9f17c92bfc07fcc48dcac590912366b80fd5a84830b330828", "ref_doc_id": "aded2923-cb85-4908-b352-e06380cffb5a"}, "8ea9a9f7-7e63-4f9a-aebc-af25054fd9d3": {"doc_hash": "3ee43bc073a2d743106dea4dd6eb40518d8780c31f2a73066649351900c2552e", "ref_doc_id": "6ba4915c-7c20-4da0-a722-99500b352966"}, "fdc7525a-8e5e-41f3-b82f-74789017311b": {"doc_hash": "29aa561a2c9f5cb2d217949ea0f04c9b8ebc50bbc110301f169fe490c145fe4b", "ref_doc_id": "e3013511-6d21-4bd5-8e35-62efe7ce6df8"}, "6fdd3c67-9504-43c1-8f0d-5be1b57d47f5": {"doc_hash": "2142ed254b3154e2b35a9b1199e3be3809f86d4342188a5f1ff32bb1de7b4aa8", "ref_doc_id": "356962c1-b56e-4811-9164-b7e95cbfaf84"}, "19605ae8-22e8-4d51-bebd-c93161cbc4df": {"doc_hash": "b40505042270b15ee8e021dcaebd88c521af87972f6f05013140a81b7b8e52e0", "ref_doc_id": "cc30703c-02a5-44ff-ab94-409b3b91867b"}, "487cc039-9291-475e-9fac-bc26953f4b59": {"doc_hash": "ecb4a74e0587f128be84b0322fc35650400a7a3f1fb2bac87f4c5bcdf4175bf3", "ref_doc_id": "34532850-716f-48ae-9bce-a230287ceafd"}, "7ce0c61e-574f-4d57-b1c0-5bf9f3952e47": {"doc_hash": "c7a10c4efbca436ed00813f83ba882a68e8447713078415a6029ab2f202e30b5", "ref_doc_id": "ac8432f1-cb02-4e71-8b16-5d3a548a2b05"}, "1dc748cb-5f71-4762-90fa-23bf896e3015": {"doc_hash": "dcddf3b69b1e724f445b24d9dd8bff5307d156c12342a9755bca035390d453cc", "ref_doc_id": "872fdb8a-d4d6-4caa-b19e-14b9b3b4f9df"}, "b37d568d-ef65-4cd9-8020-31cc7441a1e9": {"doc_hash": "addb397622efb82b2267211188ef8ebac75d5513da1f866a1444caa6ecf1fe04", "ref_doc_id": "9e8b939e-9ad9-4a4a-8b0b-27dde7c581ee"}, "a9d164e8-4493-43b6-8709-5802cec4ecd1": {"doc_hash": "ad55df767510a74bbf752b3b6157a9ae804eec142324ee562c94f170ada0831b", "ref_doc_id": "940e3670-5c7b-4be8-8422-3f1e4ab4a59a"}, "2701f10d-fe8c-4689-a445-06de4580c092": {"doc_hash": "9354cd951f6b1b04b65ef3d797ae6927cf73ae6bd292d3822c56121b6c7fc401", "ref_doc_id": "5993368e-7d77-41f0-b51e-88112e006ea0"}, "d09e8f1b-665f-446d-ac54-3426171be8e3": {"doc_hash": "74f5178768c17f28ed9bb28d7077aa9dbb5f88010e21623263e805b998892ad1", "ref_doc_id": "6335f574-0b2d-482b-8797-91aa1195db2e"}, "13d4a3e6-2f1c-47cf-8c8d-6fa73accf290": {"doc_hash": "54d6ade654977561f9fe81c8ac8186bcbf6812f6fa0565c23c51d511f2c306c6", "ref_doc_id": "41bc1e9a-d7f0-47d8-8b55-58bb18cfec5e"}, "a387a64b-12e3-446d-9faf-b46179ff9a61": {"doc_hash": "cabb73774b112c74cdd35962a0e4d8454e0911ff71e0e27806c078499f471f4e", "ref_doc_id": "e6b349d5-c818-41b4-8ea7-7d0cf73ad132"}, "0b859005-f54b-4532-8685-25df1a311144": {"doc_hash": "dddd9f67f25023674a337c9d3c387ab0106d6a52e6075643bad8fa90e8c4ba3e", "ref_doc_id": "99d4edca-3483-4665-9bba-dc866478b2fb"}, "25dbb7d4-3741-4bd6-b2e2-69e41ed1b977": {"doc_hash": "7a4c6089c702eef2af517400c89241bb8c7f9cfb21ec4d733a29eeef0be01868", "ref_doc_id": "f8c7b7b5-9346-4a7a-ad29-8ed8bb79df87"}, "973f2901-6ef8-4228-ac7d-d4e62e835c38": {"doc_hash": "ec59b52ba8163d186e2ff0156eca5cd6cd47a21b38ef529abe850feaf957e601", "ref_doc_id": "9d560c52-2643-4cb3-acb7-b3fa96265e1b"}, "b4e055ea-5230-4e18-973f-ce5492998d0f": {"doc_hash": "d69daa5b11c9b8eac50f9b071493cc81ecdc6925f24a670921d2847812a52a1d", "ref_doc_id": "f64b40e9-9087-4cae-813e-52f49e876bbf"}, "0daf9433-b283-48b8-a0af-dba0d95194cf": {"doc_hash": "a12e88df8ba33bd299cd8393655c7e7c23f14b749e79aa7ad45cba3ff1befe2c", "ref_doc_id": "e3371448-78e7-480a-a7ea-bc0b5b9394ad"}, "4bb94fd3-d8e9-4651-b429-33d28abff278": {"doc_hash": "b0946d00a90a8d13ff2894139019aaf698f5190e55dcd61b9d5fb6d9ee9fca55", "ref_doc_id": "83fec48b-3923-48a3-a24d-de7e78439326"}, "5f2a9f7d-9f6d-445a-85d9-ac83099b70e0": {"doc_hash": "e5d9c57970cd5e4a0b2281f5131f68420df9884065f7780b4e6e68dc28f7d558", "ref_doc_id": "c4abd4b3-29c6-4375-91fc-274314c12c88"}, "b8ab8bd3-8fb8-4fe9-99ff-c7ea4c97924e": {"doc_hash": "bc59b1e44db42080e39fe55deee3087d72fe68dffe4b1a9655599519d19ce367", "ref_doc_id": "8367f398-922d-431e-95ef-eec4381b78ed"}, "5b1fdb0b-2c53-425b-b298-e0577590cd5a": {"doc_hash": "8830480990e9857bc1376ed079134e5144a49df56a1136f0fb3f82df3eb0fed1", "ref_doc_id": "3cd81bc6-ab97-4988-97c1-3fc111c8db05"}, "4d6b9fd9-a18c-4edf-9fe9-2b3b9d272a81": {"doc_hash": "3ecf2f30e990958e93adc5f4dc48cec59af6756c6ea3ecc3b97d659149bbcabd", "ref_doc_id": "3e619ea8-e8a6-4244-87db-ba1bcc62a6fe"}, "08be3d28-3178-4e78-a723-7d4b3f1dbe4f": {"doc_hash": "b2c1772c486f4c24f92f7849016a2aaf2d63364f76838aa1b80da6bafc4019da", "ref_doc_id": "5c0355ba-d984-40e4-adf1-7b83f2aeb60e"}, "9aad0286-4641-4015-9ff4-6c8f8e5f5b11": {"doc_hash": "255ca6c55b4e7dc50d94f56f52345e139306268eed8070769f832a7e1ddd75b1", "ref_doc_id": "dc480c4d-5579-4bae-8f57-4fee0f2dbe6e"}, "1c0b6158-3566-470e-aa88-7e8fba3e6ab5": {"doc_hash": "e201624d226e8c4cc4a1928651a58a5fd0466bb09a3711fe62e8a7b536e16b5d", "ref_doc_id": "ed3397a7-8734-42e2-b3d7-5aaa20c272ca"}, "d3da4656-3d8a-4d9f-bf52-47187d714e7c": {"doc_hash": "46f08debf5db7246376ed7173cad81e0649128f1a2ae69164a57c3fb56df16a2", "ref_doc_id": "c638594f-6bb2-4d89-83df-b6ca4809060b"}, "f115609c-7f65-4fb4-99ef-3bb1eea5dc42": {"doc_hash": "73aaac63c13621a6ce9aefa4ae8168d348cd8e5e061ef987bfc6f01482fb8345", "ref_doc_id": "84c97e89-effa-48b4-85ba-2fa86ea745e6"}, "38809cbc-6b02-4cab-a7ea-a1041346491a": {"doc_hash": "b7591d399ba6995766d1c2a7889b59b94b7a6568bf985478bb4504c16f9a5324", "ref_doc_id": "324e9837-ffb3-4ecd-90a6-e7dde72d6415"}, "2d484eed-3d46-4ff5-b0f9-128e035554ef": {"doc_hash": "58f0cfe1effa308438629c134f6c93ceb146366021a728e6dba011619cb77fee", "ref_doc_id": "5976fe6a-f28a-4a16-b399-38d9ecd0eece"}, "1c1f3301-5c9e-4f1d-af1f-35386fbf6a16": {"doc_hash": "b57688070152fc85e1436c527439856487503bf5313fcceb304c29d3990dae4f", "ref_doc_id": "8429eff1-8b97-42aa-8ad8-c5f95d3a7f37"}, "7b763367-4de9-4374-9780-d447872a79f5": {"doc_hash": "37710964a4dbcabd4c18dea8e45cfa32d765342debdb94725e436c76d3006264", "ref_doc_id": "fff59f0a-fd83-4ea1-80ce-375e87191de7"}, "3c539325-48e0-4d03-8054-a9f6755aa1c8": {"doc_hash": "dde05b974ad28221c19f6ea0ccf18ac589b8570a2210b9a0c47c601456786ed1", "ref_doc_id": "24b33dfb-9d7e-47c6-838b-82fe8a73ef24"}, "ddb3f41f-287f-4ccd-86db-875f055ab147": {"doc_hash": "268c0b2a6afb8a975b5d780df4b74692ae7afa0b67d768ae30a85a6246f99902", "ref_doc_id": "df25f0eb-bb63-44bb-8e91-03a932a6da63"}, "c37749a8-3668-4266-97e8-4cb49d8993cb": {"doc_hash": "80fa81eefa295428e2218924074aa7c61771faaaf4731d6ae4fc5a28d2675e6e", "ref_doc_id": "1c24a641-1f30-4efd-8180-7f926266d917"}, "d3b3e3ca-2369-481e-b4fd-3774ba3f6fc8": {"doc_hash": "e4a0f7bfae21e4a8f946e8679cf25515d76b5155652fdf2a08b95e3c8ceae7ef", "ref_doc_id": "ee83851b-77d2-4f97-8910-ee65c490f010"}, "b497961a-8006-495d-9149-e5fc3ba82903": {"doc_hash": "2de54e9d7c4b635ad93d8452a4ce20faff4887ea3826dc1da0def5efd21425ed", "ref_doc_id": "03dc371b-3b5d-40c5-a563-e35dc4901f87"}, "263d4ec3-5917-44f8-9b05-bf34cda32bf3": {"doc_hash": "35e529415fdc547fa22ea1bd0163eb4d5691fab4630811a808d5892e24bf4fcd", "ref_doc_id": "1f61dd6a-7eb5-4be8-810a-6583403edb35"}, "2d194e51-ed2e-4359-aa9a-bbf57097ac4e": {"doc_hash": "2f5a82475f0174763b44697dec0e45f0031e7190f6c0b6d1622bf32e6b24ef25", "ref_doc_id": "8fe3b7b6-8362-403e-9307-cae984e91111"}, "9c2fa191-295b-44a2-af04-bb21ca1cb8eb": {"doc_hash": "8f965fb22cb528a197ccbc8e41149fcb533af706aba8ec5a4f5ceb291a021cef", "ref_doc_id": "9256af8d-b98c-4f9b-b4e1-4db798848b19"}, "2dcef8be-0f99-4910-a866-8009c68ffbc8": {"doc_hash": "4508e4209be3e6f02bb27338a178db79c2627c31aa4e8240826d19c42a80d217", "ref_doc_id": "10e32b23-f8b8-4a7b-9388-b13b651b37b6"}, "c59588b9-36d1-4e53-9913-1c0896792abe": {"doc_hash": "f20de27a7ef014cae77f1bfbeca9cee4e916ddad88fd22d026630d5bf5f1ad85", "ref_doc_id": "8d6f5de6-10bc-4840-b2e9-44a3d11a7ced"}, "c609a930-de9a-4bb3-881d-e09ca9f8f2e8": {"doc_hash": "579a4c598a255146c254359061255f3d84801ebf53802431c666bc4b8f96f473", "ref_doc_id": "9c0242dd-bff9-4abb-b5d1-67a24a1d7f6e"}, "ecb169b6-00b3-43b9-8b13-18b366ddb0db": {"doc_hash": "a97afba1475f17938a9a56ce20691ac675833ef194919b14f0795713c19f1f96", "ref_doc_id": "6b7cadfe-134b-4f61-97c8-7521832e6c5d"}, "6ac61286-5964-4f3e-b499-9384de47969e": {"doc_hash": "1a32777cff91a36392e0061b99ac262856b826f722b603b4ce5397abe099f92b", "ref_doc_id": "ad20234a-aa6a-40b1-a9f2-c6273d0e930b"}, "c8469698-90e0-4fda-914a-12141d3fe1b6": {"doc_hash": "cb44cb7525799404e924a061312c32912eb43a87832471453ccb58d184326a45", "ref_doc_id": "d141e0eb-c7a6-4f13-bab1-d57fe1d9889e"}, "a9d8c5b5-e315-464c-8091-f0a9f886ad5f": {"doc_hash": "9197191654eb30a2c12ef082cb72fdd46e3ebf1bb00579d3ca4e24a6893b2d3c", "ref_doc_id": "c502d62c-889b-4d7b-a7af-8447ec3b9e72"}, "789f77b8-c04f-4ac0-9a3a-04d2fc407cc4": {"doc_hash": "7bdcec6789f7018478517a364bda4fb06b5907a940d9b82b946a814be3795862", "ref_doc_id": "4d8d659a-d645-4a00-acdb-68bc64b2c144"}, "274f5737-5b58-417a-a4a7-f9893e9207c5": {"doc_hash": "1b46a9262c9d45634b16252a4350e06e3c159221a9414a8bf0c854e88bf37526", "ref_doc_id": "6b399054-5acf-44df-bb55-6f735302d90b"}, "6ca1df8d-ddc0-4c83-b93e-55c4b3eba58b": {"doc_hash": "0cf526eff9934988add103b89c4389ebfc2943d93921b93504efcea963e4887a", "ref_doc_id": "59fa0dba-1390-4a43-a7d1-b7371a844d92"}, "9b222618-c2a6-4f62-bac8-9a9fd0eec472": {"doc_hash": "0a7280acb540a2a7a41daf40d254d884692e9c4c73e7a12123d6aabf60a58aaf", "ref_doc_id": "0f83a4f1-6e16-43fd-8333-da3844daf658"}, "9458b958-e768-4864-87bd-f76b62452217": {"doc_hash": "81c4cfedd1716e6ae9c5f6fad6170a5d45b33b40c9079ae43737dc9795035f32", "ref_doc_id": "a47f2554-e401-463e-95ce-60db5075e8da"}, "bfdd5d60-2ebd-4db2-8ac9-88598f77cf6f": {"doc_hash": "6f85d2822788d55a052a1b619537e739968fb7dbe5b7fc6654049c36ac13b922", "ref_doc_id": "dec70d41-f5fb-45bf-b64c-99bd05694e6d"}, "002e730e-cae5-4f5f-84c1-be6ca6f24cce": {"doc_hash": "4b4ad392b88d5a1419e4fef69e7852da04f65c32a8c696734286f812abd28ddb", "ref_doc_id": "c6a5f5fa-ebd3-498b-a792-3f8f920633f1"}, "02e4e0fc-60a6-4756-b42d-c0adec908d2c": {"doc_hash": "3fb6d34e3230afcbddfeef08fddac98f38f484bc2dc2558fef41aa6cad88d328", "ref_doc_id": "4cffc8d2-8a76-4bf5-b918-df4672ca4571"}, "828240ac-2cca-4be4-a2a0-9bff7fa30d6d": {"doc_hash": "7f850a27b98f0bcfc106dde1f87c6fd8d4f12b16dc4567c27896aa7ee1403ae3", "ref_doc_id": "3884edec-2543-4a67-b401-e21cd328943b"}, "790a6882-caf3-4fab-8f7c-c27f134eb62a": {"doc_hash": "db1aabe9606940ab7020af4bcbfac4d9d678d808006bd1dddf29663c2c906ccc", "ref_doc_id": "9c7227cb-160b-42d1-b9f2-23682f7960aa"}, "12a9924d-f5af-493b-969d-c6e26b4bde78": {"doc_hash": "a56213c593f1784ad5a293a1f24119b3728aebc2a629f294f5bde84fb39aa697", "ref_doc_id": "ddca0b96-1c8a-44ed-8ab5-a61888246229"}, "806867d5-bf69-411a-beaf-03d7b699c79a": {"doc_hash": "51aec7c664cf512327893848ee237d0d09766b17bab34123b07bf446b3043a38", "ref_doc_id": "c9297870-e6b1-4d3d-88ff-86981bfb7285"}, "e81f3bf6-bb93-4adc-903a-c1d67a54ccd8": {"doc_hash": "baf3fd373eb2934f55f81487dfd5ef31ca5602106719f6fbe7324540aab23da4", "ref_doc_id": "cf3b369a-28e0-41dd-a2f8-ef67fb9135ba"}, "f0ec7efe-ffec-450f-9dd3-ed52d5edd8b0": {"doc_hash": "112231a0bad26f3db28595a92a3eb7c8614060a911a1425e595066f9d5af94d6", "ref_doc_id": "dadd25ee-8138-47a6-a12c-1223a1c78578"}, "4a009c88-90f8-4c84-8b7d-f0a83e8466f8": {"doc_hash": "87da21dc1d1c04fda4a822ae8d8f55d384a8d0134c96a36ceaa022f1e47f6511", "ref_doc_id": "087b8d58-e945-4658-b51e-762e834e038d"}, "23899cb0-b8c9-4687-a741-fd6658b5b278": {"doc_hash": "91c5db2024fde154b39e9969dd9e510ce87554ac8b13042c93feadd61a32ffaf", "ref_doc_id": "06c20c5d-ca73-46b6-ac8f-0a46fe98152e"}, "289c1f02-5dc7-478c-a0ef-1fc3254d71e4": {"doc_hash": "d619b84b1fe6bfebba530eefc38cd6d565f2d318a2dfa964c701fef9cd51a55b", "ref_doc_id": "ef3d7fd7-7d28-44e0-a174-b6a4d4dbccb9"}, "3fafcf30-4986-4510-b21e-f11b7ed9c7b5": {"doc_hash": "9cff92399f4d8f1b3374b599e66c56f1450537634c04db0da3b3392742e4b87a", "ref_doc_id": "45251639-7a4e-4917-960b-b76695482ea1"}, "30921076-c00d-4cdf-8d96-c505b19be5f1": {"doc_hash": "f4ad3c5b4897769da998760e888d42fce72c369b9274fcd96f1d12bdb9c1d7d9", "ref_doc_id": "4c00e8ea-b8b9-4cee-9109-351e86824d92"}, "352b496f-a2fb-46a8-bbcd-391b1db43a0c": {"doc_hash": "96cfe530e11b8bf98ec49822604a5ed2b381c0650c463ccff54ef7b0aa260e35", "ref_doc_id": "e1ebe385-8735-48e9-8fb5-64229d959f70"}, "2ed0c5a2-e67f-4fe7-ba9a-0531cebe3c98": {"doc_hash": "070327164118d3f301520385dbb6412a17566ff443beaf7ad8bf570521249b4e", "ref_doc_id": "3509da68-2b8d-4155-bd4f-241a960681cd"}, "f439876e-e020-49b2-809f-9e6eaf15670e": {"doc_hash": "ca9fd97f16d421bb99f6a76b5cb5f7a60886340196fbc7e547b083102f72e428", "ref_doc_id": "5efc0236-e09e-4630-bfed-96a2b4b10f5e"}, "f03a965a-1596-4d3d-80b5-cb3bf14d33e6": {"doc_hash": "8fb662178babf1d0b9bf7cf8c5fc092c5dbb81284c3d141bd62c51f04c73eea1", "ref_doc_id": "9a32e112-ea41-4c54-ae78-5a6c48a170d5"}, "dc077629-cce2-4ddf-8a85-97642409a934": {"doc_hash": "b5a3657eae34652de7ef1276fc37aa52c8f2ee91d38a836c3b9ec9eb81baaed6", "ref_doc_id": "7afa0a22-42f2-416f-88ce-c28f1aeae204"}, "e906ac25-ec92-460a-ab07-39e9e1629005": {"doc_hash": "a765866b9643c06e6dceea72c5b305fad36773a46870d615c2460117ddba1289", "ref_doc_id": "0e20d78a-776d-495a-ac53-0cc553c55bdd"}, "8f2497d4-397f-427d-b0fd-a02e883cd50f": {"doc_hash": "9deab960f931b7e5aabd63e1dd8981156dea37b61b6d01db037d1cd275ca30bf", "ref_doc_id": "2e815f8c-a85f-4fcd-bfa5-ae6e578b8a4b"}, "09d90338-e6f6-499b-b074-3e002cda9566": {"doc_hash": "b2e5236badc5ff7add5ab354e9f7d720292fe3ebaa572e9c905eda40a3f1306c", "ref_doc_id": "12770a76-14f2-4754-9ad7-67e6185071a4"}, "2615f273-0e0d-4b67-913d-53d2ca4bce52": {"doc_hash": "7d763e059ead729abb8f4b0be40a097ee98db560e42141dfcc485516bb0f9537", "ref_doc_id": "0a4f17e8-3b50-4819-b9cb-73ef0997d5b4"}, "cc3af7bc-27aa-4ebe-bc55-c252eaee4a82": {"doc_hash": "2eec452fa8f8e8cc70cd43ff8f945d72c6adb15547e1134b48326d1b0944416f", "ref_doc_id": "a5368953-312f-45ce-9712-bc12d144e104"}, "c6352568-4f3b-4c62-9dec-2ef69d5ff09f": {"doc_hash": "c9372f94e50f369f662fd3cf13215d200db00afb62bb0af7aba6fcfe6933ba49", "ref_doc_id": "06fdae31-be22-442e-af9a-273dc0bad18d"}, "67b7fd18-d139-4ffa-a677-87c2272aff3f": {"doc_hash": "8da523c709b322af92784430f275bd5c8db1438f9d91536d85590861e5dd0e34", "ref_doc_id": "9139c2d2-8a52-42b2-99ce-c20989b1adb3"}, "c4caa573-9380-4c6b-9e00-6c3208026237": {"doc_hash": "1245459077db43c9ff61f4b2e630afa41c44f01992ca6413670c2f6f1d476262", "ref_doc_id": "2b9bd700-1945-45dc-a9bb-abd05d43c8ff"}, "bcc36d5f-372e-453f-a4bb-876bd3db88cc": {"doc_hash": "e25c3648ff417a9c91e93e950b2259db9e80bdb5d10d3667e50172884ec9fd4a", "ref_doc_id": "add47b6d-7ada-4f6d-b741-64ac27c03a18"}, "c8c2e4ff-592f-4609-a78d-d5e3a9754121": {"doc_hash": "5826433a7d3a439fb92ee66764f1bbc36fa954d54976460b14db4b41ad13f30f", "ref_doc_id": "c34bca40-2940-46e8-b91e-dc64a010e31c"}, "cf5f2183-9ee8-4ce2-a5ee-e7b1e3ef39ed": {"doc_hash": "ab6a7e61d7d8aa9f13ef225324673ccf223210d7ba3d47f1172321b192dc692b", "ref_doc_id": "7d72ad7d-7884-41d2-b415-989adb35b8cd"}, "1af17f63-047a-4947-97a4-d09c33fe5eba": {"doc_hash": "00f7cf74e1cfef69663f6da6c11fbdf82b140c633247b112f4cbc43809f39ede", "ref_doc_id": "b5ce2e1e-6ff1-4924-af86-9b184d601cde"}, "93a450c4-ced7-49f5-b1da-0c2491f86b92": {"doc_hash": "6c24546572e0a3aa2c2e932ed861e6c83ae428ef10b4123c4210a0d4d555a2aa", "ref_doc_id": "e8350a37-9748-4489-924b-ea59f8583379"}, "cd9d7958-0492-4584-92f2-0ce28ad8fa8c": {"doc_hash": "585dc84a6a850c5f14d06c5301489ff500548c6df288303c62b194b5dd5f1c07", "ref_doc_id": "2c3638cc-bb42-4666-b449-d6f5a4af8da0"}, "2823117f-9c01-46ec-b9fe-28e35796cdfd": {"doc_hash": "94e44015d6942dfd2a934d7ab96878ff15a142ebf9d83bcaaba4f7b4aa2eda95", "ref_doc_id": "d2ebf18e-ac06-4f02-8a0f-455d0898cb72"}, "9f35f7b2-d3c6-4eea-9c2a-6eb5f8321c21": {"doc_hash": "006147c0757ad153392cc987c959b566fd875b0673f2959b8980ee8ef7191f36", "ref_doc_id": "dd180e5b-d1c4-4464-868c-cfc17ac33f8c"}, "3c968fd2-e9b9-44ba-9e8c-22bb3eb8ecbe": {"doc_hash": "7efa1c15bb4af837c01c2bad0698df3a9c4c1f801e12090f1f1a3d083ec7a635", "ref_doc_id": "59c4b57b-ec47-49b9-b517-ceb29335a9e1"}, "e350daca-ef46-4af6-9d9b-c117fb9d4ab5": {"doc_hash": "2e82df7b13f22360d0c5518cc304b632f46fa29abd85baf9784ee7f2bfab170f", "ref_doc_id": "f65738de-41db-4dfc-b4ad-5f514956be9c"}, "ea9c0f6c-efb3-466e-b1ab-e17f1ba02140": {"doc_hash": "ced9179a3548dfdfc727eccff72f07915ecdbb877277e2f4d285ab847f552013", "ref_doc_id": "c8f93c91-39fa-4d49-8d78-2272fca73a8d"}, "28e77ef1-1ebd-4d26-ae03-e2e3d0ed15da": {"doc_hash": "d7b2baf818e80933bb2e8e49b6243e07a24b51f6ddfde3646475a99578f1fa9c", "ref_doc_id": "04f07c16-0533-4ea5-bc0f-8c2484915a14"}, "8057edd4-36c9-4233-8d3d-ae1c2a848b5d": {"doc_hash": "ec9c9d1a329f80d17059830720288c7c6577216f1abfad919379d1ba055fc819", "ref_doc_id": "1dd90bc4-1e7c-4878-8d2b-7f170c68f54f"}, "0aa818bb-e955-4621-b605-864b08cba6f5": {"doc_hash": "2930a594fa87a1c4ba539cb6e36eae2e99ee3f153db3376eb7804af46e83ebe6", "ref_doc_id": "d7e98457-8334-4b1c-8935-b7f49af555af"}, "6d43e91a-cf47-4796-8af6-5541a777e128": {"doc_hash": "6812e17fbef4794a1c3f3f4ca65edcac1bee4ff6c49021ea5a5bbe84de0180dc", "ref_doc_id": "8d501f99-c052-45e4-b423-4e1c61188d59"}, "5e23219d-7300-4576-9f19-26066c616469": {"doc_hash": "7746b8f4c13dd88978b716fa241bdf244b910c9d8bc6f524d755b5ed72c216c0", "ref_doc_id": "5f9aad39-0aef-4c2c-98cd-14ddeb72e58b"}, "79913388-8aa7-4dd3-9f8f-e9948933977d": {"doc_hash": "44f04b4268d215eb6de4d3fa2195ba6cf7c609f70852567e90b454a9257b7266", "ref_doc_id": "da2473e1-9a22-4651-8b32-93be9079ffcf"}, "d3a2d556-aaeb-4e80-bb65-4f40ab3b6213": {"doc_hash": "9683760d7d61cb728ef94b9bb105269533e0588bea693e6fc73f423ba5ca49f3", "ref_doc_id": "fcbb4837-df5e-48f0-91d6-66b35b1800db"}, "b17e4884-87c8-4f53-bfa3-c01f35e8bc43": {"doc_hash": "d2ea25ea6132abee7e58ace10cf997b1ca5a56c2ed3cfd01995be01605056486", "ref_doc_id": "bb6bb3e4-3a7a-45cc-95ce-f77583629569"}, "1a6072f6-efac-4a72-b940-0764a9604a1d": {"doc_hash": "e7da85016cf1bf8cc21e9f4e7172a1664305c933a0cfe00319d09a7ebb392516", "ref_doc_id": "8ed492eb-c39e-4ecf-b559-dd2243446ad4"}, "9a9e7211-21ef-4630-845d-6ad186d4e325": {"doc_hash": "a625ed5020cec3a192a4049966c62cece2665496e69c84ebfd9b5436de9eab08", "ref_doc_id": "3c388d3d-0eac-4108-8bbc-ac4da25a6275"}, "26529306-696f-40b3-9439-1763ab6e4b8c": {"doc_hash": "8c9fa22233cfdb78dfdff2aa465ab29f3ef79af3123dd3a2b94e978bdc8f1374", "ref_doc_id": "e5444a2b-d50e-4bf9-8bd5-dd541ab37cfa"}, "231b2920-155d-4bc5-93b3-374ebaffc790": {"doc_hash": "b3a3bcfa3ef07f232d91b5d5d060d17cdd7a0262a281920bcae4591416fd626a", "ref_doc_id": "7a75a122-34cc-4fab-8aa0-d38beb2bfcc9"}, "63a450aa-8362-40c1-ad62-88158b33ec58": {"doc_hash": "b67e180655ebca7059fb845fdf580cc1e990c20733623664b01491df651b113f", "ref_doc_id": "f9e4d986-3952-46d1-9653-ef0530a3602d"}, "fb0d811e-79cc-4ac0-836b-f7ce4f84cda2": {"doc_hash": "bbe01e59f56113d2a3546f0dd49634d0f625a6200f84091d064673be94dceeca", "ref_doc_id": "3dc8f002-f527-42a8-941d-2106568feb19"}, "94e72dcc-501a-4318-a965-16a7a5a00ba9": {"doc_hash": "7f349ddc5c1b9ae0119b81930004b54a9310204c5cd2d60c0aadfcdb545f1fc6", "ref_doc_id": "2411193e-8b54-4a82-8eb0-e71f4d24434a"}, "3c3d7fe1-c2bd-4643-a659-208eb74b81a2": {"doc_hash": "0bfc3b4b83ce3127378f8fa0a11f594d496d05c9f9b25bceb574f27b22c6d589", "ref_doc_id": "d6b99dd1-3159-4382-8842-1fd299afd250"}, "3a9512e9-0f28-4e23-a975-556cf9a84361": {"doc_hash": "a7bc864e7a560392636abb69635b70fc12ca536a44a7e38aaa3e4a7bf0e11687", "ref_doc_id": "b94cc6d4-4596-4603-a05c-7dedd351c29a"}, "38fe9b84-67fa-4b09-be0a-2e74ae6e064e": {"doc_hash": "3454f9449bb7696be573878b871631bfdd7461b7390883ea54a008042cb3c8c1", "ref_doc_id": "52e7462d-8f64-4f6b-b90c-4c7fc01f912a"}, "837251c2-9f5e-42cf-8290-921358e50926": {"doc_hash": "217bea57b411a105760fa2f9dc0d3f856a229a87eb9abbb2fa21eadb384dd927", "ref_doc_id": "d01f316f-abff-44da-97df-b402711b4d95"}, "b6fa0b8c-03e4-4004-8b62-3b9f2356d1c3": {"doc_hash": "79c1accbcf5adc6f0dbadef1bebc6fbe8deef8984de88fac78f316a2e4c044a7", "ref_doc_id": "47464796-5f47-488b-a791-ad1ae227007b"}, "21d595b2-b489-4d2f-8bad-f3690b9eb730": {"doc_hash": "7f373c98cca8991533eff2083a8b47c3675735503e3321e13683eeee9a54ab20", "ref_doc_id": "6672e7b6-04a4-44be-b010-3c258a283e13"}, "d62b53b1-9369-437f-9d34-f4d833ece296": {"doc_hash": "5ba5d744487b447125447d7578d6524740d857ea9f0b616c792682dc85df163a", "ref_doc_id": "8f3b340a-e3c1-4b36-932c-398a14bcf21e"}, "a7a81ced-06c3-4760-b20c-955557873218": {"doc_hash": "2bd8387b541b9abefc063520dbc8d1a2ad863cd88898632c5fe4a40517481c1b", "ref_doc_id": "6cb13c0d-02fc-4ac1-9e78-2841dcf78cb8"}, "1a157db6-92a4-4880-8b80-5d72be78ba0c": {"doc_hash": "5aa4de4ab0b102bb87b7b514d341f5135eef62154313099ac3039fba877835d6", "ref_doc_id": "cb47a9d0-dbe1-4bcc-9281-19e20523b0c6"}, "ee259d56-a2d4-405f-b6a9-af37d3654f5e": {"doc_hash": "5327a5dcce72fb0dc402cd553eff48b06fa2e10da80289646f3db6de9eb13890", "ref_doc_id": "e5963c06-bb6e-4d26-a3e9-d789f6588477"}, "80cb4992-6cc9-41e9-8d97-c9077d9c30a4": {"doc_hash": "904ae97e1d1ff09a162a660019842e00ef2fa30b45e1af69308e713d2ec36f94", "ref_doc_id": "09f34a80-7d37-4e71-b277-a75bbff0c9eb"}, "0f01891a-501d-42a7-bf6a-ee5128d56d52": {"doc_hash": "29b8aaf8fe0c761fbc5a4018de6abcaf962834d8f3087b870c24925f6bbaf6a0", "ref_doc_id": "8de0d0c9-31f3-41af-bd87-aa8a116c1d4f"}, "83f82e21-bd16-4450-b4e5-829c84cb152c": {"doc_hash": "95722406e1e3d09c2e0ae20b6cfa1e87b2770e8efa57305191343f22272dab04", "ref_doc_id": "76509b09-ef13-4503-88bd-71fbeae32f93"}, "516e9e28-4bb3-4aea-be3c-baf499432f61": {"doc_hash": "a1ba78cb0c13f563fc85d5fd864c55b0ebba7c1dd8f3650e0541667b59ed70bf", "ref_doc_id": "74559d62-5a91-4981-8fa0-1bb241e88b37"}, "669d78a9-d7ee-432b-995a-4cac7687c8e2": {"doc_hash": "ad2393f86f95d7b6855f7549673237fd3e7e47e58fbba514dde6cff4dbecb8d4", "ref_doc_id": "1fd4af23-2b2f-4d6c-a872-2bbb9b78f5e1"}, "1cfa9356-4996-48a0-9ffd-54b0102a84db": {"doc_hash": "ea78882d56dad182911b840289d94be0a8ed073d36e7e89318809f36db8d3c7c", "ref_doc_id": "df9ff403-845f-44d2-a70f-ff64d66ca50a"}, "9b9886d7-fed0-40d4-a196-07d8ee6d195a": {"doc_hash": "240a16d9cacdcc7cf778b4f09d203f9933a5ecca66b8133e5e95e603529f21dc", "ref_doc_id": "8a84b427-ea7b-4253-99f2-165886852715"}, "16a54d1e-13f8-45ac-a30d-6d5d62c35747": {"doc_hash": "2ba6bc0129f1922b00ae83c1e690b31c2c732733f3476b75cf8b36886f589b30", "ref_doc_id": "993ce89f-5709-41f7-bdec-f6719061d1e5"}, "f6fa4300-8b59-4e4b-aa99-904eca95d5c6": {"doc_hash": "ba60e0cf742c911e52e988e8c701a505667c20a938499e660b66b342efe13a91", "ref_doc_id": "f1d50ab3-3d56-4b2f-8c6f-f1804c1d3c7d"}, "3a7160dc-73a0-4904-a169-3ddf3852ef74": {"doc_hash": "fea78848e8221b19ad06a72ba6ea3cd8148f3b3c2eb25839b1a4eaab2a04d098", "ref_doc_id": "3fbead78-dab7-4896-9cc3-0812f896c55d"}, "cd9be09d-b23f-4e7d-a045-bba7f6fe858f": {"doc_hash": "192b80f513e54c94ca3f86666032367e398e95b127ecc011a56cd8bf934fa53d", "ref_doc_id": "8bcc8a9e-0470-4954-a24d-b08116d67327"}, "26dae3c2-81ed-4cd6-aae2-678cd0713b64": {"doc_hash": "21e2ff4301dc3d0807541e5c8d988a5f9bb10f827848dc20d2e19e1684ba2fc8", "ref_doc_id": "423594fe-812f-4102-b9b5-7da67c83fcb0"}, "7a2b8e85-e85b-44ae-9980-0a578c4ab152": {"doc_hash": "1c6f0bb271c261b843e25581519359357875dd0a40c58dc51a92092895e66d0c", "ref_doc_id": "6f2c55a0-2443-47c8-a574-46434f1e157a"}, "2f800e3a-816b-4034-92f8-fb842d327fde": {"doc_hash": "5b4f50a1861a4c86c792fd6243c5caa95cd239318c3eaa05afca7d42fbdb15a4", "ref_doc_id": "abd050a2-1f70-49d8-b798-242e7e018319"}, "fdd4e269-6582-43d4-93ed-0d28491208c2": {"doc_hash": "ec6d95c5c2d9e358fcfd7c10418d4313f1d0e8106d3c53f4be1620908c48472f", "ref_doc_id": "04e60fef-39e3-43cd-8e43-72c06e63f7c8"}, "33ed5c82-4559-49bc-b5ef-e0fa850df218": {"doc_hash": "3755a072fc7039a4a7da9f78b6c2654cf4db17d125a6580b7c908a10eb26b339", "ref_doc_id": "9463b6a0-fd67-422b-85ae-5c4be577bcf1"}, "8b8505c9-bd1f-4c7c-8616-59ab4f035aba": {"doc_hash": "efc1a6697574474cff2f40c031c04a2c44be0d0bec1f955e63a7e2c8af102fb9", "ref_doc_id": "31be7407-0282-499f-8814-8d077a59a7a4"}, "9a7ebab0-f452-4cb3-80fa-9a028a121825": {"doc_hash": "366f6f2fca46f7256de2b53f29bee9537ea1057f192a2bf2e54dafb734965ddd", "ref_doc_id": "d3f084df-fe5a-4c90-829f-492225e1bc58"}, "4c7a4434-abee-4c24-8087-9290b91a1379": {"doc_hash": "d0f60e41eaea2bc8f3ef525e3ca9aaed9dea1d09cf5c77c139c3bd22ecc3112a", "ref_doc_id": "260785ed-c96a-4312-949f-020237c0014d"}, "3b74b05a-2e7b-4ec0-845c-f11ec2c78af2": {"doc_hash": "4b8fddc216c90b1a9c62f6292d08d2c17fd5b98574cf4b44faff8adfdb7de629", "ref_doc_id": "8a36a683-7a84-439f-9451-160515d9093b"}, "880a7f6e-c256-454c-899b-df7fe11c7327": {"doc_hash": "8c4f9c5f3d19ed052fa02fc3220c7d1eef918e7587e36952395ba2063b0d2b6d", "ref_doc_id": "da39804b-82da-4229-bd25-bfa375423bc0"}, "fd3b29ef-46a4-4f60-bd2e-7bf7ddb87cf4": {"doc_hash": "41d0ba7b6a321711b41daa316e45c0afcf0069f14bf16a1665657dd91df51839", "ref_doc_id": "4bf2338c-f9d5-47b8-a6d2-02c390438ed3"}, "e813bb0e-64c6-4741-a8ce-301c8d588f39": {"doc_hash": "b2ec72ce31ddc02839b2652491c8a3d05e0c0772a80586d8dd91bd7006459f29", "ref_doc_id": "356b6d18-4142-443a-9183-4c00fc9fb697"}, "6ce76fd7-26a0-462a-9323-1acb1211414a": {"doc_hash": "1cb5c9e0bc9826630010fbdc46683251a3399ce467134f74313e4e491fde64e6", "ref_doc_id": "6d880b02-a5b2-494c-a9d8-33b118276ec8"}, "c96b337a-2683-4d86-a45c-ef0193b7668c": {"doc_hash": "df715243ca3b09bcd974b5995e8601a1f6cc4e014f59e66eeb9625f327d51660", "ref_doc_id": "322db41b-073d-40cb-9830-80b528266a71"}, "15c1d16e-c850-4405-a774-aba8b4afa951": {"doc_hash": "6e729717af5ec95303152d5a8ecdca6be967c19ecf7c4d9ee6a5df4b47dadbd1", "ref_doc_id": "9fbadeac-d473-4461-8324-9a7ea0dc0037"}, "df3bc383-d6c6-4a8c-8f92-952f07935f0b": {"doc_hash": "24ad7aa962b9d464124e7115ee5ef4054192caa1d6c7fc70e8eb50f7469fa855", "ref_doc_id": "6641541e-c1df-4c90-bb15-7c1c208a03cc"}, "e7b6e3d4-4610-4034-a92f-211b9fb125a9": {"doc_hash": "79b68058b599137de7760e33419c9bb4308144a3fc8fb91894167046a5ee6b83", "ref_doc_id": "e8415ffc-aa02-42f6-92f6-23e15d07b3b9"}, "76c756d8-a4d7-4381-b4c3-94258f689fa0": {"doc_hash": "d49245ed00e170b0d711d5b5bd49a97cda72d21c20078f414d9af8dbcae1e3c1", "ref_doc_id": "51d5ba87-6fdd-4272-a4d5-86bd9bb7b019"}, "f8b8026a-34c0-488f-9c08-8e96f1a470d9": {"doc_hash": "ae4fe9ccc4ee5f155701ffbd4c386bb5f29ba4f079ebff43fea1e5d2607db0ad", "ref_doc_id": "367ac20d-e2b8-4a6c-a0a0-5c2ffd771c2a"}, "0d37e51a-258b-4e91-b70a-1739c3b1251e": {"doc_hash": "8747f87fb285c9ed2dec7247099fb37a927851a27b482d454cea6d3a88e833a3", "ref_doc_id": "798051b1-3e4c-478d-9c2a-771d5ff4081b"}, "87b937f3-dc32-4015-893e-0db50d660313": {"doc_hash": "f54aff1fc33f129cb01e4c13616bee2a3e1d6e3cb75e1f2904aeaac724861ee1", "ref_doc_id": "f42569c5-8699-4ab4-9f31-c55f089d3983"}, "f6ad97d4-2f6a-473c-aaff-e98b937f25ea": {"doc_hash": "a84e533622de7f33d6bdde0e6a3f1a80fec20edcb4ca26bc17dc232c378609af", "ref_doc_id": "15073601-a8f6-4338-bf25-ad54a931427a"}, "559029d7-ade9-41fd-9353-37fa1fb83f79": {"doc_hash": "c3cde4e985100c7b26150272b2cb96182c2e39a748d804d3877b436545f38e26", "ref_doc_id": "602c06a6-c258-4dce-9e13-72a3be8caa64"}, "da6e4399-5437-4706-9152-b4eedae1942c": {"doc_hash": "ebae2dd89b913edc5f533b2a04c07f8680dfc11b81ac4d9f1c102da3d09fa1d6", "ref_doc_id": "a4d91326-7871-4b43-aae3-cd856fd4799a"}, "116022c2-ff71-452e-9088-1beacbd446c0": {"doc_hash": "6d1889b791661c4ed30e87b7c7daef4474b8df081fb6bca8597c3c6babf90695", "ref_doc_id": "424007d3-f082-488f-a01d-cba128afa9d7"}, "36b7b4c5-4bf1-4151-a34f-537aef2da6fa": {"doc_hash": "0cad6527829fe1a6ad07b5bf9388c09036ec00616785cabf4e21174dfd58ff79", "ref_doc_id": "544931fd-6ecc-4964-b8d9-e91d32b1fe00"}, "cd3a52ae-1b26-4406-9813-2b626ecd2371": {"doc_hash": "47326a5d051b2b4b90dcf7ede0d9e7433c5444bf2364cebfc60eadc0a895f02b", "ref_doc_id": "ab7d6c26-36a0-4738-9c86-411a25fc02a8"}, "385cdb67-5384-48af-9e0c-f0fe6fddef71": {"doc_hash": "6ca89a1458af57b5ad8722332674bab26fbf91c1ad7ee236bb10ef8a9ec919ae", "ref_doc_id": "87f20e31-4b51-4c2a-9495-9d068b50e675"}, "e27d4904-51ce-4759-92d4-3e4446c0dd4e": {"doc_hash": "a8430a47eb64512b3f8b9b666ada686ee89fecf9f19202c389fe2883139fd15c", "ref_doc_id": "040fcfb0-ad5e-4715-ab42-eb3faf0fbe0b"}, "bf22958e-f650-46dd-a2ca-134bb464e646": {"doc_hash": "ed028a3d07ed7b3fc9787e3c23d067ce45e910223cbdcda62e0756947b9c50d2", "ref_doc_id": "62168885-39f9-4995-8b2c-c13693db1342"}, "9dfc075f-b621-446c-9b83-3e77fe82ed75": {"doc_hash": "aa4cff74e6dca17cfca43f43f7b3ff15869f69d88fc0c1f11a6e515ba38c0979", "ref_doc_id": "4fab5d29-9607-4028-b735-f4e5dd63d2ab"}, "63a6af25-f404-47f7-846e-1a7dfd7c5d3e": {"doc_hash": "2b7ec8bafc1eb4f2e311579f4ab317efbe12c430bd4df4e313a902e3217d8e8a", "ref_doc_id": "65088b92-c30e-4ce0-afc7-32fce0fbcb70"}, "88ca2f41-b85b-4c93-a841-3187cb28433f": {"doc_hash": "430625ae39ceb54a61b48b29e1ffb21c75b2489870f27a9e5e5ddca3eedb9045", "ref_doc_id": "b033f8c6-bb0e-45e3-9d41-eee8fb2b5259"}, "00fe20d9-0449-4686-b930-a938f38ce820": {"doc_hash": "b7c2a72a8b3cb88fa9e562b3561ebd70fa1ec0d485249794ba7cd649cb237989", "ref_doc_id": "e6fe6c7f-799a-402c-8caa-3cb0448b81fb"}, "efafa575-ed6a-4444-8ffd-d6c1e4571bd9": {"doc_hash": "f1163568df4061bad11ecb28c5ab5d18302372f81e2c531f4ff5f88f77e35822", "ref_doc_id": "f137234d-81d7-4247-aa17-ce9c57bd9f1d"}, "59255104-b91b-4f56-92c4-0f0d7e830a5b": {"doc_hash": "2425c5531a6aaa228e5c7c35b52c3634fff63f16807b7f8245057ead39a795aa", "ref_doc_id": "28ae479f-38ae-46c9-b10c-d03c0c38bde1"}, "20491882-73ff-403b-99df-20b68218cea2": {"doc_hash": "2cd542b8316aa128dbbb5c4636215caff57f5e87b6e7b44b418a34824bcfe70d", "ref_doc_id": "bc85e102-e272-4df2-a5cc-a736c947d1f4"}, "80e6bcc5-8525-4bf0-a306-868f3c8028a8": {"doc_hash": "965b5efb3aa5553a6b335d15d5acb7fb96d92154bc8eab17895ac2252aae905e", "ref_doc_id": "62112b81-11d7-4bc1-8520-a05247504945"}, "1e5f9ac1-179a-4370-a73e-d2d288753463": {"doc_hash": "a1accf06c0ee7d630b951c1862424640f9c9418a8b771407f118463f0e6ceb83", "ref_doc_id": "034648e2-18e6-414c-9877-efd6e07aef31"}, "c6521457-4956-4e1e-89d5-0e5da97c660b": {"doc_hash": "4134e6faf54669a2713cfc13a4f4e82883868244656d518c74ca31295c51b167", "ref_doc_id": "171370bd-6dd7-4868-ba00-f25649bd9da6"}, "f89a3e00-6a70-4468-bcb0-8eac7e83e40e": {"doc_hash": "8762edf3e14eeb42a86b72744f9d4f23444e768e526412011d94cb6d17080e21", "ref_doc_id": "142ba94c-4445-42f3-ad40-db69f599f395"}, "e4589953-03e2-4431-a31a-1b9f6fa8e2c9": {"doc_hash": "17300557afd72d9880ef481b7b1535cdee43f201df16d27b7ead8fc4e2a81826", "ref_doc_id": "8653ef90-de35-421f-8d54-1fc44b3ddac4"}, "ef038e8b-9f36-43d7-9510-fd34ae88d7aa": {"doc_hash": "8607823bed327dc2953496b053f8de993a9fd312ae0126946b59dd0194c7d524", "ref_doc_id": "bf9d4d52-1f0f-42ab-bac3-4fd855b011fa"}, "c8c8fdaf-8927-433d-87fd-414c6f8019a6": {"doc_hash": "609a1e6682681ff2386ac2f87c3945bba22f4cb0c8a4c4c1cb12b1b359a7d1fc", "ref_doc_id": "1352fe77-0c32-46df-ac07-266b9b517dab"}, "7e2295a2-9b1c-4302-8897-ff02e7a7a457": {"doc_hash": "7189003dec6c9c7cdcf887fb66a9e01794d8684d716fe26582f49bbe8b833716", "ref_doc_id": "b9c11abf-1f0b-42b7-8216-57440d2420ef"}, "b550db85-dce1-4885-9bd1-a60c0deb95f6": {"doc_hash": "21daf6bdb27140b7f2b93ecb38fa7ad40aa5c5345a380f55691d5b48167a66f5", "ref_doc_id": "def74948-f73f-4887-b549-e28ab0173c91"}, "1d3af14a-77e6-44c3-9dc0-37b574c35ce4": {"doc_hash": "c422e26ed22ef203054d024c6d0ca55084c4e5755c72fdc360952ab54a42a867", "ref_doc_id": "96a45c2b-7f0c-467f-8d4c-bee4cbfd6b3b"}, "7349a338-2a66-4725-bd55-467896bddbf7": {"doc_hash": "29609ec59defdcbecad9890b46f5e925a1d35de8587fd7aca797a2cbf8a64cdb", "ref_doc_id": "c683ed5e-3789-480f-a522-841d046d9eab"}, "dcf52ac1-ef63-4e51-a7c5-bfea8b868292": {"doc_hash": "813a9066cf2bf1e71735e39ba2609b682f985c613e3a50d1854ed78949f26dc2", "ref_doc_id": "f123d174-cafb-46ad-bec9-794b2fe2376b"}, "d642b8ce-5dd9-4b52-89e7-05d980b0b135": {"doc_hash": "8f5846b63ec299e48d0395a108feeefd6b6173755e30c6ed5fd2999142955bcd", "ref_doc_id": "b184721b-e1b7-463d-b2fa-5d9dcfe5c189"}, "91337b67-7364-4658-9034-03765c4dfbbf": {"doc_hash": "1444a9bc58930564cf12c4683c366902bb4a1098bfd1aa24e57bc79094167afd", "ref_doc_id": "8c805cab-bf36-4680-985c-0769ff20541b"}, "2ab2298f-11e2-47bf-8386-0cb0a0f17805": {"doc_hash": "237036bcc54f5a01ca77cfaad0ba18c54165f8ff937f8629a88cc6a841c46cd1", "ref_doc_id": "e0e6fdf8-58fb-4c8e-8538-ab9701d8fadb"}, "5d4695df-eecf-4641-ba2b-d369ad1740e6": {"doc_hash": "d508807fd4bbfbc703994599c6f4b163050fbb118cad6c55721e0d84016ab96e", "ref_doc_id": "2ebbc82e-c9dd-4df5-9616-ae652c17b4a7"}, "afec621e-945d-4a56-87f6-b6cac31a3e8c": {"doc_hash": "d0eff12edb2153b94ddfcb99034b4a6ddfa7472e6a9a6490f4aef0101a6fe969", "ref_doc_id": "50864516-f35a-44cf-b202-19bc1c0d5802"}, "38b51013-96a4-4413-b0c0-9dabe0a704d6": {"doc_hash": "756d2de31ffe34a5b5bfce07b2272f1e0ceeeb969e45009fb2c9aa88df96073c", "ref_doc_id": "c5353d97-5190-4ae1-96d0-4d35e0886b4b"}, "e08288fe-eebd-46a2-bb01-6a2dfc95357f": {"doc_hash": "0b096615d265386c2854fa535f66cd941a6f0cf22f9b114c84d2920f670c2dbe", "ref_doc_id": "17cba339-d6e5-4b63-b2e3-cd33b2df0260"}, "88cbd1ae-3929-4565-b6d7-88b7032ce992": {"doc_hash": "c2afbb280853521a4b4e22c6debd78f45b09ae9655842a46133de51c762e9621", "ref_doc_id": "07e9943d-32ea-4349-9e6d-ec7e8d0d89c6"}, "c160fb90-a26d-45e7-be39-83fd7e6cb449": {"doc_hash": "610b059c07a2e03d82d1e4fb44ec27e34f0900d481dace640de7b2583c23b583", "ref_doc_id": "14727df4-f28e-4c15-92c1-acaadb9110e6"}, "e6719ca5-98ce-4c93-b8ea-90076c6e7bbf": {"doc_hash": "d9c7133ca47b079f0c0aabf9c8e4d845095ee3487f2cfff4ad4e9f54ce648102", "ref_doc_id": "4f4ec3dd-9183-46e4-a1c4-f26b64247367"}, "cb36de63-51c9-4ec4-9620-e6953895696e": {"doc_hash": "b8bcacfc8bcff9b978820b7ec61eadd780fd2f077b2c0ff8928a5b7dbd0e1bfe", "ref_doc_id": "beaf68d8-ca0b-42d3-b748-1866a562734e"}, "93be358c-5884-4ae5-a164-814ca7872dc0": {"doc_hash": "fa5381bbd3e54b8e8db46242ca785697a3ec66c585a95985e68df469ef170f00", "ref_doc_id": "a842918f-13c6-4966-b0d6-156431cfa40f"}, "b9146ce6-5ba2-4bc8-8f6e-83988afe5d1d": {"doc_hash": "b4817c37dfd972093f35a9e16fdeee7399ae77bfb797871bf2418db046fd6741", "ref_doc_id": "c29f9817-a360-4689-89de-941ec28a47f3"}, "7d82e61e-08f1-4ce4-9462-9cf591365423": {"doc_hash": "99ceb0f0cd92cbd6711b19546f74d72a823d8c2d3a059f4a250ab6b90175535c", "ref_doc_id": "0f674963-2693-442f-874c-7cda011b53cb"}, "22771e6e-f663-4a6a-83f7-b8849c3c611d": {"doc_hash": "6986af58ce45bb39919be954fbfdea99685649fa30178f8f263ba785853c2084", "ref_doc_id": "f259735a-edc5-49ef-a265-1f8c76f8fb43"}, "af655da2-5af9-4e0e-a53f-2a27d4a11968": {"doc_hash": "2b5fe1939188005ec094322d85f4b835b86de7d353c29f7917114cca9182b5c3", "ref_doc_id": "2df2b9d2-5c3c-4b5e-ad9f-9a31194042e9"}, "d4ae8355-875f-4e2a-8a93-e4d432aab145": {"doc_hash": "1cb30232efb89c78d89ac40bf8f6fdeb68028703889e26c1dfef4e8a00410f84", "ref_doc_id": "0229cb1d-b699-443c-aaac-1302c6fc8276"}, "be112380-bf47-4c77-aa10-80a9e0fd0c07": {"doc_hash": "6d77bb813679317e547e56d52552b3ad8c56901ba9bf0100f1817667fa980ba0", "ref_doc_id": "c1a74242-397e-4ed2-a42c-687b590ae2b4"}, "15d864ad-25a6-4cb0-ab30-9d284bba5391": {"doc_hash": "8770bce27db8f58916d9af29346056f0a83cb77e9122b8dfc80dab91931b5ce6", "ref_doc_id": "94b4af93-112e-4e3e-bdb0-2f1a2ba32375"}, "ffe2344b-3df8-4cbc-b406-bfc4b6414ce0": {"doc_hash": "00e1a1a3f59159a14bd2b9ae53974fa74805aac58449cc37106bcd19df8e05b4", "ref_doc_id": "70dde8d8-35e6-43fd-a9bb-c96085690190"}, "7703c310-db68-4e1a-a0ae-8ffb9f3abe42": {"doc_hash": "5517c5166dc52983af9e1cac101a676ab3c73ad344faa93a1cadcffd56cd68da", "ref_doc_id": "151bbd77-bc1d-4177-b7c7-d0192ed5620c"}, "60d872dc-93c4-4664-a8e6-364cd14bbda6": {"doc_hash": "34788238f292bfa7fca00f2b3dc0c38fd7f4d4a7e40a068c33acf805fa6b5248", "ref_doc_id": "ca4b1d6e-b618-4e05-a497-2ab3110e3974"}, "256eeaf0-68ef-4c75-8b1b-312c013c6358": {"doc_hash": "a1370686f50dc4ee68f61178c817466a6bc234c40907aa820774f0d7c161329c", "ref_doc_id": "79c7d9d7-c031-4a16-8631-1f2b1524bd0c"}, "af72f631-d953-4ba3-8667-38156fd7480b": {"doc_hash": "0fcfcec2a944d25290d4ccd3d99a97332e6a5dab8c7903e36d20732254186499", "ref_doc_id": "d19f6f43-c357-4444-8a7d-7a3298325cae"}, "c8505c3c-a396-43d0-9123-2231c845e6e7": {"doc_hash": "f41a61cc707c2c49e8e103d66eb2a7a0907c3e07c980b8f2ac22c0b429e90066", "ref_doc_id": "46233eb3-fb13-472f-8c53-e39018444eb1"}, "3231e9b8-d4d2-49a6-b47d-81336e1e4ba9": {"doc_hash": "1124a44686293515f65166da9dea8514d5ed40ec3df63507f840429eacdf58ba", "ref_doc_id": "fd0af4fb-a493-4093-a8b4-03f3822dec41"}, "f515980c-7f60-4ac7-b87b-c0108462cf83": {"doc_hash": "e83048649596c017dc8abf6fc51e47b2c5a92aaf6ed9ff194719340050d6cf90", "ref_doc_id": "0dcba7b8-28c9-462c-bcef-69c7bce441ea"}, "d14550b9-cd2e-471b-b6ba-532d2755a336": {"doc_hash": "f4d4615a6a951cdb5c6862786a571c5b31535076dd9c1e5e568263714b7bd493", "ref_doc_id": "c2dad965-2247-40fa-a9d6-e8ce2416a1fc"}, "04c6ef69-ce28-4f71-ba64-b3ba1141a8f1": {"doc_hash": "d04ef66681b511c7a86bf74a3f685b68567a3b6c039b48a9ff3fbca86f1d6799", "ref_doc_id": "1e86bde2-8aa8-4d62-a8d0-e80ac9bf5335"}, "8b59cfd7-b908-4d46-be3a-250b896a4ddd": {"doc_hash": "2fedfbc2533cebe785a7734e36d072a5bb2fdf3b27109e09bd8acb8717b223e9", "ref_doc_id": "2d9ced9e-f4f0-4703-8df5-54e0c45d7e01"}, "7d5765ce-dd4d-40cb-a1c7-fef85a2684e6": {"doc_hash": "a53db131ccfcb536bf93870cca9f30516df2f909f5115139fbce611890d94836", "ref_doc_id": "a52519a5-2962-4e20-9c6f-45381daaf52c"}, "b81bc7bc-be17-4c11-a8e5-17eab3f781be": {"doc_hash": "c23e81a18af6296fa81edebfe3a950779fef9eb51b9c1dd48faad837a04b3058", "ref_doc_id": "5a7b93a5-16fe-42de-b188-d99739846b5f"}, "0119396a-7176-4f12-b168-1b8ba5c2cf82": {"doc_hash": "41756aa5af7a29ef4577d7a777cf5ebdc225454809f3232833fce7a84258734c", "ref_doc_id": "1cdde311-2255-47ae-83a4-871734964504"}, "7adf1aed-1a01-48bb-9a25-ddf96e61f8a1": {"doc_hash": "f59f999db90159541f45f00d70458ec74cb13c1f70c1891e6d359b9e56e756ba", "ref_doc_id": "473eea42-e62f-4f96-b358-92575c6d3d0e"}, "bc7e0ba5-7f9c-4386-95d1-119acd19ff62": {"doc_hash": "f8e53bf89c7bdeb7eb4de7a3a2245d2cdddb639a80a1109c742b508526c851f8", "ref_doc_id": "602698dd-9193-4556-848e-3080ed29ecbc"}, "3f179ef8-0e00-4100-b7ae-12d0d2672a76": {"doc_hash": "5f8a0fe2c80f9daad1be36d32926ef4c33a52d270ee2f95cbaa15fe8594ebea3", "ref_doc_id": "65d45d63-e68c-45dd-9e6d-967672befec8"}, "4e8dbae9-a556-4a39-9e2f-8acba1d4355c": {"doc_hash": "5ff6c4c8224709f9d6d299f4012541ac972ffa6b53e1f7e6d2230df71809783a", "ref_doc_id": "e96ab8db-19b0-46a4-a91c-993df86c0654"}, "7a6ce127-b4b5-4b22-8977-d002d1f2ecee": {"doc_hash": "2f1fc21b173ee736d63f8cfba02b0c802bc640826b38cac92af6c9050a57b763", "ref_doc_id": "2cc9f710-684f-4b9b-a8b7-ebf64ee81146"}, "0cf6c349-1573-4774-807c-540e73c5a13a": {"doc_hash": "9fc90213929b6b3775f78e4228f8f8f80ad8550f51e0585e77996ec4b77f0b69", "ref_doc_id": "7c5dc41b-b417-472a-a1c8-87ebb027418d"}, "c9b24da0-b7ec-4328-bbb6-dd2a98db5568": {"doc_hash": "b742855a4000026ac9c5366899380878f12445f007aa3a821661b4c678bb6dcb", "ref_doc_id": "a0500c90-6438-44a4-89cc-7423923d4484"}, "ea397f68-9691-481b-8357-aca9440d16aa": {"doc_hash": "f4bb67aaec9d399d3a56a670581caf8e8efc89c8b63103cb3eca0d6c201ec7ef", "ref_doc_id": "6879da9e-e19a-4d5d-a8e1-0bb343839dcf"}, "f218a346-7787-45ea-ba06-77c4175af733": {"doc_hash": "f3fa44560b0555976936e4bd227435803cb564cf3972d9bb70cacd76b6769c43", "ref_doc_id": "11d63da9-e046-455c-9333-4bd6ca960275"}, "47fe888c-ee11-462a-8cde-825e5bcc18af": {"doc_hash": "b086b81dee221943b9798e75e7703bfa604c9a1770af9833cb3ee2ba07ef493c", "ref_doc_id": "38a14522-d8a8-4c6d-88d2-e194dbacb72a"}, "09bb85db-3e70-4b99-98c9-f9f6301f2a62": {"doc_hash": "03fb7c5f14dc8bee4432f4be8447e5d34cdc46345087725f194970826845dd4d", "ref_doc_id": "6e284b11-216f-4867-bd84-1c88c8b79c38"}, "49415fa3-53cd-4c0b-ab4e-ac73e886bea7": {"doc_hash": "0b1ba92ae269cf2be53d8541144ea40847eeaf3355675aec0046fea39f72f63d", "ref_doc_id": "dc224d87-2e4c-4b3b-ba34-e5e5a2a6c007"}, "769dc8bc-e907-4596-90b4-e8c3fe87960e": {"doc_hash": "802693dd5aec7a210382c85f39ef8e570aaaaddb917907823a00cca69dd3873f", "ref_doc_id": "8e8f751c-5477-4bde-8eb6-486db5d2e989"}, "6edb6a1a-59d2-41ed-8777-809fda742caa": {"doc_hash": "3213b5865c7b1c16fda5ec316626ae594354753633f1801bfe22b30883d6de2e", "ref_doc_id": "e3594a4a-47e5-49c4-923d-0b0ceb8c3b3f"}, "a5ceb440-595c-4c46-ad09-f95d7e366841": {"doc_hash": "a151d8d09df6b447d4089028ef3714e5388d79e40093b95ad400e05d9182c5c5", "ref_doc_id": "57d29748-d9ca-43a9-8651-811c879d2d47"}, "4726fe41-5aac-4241-8f23-81008a0182d1": {"doc_hash": "05db8d5a876c1b081b7e514b66107c2dfd654d66df2a198635e047cb12997b92", "ref_doc_id": "ebe7fb2c-58ed-47a7-ad9c-5afd88d65161"}, "067f7aac-a3da-4b7b-991c-eaf895567526": {"doc_hash": "1593c296f696944eff1edb98d0b080c7640d773ca878cab55cf003a990536f3e", "ref_doc_id": "fcb35369-3cfa-4e14-ac98-597d3d0a8866"}, "601990c3-516b-4f9c-bbdb-49c011a6c2c3": {"doc_hash": "5156f1c77053bf1ebbd5119f27a15ec3345fa878dc34912999c29df709425281", "ref_doc_id": "618f536c-0c96-4460-986f-4be792022690"}, "45402fb9-99df-47d4-9898-ae02c2b319df": {"doc_hash": "e3d6e885c31252ce4f2ee68188a65650839cd0423fa41307cae319a4e41db3ed", "ref_doc_id": "458ad8a4-7ed5-4c84-b282-93e9a180bf76"}, "1a427661-850b-4e7b-a605-f2c396ed11bd": {"doc_hash": "bec77a43abb194f18292f74d1fa30df569415bbc496254d2dc5963bc0156861a", "ref_doc_id": "35b4246f-5a16-498a-9690-68d3a20df5f9"}, "7c84d98b-fa40-4be7-bc5f-7f8ef009c8dd": {"doc_hash": "2e66510633f0699704fc80105df442bfd42bbeb383292c8ddadc75ddab60314b", "ref_doc_id": "2faf9263-e04f-4ef2-9d18-6bd4a61e92ac"}, "0f3a88e9-dec4-4f03-8e7e-aee955ab97f7": {"doc_hash": "3cf03313fcfb90742020b771e1fd5717c93ffb90a0c230f3fb1d298900a8869d", "ref_doc_id": "37dffa22-1c67-48ad-b19d-d674078dcad0"}, "f5cdb171-8334-41f7-998c-2c5bd1cef0c8": {"doc_hash": "916e21fd8edd3fa3a223b0b528d88e5a89a31b5fd9982350ddf908da9c615e62", "ref_doc_id": "ccd3dd78-d223-4ea1-96f9-926f62db7889"}, "19e9a796-3ff9-4abc-8675-9043277d2c0b": {"doc_hash": "bc5e854b8c830526ed53b7440bd065005a80bf1ec7afdbf11d0dc716283991b3", "ref_doc_id": "bf6a7a58-7839-4931-8626-ad2195164f3e"}, "f01ff53d-90c1-4ce7-b4b4-80ec3e42cada": {"doc_hash": "6d8a97a8b77a716ab7316858aa2fc600e68ff33f24bafb612a2e493c2de17792", "ref_doc_id": "5e4e8090-9d15-46d2-a23c-10973a455625"}, "b9ead12c-8c94-42f3-a716-3b231b553cf0": {"doc_hash": "a5c1cc3853da2df00c9b7a6b69474991ae8e59bd0db43e061b408ea85dd4a629", "ref_doc_id": "b856360e-ac61-464b-9f8f-cf3bc03434b5"}, "bda318a2-9fd6-483a-abe7-c6ed3aca1679": {"doc_hash": "3873942c3d0d51034cef08c5e350d4154a67334ce63016b57c0d9012f20c0c71", "ref_doc_id": "dd2aed69-43a9-4a0c-97f2-13374cd3f28e"}, "1baa645d-bfdc-4f35-8504-11fe627af013": {"doc_hash": "a2c030a2406ad93a2fde6117a9c04041d1f830fc6fc60fdd5b2daab5a361cea2", "ref_doc_id": "0140f80d-63a7-43d6-b44c-970ec2d06fdf"}, "14637348-5c5e-4c14-90c1-4c07baf8e19d": {"doc_hash": "9f980a08066c0a44da0237ffb8268eef4b4cbb5f042b70ac3792eadfa758241e", "ref_doc_id": "66b095f7-d23f-45ed-ad6d-4615d2216e5c"}, "7f1b74ff-2803-4a98-b718-f7b7d22e2400": {"doc_hash": "0ef05c8bde29273c33bbfda877f6240b986e944ac0eddee26a7f7b5285c53111", "ref_doc_id": "8f204a51-d397-4e59-9b54-82f3a7a9e990"}, "4f066662-d03a-43e2-8db7-4a03b17a0e2f": {"doc_hash": "4c1c091dec130f0910ea8098ca6412337010cb6a768c8bdac1246d504fd13e55", "ref_doc_id": "1bb93057-9767-4f5d-ab23-94a0b5cd6b48"}, "b3800f2c-1c09-4a9d-8d1f-6d183a09005f": {"doc_hash": "97e9bfe0a77e955168537430f7d9f849debccf2dedf7bcb19dd4e6fcf5090471", "ref_doc_id": "eba43996-fb12-46ae-b942-78fcf68e7d01"}, "4836b503-a861-4910-aec3-ec8e73ae79fb": {"doc_hash": "e56d62c08001a14f82e8ce3a1c0a1f7ceefa67233c60585ad109cecca17b5be1", "ref_doc_id": "d1dc290d-08ba-4a0d-8ca6-35a766d8787c"}, "7c6ff988-c9b7-4084-90fb-0d1c7bda2ce6": {"doc_hash": "bcfca66d99593726952442b1fc3ce10a05d69024d745548292d0624d02a462ea", "ref_doc_id": "a4243b4a-7c00-4cc5-ae5e-0f08778810c0"}, "425e71c5-3f2c-41c8-8c7b-f9419d3d6cd4": {"doc_hash": "64427870c92455d986571f3b33b2dd3a498b15e83e1900334518fb5de8fd7886", "ref_doc_id": "df2e52eb-b462-414c-9895-6204f6cba088"}, "b05e07aa-e067-4d78-9587-d7e71610d694": {"doc_hash": "0eb35a9119541652db4c6e5a8372d3311a87b08bf2848b25637192c86c3d3efb", "ref_doc_id": "3cb51d2c-4f7e-4636-9656-ed03b0d63ed9"}, "13f5300a-91a6-49d4-9a23-ce9725a5afe5": {"doc_hash": "824a33be7d2c50b589d5792e06cd68202f36fca8aa4f7abe9f073a3cd3b93ac9", "ref_doc_id": "64b776b0-1e4e-495f-85ab-c1063a6734ea"}, "e0898b5e-c2bd-4627-9d26-eb8ca29129a0": {"doc_hash": "0f3e25f6b826deeec2c9f0db1b531a6ce5636ece1235723b8b67f967d144e794", "ref_doc_id": "219c6433-665b-4662-aa77-1eb3152e8f93"}, "9b24ea74-3bf8-49bd-b128-2c821788fcba": {"doc_hash": "cda548cdc22a692e647fdda3fb9200e2c10205c37dccfe96dd209d06009ac1b8", "ref_doc_id": "c1e95537-7170-4c8e-b718-e34e57dbe676"}, "16f25f48-37d8-4143-b522-a408811c87af": {"doc_hash": "441ad73693f8f57eca9e485f98fb20912c1073e96c77b3cf7badae03c247074e", "ref_doc_id": "883be2f5-67b4-4088-86fc-ce579cb52516"}, "23f9c652-8efe-4de5-8cf3-d2782ed3ab51": {"doc_hash": "aeca47078ddf8baf11c5432d2886b88529109957a05c50f0e2488ca046318dcb", "ref_doc_id": "3afb111f-56de-4db6-8894-b65ff3d42978"}, "7ebde5c9-1395-4829-867c-9770b53cfe1f": {"doc_hash": "cd19bb45480b4e23fbab49550a7a0e043a55f765d59f9ba6d2daef708a1ff09c", "ref_doc_id": "e9183d6c-9c30-40c0-ba82-5d0b247b8e8b"}, "47b0d96a-8798-4cb0-b29b-73b65d818df7": {"doc_hash": "aaa83601004df5e80b671243b19e65fb3d63faf75ee07a64f3f7288904e7451d", "ref_doc_id": "5fdf7a05-9a33-4054-899c-c5d0bda98d72"}, "20c1ecff-53f8-48a2-beee-bcb5b7e76d5b": {"doc_hash": "282750488b5d098ce6d52d3504de9913f3c2af7e809a4ca2a21785daad5e0d17", "ref_doc_id": "2124a341-7c9d-4c64-a59e-f28fc1c56d03"}, "075f8f0b-48a2-4b89-b2e5-f458362e900b": {"doc_hash": "21f52427b0d7667351b051860eec516832c4bf9a427f198f126e01eed987c4cd", "ref_doc_id": "919945d3-970f-4e84-b542-e0df00cd9868"}, "ce762c9e-f0d4-4831-a1f9-fd8d0eadfa4d": {"doc_hash": "5ee47749d3b5c5cb0f9f43070ac8237ae6190332cfc780538f484a62cb3b6d88", "ref_doc_id": "0a405421-f144-4507-a511-34e76db4c89b"}, "f13887d0-7938-41e3-a4fb-0a09ba9c7f34": {"doc_hash": "01103c976abfb15947d4b393dcf5d0c499e6a548cd5872b7139041549842a64d", "ref_doc_id": "9d4097d3-f12f-4396-b909-464e6505c9bb"}, "09a604fe-ee7f-4750-8bcd-a37502df37c6": {"doc_hash": "a41fa014375fb2043e4160f190ab0b1c9dfd6937d72febbd836bfa76e4c6f210", "ref_doc_id": "2e8a203c-4ae4-4c77-87ef-677b01cc7b83"}, "17e7bcb1-1685-4287-88ca-b052dad43093": {"doc_hash": "e53341c80ad09b099d8d04742adde294359e79b808ca9fe86e74a6eaa408caa4", "ref_doc_id": "6e7ca8ee-ce97-4731-84a1-328378cd8cc8"}, "beeee005-d33b-416c-8905-27cb245706b8": {"doc_hash": "2fa5bcb5008cadcccb84a8a75261906101bcea25e69953be630e84743fadc61a", "ref_doc_id": "b1428690-9b86-4061-b135-915ef4138124"}, "91900571-92c2-4c3e-acd3-9984272cc438": {"doc_hash": "af3baee568c76f93be28bea4ce6915e1bd2d170f734c8244243908cae1f56e79", "ref_doc_id": "7c473d8b-e2d1-4798-85e5-79587bcb3dad"}, "11830fe3-d51d-41b9-a969-675b75c0a133": {"doc_hash": "207eaa2f547cbd041fb813c47bc274f396de982b24badd08dd39cc3c776a394f", "ref_doc_id": "58c35737-c0ce-4da0-816c-93c47c0f9486"}, "cfcc0967-38dd-4054-8c01-3bcfa59312e9": {"doc_hash": "d78ef85627719976cf6177b50668c759dabb6b495a5f53cd7956c993359d664e", "ref_doc_id": "89764d9d-e9e4-4b09-b81b-5d4d0493804d"}, "aae0e900-a734-4197-b267-dfd7d53015e9": {"doc_hash": "11eb9e578f30152ff6761f6d09559470674c16402738c5ade469463b129e31f2", "ref_doc_id": "da6b90e2-0281-418f-906f-b4dc8573a31b"}, "360322ec-314d-4e74-8a0e-8ad47a4f3e10": {"doc_hash": "d7e447fe41ab0ee3deaa910819c14461fa66bdabacab2115d29773a0951cb57c", "ref_doc_id": "15e4d5ec-0499-4e11-bd05-b9934c30168a"}, "9dc79571-6997-49bf-a4ed-cdecb0edb0bf": {"doc_hash": "18d710a59fc975579485eca805fb8f96240b84f1cac4b106e50b3afb0ed6998b", "ref_doc_id": "7b10a137-58b8-4c9a-8784-91af765bd51b"}, "4c28a7d6-59e0-4c02-98fd-ecaef997b8be": {"doc_hash": "31180b5bca2330f94cbf596c131e38145ec85050b39fee026aa72537ee385dcb", "ref_doc_id": "bfb408c6-3bae-4f26-ade6-baaa1795264f"}, "798e6196-fd14-47d3-8341-41f24c9ddb32": {"doc_hash": "5052f50f30c1b48a38c35dee2a5e20d8b42308a7d4b31db174aaa755bafd8447", "ref_doc_id": "176610cf-5a5b-4529-8a12-124613951273"}, "cd8f0983-9f72-4aca-a98b-df8bee05d46f": {"doc_hash": "910a6504541c733868633d2de80e81cc2d907f9558f9c96373e598864a842760", "ref_doc_id": "89fd767d-f2da-400a-b488-f78766dca3dc"}, "bd4ddd4b-66e2-4329-abd8-d995f7e739f3": {"doc_hash": "e0853211601201fffc09d870afff3b4b23c2d2359f5ebd2813d7310139f2de3b", "ref_doc_id": "86b264af-8754-4316-89f2-eec596b1153d"}, "49f4cdbc-715b-4d5a-a8f5-c438baa97667": {"doc_hash": "010b09a455595911c1276477a23f8a94b43b5bbe180af281835f4e57342168b5", "ref_doc_id": "ffc5c094-7dac-4f54-8e71-35405d094f4d"}, "1bf18c8d-9fcd-4839-a8f2-78242eb5f9eb": {"doc_hash": "1bd6dd49a4e9757d7a094cb921f5ec1f434481a1037c8c87b7c44d1e131185c1", "ref_doc_id": "fa0d9fa6-5ecb-4add-af26-251be9f44d66"}, "a4717e03-22cc-431a-8f23-7a15b2cf396f": {"doc_hash": "637d7ecc649b2890c485bc9519891e64991df518055887fe49f39f403df5b4c4", "ref_doc_id": "949a04ea-9458-44a1-90e7-21518fbca2cd"}, "da0a201b-4166-4ca8-beda-ca131be887b4": {"doc_hash": "7be2a0c75d4cf72ae9ab7e6a6bcf7cc88c12a6bc5f18e9d12bfc9be27c16b1ca", "ref_doc_id": "b471b744-fb4e-4b9d-9d62-5428f8635845"}, "1557958c-e6f0-47e0-81ac-305daf9f4a4a": {"doc_hash": "e052b2409a1defd3dfd1dff592cfeb04975099cfb91ff4f5b1be70b6828e3eeb", "ref_doc_id": "8fa54cd0-9561-4302-ba9a-963055ec7d7b"}, "c1d3f163-9fb8-4767-802a-0d6ab126db6e": {"doc_hash": "9af3656a52ed9d27385980dbd8f19550bd9ae344e3c41258f4e1f5c52dc782ce", "ref_doc_id": "4b1fc1e7-6b1e-43b7-af14-0092390410ab"}, "7e23377a-e6ca-4a0c-a70a-f17bec571e02": {"doc_hash": "72719f3f8119f8bf6531048c509c2d72ec23b87371810a1c9731354cb40ea16f", "ref_doc_id": "f2e14b05-0bc7-4fe0-a829-5ad20475e440"}, "efe452b9-3dfa-4f97-b942-0fe6fab56ef0": {"doc_hash": "8f9b06b9d265fd8e31f5d08a755b3f3cbecd73ea109dcbd05dff4d831df24abc", "ref_doc_id": "405659ec-d03a-4c46-8404-dd86c5fef24e"}, "6592969e-1fe6-40e2-958e-f263ca20109f": {"doc_hash": "50249210c2fce75b1a4f6d7e27318e0bdfc28aa0f3040902d30c66aabd15affe", "ref_doc_id": "dee77364-0b29-431b-9694-55afa90f4e1e"}, "3e7e0ad2-b710-4351-bc48-d07366028425": {"doc_hash": "6f59a7895ad08df1324cd6de35be20f496a4b53945fe22c2a6617939491f3395", "ref_doc_id": "bcf8e45c-68e1-4cb5-8e3b-3f48b994092a"}, "9b7f2a7d-ce76-4340-a480-0271477e27d7": {"doc_hash": "2479147078bafc661cd08525f5a1c6bb1d36d47c8e826c7bade070bdeb01a938", "ref_doc_id": "a34895e7-6e1b-4303-8234-420d77315a8c"}, "c88b0546-c411-4400-8004-fb6a649d37a4": {"doc_hash": "24127bd222514da6338ebfb629d8e4308bf733b800d60cf7dcd6c8c6bda2b5ed", "ref_doc_id": "7e3b8aa8-3049-42ef-8138-e4a426fb1370"}, "8475ba91-6698-46be-b32d-2f91a17223fe": {"doc_hash": "5091e7c3f52536a1315401e5469ac073a040cfeb6a0f760faeb2f95ebee976fe", "ref_doc_id": "78fd639a-1bf3-449f-a0b1-4bdbff773458"}, "bf89dcd2-2179-4143-8bd8-e157424548bf": {"doc_hash": "2fff97b61b10031853d30fe34b402b0384df6884577be26cbaedee235fe888ed", "ref_doc_id": "44521809-a70e-4d8e-ba91-55cef7f2a87c"}, "f1283935-e317-4d7a-91be-e7393e81fc32": {"doc_hash": "4ed844a9d31a81da02599ea431118533ca0c67d5b5b3621ab39d3f18e3a6cf2d", "ref_doc_id": "ec449c9d-ffe5-44ad-9160-454154c7daab"}, "651d4277-2f30-446e-ae40-5adf80fe23b1": {"doc_hash": "b3406039166f08123bcb20ba4308e7d8623806e29b72d6b9a83d4369a317afec", "ref_doc_id": "4126c5e2-8a73-4bd5-9792-4cc2be6faf48"}, "de5c4660-ab99-465f-a0c9-c9740e5ba837": {"doc_hash": "243d0d535e68958a859cc360b176cb2db566bf41e2db3e072e98b0d986b5bec0", "ref_doc_id": "6893b9aa-6dff-4543-be6c-93817b6fdaed"}, "a2c4043e-f9ef-456e-8b8d-237ae657e97d": {"doc_hash": "d0ca27597302ab6a4e283569cc2a5f2ccf310977df3f327da6ecb85ecc484bce", "ref_doc_id": "988a83dc-617e-4139-9343-86f22056096c"}, "50b4ca9c-0922-41a9-a1e2-1e8e33410699": {"doc_hash": "bdb435ea6bf72665845b460003c608e19a124646fbabd9070c25ce93605dd173", "ref_doc_id": "478dcea2-6b5d-4b84-a730-b6016f449048"}, "ded0de38-2a22-4826-827f-3b21e9da60c0": {"doc_hash": "b46b4354c3fcec42ec415253ae53da51ccf04bce610cd7bf1f9331d2a23a48a5", "ref_doc_id": "e44e50e0-9a96-4af6-985a-e99c0b1f26bd"}, "039d9ce3-8328-4d9c-9fcf-d1757e02031e": {"doc_hash": "4d9782787242cbc63ebd529ec5163c0d10586dd7a3c0702c34509702d5a33f21", "ref_doc_id": "7125c9f8-a701-4ed4-b858-9ad3da26c72c"}, "a117d740-23d3-46f4-a77a-c2e86025b8fc": {"doc_hash": "94b5367790048dda184e97bec71fec432beabcf49b23a6449d707c26366308e7", "ref_doc_id": "676e159c-48a8-4238-8892-8531bb1c89c2"}, "ec5c619b-c71f-4638-bcfa-ccd49e0a4501": {"doc_hash": "cbb085199a7f5a7136b5ee12b08976de024c0c3809e1ba1c501dca3834700d4c", "ref_doc_id": "6cc624e7-c3d5-434a-bb91-e722f6ad1b18"}, "966c99d2-17df-405c-9c6d-b0534fe86e2a": {"doc_hash": "59e0703533cbc21befe4a047d3f06b0d79d10002a0cef5f90597c940e6d22834", "ref_doc_id": "a7a124d9-d521-428e-a21b-53022f590b50"}, "33a1831d-61bd-409b-8e61-82a2cfcfec0e": {"doc_hash": "78206c5e1284a19ede1067d566931aa13fc6c61aab5cee3977337d35c6408606", "ref_doc_id": "f22385ff-aa51-4f0c-b94f-74feee84cbd0"}, "6be0323b-0694-4aaf-854c-27b7c7a99f06": {"doc_hash": "5b412671fc0e818769895de9652d276f5fe094fade580cc99bcf4721c0828ebc", "ref_doc_id": "de605bd4-2119-4f59-8c28-65d4867a3ff1"}, "83393434-1850-4216-a3e9-8f8d70566002": {"doc_hash": "aae03cb31f1708d7b11a73507b8d669e34f82c236862ba221b451b35ee95d7e1", "ref_doc_id": "84ce1bbd-c3aa-4bee-9c81-036a5b1bfcd5"}, "2bd73067-8ddc-4f99-82a2-6c9cd483eb28": {"doc_hash": "84bcde5f139be9f98d8cacb3aa71483383c461545415465c15519e0a11b3f9a1", "ref_doc_id": "ccc48f18-4597-4717-8d85-07e525532c06"}, "c7b1b8fe-2982-4db6-b597-7f54ddef4b6c": {"doc_hash": "c6b07b1b7b043ef5e63a6139ae6eb84379efbc2ec9ffbe84df8081cbacb6fb14", "ref_doc_id": "e2cef8f3-968c-4bf8-8efb-17b62d223fdf"}, "6e648588-9837-44e6-aa12-7d10c9fab8ef": {"doc_hash": "2d06f6475a9493d37d466dc7e2b4897dfd9401ee4be27c8111e3e5ca88ce30a2", "ref_doc_id": "c851c9fc-d2af-4187-a479-3fba2141bf65"}, "138b94d8-8596-4dc0-9150-cd140d183c70": {"doc_hash": "180e2b6f0e5a5a84de7c0f976629cae041af9ee1eaeaa21b979dd9cf0a4a516f", "ref_doc_id": "11539700-c3b6-43b3-a18b-80e57a02bc1f"}, "aae9f1f2-994e-4e1d-851d-ecd9b450f0b2": {"doc_hash": "0f6fbc8337e613af7c7ddaf0e626dc602459730923b1687e87841ef613aea6ad", "ref_doc_id": "11539700-c3b6-43b3-a18b-80e57a02bc1f"}, "d86fc7f3-2693-4e1e-a7c4-4d15613339d1": {"doc_hash": "e6e0dbf70e8c3be6adde3b4c4514591e0d356714e0879ebbdadb97339c68328b", "ref_doc_id": "11539700-c3b6-43b3-a18b-80e57a02bc1f"}, "4176ce6e-0491-4ec3-95e1-4a1e5f6fb925": {"doc_hash": "503723fe649228152ff10bbbc2d11bf50ad8259e54c8e69f40bed5b6ad83c943", "ref_doc_id": "7c40b50f-3bce-41bd-a4c3-f9e0d2042ce0"}, "f5367311-bc28-40b4-9b98-3f49fd2a9ac3": {"doc_hash": "12bd425d428581643ea959fcbb82d11b0b357a2ec81ff48e057802e317a44f0f", "ref_doc_id": "fe3178be-9837-49e6-a472-92d010e3307e"}, "ae1ea50c-5ed7-405c-b446-4426ebccb7bc": {"doc_hash": "4488824aa2124c483095248b56d38c54c89fdd67c8c6e452e8b7798745e8e6f2", "ref_doc_id": "135f60b4-75b0-4310-8fdb-a3400a066a16"}, "a9d40228-7437-4509-a043-089fe3f6e673": {"doc_hash": "4549fc7ffa785c0d49c1d92c8183e63f4fb30593fea6c628d10d23ba48dbb21a", "ref_doc_id": "fbb13cb6-8579-4e5a-9de3-09452747bbc0"}, "55cc2e70-e3c9-4a19-b704-45ffe1bd0839": {"doc_hash": "a216bd35efa7b1f68fb9093a9473ddbcdefc40c85b6c780334f7164649416404", "ref_doc_id": "9cbc0e78-1d6a-4ccc-8a39-096ef3059b22"}, "1d0d9a19-ff15-45c8-b0ef-0ef84c22f1b8": {"doc_hash": "fda85dc4e82d48cd4ff41511e9a318e6d70b6b77bc308e8ecdd53153fca8b440", "ref_doc_id": "3d79603c-228c-48c2-a686-7608f887e635"}, "5a3e62c5-fe8a-4869-b915-4c9a25e95cbf": {"doc_hash": "4af1768e40adb7d7e053862ff841807857d1793c9ef80eead7d0fac6c0c3e8ae", "ref_doc_id": "27da4392-c88b-4667-a025-ded7ed251842"}, "e96f2ed3-b24a-49b6-b486-574660fea3a3": {"doc_hash": "2328fa0662d111cc9b028cab0cc49f0082947859e011cb26e97a8535013ba1a3", "ref_doc_id": "4a2e083d-eb23-4d0f-9401-759383518a32"}, "9d545c3a-5411-4fc0-922b-f38c033aba45": {"doc_hash": "e1b524a7ce43b81cc03a477e53201459680083d3d39cb6d3c09cdda951a0dd91", "ref_doc_id": "0f1bddf8-4d80-4349-a4b9-e5fa9c43feeb"}, "6e1bd78d-9201-4878-81fe-f172d4c66258": {"doc_hash": "ebf1b079524021a6dfb54a61aae0fcd4ee273a5fea1ee819fc1584dae631d72d", "ref_doc_id": "8678027a-7928-48f1-8f33-253a5cfd6d26"}, "beccca6f-24d7-493b-8877-cb2ecf1b7e2c": {"doc_hash": "63ca7f47ea9e9a4dddcb8d2f969c74ce3038999cd4e87bf362b00f1270b1ad82", "ref_doc_id": "86f638a8-cad9-4e97-8a54-00ea4f2349e9"}, "3febcf98-0188-410d-9ffa-951f4cee81b4": {"doc_hash": "208c55d7ae77858df16399445024e967346885d25ae3a20b4b9b8e975722c32c", "ref_doc_id": "bfdd24e6-fe43-4e2c-86c8-04dd303c0de3"}, "018785b7-29a4-4bca-a447-06e58ae1eb7d": {"doc_hash": "471cd6518716a50b47961596ae3852421107722c216d66249bb61685ed2f858a", "ref_doc_id": "6dd858ac-76de-434a-8304-e54c48307d55"}, "5c2aafeb-3ef0-4622-ba8e-7412ecc3e142": {"doc_hash": "175dd3faa5787629fcda8c8745927233331fe870c227dd173f98c86f0d03f2b9", "ref_doc_id": "a7f8f8ce-2435-455c-af3f-368f61a5324d"}, "6f2c3478-741e-4baf-8bfe-0deb6aa89a10": {"doc_hash": "e2c2215c5f7ee9877f2808d0f336a54f9b87288cb4a94334b2e6b89bc7a33a92", "ref_doc_id": "2964273b-a714-4d66-95d7-9a6f10b18db0"}, "bc05a31d-bd94-433f-b4dc-a25ab719b20b": {"doc_hash": "22d2e0289484fef17e800aa2e01b298fb50162b37fa5bc6b8be2f77ee865f2ca", "ref_doc_id": "cb3e35e9-fbe4-438f-8d47-bbc4b5047d82"}, "a7bf654f-4a68-4bfa-8a79-b3a968605c71": {"doc_hash": "ed8a4cc2f2781690a9fcc11e82064ebe9e04b5b287f35efcb4522a36ebdcc310", "ref_doc_id": "9c31ff3a-aed0-4515-8c9d-e99c48a93494"}, "e26762a9-a1f4-45f2-a6a6-b97de482e177": {"doc_hash": "c72d6191956a51e7de637041e1e11af79892b6d6d6b32476a59a4c1f7cdb766a", "ref_doc_id": "35f77308-d4a7-47d4-b147-a73aec4620eb"}, "1a934a9d-d2a9-401a-8213-06093d2ea2ab": {"doc_hash": "55e34ce88d2d92da540cac68d52d4f8a965eb903aac87fadcb581a79343f8dbe", "ref_doc_id": "abc41903-1dbc-4833-b51f-44ce1be4ec73"}, "bb79ec66-91e3-4d6f-a960-c2b1f7d21af5": {"doc_hash": "63b0f2b5e1f4ad2f8762a4b8cd44b46de51258d030cd5b88c0cbe21026e76f89", "ref_doc_id": "e670ffd6-f058-4fe7-8c90-476ed2f9beb9"}, "7131e455-4c72-4e5f-85e6-7db5250922a6": {"doc_hash": "1861ce30394ab7506bce641e2c7f8ff2783b44cd2a300100a50763ee5e575144", "ref_doc_id": "732e8ca1-b13f-4be7-a120-1d49506606b6"}, "4efd9f1d-6f0c-4113-8c08-4a326c18c248": {"doc_hash": "efad92ad691f00e7e3b137c04a7a6efbe977c61ae1b3ccc84c943403c28a86d9", "ref_doc_id": "6b527ed1-0508-43c6-ac51-9b7c9492f638"}, "b4c43e19-acc7-417f-892a-d4b968a8d029": {"doc_hash": "62b6b3003e48dbf6b9fb29fd3b1620733fc382d0b5339803f16ffd32521fa757", "ref_doc_id": "b4669aa0-c395-4a48-af39-d32afe3f5a0f"}}, "docstore/data": {"85263f6a-6f44-4c57-853b-baecc6a03254": {"__data__": {"id_": "85263f6a-6f44-4c57-853b-baecc6a03254", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/focus-component", "title": "Focus component"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d33dcef9-811c-4877-ba22-b17e4d133446", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/focus-component", "title": "Focus component"}, "hash": "63ab721d33d522b10bc8604d7e68dba25d9367192339b7e26a2772ea92fea859", "class_name": "RelatedNodeInfo"}}, "text": "Focus component\n\nIf you want to focus on a component, you can use `me.focus_component` which focuses the component with the specified key if it is focusable.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 159, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "32c8a043-aeb9-461a-bf52-d7ec107cf7c0": {"__data__": {"id_": "32c8a043-aeb9-461a-bf52-d7ec107cf7c0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/focus-component", "title": "Focus component"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "81739346-75c5-440f-b912-c9176f5053c9", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/focus-component", "title": "Focus component"}, "hash": "39980e760b12669a25a8f49b491ff2c8148504e0b7bc703dee1b2d4185528190", "class_name": "RelatedNodeInfo"}}, "text": "Example\n\n```python\n--8<-- \"mesop/examples/focus_component.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 67, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e58a55cf-3d17-45f2-bd42-bc815f82b35e": {"__data__": {"id_": "e58a55cf-3d17-45f2-bd42-bc815f82b35e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/focus-component", "title": "Focus component"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "630a934b-5287-4c49-8154-0bac47f9ea34", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/focus-component", "title": "Focus component"}, "hash": "82e60a9661162af2c00fdea32b1e57ead48b3d45bcc40952bdd6204dd1a2eefa", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.commands.focus_component.focus_component", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 57, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cfaad92e-8653-451c-b09d-70ae00d97afe": {"__data__": {"id_": "cfaad92e-8653-451c-b09d-70ae00d97afe", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/navigate", "title": "Navigate"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "935f16db-76d4-4008-83b7-f372e9cdb12b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/navigate", "title": "Navigate"}, "hash": "6d3f177f0453a9bd4cde27f7186bbaa593cc5eaf8a3fb6992f51e31f295d92fa", "class_name": "RelatedNodeInfo"}}, "text": "Navigate\n\nTo navigate to another page, you can use `me.navigate`. This is particularly useful for navigating across a multi-page app.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 135, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "37acc96a-84ba-49ac-b717-ed85b3bc3569": {"__data__": {"id_": "37acc96a-84ba-49ac-b717-ed85b3bc3569", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/navigate", "title": "Navigate"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c559db73-5d8a-42d3-8c77-48293f89dc65", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/navigate", "title": "Navigate"}, "hash": "366d3cf304f72062dc2973916e7ee793bc2059a984aeef0c64e685babd76d361", "class_name": "RelatedNodeInfo"}}, "text": "Example\n\n```python\n--8<-- \"mesop/examples/navigate.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 60, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9019895b-946a-4d9e-9305-14bc28546d84": {"__data__": {"id_": "9019895b-946a-4d9e-9305-14bc28546d84", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/navigate", "title": "Navigate"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8ebdddeb-f607-46e1-b85d-7f39a8bccb9b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/navigate", "title": "Navigate"}, "hash": "6c99d6fc8080940faa0da17a05bf22c96f08aa045dda0229839ddd3ae2b4f176", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.commands.navigate.navigate", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 43, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "52b15560-c8fb-4058-b86c-333bd0b49614": {"__data__": {"id_": "52b15560-c8fb-4058-b86c-333bd0b49614", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/scroll-into-view", "title": "Scroll into view"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "43543171-e694-468c-8aba-4a691f538106", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/scroll-into-view", "title": "Scroll into view"}, "hash": "15578b724ddb0e4ff28eebe355ad096e903e2188367e8c3e01537b985936d7bb", "class_name": "RelatedNodeInfo"}}, "text": "Scroll into view\n\nIf you want to scroll a component into the viewport, you can use `me.scroll_into_view` which scrolls the component with the specified key into the viewport.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 176, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "54b63699-3a38-4596-bd37-cd4dc1b045d4": {"__data__": {"id_": "54b63699-3a38-4596-bd37-cd4dc1b045d4", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/scroll-into-view", "title": "Scroll into view"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4beb44e0-b079-4041-ac8e-10e65242380f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/scroll-into-view", "title": "Scroll into view"}, "hash": "075d6a359ee0089150093b4a32f08876cc5a1eef46759a65ec0e4b3528ea9e47", "class_name": "RelatedNodeInfo"}}, "text": "Example\n\n```python\n--8<-- \"mesop/examples/scroll_into_view.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 68, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4bd5774c-2844-4ef6-a663-07ff6cb45cdb": {"__data__": {"id_": "4bd5774c-2844-4ef6-a663-07ff6cb45cdb", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/scroll-into-view", "title": "Scroll into view"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b1d1b528-9eea-4198-a74b-d57f16112374", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/scroll-into-view", "title": "Scroll into view"}, "hash": "24b62b31680d0b23cb89d4d4d43bd78a5efa7699be384b265c5a81d2ca3d3135", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.commands.scroll_into_view.scroll_into_view", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 59, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9398631a-b8ab-45a0-b2ce-adc2f33987f3": {"__data__": {"id_": "9398631a-b8ab-45a0-b2ce-adc2f33987f3", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/set-page-title", "title": "Set page title"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d2df3686-41c6-4dd5-adf2-8e69c5586270", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/set-page-title", "title": "Set page title"}, "hash": "1e7090dab695466e50c15c4aa8d524533da6f57493961996e5ded4914af2155a", "class_name": "RelatedNodeInfo"}}, "text": "Set page title\n\nIf you want to set the page title, you can use `me.set_page_title` which will\nset the page title displayed on the browser tab.\n\nThis change does not persist if you navigate to a new page. The title will be\nreset to the title configured in `me.page`.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 267, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "414ad929-ff88-4971-8fde-738ea93ab076": {"__data__": {"id_": "414ad929-ff88-4971-8fde-738ea93ab076", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/set-page-title", "title": "Set page title"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b934be95-f8fc-43a4-ae20-22989392b870", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/set-page-title", "title": "Set page title"}, "hash": "edf73539b01c228d50c14caec1dfd8264aa7a111c4cf33608872d3b70f77136d", "class_name": "RelatedNodeInfo"}}, "text": "Example\n\n```python\n--8<-- \"mesop/examples/set_page_title.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 66, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "94ffce9e-fd29-4d9f-a07e-a50db41ecae3": {"__data__": {"id_": "94ffce9e-fd29-4d9f-a07e-a50db41ecae3", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/set-page-title", "title": "Set page title"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "73981f32-3dc6-4fe2-8c04-15c790c3e1fe", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/set-page-title", "title": "Set page title"}, "hash": "8338cfcda54e4d4a91171d18424ec60b3d798cc14eaf5879a89a16bf124d78d6", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.commands.set_page_title.set_page_title", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 55, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b06bbcfe-0272-4244-b6aa-cbbf77bee23b": {"__data__": {"id_": "b06bbcfe-0272-4244-b6aa-cbbf77bee23b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "760353fe-a00a-4f8e-8f2b-cdad5b29af4a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "8f4b9be0046484f6b9704c9dc50cf2e8dc589c2934e3c1b3cf5c80246b985968", "class_name": "RelatedNodeInfo"}}, "text": "Config", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 8, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6664f368-38cd-4e2f-b46d-e84917f6e77d": {"__data__": {"id_": "6664f368-38cd-4e2f-b46d-e84917f6e77d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f1c2e95d-e8e4-48f3-a18d-e278cea28f88", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "8dac6bdc85512d7d0e8cb1cbd9c59ef5d2124dd9e1349b097063a0e53152ed21", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nMesop is configured at the application level using environment variables.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 85, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0ce90919-2b73-43b9-973b-3c1b00b570c3": {"__data__": {"id_": "0ce90919-2b73-43b9-973b-3c1b00b570c3", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d675300b-9fce-4538-a4b0-6f2c4ad610b7", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "e2552c94ff7e1b2094a1a35e437cbd6b8a2c41fdc698ad053cf98f0436e05ae6", "class_name": "RelatedNodeInfo"}}, "text": "Configuration values", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 22, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "dc3223d8-c591-4131-9d81-c2454fc2b982": {"__data__": {"id_": "dc3223d8-c591-4131-9d81-c2454fc2b982", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4319f288-98ba-4a07-bf30-12039cb35a3b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "075b74aee1ca74a258245e50db73149f06934cae99daa4e44e1bc613eb1659e3", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_STATIC_FOLDER\n\n> **NOTE:** This feature will be enabled by default in the next Mesop release and set to use `static` as the default static folder. You can still set it to another directory or `\"\"` to disable the feature.\n\nAllows access to static files from the Mesop server.\n\nIt is important to know that the specified folder path is relative to the current\nworking directory where the Mesop command is run. Absolute paths are not allowed.\n\nExample:\n\nIn this case, the current working directory is `/srv`, which means Mesop will make\n`/srv/static` the static folder.\n\n```bash\ncd /srv\nMESOP_STATIC_FOLDER=static mesop app/main.py\n```\n\nHere are some examples of valid paths. Let's assume the current working directory is\n`/srv/`\n\n- `static` becomes `/srv/static`\n- `static/` becomes `/srv/static`\n- `static/assets` becomes `/srv/static/assets`\n- `./static` becomes `/srv/static`\n- `./static/` becomes `/srv/static`\n- `./static/assets` becomes `/srv/static/assets`\n\nInvalid paths will raise `MesopDeveloperException`. Here are some examples:\n\n- Absolute paths (e.g. `/absolute/path`)\n- `.`\n- `./`\n- `..`\n- `../`", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1116, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "de8ebb46-d083-4ee5-b94e-f1fe8b9cb58e": {"__data__": {"id_": "de8ebb46-d083-4ee5-b94e-f1fe8b9cb58e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "1cb8ba0c-fcdc-4881-bcc0-765066756cea", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "50a6fe8b7fb9133f8f805905d1673d100587eaf5f4589ec96f4b4295a2e19462", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_STATIC_URL_PATH\n\nThis is the base URL path from which files for your specified static folder will be\nmade viewable.\n\nThe static URL path is only recognized if `MESOP_STATIC_FOLDER` is set.\n\nFor example, given `MESOP_STATIC_FOLDER=static` and `MESOP_STATIC_URL_PATH=/assets`, the\nfile `static/js/script.js` can be viewable from the URL path `/assets/js/script.js`.\n\n**Default:** `/static`", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 395, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f0f18f30-6c16-4f79-996d-b14218e7dfcb": {"__data__": {"id_": "f0f18f30-6c16-4f79-996d-b14218e7dfcb", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e42f20e1-c0be-45ed-b649-cc469e303923", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "90fe4ee5cadbce511f859eac6cdc6cfdc4f955c03959c1f21f2fbdc7347320b1", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_STATE_SESSION_BACKEND\n\nSets the backend to use for caching state data server-side. This makes it so state does\nnot have to be sent to the server on every request, reducing bandwidth, especially if\nyou have large state objects.\n\nThe backend options available at the moment are `memory`, `file`, `sql`, and `firestore`.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 325, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e3118f9e-14c1-422a-b652-dfad78377e0b": {"__data__": {"id_": "e3118f9e-14c1-422a-b652-dfad78377e0b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9754078c-c393-4134-8118-84ef5a4ec20b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "c9562d52d44be102053d30f5fea009076aa68cde26af0f3a5dd3ba7bb97bc8e2", "class_name": "RelatedNodeInfo"}}, "text": "memory\n\nUsers should be careful when using the `memory` backend. Each Mesop process has their\nown RAM, which means cache misses will be common if each server has multiple processes\nand there is no session affinity. In addition, the amount of RAM must be carefully\nspecified per instance in accordance with the expected user traffic and state size.\n\nThe safest option for using the `memory` backend is to use a single process with a\ngood amount of RAM. Python is not the most memory efficient, especially when saving data\nstructures such as dicts.\n\nThe drawback of being limited to a single process is that requests will take longer to\nprocess since only one request can be handled at a time. This is especially problematic\nif your application contains long running API calls.\n\nIf session affinity is available, you can scale up multiple instances, each running\nsingle processes.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 880, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "16b3bb29-6737-47dc-84ff-2e34afeac191": {"__data__": {"id_": "16b3bb29-6737-47dc-84ff-2e34afeac191", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c67d367c-8b36-4d78-b1a2-5ef3f622a62f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "54b7656f894cbac63e76adb1d775210340a2dbcd8da69bfc8b4648e719069777", "class_name": "RelatedNodeInfo"}}, "text": "file\n\nUsers should be careful when using the `file` backend. Each Mesop instance has their\nown disk, which can be shared among multiple processes. This means cache misses will be\ncommon if there are multiple instances and no session affinity.\n\nIf session affinity is available, you can scale up multiple instances, each running\nmultiple Mesop processes. If no session affinity is available, then you can only\nvertically scale a single instance.\n\nThe bottleneck with this backend is the disk read/write performance. The amount of disk\nspace must also be carefully specified per instance in accordance with the expected user\ntraffic and state size.\n\nYou will also need to specify a directory to write the state data using\n`MESOP_STATE_SESSION_BACKEND_FILE_BASE_DIR`.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 766, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2bfb313a-e252-4911-aaea-082b8a06803c": {"__data__": {"id_": "2bfb313a-e252-4911-aaea-082b8a06803c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "3d3c42be-ee56-41c4-9a9e-f2f921ad5015", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "5e61311ad82d3800182491479469b721b67df61f350fe389d91b6d8bade9e9dc", "class_name": "RelatedNodeInfo"}}, "text": "SQL\n\n> NOTE: Setting up and configuring databases is out of scope of this document.\n\nThis option uses SqlAlchemy to store Mesop state sessions\nin supported SQL databases, such as SQLite3 and PostgreSQL. You can also connect to\nhosted options, such as GCP CloudSQL.\n\nIf you use SQLite3, you cannot use an in-memory database. It has to be a file. This\noption has similar pros/cons as the `file` backend. Mesop uses the default configuration\nfor SQLite3, so the performance will not be optimized for Mesop's usage patterns.\nSQLite3 is OK for development purposes.\n\nUsing a database like PostgreSQL will allow for better scalability, both vertically and\nhorizontally, since the database is decoupled from the Mesop server.\n\nThe drawback here is that this requires knowledge of the database you're using. At\nminimum, you will need to create a database and a database user with the right\nprivileges. You will also need to create the database table, which you can create\nwith this script. You will need to update the CONNECTION_URI and TABLE_NAME to match\nyour database and settings. Also the database user for this script will need privileges\nto create tables on the target database.\n\n```python\nfrom sqlalchemy import (\n Column,\n DateTime,\n LargeBinary,\n MetaData,\n String,\n Table,\n create_engine,\n)\n\nCONNECTION_URI = \"your-database-connection-uri\"\n# Update to \"your-table-name\" if you've overridden `MESOP_STATE_SESSION_BACKEND_SQL_TABLE`.\nTABLE_NAME = \"mesop_state_session\"\n\ndb = create_engine(CONNECTION_URI)\nmetadata = MetaData()\ntable = Table(\n TABLE_NAME,\n metadata,\n Column(\"token\", String(23), primary_key=True),\n Column(\"states\", LargeBinary, nullable=False),\n Column(\"created_at\", DateTime, nullable=False, index=True),\n)\n\nmetadata.create_all(db)\n```\n\nThe Mesop server will raise a `sqlalchemy.exc.ProgrammingError` if there is a\ndatabase configuration issue.\n\nBy default, Mesop will use the table name `mesop_state_session`, but this can be\noverridden using `MESOP_STATE_SESSION_BACKEND_SQL_TABLE`.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 2017, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2d2ec94a-091c-41b7-a189-99c240480104": {"__data__": {"id_": "2d2ec94a-091c-41b7-a189-99c240480104", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "54d0e438-aff6-4279-b3f5-d789dcac8298", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "eb5358334d85a42608e16c6995c42879e9d193225a18ae2a8863575dc9102875", "class_name": "RelatedNodeInfo"}}, "text": "GCP Firestore\n\nThis options uses GCP Firestore to store\nMesop state sessions. The `(default)` database has a free tier that can be used for\nfor small demo applications with low traffic and moderate amounts of state data.\n\nSince Firestore is decoupled from your Mesop server, it allows you to scale vertically\nand horizontally without the considerations you'd need to make for the `memory` and\n`file` backends.\n\nIn order to use Firestore, you will need a Google Cloud account with Firestore enabled.\nFollow the instructions for creating a Firestore in Native mode database.\n\nMesop is configured to use the `(default)` Firestore only. The GCP project is determined\nusing the Application Default Credentials (ADC) which is automatically configured for\nyou on GCP services, such as Cloud Run.\n\nFor local development, you can run this command:\n\n```sh\ngcloud auth application-default login\n```\n\nIf you have multiple GCP projects, you may need to update the project associated\nwith the ADC:\n\n```sh\nGCP_PROJECT=gcp-project\ngcloud config set project $GCP_PROJECT\ngcloud auth application-default set-quota-project $GCP_PROJECT\n```\n\nMesop leverages Firestore's TTL policies\nto delete stale state sessions. This needs to be set up using the following command,\notherwise old data will accumulate unnecessarily.\n\n```sh\nCOLLECTION_NAME=collection_name\ngcloud firestore fields ttls update expiresAt \\\n --collection-group=$COLLECTION_NAME\n```\n\nBy default, Mesop will use the collection name `mesop_state_sessions`, but this can be\noverridden using `MESOP_STATE_SESSION_BACKEND_FIRESTORE_COLLECTION`.\n\n**Default:** `none`", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1606, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8cbc39e8-c6d0-44e5-999a-4a30865bb75e": {"__data__": {"id_": "8cbc39e8-c6d0-44e5-999a-4a30865bb75e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d5c6ec4a-5f78-428d-926b-52a51b9452e1", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "8e8086abbe94d733f0ad18e81d0686edb9998557e8eeea0d3f43fddb11b7abfc", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_STATE_SESSION_BACKEND_FILE_BASE_DIR\n\nThis is only used when the `MESOP_STATE_SESSION_BACKEND` is set to `file`. This\nparameter specifies where Mesop will read/write the session state. This means the\ndirectory must be readable and writeable by the Mesop server processes.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 278, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "eb9a1450-0e18-4cbe-a585-6edd6b323420": {"__data__": {"id_": "eb9a1450-0e18-4cbe-a585-6edd6b323420", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "bdb944d4-63e7-4f12-9ccf-b736249f89fd", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "d6131c5ad81410ef8f0d76c5ddef4e29a755b99a191b9d16f251f0ab55179074", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_STATE_SESSION_BACKEND_FIRESTORE_COLLECTION\n\nThis is only used when the `MESOP_STATE_SESSION_BACKEND` is set to `firestore`. This\nparameter specifies which Firestore collection that Mesop will write state sessions to.\n\n**Default:** `mesop_state_sessions`", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 261, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b5d894b1-5d06-40e2-8803-3b05136422b6": {"__data__": {"id_": "b5d894b1-5d06-40e2-8803-3b05136422b6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9a85db8d-fe67-4c49-a737-db14139831bb", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "a38a9653623defdb25f800a33b4c2b4ab6b14125355e0033341589547121e27b", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_STATE_SESSION_BACKEND_SQL_CONNECTION_URI\n\nThis is only used when the `MESOP_STATE_SESSION_BACKEND` is set to `sql`. This\nparameter specifies the database connection string. See the SqlAlchemy docs for more details.\n\n**Default:** `mesop_state_session`", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 258, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "69e733ab-e1f9-41bb-b37d-fbd5f06d2d01": {"__data__": {"id_": "69e733ab-e1f9-41bb-b37d-fbd5f06d2d01", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "5ab779a3-1216-46a4-850d-a2e3cfd6b83c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "122cd9a37cbee8e32479bc87dc08f23e29239bdb6573746d5eaebea70f732b3b", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_STATE_SESSION_BACKEND_SQL_TABLE\n\nThis is only used when the `MESOP_STATE_SESSION_BACKEND` is set to `sql`. This\nparameter specifies which SQL database table that Mesop will write state sessions to.\n\n**Default:** `mesop_state_session`", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 241, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7eb89bdd-8f0c-45fc-a91c-5322a1ae711d": {"__data__": {"id_": "7eb89bdd-8f0c-45fc-a91c-5322a1ae711d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "441a55c0-c331-40e0-9452-d49c8332fff6", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "d2848bea301ec5bb5231bd9680ae964c2018e615a29458784e03ee6bf51471ca", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_PROD_UNREDACTED_ERRORS\n\nMesop, by default, only shows unredacted errors in debug mode.\n\nIf you run in prod mode, the errors are redacted (internal errors are given a generic message \"Sorry, there was an error. Please contact the developer.\") and the tracebacks are not shown.\n\nIf you want to show unredacted errors, including in prod mode, set this to `true`. This may be useful if you're deploying a Mesop app internally and want to get error details even in production.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 479, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4681d307-db85-4fc0-9f68-88fa9ceaa0c8": {"__data__": {"id_": "4681d307-db85-4fc0-9f68-88fa9ceaa0c8", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6979d524-2f53-441b-9ca1-a4749d88fdba", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "9d10423e7e80a58976f2ceb9659b14194209af1596aab130ecd3b4936affda1d", "class_name": "RelatedNodeInfo"}}, "text": "Experimental configuration values\n\nThese configuration values are experimental and are subject to breaking change, including removal in future releases.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 154, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "88e22c40-71b4-47df-9864-3db709c4c6a2": {"__data__": {"id_": "88e22c40-71b4-47df-9864-3db709c4c6a2", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "eddcc4ee-4a41-4c0a-a25c-78bccd389936", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "22f042551a2aefee532d5ffd7a73d8b5adaac3a7c0bb0b776c39e117e8128330", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_CONCURRENT_UPDATES_ENABLED (DEPRECATED)\n\n!!! danger \"Deprecated experimental feature\"\n\n This experimental feature has been removed in Mesop v1. Use `MESOP_WEBSOCKETS_ENABLED` instead.\n\nAllows concurrent updates to state in the same session. If this is not updated, then updates are queued and processed sequentially.\n\nBy default, this is not enabled. You can enable this by setting it to `true`.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 408, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "791640e5-5db2-4bfe-993c-faa30657d4b0": {"__data__": {"id_": "791640e5-5db2-4bfe-993c-faa30657d4b0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4fbe9a25-91ac-45c7-9910-50099c5401ca", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "834e2b7701f994158628671a56e11e123a5783fc6466ad774ec93ea99921b5ac", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_WEBSOCKETS_ENABLED\n\n!!! warning \"Experimental feature\"\n\n This is an experimental feature and is subject to breaking change. Please follow https://github.com/mesop-dev/mesop/issues/1028 for updates.\n\nThis uses WebSockets instead of HTTP Server-Sent Events (SSE) as the transport protocol for UI updates. Using WebSockets also changes the Mesop server architecture to be stateful (e.g. meaning a server restart or routing to a different server instance means the user will lose state). If you enable this feature, then you should ensure the following:\n\n- Either a single server instance is used *or* you route a particular user to the same server for a given session (i.e. session affinity).\n- Either ensure user state is *not* critical (e.g. it's OK if it's cleared out due to server restart, which could happen at any time on typical cloud infrastructure) or is persisted somewhere (e.g. written to a database).\n\nEnabling this also allows user events to be handled concurrently, which is particularly useful supporting interactivity for long-running event handlers.\n\nBy default, this is not enabled. You can enable this by setting it to `true`.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1155, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "333b7296-660e-4fcc-83fa-a165ee938f0c": {"__data__": {"id_": "333b7296-660e-4fcc-83fa-a165ee938f0c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a87f62b2-558c-4a5e-a8f8-1fe024dd264c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "3d9347ed4dff4e2c444209dca04d6fbf458a482d5ee8d1acd9d2bc20bfd6a6ae", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_APP_BASE_PATH\n\nThis is the base path used to resolve other paths, particularly for serving static files. Must be an absolute path. This is rarely needed because the default of using the current working directory is usually sufficient.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 242, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c1b77c7c-6fb2-406e-9017-2d01bd786b90": {"__data__": {"id_": "c1b77c7c-6fb2-406e-9017-2d01bd786b90", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6ef469a1-01e0-4872-85ca-dddec4c57707", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "8a368ce0470b62b608328b6e6197c00ad686dfefd1fd974614c76c1e592c81e7", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_BASE_URL_PATH\n\nBase URL path for serving the Mesop application. Set this if your app is served from a non-root path (e.g. `/myapp`). All HTTP routes, static assets, and API calls will be prefixed with this path. The value must start with a slash but should not include a trailing slash.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 294, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2d5515ef-ab44-4b83-9f3d-a4b4473dafb9": {"__data__": {"id_": "2d5515ef-ab44-4b83-9f3d-a4b4473dafb9", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f1973931-8b2d-4fc2-9e36-e7f7583c5d82", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "a0265c9579b6b65d7ea6a8179b8de92956e9e124a9e9fe204d38036767f226c7", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_HTTP_CACHE_JS_BUNDLE\n\nEnables HTTP caching for the main JS bundle (i.e. prod_bundle.js) served by Mesop. This minimizes unnecessary HTTP requests for the JS bundle.\n\nNote: this does *not* cache other JS files like web components, which are configured separately (see below).", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 282, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "79308bcc-3894-4555-a5a6-de70dea038cf": {"__data__": {"id_": "79308bcc-3894-4555-a5a6-de70dea038cf", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "15059657-8fd9-449b-a356-ca8a99e2b111", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "440cd321973c230350de98c1cb594832f3071ca1c71169f856b644f1712b5832", "class_name": "RelatedNodeInfo"}}, "text": "MESOP_WEB_COMPONENTS_HTTP_CACHE_KEY\n\nEnables HTTP caching for the web component entry point modules.\n\nNote: this does *not* cache JS files imported by the web component entry modules.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 185, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c941fd97-6f1d-491d-ac80-b0f12fbde8d3": {"__data__": {"id_": "c941fd97-6f1d-491d-ac80-b0f12fbde8d3", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "7c192707-7c5b-4fba-9651-1f25d96cba00", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "5162a0f82f153246d35d024e6a1b3c01bd2b650b479cc28e4c97806f0d754e6a", "class_name": "RelatedNodeInfo"}}, "text": "Usage Examples", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 16, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f36cf6b4-3949-4c1e-a2e7-08abe9347df0": {"__data__": {"id_": "f36cf6b4-3949-4c1e-a2e7-08abe9347df0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "22d137f0-ec93-4ea9-8c8d-5a9d3a01d904", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "a23fb103cfb63a221c455c1e3169b5852294b2205a164c64c0f5e7e76de2cacf", "class_name": "RelatedNodeInfo"}}, "text": "One-liner\n\nYou can specify the environment variables before the mesop command.\n\n```sh\nMESOP_STATE_SESSION_BACKEND=memory mesop main.py\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 140, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a7287b4c-c6dc-4e20-975d-ec49a38e470f": {"__data__": {"id_": "a7287b4c-c6dc-4e20-975d-ec49a38e470f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a17d53aa-5b88-4a50-b7ff-1d56d3ab7f09", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}, "hash": "26b901065a5a711d3f8ad3a92b186f4898aff4680ed82395ab353d829871c310", "class_name": "RelatedNodeInfo"}}, "text": "Use a .env file\n\nMesop also supports `.env` files. This is nice since you don't have to keep setting\nthe environment variables. In addition, the variables are only set when the application\nis run.\n\n```sh title=\".env\"\nMESOP_STATE_SESSION_BACKEND=file\nMESOP_STATE_SESSION_BACKEND_FILE_BASE_DIR=/tmp/mesop-sessions\n```\n\nWhen you run your Mesop app, the .env file will then be read.\n\n```sh\nmesop main.py\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 405, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ad149351-6ecd-47fa-86e4-93b1c38727ff": {"__data__": {"id_": "ad149351-6ecd-47fa-86e4-93b1c38727ff", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "65a5b424-9528-4f97-acdc-43019f8eb111", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "hash": "8611a661ef5a5db98ba6c84d044cace00a22085f732a4bb06455ed866d60336e", "class_name": "RelatedNodeInfo"}}, "text": "Page API", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 10, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5958bedb-5ff7-4ab4-bc28-4ba91589719d": {"__data__": {"id_": "5958bedb-5ff7-4ab4-bc28-4ba91589719d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e216818b-28ac-42de-a60b-f299859e968e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "hash": "42badbd50a20620ee68eff7998d6442fcef14ee4dc29534839369a9febb76bfe", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nPages allow you to build multi-page applications by decorating Python functions with `me.page`. To learn more, read the see multi-pages guide.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 154, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ee920357-cb2c-4dd0-ba12-0afb14d91d61": {"__data__": {"id_": "ee920357-cb2c-4dd0-ba12-0afb14d91d61", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "435798af-fbbe-4611-9733-8f2fdd401428", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "hash": "bf1cfe5841f41a724b200c272fa10013aa603ddb3cee5de4047561579c7ac64e", "class_name": "RelatedNodeInfo"}}, "text": "Examples", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 10, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "09d6f71d-593e-4cf5-bd42-f829d4112fed": {"__data__": {"id_": "09d6f71d-593e-4cf5-bd42-f829d4112fed", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4fe263ed-152f-4240-bb43-2affad0166a5", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "hash": "c6e4f748a0b6d7b2a97706331c1230b336f0f784f5ab3b01e1463cde07f23edd", "class_name": "RelatedNodeInfo"}}, "text": "Simple, 1-page setup\n\nTo create a simple Mesop app, you can use `me.page()` like this:\n\n```python\nimport mesop as me\n\n@me.page()\ndef foo():\n me.text(\"bar\")\n```\n\n> NOTE: If you do not provide a `path` argument, then it defaults to the root path `\"/\"`.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 255, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "61571715-9c34-4f8b-8935-509142863bc8": {"__data__": {"id_": "61571715-9c34-4f8b-8935-509142863bc8", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4ecebb00-0dfe-445a-8279-8e3a0557d3ae", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "hash": "3d27344b5ce7074e4e67287213711f2dac0579f46c05b4d97795e776975a85d3", "class_name": "RelatedNodeInfo"}}, "text": "Explicit 1-page setup\n\nThis is the same as the above example which explicitly sets the route to `\"/\"`.\n\n```python\nimport mesop as me\n\n@me.page(path=\"/\")\ndef foo():\n me.text(\"bar\")\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 188, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3a49fb03-7c1a-4bd3-8b64-9ee13b96304b": {"__data__": {"id_": "3a49fb03-7c1a-4bd3-8b64-9ee13b96304b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d926343e-2365-4de7-97d4-f5d0303c95eb", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "hash": "88679526baf134c702631a149f6b4c5cba454cbf5418f9c33198bf6a72e07061", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.features.page.page\n::: mesop.security.security_policy.SecurityPolicy\n::: mesop.events.events.LoadEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 119, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "18cd8329-d075-4585-a8d5-44ee7501c6ba": {"__data__": {"id_": "18cd8329-d075-4585-a8d5-44ee7501c6ba", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a167faa6-650b-418f-8a61-0f0d101cc161", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "hash": "2f983f1892f384e4ffcda5d03a4810523f13bbeb554cc62f7b6a6e06e61dbda9", "class_name": "RelatedNodeInfo"}}, "text": "`on_load`\n\nYou may want to do some sort of data-processing when a page is first loaded in a session.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 102, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "add5ebb8-29c7-480d-9f2f-6302faf7edcc": {"__data__": {"id_": "add5ebb8-29c7-480d-9f2f-6302faf7edcc", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a610a10e-ba66-48b7-8ebe-734868bb1c60", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "hash": "df7812d13b81e0b06aff477a32e4f63976b7daf376bcd540ebc36e0ca60b83ec", "class_name": "RelatedNodeInfo"}}, "text": "Simple handler\n\nAn `on_load` handler is similar to a regular event handler where you can mutate state.\n\n```python\n--8<-- \"mesop/examples/docs/on_load.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 159, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2d27c53c-bbb4-4519-bcdc-6d1b322bac98": {"__data__": {"id_": "2d27c53c-bbb4-4519-bcdc-6d1b322bac98", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6dd1cb20-564c-4e3e-afbe-cc2dc687522a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}, "hash": "07b03a218c27ecedd64f42e037bfb1c91122c4c82f9583516e81f5e1822d05b1", "class_name": "RelatedNodeInfo"}}, "text": "Generator handler\n\nThe `on_load` handler can also be a generator function. This is useful if you need to call a slow or streaming API and want to return intermediate results before all the data has been received.\n\n```python\n--8<-- \"mesop/examples/docs/on_load_generator.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 279, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "27042a8f-7fc9-4bc6-99a5-f9bda0126d75": {"__data__": {"id_": "27042a8f-7fc9-4bc6-99a5-f9bda0126d75", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "acf13854-529c-4b03-82be-b9e96ed5a4b0", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "hash": "bede622c3ec49a10250229503217a64b39b2d456a3928f30dca87a551fc2d3b5", "class_name": "RelatedNodeInfo"}}, "text": "Query Params API", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 18, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a643a70b-73a5-4f4b-b225-4707cd2e1cf8": {"__data__": {"id_": "a643a70b-73a5-4f4b-b225-4707cd2e1cf8", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "cfcbd9c9-24b7-4f43-996d-918221f14b6f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "hash": "6defc2cb0fa88176d2f8c974361387d9fcaa9ee1820acb663789de9af44ca5f9", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nQuery params, also sometimes called query string, provide a way to manage state in the URLs. They are useful for providing deep-links into your Mesop app.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 166, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ac11663d-4073-4658-9576-513402d70608": {"__data__": {"id_": "ac11663d-4073-4658-9576-513402d70608", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ccbde9b5-3cec-4579-8c1a-05dbba6bdedd", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "hash": "dd9a145f4deec16c53df4bd39a85abd93db6a73483cc0772a7da7c330051b309", "class_name": "RelatedNodeInfo"}}, "text": "Example\n\nHere's a simple working example that shows how you can read and write query params.\n\n```py\n@me.page(path=\"/examples/query_params/page_2\")\ndef page_2():\n me.text(f\"query_params={me.query_params}\")\n me.button(\"Add query param\", on_click=add_query_param)\n me.button(\"Navigate\", on_click=navigate)\n\ndef add_query_param(e: me.ClickEvent):\n me.query_params[\"key\"] = \"value\"\n\ndef navigate(e: me.ClickEvent):\n me.navigate(\"/examples/query_params\", query_params=me.query_params)\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 489, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a8b51a7e-1144-41df-be77-566a225270a0": {"__data__": {"id_": "a8b51a7e-1144-41df-be77-566a225270a0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ba2c9da4-b8d2-4e05-ae1b-f3d522f9688f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "hash": "83e7f7fffcf95ea5e11e23d23fa7e77f15d2a09c4fb329c55ec4878ff707c1c3", "class_name": "RelatedNodeInfo"}}, "text": "Usage\n\nYou can use query parameters from `me.query_params`, which has a dictionary-like interface, where the key is the parameter name and value is the parameter value.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 170, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bc844cbb-bb2e-45f4-abf6-81bf106ea583": {"__data__": {"id_": "bc844cbb-bb2e-45f4-abf6-81bf106ea583", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "0ac558d3-a107-4b97-8797-fa65a6e5c248", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "hash": "9618d1fbc6ac36c00e37a3a42939467c1653e4d8a73e91fa97889af247e57520", "class_name": "RelatedNodeInfo"}}, "text": "Get a query param value\n\n```py\nvalue: str = me.query_params['param_name']\n```\nThis will raise a KeyError if the parameter doesn't exist. You can use `in` to check whether a key exists in `me.query_params`:\n\n```py\nif 'key' in me.query_params:\n print(me.query_params['key'])\n```\n\n???+ NOTE \"Repeated query params\"\n If a query param key is repeated, then you will get the _first_ value. If you want all the values use `get_all`.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 433, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0cf43976-0890-463c-b32d-244fc5e44dda": {"__data__": {"id_": "0cf43976-0890-463c-b32d-244fc5e44dda", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f658c726-6286-4429-89c0-06ccacfe8488", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "hash": "08158de2bfc25982920f6246e8cba43455e8de6086e17c4c27f564a345bb7578", "class_name": "RelatedNodeInfo"}}, "text": "Get all values\n\nTo get all the values for a particular query parameter key, you can use `me.query_params.get_all`, which returns a sequence of parameter values (currently implemented as a `tuple`).\n\n```py\nall_values = me.query_params.get_all('param_name')\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 261, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "62f34ff7-0ba6-4f66-96cd-18ae41d44fab": {"__data__": {"id_": "62f34ff7-0ba6-4f66-96cd-18ae41d44fab", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "408201f6-2ebc-4f2a-8d9f-f65a62619eb7", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "hash": "a520e8fc9f789f21a65dbe05688eb143116a322477f184d6442598731fe0e7e4", "class_name": "RelatedNodeInfo"}}, "text": "Iterate\n\n```py\nfor key in query_params:\n value = query_params[key]\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 73, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f8304870-a2e8-4bf3-85fd-f0a1c5b095a7": {"__data__": {"id_": "f8304870-a2e8-4bf3-85fd-f0a1c5b095a7", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "0db5c4a4-4bae-46de-b3bc-7da7fce494ca", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "hash": "fd33beac694b708be1aa9d961da8cc3bc710f42a7a499dff32facef133ca6a76", "class_name": "RelatedNodeInfo"}}, "text": "Set query param\n\n```py\nquery_params['new_param'] = 'value'\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 64, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7639ca07-ca2e-4062-b900-b30655fc9627": {"__data__": {"id_": "7639ca07-ca2e-4062-b900-b30655fc9627", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6010f816-93e5-40f0-9ab8-c8ba0995ff3e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "hash": "41de1321d71f036f59c6f59f5f2dcf03dc660a58c91f4496168abd041eb0b00e", "class_name": "RelatedNodeInfo"}}, "text": "Set repeated query param\n\n```py\nquery_params['repeated_param'] = ['value1', 'value2']\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 91, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c4da8a5f-5d54-41b7-8d90-4cfd401f9a38": {"__data__": {"id_": "c4da8a5f-5d54-41b7-8d90-4cfd401f9a38", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "1f221282-aa00-4549-b5d9-35c82803f1d9", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "hash": "12e72c5011b2edc310e6ad0b8e5176c817163ad8903f2cbb97e60298e67ef854", "class_name": "RelatedNodeInfo"}}, "text": "Delete\n\n```py\ndel query_params['param_to_delete']\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 55, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "47df6df8-9f1a-4d7c-8d88-b40c0ca1886e": {"__data__": {"id_": "47df6df8-9f1a-4d7c-8d88-b40c0ca1886e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2566a117-a230-4925-9869-892ac73bcafe", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "hash": "9e97a5c8b9a16a5adbf08f89fd62ef40e1d2229c631af5856bf0b447ee0602ad", "class_name": "RelatedNodeInfo"}}, "text": "Patterns", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 10, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "de2abf1f-c48f-4a7b-aeab-31b3545d5f53": {"__data__": {"id_": "de2abf1f-c48f-4a7b-aeab-31b3545d5f53", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e9b367f6-6da5-4876-b321-e5339bf264a7", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "hash": "f0400960e85d312df939178200966f1bee5d92afc7ac505d22dcd2fa17b5e7fb", "class_name": "RelatedNodeInfo"}}, "text": "Navigate with existing query params\n\nHere's an example of how to navigate to a new page with query parameters:\n\n```py\ndef click_navigate_button(e: me.ClickEvent):\n me.query_params['q'] = \"value\"\n me.navigate('/search', query_params=me.query_params)\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 260, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "682d956a-911d-4fb8-8726-ed6a54eb7c0b": {"__data__": {"id_": "682d956a-911d-4fb8-8726-ed6a54eb7c0b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d0d195f8-9c79-49f9-bf00-50e40d5b8d22", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}, "hash": "69e857e68f743b0af9b9f7b3d4481b20fb3c5080c3126144fca7d63e00159b81", "class_name": "RelatedNodeInfo"}}, "text": "Navigate with only new query params\n\nYou can also navigate by passing in a dictionary to `query_params` parameter for `me.navigate` if you do _not_ want to keep the existing query parameters.\n\n```py\ndef click_navigate_button(e: me.ClickEvent):\n me.navigate('/search', query_params={\"q\": \"value})\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 304, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8fd915cf-b629-43c5-a6dd-5e6e0dbd6833": {"__data__": {"id_": "8fd915cf-b629-43c5-a6dd-5e6e0dbd6833", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/style", "title": "Style"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2d7f157f-779d-4e7e-8015-f6e05275b833", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/style", "title": "Style"}, "hash": "c7dd633f4e49e65d21133709070800a39b87a7667bcceb974cd51641d9331088", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nMesop provides a Python API that wraps the browser's native CSS style API.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 86, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4ce03f2e-0b56-4236-bde4-a8719060fc99": {"__data__": {"id_": "4ce03f2e-0b56-4236-bde4-a8719060fc99", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/style", "title": "Style"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c1c4201c-f444-4d78-83ab-5faa5340d8d0", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/style", "title": "Style"}, "hash": "cb7a92595501ff0cc674435eb9f760dae6d3d26042023a82ea11456d01fc8990", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.component_helpers.style.Style\n::: mesop.component_helpers.style.Border\n::: mesop.component_helpers.style.BorderSide\n::: mesop.component_helpers.style.Margin\n::: mesop.component_helpers.style.Padding", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 215, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7a58dbb3-7541-4d00-bc47-3b3e45c3f3de": {"__data__": {"id_": "7a58dbb3-7541-4d00-bc47-3b3e45c3f3de", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "142c467c-f0ce-48b1-b658-2ba37dd02387", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}, "hash": "8a509f9427dec8080cbb0aed2e64b8e309ef5fc72cf7eb4880557de135bc677e", "class_name": "RelatedNodeInfo"}}, "text": "Viewport size", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 15, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "00b97aa6-a3f5-4859-8788-cbd770957004": {"__data__": {"id_": "00b97aa6-a3f5-4859-8788-cbd770957004", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "1cc359a3-8995-4d23-9657-25049d5803a1", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}, "hash": "4cdc74a73cdf4f5430d1f161e93f2bac57e312a1874e0ac7b5414348116aacbe", "class_name": "RelatedNodeInfo"}}, "text": "Overview\nThe viewport size API allows you to access the current viewport size. This can be useful for creating responsive and adaptive designs that are suitable for the user's screen size.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 190, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c460f74e-9e54-4183-91b3-1b60d8df6d3b": {"__data__": {"id_": "c460f74e-9e54-4183-91b3-1b60d8df6d3b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "82b82f6a-8331-4706-94ad-d1647432901b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}, "hash": "b38620d621b29311a248a6d5d8e9cafd6c3a9ebc700b0305d1489855b4ec3a9f", "class_name": "RelatedNodeInfo"}}, "text": "Examples", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 10, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "294e69e5-d76b-448f-92e2-abf8ee80ebd7": {"__data__": {"id_": "294e69e5-d76b-448f-92e2-abf8ee80ebd7", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e554411a-930f-4c29-b9d2-5b157b031b9c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}, "hash": "d136ca7aafb9246c4d8d622bd15b9cb46a5ba70fdb62465a1af05184d9084696", "class_name": "RelatedNodeInfo"}}, "text": "Responsive Design\n\nResponsive design is having a single fluid layout that adapts to all screen sizes.\n\nYou can use the viewport size to dynamically set the property of a style. This can be useful if you want to fit two boxes in a row for larger screens (e.g. desktop) and a single box for smaller screens (e.g. mobile) as shown in the example below:\n\n```py\nimport mesop as me\n\n@me.page()\ndef page():\n if me.viewport_size().width > 640:\n width = me.viewport_size().width / 2\n else:\n width = me.viewport_size().width\n for i in range(8):\n me.box(style=me.Style(width=width))\n```\n\n> Tip: Responsive design tends to take less work and is usually a good starting point.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 693, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "810c5fc4-e352-4064-9d97-75cdfbe101ef": {"__data__": {"id_": "810c5fc4-e352-4064-9d97-75cdfbe101ef", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e0f3b408-2e7e-4fb9-bdf4-1546ed2a34b3", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}, "hash": "6b96f87feddac93cb1ffaf75ce99c171511127b8ba319dd065c8796ab8a3ea5d", "class_name": "RelatedNodeInfo"}}, "text": "Adaptive Design\n\nAdaptive design is having multiple fixed layouts for specific device categories at specific breakpoints, typically viewport width.\n\nFor example, oftentimes you will hide the nav component on a mobile device and instead show a hamburger menu, while for a larger device you will always show the nav component on the left side.\n\n```py\nimport mesop as me\n\n@me.page()\ndef page():\n if me.viewport_size().width > 480:\n nav_component()\n body()\n else:\n body(show_menu_button=True)\n```\n\n> Tip: Adaptive design tends to take more work and is best for optimizing complex mobile and desktop experiences.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 636, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a44bf914-9f62-4616-b58b-7ac8c7f472cd": {"__data__": {"id_": "a44bf914-9f62-4616-b58b-7ac8c7f472cd", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "468a7a0d-9fa5-4518-b0f7-5fa55c6aec89", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}, "hash": "7c343cbaba06ac47344ed09d36eb674ad5e27041f1dfb7c66d41767fbe4735b4", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.features.viewport_size.viewport_size\n\n::: mesop.features.viewport_size.Size", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 92, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7d019073-fdf2-4d5d-b146-e05c0d3a97bc": {"__data__": {"id_": "7d019073-fdf2-4d5d-b146-e05c0d3a97bc", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "35ef8a34-a351-4a39-aef3-0999cd865b4b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "hash": "1bf0a8689e79ce74adb7b28bff4f78a9cd4d6ec6871ece7f3036c362f9282cf7", "class_name": "RelatedNodeInfo"}}, "text": "DuoChat Codelab Part 2: Building the basic UI\n\nIn this section, we'll create the main layout for our DuoChat application, including the header, chat input area, and some basic styling. We'll use Mesop's components and styling system to create an attractive and functional UI.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 277, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7be442bb-ccca-4e69-adb4-11f361e0a738": {"__data__": {"id_": "7be442bb-ccca-4e69-adb4-11f361e0a738", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4e91567c-770a-46f7-8d17-84b7ef8a00e1", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "hash": "93ac71341ca2298e09d1088706648cfbc2f648ae95b2b814be797126141726b4", "class_name": "RelatedNodeInfo"}}, "text": "Updating the Main Layout\n\nLet's start by updating our `main.py` file to include a more structured layout. We'll use Mesop's `box` component for layout and add some custom styles.\n\nReplace the content of `main.py` with the following:\n\n```python title=\"main.py\"\nimport mesop as me\n\nROOT_BOX_STYLE = me.Style(\n background=\"#e7f2ff\",\n height=\"100%\",\n font_family=\"Inter\",\n display=\"flex\",\n flex_direction=\"column\",\n)\n\n@me.page(\n path=\"/\",\n stylesheets=[\n \"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\"\n ],\n)\ndef page():\n with me.box(style=ROOT_BOX_STYLE):\n header()\n with me.box(\n style=me.Style(\n width=\"min(680px, 100%)\",\n margin=me.Margin.symmetric(\n horizontal=\"auto\",\n vertical=36,\n ),\n )\n ):\n me.text(\n \"Chat with multiple models at once\",\n style=me.Style(\n font_size=20,\n margin=me.Margin(bottom=24),\n ),\n )\n chat_input()\n\ndef header():\n with me.box(\n style=me.Style(\n padding=me.Padding.all(16),\n ),\n ):\n me.text(\n \"DuoChat\",\n style=me.Style(\n font_weight=500,\n font_size=24,\n color=\"#3D3929\",\n letter_spacing=\"0.3px\",\n ),\n )\n\ndef chat_input():\n with me.box(\n style=me.Style(\n border_radius=16,\n padding=me.Padding.all(8),\n background=\"white\",\n display=\"flex\",\n width=\"100%\",\n )\n ):\n with me.box(style=me.Style(flex_grow=1)):\n me.native_textarea(\n placeholder=\"Enter a prompt\",\n style=me.Style(\n padding=me.Padding(top=16, left=16),\n outline=\"none\",\n width=\"100%\",\n border=me.Border.all(me.BorderSide(style=\"none\")),\n ),\n )\n with me.content_button(type=\"icon\"):\n me.icon(\"send\")\n```\n\nRun the Mesop app and look at the changes:\n\n```sh\nmesop main.py\n```\n\nLet's review the changes:\n\n1. We've added a `ROOT_BOX_STYLE` to set the overall layout and background color.\n2. We're importing a custom font (Inter) using the `stylesheets` parameter in the `@me.page` decorator.\n3. We've created separate functions for the `header` and `chat_input` components.\n4. The main layout uses nested `box` components with custom styles to create a centered, responsive design.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 2647, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "86720040-4b24-4f57-8e79-6081af655b4c": {"__data__": {"id_": "86720040-4b24-4f57-8e79-6081af655b4c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2b89fd00-438d-4cf4-9e81-d48b0394f432", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "hash": "399bea49e1cf95ff1c894893ce65ed9a4e8ee929e9457bc6691a5d264b606de3", "class_name": "RelatedNodeInfo"}}, "text": "Understanding Mesop's Styling System\n\nMesop's styling system is based on Python classes that correspond to CSS properties. You can learn more by reading the Style API docs.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 174, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2e2278d9-0a27-4449-9e8f-9dcec3877053": {"__data__": {"id_": "2e2278d9-0a27-4449-9e8f-9dcec3877053", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b0bc439f-dc48-489d-8f47-ae6a3b9134e7", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "hash": "598cd6617dabdc83d0feca72bb13f52f563490bcf7d1f79f5479134de55be291", "class_name": "RelatedNodeInfo"}}, "text": "Adding Interactivity\n\nNow, let's add some basic interactivity to our chat input. We'll update the `chat_input` function to handle user input:\n\n```python title=\"main.py\"\n@me.stateclass\nclass State:\n input: str = \"\"\n\ndef on_blur(e: me.InputBlurEvent):\n state = me.state(State)\n state.input = e.value\n\ndef chat_input():\n state = me.state(State)\n with me.box(\n style=me.Style(\n border_radius=16,\n padding=me.Padding.all(8),\n background=\"white\",\n display=\"flex\",\n width=\"100%\",\n )\n ):\n with me.box(style=me.Style(flex_grow=1)):\n me.native_textarea(\n value=state.input,\n placeholder=\"Enter a prompt\",\n on_blur=on_blur,\n style=me.Style(\n padding=me.Padding(top=16, left=16),\n outline=\"none\",\n width=\"100%\",\n border=me.Border.all(me.BorderSide(style=\"none\")),\n ),\n )\n with me.content_button(type=\"icon\", on_click=send_prompt):\n me.icon(\"send\")\n\ndef send_prompt(e: me.ClickEvent):\n state = me.state(State)\n print(f\"Sending prompt: {state.input}\")\n state.input = \"\"\n```\n\nHere's what we've added:\n\n1. A `State` class to manage the application state, including the user's input.\n2. An `on_blur` function to update the state when the user switches focus from the textarea.\n3. A `send_prompt` function that will be called when the send button is clicked.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1536, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bc0323ae-fba1-4316-9500-c4a75a38cc1a": {"__data__": {"id_": "bc0323ae-fba1-4316-9500-c4a75a38cc1a", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e6898a83-0800-4165-b8b7-2f97d17dd442", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "hash": "5067cf96f55ffbe32e70eb8ed72b427ca161f0e4e35d997e832eca9f457671df", "class_name": "RelatedNodeInfo"}}, "text": "Running the Updated Application\n\nRun the application again with `mesop main.py` and navigate to `http://localhost:32123`. You should now see a styled header, a centered layout, and a functional chat input area.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 212, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "66d1c691-0240-4d84-a82d-819c2542415e": {"__data__": {"id_": "66d1c691-0240-4d84-a82d-819c2542415e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b6d04257-e356-47e3-9348-118c410d2d01", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "hash": "2c5b549e100162d4bffee88ae416ab18ae4ec2c874509906a326a30b4ee2fe08", "class_name": "RelatedNodeInfo"}}, "text": "Troubleshooting\n\nIf you're having trouble, compare your code to the solution.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 79, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "69a92504-73d3-413c-b733-466df9d9441d": {"__data__": {"id_": "69a92504-73d3-413c-b733-466df9d9441d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "cbf11523-368e-41a9-8462-26b6016459c2", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}, "hash": "39819ed3b81b418f27e43cb695c7f9b321faece622e06093c3e4e6a750a1cd22", "class_name": "RelatedNodeInfo"}}, "text": "Next Steps\n\nIn the next section, we'll dive deeper into state management and implement the model picker dialog.\n\n\n Managing state & dialogs", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 144, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5ed3b8d7-9563-4677-890e-d2adfaa1037d": {"__data__": {"id_": "5ed3b8d7-9563-4677-890e-d2adfaa1037d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f2663c1f-f11e-4456-aa73-52058fb1f810", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "hash": "5ef5d547ea1f5fec36674748cdeb2a03484fbeb98cf173a0a39e0ef88bb91966", "class_name": "RelatedNodeInfo"}}, "text": "DuoChat Codelab Part 3: Managing state & dialogs\n\nIn this section, we'll expand our application's state management capabilities and implement a dialog for selecting AI models. We'll use Mesop's state management system and dialog components to create an interactive model selection experience.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 294, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b492d61f-de1a-43c6-a43b-454e4203e325": {"__data__": {"id_": "b492d61f-de1a-43c6-a43b-454e4203e325", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e193a3f7-6496-4cff-8d99-b9932fe85d4a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "hash": "6e6d9bd9909b5e6fbd6ebbce59ae930bd764e676e32135eb71b954aeb5ad890d", "class_name": "RelatedNodeInfo"}}, "text": "Expanding the State Management\n\nFirst, let's create a `data_model.py` file with a more comprehensive state structure:\n\n```python title=\"data_model.py\"\nfrom dataclasses import dataclass, field\nfrom typing import Literal\nfrom enum import Enum\n\nimport mesop as me\n\nRole = Literal[\"user\", \"model\"]\n\n@dataclass(kw_only=True)\nclass ChatMessage:\n role: Role = \"user\"\n content: str = \"\"\n in_progress: bool = False\n\nclass Models(Enum):\n GEMINI_1_5_FLASH = \"Gemini 1.5 Flash\"\n GEMINI_1_5_PRO = \"Gemini 1.5 Pro\"\n CLAUDE_3_5_SONNET = \"Claude 3.5 Sonnet\"\n\n@dataclass\nclass Conversation:\n model: str = \"\"\n messages: list[ChatMessage] = field(default_factory=list)\n\n@me.stateclass\nclass State:\n is_model_picker_dialog_open: bool = False\n input: str = \"\"\n conversations: list[Conversation] = field(default_factory=list)\n models: list[str] = field(default_factory=list)\n gemini_api_key: str = \"\"\n claude_api_key: str = \"\"\n\n@me.stateclass\nclass ModelDialogState:\n selected_models: list[str] = field(default_factory=list)\n```\n\nThis expanded state structure allows us to manage multiple conversations, selected models, and API keys.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1159, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b0c726ea-9206-4871-851e-f439811d5879": {"__data__": {"id_": "b0c726ea-9206-4871-851e-f439811d5879", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "fb0bc33c-0104-4351-9a88-4371d549b045", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "hash": "8e2d901b5a872467a53ae8042283619adb03441c7a40efa42ebc571ab9b3f0ac", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "44734187-e1b8-4f3a-a3c8-b0f95321e772", "node_type": "1", "metadata": {}, "hash": "fb8abd6f69b62fe78d7eafe2e489a90bdb4a7f5af91682d06e1627770c05ebcd", "class_name": "RelatedNodeInfo"}}, "text": "Implementing the Model Picker Dialog\n\nNow, let's implement the model picker dialog in our `main.py` file. First, we'll create a new file called `dialog.py` with the following content, which is based on the dialog pattern from the demo gallery:\n\n```python title=\"dialog.py\"\nimport mesop as me\n\n@me.content_component\ndef dialog(is_open: bool):\n with me.box(\n style=me.Style(\n background=\"rgba(0,0,0,0.4)\",\n display=\"block\" if is_open else \"none\",\n height=\"100%\",\n overflow_x=\"auto\",\n overflow_y=\"auto\",\n position=\"fixed\",\n width=\"100%\",\n z_index=1000,\n )\n ):\n with me.box(\n style=me.Style(\n align_items=\"center\",\n display=\"grid\",\n height=\"100vh\",\n justify_items=\"center\",\n )\n ):\n with me.box(\n style=me.Style(\n background=\"#fff\",\n border_radius=20,\n box_sizing=\"content-box\",\n box_shadow=(\n \"0 3px 1px -2px #0003, 0 2px 2px #00000024, 0 1px 5px #0000001f\"\n ),\n margin=me.Margin.symmetric(vertical=\"0\", horizontal=\"auto\"),\n padding=me.Padding.all(20),\n )\n ):\n me.slot()\n\n@me.content_component\ndef dialog_actions():\n with me.box(\n style=me.Style(\n display=\"flex\", justify_content=\"end\", margin=me.Margin(top=20)\n )\n ):\n me.slot()\n```\n\nNow, let's update our `main.py` file to include the model picker dialog. Copy the following code and replace `main.py` with it:\n\n```python title=\"main.py\"\n# Update the imports:\nimport mesop as me\nfrom data_model import State, Models, ModelDialogState\nfrom dialog import dialog, dialog_actions\n\ndef change_model_option(e: me.CheckboxChangeEvent):\n s = me.state(ModelDialogState)\n if e.checked:\n s.selected_models.append(e.key)\n else:\n s.selected_models.remove(e.key)\n\ndef set_gemini_api_key(e: me.InputBlurEvent):\n me.state(State).gemini_api_key = e.value\n\ndef set_claude_api_key(e: me.InputBlurEvent):\n me.state(State).claude_api_key = e.value\n\ndef model_picker_dialog():\n state = me.state(State)\n with dialog(state.is_model_picker_dialog_open):\n with me.box(style=me.Style(display=\"flex\", flex_direction=\"column\", gap=12)):\n me.text(\"API keys\")\n me.input(\n label=\"Gemini API Key\",\n value=state.gemini_api_key,\n on_blur=set_gemini_api_key,\n )\n me.input(\n label=\"Claude API Key\",\n value=state.claude_api_key,\n on_blur=set_claude_api_key,\n )\n me.text(\"Pick a model\")\n for model in Models:\n if model.name.startswith(\"GEMINI\"):\n disabled = not state.gemini_api_key\n elif model.name.startswith(\"CLAUDE\"):\n disabled = not state.claude_api_key\n else:\n disabled = False\n me.checkbox(\n key=model.value,\n label=model.value,\n checked=model.value in state.models,\n disabled=disabled,\n on_change=change_model_option,\n style=me.Style(\n display=\"flex\",\n flex_direction=\"column\",\n gap=4,\n padding=me.Padding(top=12),\n ),\n )\n with dialog_actions():\n me.button(\"Cancel\", on_click=close_model_picker_dialog)\n me.button(\"Confirm\", on_click=confirm_model_picker_dialog)\n\ndef close_model_picker_dialog(e: me.ClickEvent):\n state = me.state(State)\n state.is_model_picker_dialog_open = False\n\ndef confirm_model_picker_dialog(e: me.ClickEvent):\n dialog_state = me.state(ModelDialogState)\n state = me.state(State)\n state.is_model_picker_dialog_open = False\n state.models = dialog_state.selected_models\n\nROOT_BOX_STYLE = me.Style(\n background=\"#e7f2ff\",\n height=\"100%\",\n font_family=\"Inter\",\n display=\"flex\",\n flex_direction=\"column\",\n)\n\n@me.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 4256, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "44734187-e1b8-4f3a-a3c8-b0f95321e772": {"__data__": {"id_": "44734187-e1b8-4f3a-a3c8-b0f95321e772", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "fb0bc33c-0104-4351-9a88-4371d549b045", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "hash": "8e2d901b5a872467a53ae8042283619adb03441c7a40efa42ebc571ab9b3f0ac", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b0c726ea-9206-4871-851e-f439811d5879", "node_type": "1", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "hash": "50c871829e94d58cda327bb11e743164a1b8513512258b03159756bb4a93a39a", "class_name": "RelatedNodeInfo"}}, "text": "flex_direction=\"column\",\n gap=4,\n padding=me.Padding(top=12),\n ),\n )\n with dialog_actions():\n me.button(\"Cancel\", on_click=close_model_picker_dialog)\n me.button(\"Confirm\", on_click=confirm_model_picker_dialog)\n\ndef close_model_picker_dialog(e: me.ClickEvent):\n state = me.state(State)\n state.is_model_picker_dialog_open = False\n\ndef confirm_model_picker_dialog(e: me.ClickEvent):\n dialog_state = me.state(ModelDialogState)\n state = me.state(State)\n state.is_model_picker_dialog_open = False\n state.models = dialog_state.selected_models\n\nROOT_BOX_STYLE = me.Style(\n background=\"#e7f2ff\",\n height=\"100%\",\n font_family=\"Inter\",\n display=\"flex\",\n flex_direction=\"column\",\n)\n\n@me.page(\n path=\"/\",\n stylesheets=[\n \"https://fonts.googleapis.com/css2?family=Inter:wght@100.900&display=swap\"\n ],\n)\ndef page():\n model_picker_dialog()\n with me.box(style=ROOT_BOX_STYLE):\n header()\n with me.box(\n style=me.Style(\n width=\"min(680px, 100%)\",\n margin=me.Margin.symmetric(horizontal=\"auto\", vertical=36),\n )\n ):\n me.text(\n \"Chat with multiple models at once\",\n style=me.Style(font_size=20, margin=me.Margin(bottom=24)),\n )\n chat_input()\n\ndef header():\n with me.box(\n style=me.Style(\n padding=me.Padding.all(16),\n ),\n ):\n me.text(\n \"DuoChat\",\n style=me.Style(\n font_weight=500,\n font_size=24,\n color=\"#3D3929\",\n letter_spacing=\"0.3px\",\n ),\n )\n\ndef switch_model(e: me.ClickEvent):\n state = me.state(State)\n state.is_model_picker_dialog_open = True\n dialog_state = me.state(ModelDialogState)\n dialog_state.selected_models = state.models[:]\n\ndef chat_input():\n state = me.state(State)\n with me.box(\n style=me.Style(\n border_radius=16,\n padding=me.Padding.all(8),\n background=\"white\",\n display=\"flex\",\n width=\"100%\",\n )\n ):\n with me.box(style=me.Style(flex_grow=1)):\n me.native_textarea(\n value=state.input,\n placeholder=\"Enter a prompt\",\n on_blur=on_blur,\n style=me.Style(\n padding=me.Padding(top=16, left=16),\n outline=\"none\",\n width=\"100%\",\n border=me.Border.all(me.BorderSide(style=\"none\")),\n ),\n )\n with me.box(\n style=me.Style(\n display=\"flex\",\n padding=me.Padding(left=12, bottom=12),\n cursor=\"pointer\",\n ),\n on_click=switch_model,\n ):\n me.text(\n \"Model:\",\n style=me.Style(font_weight=500, padding=me.Padding(right=6)),\n )\n if state.models:\n me.text(\", \".join(state.models))\n else:\n me.text(\"(no model selected)\")\n with me.content_button(\n type=\"icon\", on_click=send_prompt, disabled=not state.models\n ):\n me.icon(\"send\")\n\ndef on_blur(e: me.InputBlurEvent):\n state = me.state(State)\n state.input = e.value\n\ndef send_prompt(e: me.ClickEvent):\n state = me.state(State)\n print(f\"Sending prompt: {state.input}\")\n print(f\"Selected models: {state.models}\")\n state.input = \"\"\n```\n\nThis updated code adds the following features:\n\n1. A model picker dialog that allows users to select AI models and enter API keys.\n2. State management for selected models and API keys.\n3. A model switcher in the chat input area that opens the model picker dialog.\n4. Disabling of models based on whether the corresponding API key has been entered.", "mimetype": "text/plain", "start_char_idx": null, "end_char_idx": null, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "378213fc-0b67-4a83-9647-ee04bbf97355": {"__data__": {"id_": "378213fc-0b67-4a83-9647-ee04bbf97355", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8286beb5-2897-4723-8955-15bd3ec7b974", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "hash": "4928a6711d3564d962b778aaf68265100309111c73759c3c6f7b6cf3cafdbc6b", "class_name": "RelatedNodeInfo"}}, "text": "Running the Updated Application\n\nRun the application again with `mesop main.py` and navigate to `http://localhost:32123`. You should now see a chat input area with a model switcher. Clicking on the model switcher will open the model picker dialog, allowing you to select models and enter API keys.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 299, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b9dbae4e-ab15-4540-bfa8-97dc73790528": {"__data__": {"id_": "b9dbae4e-ab15-4540-bfa8-97dc73790528", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "33c6bfbb-af78-4af8-9422-cdaf8782a531", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "hash": "75309bc1c3c8f5cfd0314be064df84f7755facfa05385f2af6816bcb1201d47b", "class_name": "RelatedNodeInfo"}}, "text": "Troubleshooting\n\nIf you're having trouble, compare your code to the solution.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 79, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2aa73dfb-9d99-46db-94c1-cb96b7696db6": {"__data__": {"id_": "2aa73dfb-9d99-46db-94c1-cb96b7696db6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "5ecbc694-328b-442b-b485-26b59b8e7ffe", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}, "hash": "244e086c21711da8d5ebaa192a49844780010235eabb2f582d923fee2e4c08bf", "class_name": "RelatedNodeInfo"}}, "text": "Next Steps\n\nIn the next section, we'll integrate multiple AI models into our application. We'll set up connections to Gemini and Claude, implement model-specific chat functions, and create a way to interact with multiple models.\n\n\n Integrating AI APIs", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 256, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d321a6c0-2252-47e1-a68e-dc2306e2c08f": {"__data__": {"id_": "d321a6c0-2252-47e1-a68e-dc2306e2c08f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e1365385-b9ae-4b80-b914-829f08aa6062", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "hash": "0a53b76ca7da71b6d72234c590a705c2d9f2edb64083190918b1d0f1add6303d", "class_name": "RelatedNodeInfo"}}, "text": "DuoChat Codelab Part 4: Integrating AI APIs\n\nIn this section, we'll set up connections to Gemini and Claude, implement model-specific chat functions, and create a unified interface for interacting with multiple models simultaneously.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 235, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9af1e4c3-93ab-4e4a-a390-1ba49e2c2808": {"__data__": {"id_": "9af1e4c3-93ab-4e4a-a390-1ba49e2c2808", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "25bdacbe-ad82-49d0-8a08-d12b464a07d8", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "hash": "24c446c446376da59f1b433061cbe5b0099cb54676242206f4b1533bb888f04d", "class_name": "RelatedNodeInfo"}}, "text": "Setting Up AI Model Connections\n\nFirst, let's create separate files for our Gemini and Claude integrations.\n\nCreate a new file called `gemini.py`:\n\n```python title=\"gemini.py\"\nimport google.generativeai as genai\nfrom typing import Iterable\n\nfrom data_model import ChatMessage, State\nimport mesop as me\n\ngeneration_config = {\n \"temperature\": 1,\n \"top_p\": 0.95,\n \"top_k\": 64,\n \"max_output_tokens\": 8192,\n}\n\ndef configure_gemini():\n state = me.state(State)\n genai.configure(api_key=state.gemini_api_key)\n\ndef send_prompt_pro(prompt: str, history: list[ChatMessage]) -> Iterable[str]:\n configure_gemini()\n model = genai.GenerativeModel(\n model_name=\"gemini-2.5-pro\",\n generation_config=generation_config,\n )\n chat_session = model.start_chat(\n history=[\n {\"role\": message.role, \"parts\": [message.content]} for message in history\n ]\n )\n for chunk in chat_session.send_message(prompt, stream=True):\n yield chunk.text\n\ndef send_prompt_flash(prompt: str, history: list[ChatMessage]) -> Iterable[str]:\n configure_gemini()\n model = genai.GenerativeModel(\n model_name=\"gemini-flash-latest\",\n generation_config=generation_config,\n )\n chat_session = model.start_chat(\n history=[\n {\"role\": message.role, \"parts\": [message.content]} for message in history\n ]\n )\n for chunk in chat_session.send_message(prompt, stream=True):\n yield chunk.text\n```\n\nNow, create a new file called `claude.py`:\n\n```python title=\"claude.py\"\nimport anthropic\nfrom typing import Iterable\n\nfrom data_model import ChatMessage, State\nimport mesop as me\n\ndef call_claude_sonnet(input: str, history: list[ChatMessage]) -> Iterable[str]:\n state = me.state(State)\n client = anthropic.Anthropic(api_key=state.claude_api_key)\n messages = [\n {\n \"role\": \"assistant\" if message.role == \"model\" else message.role,\n \"content\": message.content,\n }\n for message in history\n ] + [{\"role\": \"user\", \"content\": input}]\n\n with client.messages.stream(\n max_tokens=1024,\n messages=messages,\n model=\"claude-3-sonnet-20240229\",\n ) as stream:\n for text in stream.text_stream:\n yield text\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 2273, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d5464ae1-655a-4810-b616-88e67f76dd86": {"__data__": {"id_": "d5464ae1-655a-4810-b616-88e67f76dd86", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "81ade61a-902c-459e-a856-cdb846dad6d9", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "hash": "a6425266b321cd351c1d00d8b226bb9ba844de70462e16081f4e9b446b438bd6", "class_name": "RelatedNodeInfo"}}, "text": "Updating the Main Application\n\nNow, let's update our `main.py` file to integrate these AI models. We'll update the `page` function, add the `display_conversations` and `display_message` functions and modify the `send_prompt` function to handle multiple models and display their responses:\n\n```python title=\"main.py\"\nimport mesop as me\nfrom data_model import State, Models, ModelDialogState, Conversation, ChatMessage\nfrom dialog import dialog, dialog_actions\nimport claude\nimport gemini\n\n# ... (keep the existing imports and styles)\n\n# Replace page() with this:\n@me.page(\n path=\"/\",\n stylesheets=[\n \"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\"\n ],\n)\ndef page():\n model_picker_dialog()\n with me.box(style=ROOT_BOX_STYLE):\n header()\n with me.box(\n style=me.Style(\n width=\"min(680px, 100%)\",\n margin=me.Margin.symmetric(horizontal=\"auto\", vertical=36),\n )\n ):\n me.text(\n \"Chat with multiple models at once\",\n style=me.Style(font_size=20, margin=me.Margin(bottom=24)),\n )\n chat_input()\n display_conversations()\n\n# Add display_conversations and display_message:\ndef display_conversations():\n state = me.state(State)\n for conversation in state.conversations:\n with me.box(style=me.Style(margin=me.Margin(bottom=24))):\n me.text(f\"Model: {conversation.model}\", style=me.Style(font_weight=500))\n for message in conversation.messages:\n display_message(message)\n\ndef display_message(message: ChatMessage):\n style = me.Style(\n padding=me.Padding.all(12),\n border_radius=8,\n margin=me.Margin(bottom=8),\n )\n if message.role == \"user\":\n style.background = \"#e7f2ff\"\n else:\n style.background = \"#ffffff\"\n\n with me.box(style=style):\n me.markdown(message.content)\n if message.in_progress:\n me.progress_spinner()\n\n# Update send_prompt:\ndef send_prompt(e: me.ClickEvent):\n state = me.state(State)\n if not state.conversations:\n for model in state.models:\n state.conversations.append(Conversation(model=model, messages=[]))\n input = state.input\n state.input = \"\"\n\n for conversation in state.conversations:\n model = conversation.model\n messages = conversation.messages\n history = messages[:]\n messages.append(ChatMessage(role=\"user\", content=input))\n messages.append(ChatMessage(role=\"model\", in_progress=True))\n yield\n\n if model == Models.GEMINI_1_5_FLASH.value:\n llm_response = gemini.send_prompt_flash(input, history)\n elif model == Models.GEMINI_1_5_PRO.value:\n llm_response = gemini.send_prompt_pro(input, history)\n elif model == Models.CLAUDE_3_5_SONNET.value:\n llm_response = claude.call_claude_sonnet(input, history)\n else:\n raise Exception(\"Unhandled model\", model)\n\n for chunk in llm_response:\n messages[-1].content += chunk\n yield\n messages[-1].in_progress = False\n yield\n```\n\nThis updated code adds the following features:\n\n1. A `display_conversations` function that shows the chat history for each selected model.\n2. A `display_message` function that renders individual messages with appropriate styling.\n3. An updated `send_prompt` function that sends the user's input to all selected models and displays their responses in real-time.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 3542, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "83642f97-7055-43c4-8026-8b082bf0a824": {"__data__": {"id_": "83642f97-7055-43c4-8026-8b082bf0a824", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a4ee67fa-bc9e-4fd0-bd08-0f0e662bc965", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "hash": "5ca75a8c16611658d72bd1664ff42eb5f5f9b6b3a100b008b600d14a9a2542e7", "class_name": "RelatedNodeInfo"}}, "text": "Handling Streaming Responses\n\nThe `send_prompt` function now uses Python generators to handle streaming responses from the AI models. This allows us to update the UI in real-time as the models generate their responses.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 220, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1b735144-0c6b-406a-bdcf-2dce90c5bfc4": {"__data__": {"id_": "1b735144-0c6b-406a-bdcf-2dce90c5bfc4", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "0bda94d7-4ec6-4960-84c6-b4d663cd6e0e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "hash": "4451a2ff266fe0be9521848679f84e5b3d5a69f7be139c29fc4604f150cd3f05", "class_name": "RelatedNodeInfo"}}, "text": "Running the Updated Application\n\nRun the application again with `mesop main.py` and navigate to `http://localhost:32123`. You should now be able to:\n\n1. Select multiple AI models using the model picker dialog.\n2. Enter API keys for Gemini and Claude.\n3. Send prompts to the selected models.\n4. See the responses from multiple models displayed simultaneously.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 360, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6a9bb807-8089-4cd8-a455-23246b5a4c11": {"__data__": {"id_": "6a9bb807-8089-4cd8-a455-23246b5a4c11", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a887b3f0-0a47-4028-a212-fe2e5beba62b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "hash": "df39fdbd8ae28ce3ffacc349cafed60778af8bad01e4a1ceb2e12c1b6343c140", "class_name": "RelatedNodeInfo"}}, "text": "Troubleshooting\n\nIf you're having trouble, compare your code to the solution.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 79, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f53632e8-59e4-4444-af03-7d5636feaa7f": {"__data__": {"id_": "f53632e8-59e4-4444-af03-7d5636feaa7f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a03f5083-86d2-4e58-8873-491b51ddc6cd", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}, "hash": "890438574bfd704dd9d7cb8e3550bebd880f2ab6b53c7d97e685e3ffa12d20d4", "class_name": "RelatedNodeInfo"}}, "text": "Next Steps\n\nIn the final section, we'll refine the user interface by creating a dedicated conversation page with a multi-column layout for different model responses. We'll also add some finishing touches to improve the overall user experience.\n\n\n Wrapping it up", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 266, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "807a3fba-73ee-4ca4-baf6-cdd8477dcbb0": {"__data__": {"id_": "807a3fba-73ee-4ca4-baf6-cdd8477dcbb0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e5fdbdd2-86aa-4f96-8473-f0ce293b0321", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "hash": "fc0ed8703d31dcdbdc0ddac4fed0c3af609b51acda0160ab5e2cf454663591ac", "class_name": "RelatedNodeInfo"}}, "text": "DuoChat Codelab Part 5: Wrapping it up\n\nIn this section, we'll create a multi-column layout for different model responses, implement user and model message components, add auto-scroll functionality, and finalize the chat experience with multiple models.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 255, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "03f7699d-4c9e-48d6-a9cd-8e6cb462cfb0": {"__data__": {"id_": "03f7699d-4c9e-48d6-a9cd-8e6cb462cfb0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b068438f-df1b-4fd7-b729-3669aebb160f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "hash": "de830d475974a908f04d689ada3753a43b3d60307c86e599420931d3d4eb34d9", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "1a49fdea-1c40-454c-8d80-4679b7c0e529", "node_type": "1", "metadata": {}, "hash": "bf6526fd2361ea0fa994ee6fbe05ac9d68c2053b918a3bcddcc525f459454d0a", "class_name": "RelatedNodeInfo"}}, "text": "Creating a New Conversation Page\n\nFirst, let's create a new page for our conversations. Update the `main.py` file to include a new route and function for the conversation page:\n\n```python title=\"main.py\"\nimport mesop as me\nfrom data_model import State, Models, ModelDialogState, Conversation, ChatMessage\nfrom dialog import dialog, dialog_actions\nimport claude\nimport gemini\n\n# . (keep the existing imports and styles)\n\nSTYLESHEETS = [\n \"https://fonts.googleapis.com/css2?family=Inter:wght@100.900&display=swap\"\n]\n\n@me.page(\n path=\"/\",\n stylesheets=STYLESHEETS,\n)\ndef home_page():\n model_picker_dialog()\n with me.box(style=ROOT_BOX_STYLE):\n header()\n with me.box(\n style=me.Style(\n width=\"min(680px, 100%)\",\n margin=me.Margin.symmetric(horizontal=\"auto\", vertical=36),\n )\n ):\n me.text(\n \"Chat with multiple models at once\",\n style=me.Style(font_size=20, margin=me.Margin(bottom=24)),\n )\n # Uncomment this in the next step:\n # examples_row()\n chat_input()\n\n@me.page(path=\"/conversation\", stylesheets=STYLESHEETS)\ndef conversation_page():\n state = me.state(State)\n model_picker_dialog()\n with me.box(style=ROOT_BOX_STYLE):\n header()\n\n models = len(state.conversations)\n models_px = models * 680\n with me.box(\n style=me.Style(\n width=f\"min({models_px}px, calc(100% - 32px))\",\n display=\"grid\",\n gap=16,\n grid_template_columns=f\"repeat({models}, 1fr)\",\n flex_grow=1,\n overflow_y=\"hidden\",\n margin=me.Margin.symmetric(horizontal=\"auto\"),\n padding=me.Padding.symmetric(horizontal=16),\n )\n ):\n for conversation in state.conversations:\n model = conversation.model\n messages = conversation.messages\n with me.box(\n style=me.Style(\n overflow_y=\"auto\",\n )\n ):\n me.text(\"Model: \" + model, style=me.Style(font_weight=500))\n\n for message in messages:\n if message.role == \"user\":\n user_message(message.content)\n else:\n model_message(message)\n if messages and model == state.conversations[-1].model:\n me.box(\n key=\"end_of_messages\",\n style=me.Style(\n margin=me.Margin(\n bottom=\"50vh\" if messages[-1].in_progress else 0\n )\n ),\n )\n with me.box(\n style=me.Style(\n display=\"flex\",\n justify_content=\"center\",\n )\n ):\n with me.box(\n style=me.Style(\n width=\"min(680px, 100%)\",\n padding=me.Padding(top=24, bottom=24),\n )\n ):\n chat_input()\n\ndef user_message(content: str):\n with me.box(\n style=me.Style(\n background=\"#e7f2ff\",\n padding=me.Padding.all(16),\n margin=me.Margin.symmetric(vertical=16),\n border_radius=16,\n )\n ):\n me.text(content)\n\ndef model_message(message: ChatMessage):\n with me.box(\n style=me.Style(\n background=\"#fff\",\n padding=me.Padding.all(16),\n border_radius=16,\n margin=me.Margin.symmetric(vertical=16),\n )\n ):\n me.markdown(message.content)\n if message.in_progress:\n me.progress_spinner()\n\n# . (keep the existing helper functions)\n\ndef send_prompt(e: me.ClickEvent):\n state = me.state(State)\n if not state.conversations:\n me.navigate(\"/conversation\")\n for model in state.models:\n state.conversations.append(Conversation(model=model, messages=[]))\n input = state.input\n state.input = \"\"\n\n for conversation in state.conversations:\n model = conversation.model\n messages = conversation.messages\n history = messages[:]\n messages.append(ChatMessage(role=\"user\", content=input))\n messages.append(ChatMessage(role=\"model\", in_progress=True))\n yield\n me.", "mimetype": "text/plain", "start_char_idx": null, "end_char_idx": null, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1a49fdea-1c40-454c-8d80-4679b7c0e529": {"__data__": {"id_": "1a49fdea-1c40-454c-8d80-4679b7c0e529", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b068438f-df1b-4fd7-b729-3669aebb160f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "hash": "de830d475974a908f04d689ada3753a43b3d60307c86e599420931d3d4eb34d9", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "03f7699d-4c9e-48d6-a9cd-8e6cb462cfb0", "node_type": "1", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "hash": "f74ea9b3103c49837ddec195e55580ccc367a9be5cda46c9ddd05d601c703b03", "class_name": "RelatedNodeInfo"}}, "text": "padding=me.Padding.all(16),\n border_radius=16,\n margin=me.Margin.symmetric(vertical=16),\n )\n ):\n me.markdown(message.content)\n if message.in_progress:\n me.progress_spinner()\n\n# . (keep the existing helper functions)\n\ndef send_prompt(e: me.ClickEvent):\n state = me.state(State)\n if not state.conversations:\n me.navigate(\"/conversation\")\n for model in state.models:\n state.conversations.append(Conversation(model=model, messages=[]))\n input = state.input\n state.input = \"\"\n\n for conversation in state.conversations:\n model = conversation.model\n messages = conversation.messages\n history = messages[:]\n messages.append(ChatMessage(role=\"user\", content=input))\n messages.append(ChatMessage(role=\"model\", in_progress=True))\n yield\n me.scroll_into_view(key=\"end_of_messages\")\n if model == Models.GEMINI_1_5_FLASH.value:\n llm_response = gemini.send_prompt_flash(input, history)\n elif model == Models.GEMINI_1_5_PRO.value:\n llm_response = gemini.send_prompt_pro(input, history)\n elif model == Models.CLAUDE_3_5_SONNET.value:\n llm_response = claude.call_claude_sonnet(input, history)\n else:\n raise Exception(\"Unhandled model\", model)\n for chunk in llm_response:\n messages[-1].content += chunk\n yield\n messages[-1].in_progress = False\n yield\n```\n\nTry running the app: `mesop main.py` and now you should navigate to the conversation page once you click the send button.", "mimetype": "text/plain", "start_char_idx": null, "end_char_idx": null, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6faa2c10-e8ab-4cf2-b608-42a51bc2ea70": {"__data__": {"id_": "6faa2c10-e8ab-4cf2-b608-42a51bc2ea70", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c8bf059b-5ff6-4022-bc6c-eb4bf0bca4be", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "hash": "fcba8d2497abd3fb4458c97aed30dc2051b57f330ee3a52a81dab9cba8d6d0ad", "class_name": "RelatedNodeInfo"}}, "text": "Adding Example Prompts\n\nLet's add some example prompts to the home page to help users get started. Add the following functions to `main.py`:\n\n```python title=\"main.py\"\nEXAMPLES = [\n \"Create a file-lock in Python\",\n \"Write an email to Congress to have free milk for all\",\n \"Make a nice box shadow in CSS\",\n]\n\ndef examples_row():\n with me.box(\n style=me.Style(\n display=\"flex\", flex_direction=\"row\", gap=16, margin=me.Margin(bottom=24)\n )\n ):\n for i in EXAMPLES:\n example(i)\n\ndef example(text: str):\n with me.box(\n key=text,\n on_click=click_example,\n style=me.Style(\n cursor=\"pointer\",\n background=\"#b9e1ff\",\n width=\"215px\",\n height=160,\n font_weight=500,\n line_height=\"1.5\",\n padding=me.Padding.all(16),\n border_radius=16,\n border=me.Border.all(me.BorderSide(width=1, color=\"blue\", style=\"none\")),\n ),\n ):\n me.text(text)\n\ndef click_example(e: me.ClickEvent):\n state = me.state(State)\n state.input = e.key\n```\n\nAnd then uncomment the callsite for `examples_row` in `home_page`.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1181, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a2043e36-30c2-45a4-b520-b703b4fc9837": {"__data__": {"id_": "a2043e36-30c2-45a4-b520-b703b4fc9837", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c48cccfa-ab8b-4b0f-bd05-e13fde0e393a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "hash": "4546119f8149df3317c6938bbe1c02e9e08111606e1e0e4a76432f3f8580dfa4", "class_name": "RelatedNodeInfo"}}, "text": "Updating the Header\n\nLet's update `header` to allow users to return to the home page when they click on the header box:\n\n```python title=\"main.py\"\ndef header():\n def navigate_home(e: me.ClickEvent):\n me.navigate(\"/\")\n state = me.state(State)\n state.conversations = []\n\n with me.box(\n on_click=navigate_home,\n style=me.Style(\n cursor=\"pointer\",\n padding=me.Padding.all(16),\n ),\n ):\n me.text(\n \"DuoChat\",\n style=me.Style(\n font_weight=500,\n font_size=24,\n color=\"#3D3929\",\n letter_spacing=\"0.3px\",\n ),\n )\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 688, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cc987a2c-4324-4992-90f5-f1152af1a23b": {"__data__": {"id_": "cc987a2c-4324-4992-90f5-f1152af1a23b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "3ec777b0-0544-4e56-8144-1c12e1802698", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "hash": "b50f2df7ddd6e8a26185f4ed1e0e512ccbfb6db3fa415d620762b0e93e57beec", "class_name": "RelatedNodeInfo"}}, "text": "Finalizing the Chat Experience\n\nNow that we have a dedicated conversation page with a multi-column layout, let's make some final improvements to enhance the user experience:\n\n1. Navigate to the conversations page at the start of a conversation.\n2. Implement auto-scrolling to keep the latest messages in view.\n\nUpdate the `send_prompt` function in `main.py`:\n\n```python title=\"main.py\"\ndef send_prompt(e: me.ClickEvent):\n state = me.state(State)\n if not state.conversations:\n me.navigate(\"/conversation\")\n for model in state.models:\n state.conversations.append(Conversation(model=model, messages=[]))\n input = state.input\n state.input = \"\"\n\n for conversation in state.conversations:\n model = conversation.model\n messages = conversation.messages\n history = messages[:]\n messages.append(ChatMessage(role=\"user\", content=input))\n messages.append(ChatMessage(role=\"model\", in_progress=True))\n yield\n me.scroll_into_view(key=\"end_of_messages\")\n if model == Models.GEMINI_1_5_FLASH.value:\n llm_response = gemini.send_prompt_flash(input, history)\n elif model == Models.GEMINI_1_5_PRO.value:\n llm_response = gemini.send_prompt_pro(input, history)\n elif model == Models.CLAUDE_3_5_SONNET.value:\n llm_response = claude.call_claude_sonnet(input, history)\n else:\n raise Exception(\"Unhandled model\", model)\n for chunk in llm_response:\n messages[-1].content += chunk\n yield\n messages[-1].in_progress = False\n yield\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1610, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "66cdc670-3b07-4974-947e-30962f8b3c44": {"__data__": {"id_": "66cdc670-3b07-4974-947e-30962f8b3c44", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d168367f-92de-4a38-8cab-ab567f97fed8", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "hash": "1a18d8430db99a423043cd5cb462fdc42d3b6e7d43cf8ca63cdf0127f6fd5b47", "class_name": "RelatedNodeInfo"}}, "text": "Running the Final Application\n\nRun the application with `mesop main.py` and navigate to `http://localhost:32123`. You should now have a fully functional DuoChat application with the following features:\n\n1. A home page with example prompts and a model picker.\n2. A conversation page with a multi-column layout for different model responses.\n3. Real-time streaming of model responses with loading indicators.\n4. Auto-scrolling to keep the latest message in view.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 462, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9c9f963c-3822-4b08-916e-ffeeae65d015": {"__data__": {"id_": "9c9f963c-3822-4b08-916e-ffeeae65d015", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d72c8c58-cd23-4766-bcb9-091b205a5e1e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "hash": "556cb77123461bada7105313720ae5676eb9ea19c71241cd625d0016d7318dd8", "class_name": "RelatedNodeInfo"}}, "text": "Troubleshooting\n\nIf you're having trouble, compare your code to the solution.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 79, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "03b57f90-1abd-4323-9db0-7701bf1da0d9": {"__data__": {"id_": "03b57f90-1abd-4323-9db0-7701bf1da0d9", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b8c62aaa-117e-4a8e-87f0-24626a54d266", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}, "hash": "387e00ac2b71fe1c167596a94eafc17eba39f913930155b46de0b309a0a426eb", "class_name": "RelatedNodeInfo"}}, "text": "Conclusion\n\nCongratulations! You've successfully built DuoChat, a Mesop application that allows users to interact with multiple AI models simultaneously. This project demonstrates Mesop's capabilities for creating responsive UIs, managing complex state, and integrating with external APIs.\n\nSome potential next steps to further improve the application:\n\n1. Deploy your app.\n2. Add the ability to save and load conversations.\n3. Add support for additional AI models or services.\n\nFeel free to experiment with these ideas or come up with your own improvements to enhance the DuoChat experience!", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 594, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "79b89516-ac29-4429-8fc2-80c541ebbc17": {"__data__": {"id_": "79b89516-ac29-4429-8fc2-80c541ebbc17", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/cloud-run", "title": "Cloud run"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "5716488c-43e2-4c89-b7cc-430258673200", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/cloud-run", "title": "Cloud run"}, "hash": "4ae9792e6bc2f706950d9a2a62190511136813dd0c84930e66c358081e20439b", "class_name": "RelatedNodeInfo"}}, "text": "This is a video tutorial that goes through the process of building and deploying a Mesop\napp to Cloud Run.\n\nHere is a screenshot of the app you will be building.\n\n!Mesop App", "mimetype": "text/plain", "start_char_idx": 0, "end_char_idx": 173, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fab64a12-4527-4570-9d6e-213b67372b79": {"__data__": {"id_": "fab64a12-4527-4570-9d6e-213b67372b79", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/cloud-run", "title": "Cloud run"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "1ff25416-4c95-49c7-8b4d-711999987599", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/cloud-run", "title": "Cloud run"}, "hash": "1ab4f085ed20fd02465c49a89d4ed2f9fa23f47ddef03d3d5c3d2482c50db98e", "class_name": "RelatedNodeInfo"}}, "text": "Part 1: Building a Gemini powered Mesop app\n\nThis video describes how to build a Gemini powered Mesop app.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 108, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e7c716b3-837c-4a12-b431-99dfa8f88c46": {"__data__": {"id_": "e7c716b3-837c-4a12-b431-99dfa8f88c46", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/cloud-run", "title": "Cloud run"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "955d2c39-6f59-47cd-bf1b-084c55fb896d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/cloud-run", "title": "Cloud run"}, "hash": "af46ac061afd1aa64588e16634cac6326f8bad520319dfe8a1fa342a5595b246", "class_name": "RelatedNodeInfo"}}, "text": "Part 2: Deploying to Cloud Run\n\nThis video describes how deploy the Gemini powered Mesop app to Cloud Run.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 108, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3bfb85d3-9adc-49b0-837b-47db4f36bf23": {"__data__": {"id_": "3bfb85d3-9adc-49b0-837b-47db4f36bf23", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/cloud-run", "title": "Cloud run"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "cacc392a-ebe8-4bf8-b316-632e2537370a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/cloud-run", "title": "Cloud run"}, "hash": "19eab4b9a100b9cbe435663259243574a856229b3acdb6b4540ce6f5dbbe8116", "class_name": "RelatedNodeInfo"}}, "text": "GitHub Code\n\nView the source code.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 36, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e6ce7c09-756b-4b22-847a-07e922c812fa": {"__data__": {"id_": "e6ce7c09-756b-4b22-847a-07e922c812fa", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6b50b255-7a04-4ae2-ba05-cd323007367e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "hash": "b2259311adffab2096d9819b7967bd841220f327dbd3539cff52ab31f4d88629", "class_name": "RelatedNodeInfo"}}, "text": "Mesop DuoChat Codelab\n\nThis tutorial walks you through building DuoChat, an interactive web application for chatting with multiple AI models simultaneously. You'll learn how to leverage Mesop's powerful features to create a responsive UI and integrate with AI APIs like Google Gemini and Anthropic Claude.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 307, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "35b06307-a07a-4b5c-8f32-fa5f4b798465": {"__data__": {"id_": "35b06307-a07a-4b5c-8f32-fa5f4b798465", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "fccc91f3-27b6-4f08-8712-de56b486399c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "hash": "2a75377b8f6243aa24299fcbe83b07759e3672b34fedcca1330f707bf7e2de88", "class_name": "RelatedNodeInfo"}}, "text": "What you will build\n\nBy the end of this codelab, you will build DuoChat (demo) that will allow users to:\n\n- Select multiple AI models to chat with\n- Compare responses from different models side-by-side\n- Provide their own API keys\n\nIf you want to dive straight into the code, you can look at the DuoChat repo and each branch represents the completed code after each section.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 376, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0797e0b2-0379-4bac-930f-eaba2a869412": {"__data__": {"id_": "0797e0b2-0379-4bac-930f-eaba2a869412", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "37520d21-4e38-407a-b9a0-078e921dc6fc", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "hash": "f5496804e7163e3e9922c6d426c5a52aa0b6ba28a2968558ab1277b8ee9e7734", "class_name": "RelatedNodeInfo"}}, "text": "Setting Up the Development Environment\n\nLet's start by setting up our development environment:\n\n1. Create a new directory for your project:\n\n```bash\nmkdir duochat\ncd duochat\n```\n\n2. Follow the Mesop command-line installation guide and create a virtual environment and activate it.\n\n3. Create a `requirements.txt` file with the following content:\n\n```\nmesop\ngunicorn\nanthropic\ngoogle-generativeai\n```\n\n4. Install the dependencies:\n\n```bash\npip install -r requirements.txt\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 476, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c58ccef6-5108-4574-a0c2-513174f8f9fa": {"__data__": {"id_": "c58ccef6-5108-4574-a0c2-513174f8f9fa", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "24bbc1e8-361b-4b02-b448-74ef632135a7", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "hash": "a631e46a9d8eee7547bec0cdb4c6446513f5f8e29bd3e0d4a0c1df8b4aea3f66", "class_name": "RelatedNodeInfo"}}, "text": "Setting Up the Main Application\n\nLet's start by creating a basic Mesop application. Create `main.py` and add the following code:\n\n```python title=\"main.py\"\nimport mesop as me\n\n@me.page(path=\"/\")\ndef page():\n me.text(\"Welcome to DuoChat!\")\n```\n\nThis creates a simple Mesop application with a welcome message.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 312, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "70bf8a0b-c84d-4c1b-b9b6-0b4d6dcc1370": {"__data__": {"id_": "70bf8a0b-c84d-4c1b-b9b6-0b4d6dcc1370", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9e5daa55-e1cc-45b0-a6f6-696fec7a5ffe", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "hash": "79a8172008023ff6b3e1bb916c60aa73d964081ff34218de0c566bf7335fc413", "class_name": "RelatedNodeInfo"}}, "text": "Running the Application\n\nTo run your Mesop application:\n\n```bash\nmesop main.py\n```\n\nNavigate to `http://localhost:32123` in your web browser. You should see the welcome message.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 179, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6094576a-7d5f-4858-9b53-1f2e3e09b97d": {"__data__": {"id_": "6094576a-7d5f-4858-9b53-1f2e3e09b97d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6738bf5e-dc11-4e1b-acf2-1adfee17bcf4", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "hash": "6350a8e52caee7181ad80b17b378b17dbcb14ba50f9536319268253c2f975354", "class_name": "RelatedNodeInfo"}}, "text": "Getting API keys\n\nLater on, you will need API keys to call the respective AI models:\n\n- Get a Google Gemini API Key and use the Gemini API free tier.\n- Get an Anthropic API Key and setup billing. Check their docs for pricing.\n\n> TIP: You can get started with the Gemini API key, which has a free tier, first and create the Anthropic API key later.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 349, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6e7b4b7c-b751-4015-983f-7ff109ff6c5a": {"__data__": {"id_": "6e7b4b7c-b751-4015-983f-7ff109ff6c5a", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "647cf230-01ea-4d55-8306-4b3762885235", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "hash": "670abe6f06ffdc72bbff03a166785502c0ac0fe5bd8e2010836795d23a3326e2", "class_name": "RelatedNodeInfo"}}, "text": "Troubleshooting\n\nIf you're having trouble, compare your code to the solution.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 79, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f34c3b68-1270-489b-ac46-9c1986713908": {"__data__": {"id_": "f34c3b68-1270-489b-ac46-9c1986713908", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "aded2923-cb85-4908-b352-e06380cffb5a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}, "hash": "a4945b89927352d12dcf349a2a9b0b1fefec9bd2b261d70325df3109a34c80d4", "class_name": "RelatedNodeInfo"}}, "text": "Next Steps\n\nIn the next section, we'll start building the user interface for DuoChat, including the header, chat input area, and basic styling. We'll explore Mesop's components and styling system to create an attractive and functional layout.\n\n\n Building the basic UI", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 272, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8ea9a9f7-7e63-4f9a-aebc-af25054fd9d3": {"__data__": {"id_": "8ea9a9f7-7e63-4f9a-aebc-af25054fd9d3", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6ba4915c-7c20-4da0-a722-99500b352966", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "hash": "4e1c55dac35e3e9bc24d3bcaffba5d472a049774299458cda389f1da1eb2e92e", "class_name": "RelatedNodeInfo"}}, "text": "Comparison with Other Python UI Frameworks\n\nThis page aims to provide an objective comparison between Mesop and other popular Python-based web application frameworks, specifically Streamlit and Gradio. This is a difficult doc to write but we feel that it's important to explain the differences as this is frequently asked.\n\n While we believe Mesop offers a unique philosophy for building UIs, we strive to be fair and accurate in highlighting the strengths of each framework.\n\n Because this is a fast-moving space, some of the information may be out of date. Please file an issue and let us know what we should fix.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 617, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fdc7525a-8e5e-41f3-b82f-74789017311b": {"__data__": {"id_": "fdc7525a-8e5e-41f3-b82f-74789017311b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e3013511-6d21-4bd5-8e35-62efe7ce6df8", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "hash": "1e9ea6a9b2ca06602d26ef6ada6d2d349ccaadaf381fb85f51da80a0e207ab6c", "class_name": "RelatedNodeInfo"}}, "text": "Streamlit\n\nStreamlit and Mesop share similar goals in terms of enabling Python developers to rapidly build web apps, particularly for AI use cases.\n\nHowever, there are some key differences:", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 191, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6fdd3c67-9504-43c1-8f0d-5be1b57d47f5": {"__data__": {"id_": "6fdd3c67-9504-43c1-8f0d-5be1b57d47f5", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "356962c1-b56e-4811-9164-b7e95cbfaf84", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "hash": "a9a029199d703c61d4b2a90bde8dc92bfb68edf8b582ec836a75dc96feeeeb1d", "class_name": "RelatedNodeInfo"}}, "text": "Execution Model\n\nStreamlit executes apps in a script-like manner where the entire app reruns on each user interaction. This enables a boilerplate-free UI development model that's easy to get started with, but requires mechanisms like caching and fragments to optimize the performance with this model.\n\nMesop uses a function-based model commonly found in web frameworks where the program is executed once on server initialization and then the page and component functions are executed in each render loop. This provides regular Python execution semantics because top-level initialization code is executed exactly once.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 619, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "19605ae8-22e8-4d51-bebd-c93161cbc4df": {"__data__": {"id_": "19605ae8-22e8-4d51-bebd-c93161cbc4df", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "cc30703c-02a5-44ff-ab94-409b3b91867b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "hash": "ab19e3b87a9c5c4d9ab799e2790a9b249a3dc7c7eca9a43f6b93ca59896665c3", "class_name": "RelatedNodeInfo"}}, "text": "Styling and Customization\n\nStreamlit offers pre-styled components with customization primarily through themes, prioritizing consistency and ease of use over flexibility.\n\nIn addition to providing Material-themed components, Mesop offers a low-level Style API to configure CSS properties. Mesop provides limited theming support with dark theming and doesn't support theming to other colors.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 391, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "487cc039-9291-475e-9fac-bc26953f4b59": {"__data__": {"id_": "487cc039-9291-475e-9fac-bc26953f4b59", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "34532850-716f-48ae-9bce-a230287ceafd", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "hash": "5a2766db79f5284e13de4f551f23e861b2c5df84a6fe0b5d1c5c645f6d806639", "class_name": "RelatedNodeInfo"}}, "text": "Components\n\nBoth Streamlit and Mesop offer a range of standard components (e.g., forms, tables, chat interfaces), with Streamlit providing a larger set of built-in components, especially for data science use cases like data visualization.\n\nStreamlit supports custom components rendered in iframes for isolation. It offers first-class support for React components and can accommodate other frameworks through a framework-agnostic template.\n\nMesop enables creating custom web components based on open web standards, facilitating interoperability with components from different frameworks like Lit. Mesop web components are rendered in the same frame as the rest of the Mesop app which provides more flexibility but less isolation.\n\nStreamlit has a more established ecosystem of community-developed components, while Mesop's community and component ecosystem are still developing.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 879, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7ce0c61e-574f-4d57-b1c0-5bf9f3952e47": {"__data__": {"id_": "7ce0c61e-574f-4d57-b1c0-5bf9f3952e47", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ac8432f1-cb02-4e71-8b16-5d3a548a2b05", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "hash": "23c1cfc39a6ec0892d1e0ffb0c9322aa92296d7b67e7d3955c41f4897ab62e11", "class_name": "RelatedNodeInfo"}}, "text": "Gradio\n\nGradio and Mesop both enable rapid ML/AI app development but with different approaches.\n\nGradio has a strong focus on creating demos and interfaces for machine learning models and makes it easy to build a UI for a model. Gradio also offers a lower-level abstraction known as Blocks for more general web applications.\n\nMesop, while well-suited for ML/AI use cases, is a more general-purpose framework that can be used for a wide range of web applications.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 464, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1dc748cb-5f71-4762-90fa-23bf896e3015": {"__data__": {"id_": "1dc748cb-5f71-4762-90fa-23bf896e3015", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "872fdb8a-d4d6-4caa-b19e-14b9b3b4f9df", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "hash": "085ae207436a2a87c2c209862ad2bd1c4414fbb4eb33f630d314eb85cb767f48", "class_name": "RelatedNodeInfo"}}, "text": "Components\n\nGradio provides a set of pre-built components optimized for common ML inputs and outputs (e.g. image classification, text generation). This makes it fast to set up standard model interfaces. In addition to built-in components, you can create custom components in Python and JavaScript (Svelte).\n\nMesop provides general-purpose UI components, which can be used for a variety of layout and UI designs. Higher-level components like the chat component are built on top of these low-level UI components. This makes it better suited for building custom interfaces, such as the demo gallery. Mesop also supports creating custom web components based on open web standards, facilitating interoperability with components from different frameworks.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 751, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b37d568d-ef65-4cd9-8020-31cc7441a1e9": {"__data__": {"id_": "b37d568d-ef65-4cd9-8020-31cc7441a1e9", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9e8b939e-9ad9-4a4a-8b0b-27dde7c581ee", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "hash": "5a42c28a6f63aa9d19b84d3667221d60e491f6317af0439fe17b5815ea9dc1c6", "class_name": "RelatedNodeInfo"}}, "text": "Styling and Customization\n\nGradio features a robust theming system with prebuilt options and extensive UI customization. It also supports custom CSS via direct string construction.\n\nMesop offers a statically typed Style API for CSS properties. While it includes dark theme support, Mesop's theming capabilities are currently limited and does not allow custom color schemes.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 375, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a9d164e8-4493-43b6-8709-5802cec4ecd1": {"__data__": {"id_": "a9d164e8-4493-43b6-8709-5802cec4ecd1", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "940e3670-5c7b-4be8-8422-3f1e4ab4a59a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "hash": "da84cf1bb86e4b0c0772c716b141e5ca1b3f475097771bd6fc6e4bc882da55fd", "class_name": "RelatedNodeInfo"}}, "text": "State management\n\nGradio uses an imperative approach to state management, coupling state with component updates. State is typically managed through function parameters and return values, which can be straightforward for simple interfaces but may become complex as applications grow.\n\nMesop adopts a declarative state management approach, separating state updates from UI rendering. It uses dataclasses for state, providing type-safety and structure for complex states. This separation allows for more granular control over UI updates but may have a steeper learning curve for beginners.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 588, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2701f10d-fe8c-4689-a445-06de4580c092": {"__data__": {"id_": "2701f10d-fe8c-4689-a445-06de4580c092", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "5993368e-7d77-41f0-b51e-88112e006ea0", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "hash": "4b2a4eca4a3b4bd7c60f3f0bdf56bdb247aacf3f52da7353d1864f39cf137e35", "class_name": "RelatedNodeInfo"}}, "text": "Deployment\n\nGradio makes it easy to share demos via Hugging Face Spaces. Mesop apps can also be deployed on Hugging Face Spaces, but requires a few more steps.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 161, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d09e8f1b-665f-446d-ac54-3426171be8e3": {"__data__": {"id_": "d09e8f1b-665f-446d-ac54-3426171be8e3", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6335f574-0b2d-482b-8797-91aa1195db2e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}, "hash": "f6d127ef5efdbb72d62af91f8e175376ae4bbae3800348db6b0560927fde7883", "class_name": "RelatedNodeInfo"}}, "text": "Conclusion\n\nBoth Streamlit and Gradio offer gentle learning curves, making it easy for Python developers to quickly build standard AI applications.\n\nMesop embraces a declarative UI paradigm, which introduces additional concepts but can provide more flexibility for custom applications.\n\nUltimately, the best choice depends on your specific use case, desired level of customization, and development preferences. We encourage you to explore each framework to determine which best fits your needs.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 496, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "13d4a3e6-2f1c-47cf-8c8d-6fa73accf290": {"__data__": {"id_": "13d4a3e6-2f1c-47cf-8c8d-6fa73accf290", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/audio", "title": "Audio"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "41bc1e9a-d7f0-47d8-8b55-58bb18cfec5e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/audio", "title": "Audio"}, "hash": "8ab54e06e24c0c7d1fb5a6cb41d2e7b2b6227bd60bb79f042e12e508ab0d8e2a", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nAudio is the equivalent of an `` HTML element. Audio displays the browser's native audio controls.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 110, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a387a64b-12e3-446d-9faf-b46179ff9a61": {"__data__": {"id_": "a387a64b-12e3-446d-9faf-b46179ff9a61", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/audio", "title": "Audio"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e6b349d5-c818-41b4-8ea7-7d0cf73ad132", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/audio", "title": "Audio"}, "hash": "16e579ee8b49323a36ce78684637e881fb65aa82ace3c1f5ebb1c02c4e12aaae", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/audio.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 50, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0b859005-f54b-4532-8685-25df1a311144": {"__data__": {"id_": "0b859005-f54b-4532-8685-25df1a311144", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/audio", "title": "Audio"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "99d4edca-3483-4665-9bba-dc866478b2fb", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/audio", "title": "Audio"}, "hash": "9644f6105a003f55159af4deeef3bf36a61b78cafd941e563ddd33372747e3d4", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.audio.audio.audio", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 45, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "25dbb7d4-3741-4bd6-b2e2-69e41ed1b977": {"__data__": {"id_": "25dbb7d4-3741-4bd6-b2e2-69e41ed1b977", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/autocomplete", "title": "Autocomplete"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f8c7b7b5-9346-4a7a-ad29-8ed8bb79df87", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/autocomplete", "title": "Autocomplete"}, "hash": "440f26c9be319b349afd688d73e4dd9d90b7a7a41c3da6bedc02408efdabb49a", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nAutocomplete allows the user to enter free text or select from a list of dynamic values\nand is based on the Angular Material autocomplete component.\n\nThis components only renders text labels and values.\n\nThe autocomplete filters by case-insensitively matching substrings of the option label.\n\nCurrently, there is no on blur event with this component since the blur event does not\nget the selected value on the first blur. Due to this ambiguous behavior, the blur event\nhas been left out.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 499, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "973f2901-6ef8-4228-ac7d-d4e62e835c38": {"__data__": {"id_": "973f2901-6ef8-4228-ac7d-d4e62e835c38", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/autocomplete", "title": "Autocomplete"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9d560c52-2643-4cb3-acb7-b3fa96265e1b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/autocomplete", "title": "Autocomplete"}, "hash": "32b666f74006864b835144b57fbfbbb0cdd24a8606d8e94610fc061126a2d343", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/autocomplete.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 57, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b4e055ea-5230-4e18-973f-ce5492998d0f": {"__data__": {"id_": "b4e055ea-5230-4e18-973f-ce5492998d0f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/autocomplete", "title": "Autocomplete"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f64b40e9-9087-4cae-813e-52f49e876bbf", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/autocomplete", "title": "Autocomplete"}, "hash": "d234a98a2d7d8785174b6bcc49e4ace05a94235eaa7a6cad239f5e0ec3bc0569", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.autocomplete.autocomplete.autocomplete\n::: mesop.components.autocomplete.autocomplete.AutocompleteOption\n::: mesop.components.autocomplete.autocomplete.AutocompleteOptionGroup\n::: mesop.components.autocomplete.autocomplete.AutocompleteEnterEvent\n::: mesop.components.autocomplete.autocomplete.AutocompleteSelectionChangeEvent\n::: mesop.events.InputEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 381, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0daf9433-b283-48b8-a0af-dba0d95194cf": {"__data__": {"id_": "0daf9433-b283-48b8-a0af-dba0d95194cf", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/badge", "title": "Badge"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e3371448-78e7-480a-a7ea-bc0b5b9394ad", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/badge", "title": "Badge"}, "hash": "26ee9622047d8421e9b0f86a9df7f635267214226f71925e7cb8d5197bdad0b9", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nBadge decorates a UI component and is oftentimes used for unread message count and is based on the Angular Material badge component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 144, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4bb94fd3-d8e9-4651-b429-33d28abff278": {"__data__": {"id_": "4bb94fd3-d8e9-4651-b429-33d28abff278", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/badge", "title": "Badge"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "83fec48b-3923-48a3-a24d-de7e78439326", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/badge", "title": "Badge"}, "hash": "dfceee017fc8d70b92d14485b9fc72252d6488b7874c689b5b0e72cdb437ca6e", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/badge.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 50, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5f2a9f7d-9f6d-445a-85d9-ac83099b70e0": {"__data__": {"id_": "5f2a9f7d-9f6d-445a-85d9-ac83099b70e0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/badge", "title": "Badge"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c4abd4b3-29c6-4375-91fc-274314c12c88", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/badge", "title": "Badge"}, "hash": "b4c7f7eb5d009509ed010c817a41c9416bc8cc02db5ba1d6a49226009458ab9c", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.badge.badge.badge", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 45, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b8ab8bd3-8fb8-4fe9-99ff-c7ea4c97924e": {"__data__": {"id_": "b8ab8bd3-8fb8-4fe9-99ff-c7ea4c97924e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/box", "title": "Box"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8367f398-922d-431e-95ef-eec4381b78ed", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/box", "title": "Box"}, "hash": "3c0960edd702c8fa9afcaae4678e6f69852c58958ebac47f776af6907dcbf26f", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nBox is a content component which acts as a container to group children components and styling them.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 111, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5b1fdb0b-2c53-425b-b298-e0577590cd5a": {"__data__": {"id_": "5b1fdb0b-2c53-425b-b298-e0577590cd5a", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/box", "title": "Box"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "3cd81bc6-ab97-4988-97c1-3fc111c8db05", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/box", "title": "Box"}, "hash": "7fc6f6b5718e60e7734cae03b899cb25d9c51494c102eb087a47b137275698ef", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/box.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 48, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4d6b9fd9-a18c-4edf-9fe9-2b3b9d272a81": {"__data__": {"id_": "4d6b9fd9-a18c-4edf-9fe9-2b3b9d272a81", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/box", "title": "Box"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "3e619ea8-e8a6-4244-87db-ba1bcc62a6fe", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/box", "title": "Box"}, "hash": "d66ee7b24ab6daeafb5530072ebe224417dc78c5d459de7f1c2e9fd087ebbf6e", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.box.box.box", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 39, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "08be3d28-3178-4e78-a723-7d4b3f1dbe4f": {"__data__": {"id_": "08be3d28-3178-4e78-a723-7d4b3f1dbe4f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button", "title": "Button"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "5c0355ba-d984-40e4-adf1-7b83f2aeb60e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button", "title": "Button"}, "hash": "09c38f65fd5e2a6f7e3bf6c5a2bb89d561af08b52f4c5d7f6835cc802b7bdf58", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nButton is based on the Angular Material button component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 69, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9aad0286-4641-4015-9ff4-6c8f8e5f5b11": {"__data__": {"id_": "9aad0286-4641-4015-9ff4-6c8f8e5f5b11", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button", "title": "Button"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "dc480c4d-5579-4bae-8f57-4fee0f2dbe6e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button", "title": "Button"}, "hash": "53823f9607752720fd032b42eff67930c15f0485cc27a6bcf10c7560f78441df", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/button.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 51, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1c0b6158-3566-470e-aa88-7e8fba3e6ab5": {"__data__": {"id_": "1c0b6158-3566-470e-aa88-7e8fba3e6ab5", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button", "title": "Button"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ed3397a7-8734-42e2-b3d7-5aaa20c272ca", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button", "title": "Button"}, "hash": "c456507f1779357b163604d72762061b7602ee4cd27046c485c05d581f9f0397", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.button.button.button\n::: mesop.components.button.button.content_button\n::: mesop.events.ClickEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 126, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d3da4656-3d8a-4d9f-bf52-47187d714e7c": {"__data__": {"id_": "d3da4656-3d8a-4d9f-bf52-47187d714e7c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button_toggle", "title": "Button_toggle"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c638594f-6bb2-4d89-83df-b6ca4809060b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button_toggle", "title": "Button_toggle"}, "hash": "2823203bd59f0e55a34d7474e9b6492712e2a5f8a72b6ed905e199527c96528d", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nButton toggle is based on the Angular Material button toggle component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 83, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f115609c-7f65-4fb4-99ef-3bb1eea5dc42": {"__data__": {"id_": "f115609c-7f65-4fb4-99ef-3bb1eea5dc42", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button_toggle", "title": "Button_toggle"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "84c97e89-effa-48b4-85ba-2fa86ea745e6", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button_toggle", "title": "Button_toggle"}, "hash": "a8703c4690bfd98092d44815ee7a9dea6fd25eb6726e27abb9da940a8af07161", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/button_toggle.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 58, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "38809cbc-6b02-4cab-a7ea-a1041346491a": {"__data__": {"id_": "38809cbc-6b02-4cab-a7ea-a1041346491a", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button_toggle", "title": "Button_toggle"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "324e9837-ffb3-4ecd-90a6-e7dde72d6415", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button_toggle", "title": "Button_toggle"}, "hash": "12d3b06680572709fa6206e407c227cf1006b6746f48f2e7b7e734e966915ad5", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.button_toggle.button_toggle.button_toggle\n::: mesop.components.button_toggle.button_toggle.ButtonToggleButton\n::: mesop.components.button_toggle.button_toggle.ButtonToggleChangeEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 210, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2d484eed-3d46-4ff5-b0f9-128e035554ef": {"__data__": {"id_": "2d484eed-3d46-4ff5-b0f9-128e035554ef", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/card", "title": "Card"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "5976fe6a-f28a-4a16-b399-38d9ecd0eece", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/card", "title": "Card"}, "hash": "8d82b1f2bbec48dffaa868aed1d76be622ebd39401967be63609432547fc9c59", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nCard is based on the Angular Material card component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 65, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1c1f3301-5c9e-4f1d-af1f-35386fbf6a16": {"__data__": {"id_": "1c1f3301-5c9e-4f1d-af1f-35386fbf6a16", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/card", "title": "Card"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8429eff1-8b97-42aa-8ad8-c5f95d3a7f37", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/card", "title": "Card"}, "hash": "83a9e311ca62b93b62a06b2ffa0e3b2629b9a70e1a6b933c1383fbc30dc87f38", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/card.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 49, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7b763367-4de9-4374-9780-d447872a79f5": {"__data__": {"id_": "7b763367-4de9-4374-9780-d447872a79f5", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/card", "title": "Card"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "fff59f0a-fd83-4ea1-80ce-375e87191de7", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/card", "title": "Card"}, "hash": "64dd0e0db6105391d09e23a6a7ae1eaf341876e164fd3d3de9ff57127467b360", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.card.card.card\n::: mesop.components.card_header.card_header.card_header\n::: mesop.components.card_content.card_content.card_content\n::: mesop.components.card_actions.card_actions.card_actions", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 219, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3c539325-48e0-4d03-8054-a9f6755aa1c8": {"__data__": {"id_": "3c539325-48e0-4d03-8054-a9f6755aa1c8", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/chat", "title": "Chat"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "24b33dfb-9d7e-47c6-838b-82fe8a73ef24", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/chat", "title": "Chat"}, "hash": "5fa47040af42a9af251862d2d7f35e0d5cd318c286b63c05c338bd72c55a35a3", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nChat component is a quick way to create a simple chat interface. Chat is part of Mesop Labs.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 104, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ddb3f41f-287f-4ccd-86db-875f055ab147": {"__data__": {"id_": "ddb3f41f-287f-4ccd-86db-875f055ab147", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/chat", "title": "Chat"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "df25f0eb-bb63-44bb-8e91-03a932a6da63", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/chat", "title": "Chat"}, "hash": "05928ff7f353342abe807b980bd55e20d46869f1d173bac86b73afc115d47441", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/chat.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 49, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c37749a8-3668-4266-97e8-4cb49d8993cb": {"__data__": {"id_": "c37749a8-3668-4266-97e8-4cb49d8993cb", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/chat", "title": "Chat"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "1c24a641-1f30-4efd-8180-7f926266d917", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/chat", "title": "Chat"}, "hash": "8d9d39f625d0860fef69f28c281c9665597fccf5e63168083a20faf887fe2a15", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.labs.chat.chat", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 31, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d3b3e3ca-2369-481e-b4fd-3774ba3f6fc8": {"__data__": {"id_": "d3b3e3ca-2369-481e-b4fd-3774ba3f6fc8", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/checkbox", "title": "Checkbox"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ee83851b-77d2-4f97-8910-ee65c490f010", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/checkbox", "title": "Checkbox"}, "hash": "91dfee18ffcd0ff3fbc15805f3452d5408d240a1cece00dd74bd01dc3f95f8e6", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nCheckbox is a multi-selection form control and is based on the Angular Material checkbox component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 111, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b497961a-8006-495d-9149-e5fc3ba82903": {"__data__": {"id_": "b497961a-8006-495d-9149-e5fc3ba82903", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/checkbox", "title": "Checkbox"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "03dc371b-3b5d-40c5-a563-e35dc4901f87", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/checkbox", "title": "Checkbox"}, "hash": "1afb0608ade8931763dd5af42e08681917a09b71445f25938184afba2544b42c", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/checkbox.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 53, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "263d4ec3-5917-44f8-9b05-bf34cda32bf3": {"__data__": {"id_": "263d4ec3-5917-44f8-9b05-bf34cda32bf3", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/checkbox", "title": "Checkbox"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "1f61dd6a-7eb5-4be8-810a-6583403edb35", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/checkbox", "title": "Checkbox"}, "hash": "4c4298cadd9fa3ea87ce575f97bc9a6fc72f74fdfd3b6bae176b92573d42439e", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.checkbox.checkbox.checkbox\n::: mesop.components.checkbox.checkbox.content_checkbox\n::: mesop.components.checkbox.checkbox.CheckboxChangeEvent\n::: mesop.components.checkbox.checkbox.CheckboxIndeterminateChangeEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 241, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2d194e51-ed2e-4359-aa9a-bbf57097ac4e": {"__data__": {"id_": "2d194e51-ed2e-4359-aa9a-bbf57097ac4e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/code", "title": "Code"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8fe3b7b6-8362-403e-9307-cae984e91111", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/code", "title": "Code"}, "hash": "801fe6140b1950cc3f03520ae0f1fed786938d927e63ea9f350dbbe6198362fd", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nCode is used to render code with syntax highlighting. `code` is a simple wrapper around markdown.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 109, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9c2fa191-295b-44a2-af04-bb21ca1cb8eb": {"__data__": {"id_": "9c2fa191-295b-44a2-af04-bb21ca1cb8eb", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/code", "title": "Code"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9256af8d-b98c-4f9b-b4e1-4db798848b19", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/code", "title": "Code"}, "hash": "3ebacb951f41587e1e24da9d3a7bedcede4c2e4e5af6437851119568bc5ef459", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/code_demo.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 54, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2dcef8be-0f99-4910-a866-8009c68ffbc8": {"__data__": {"id_": "2dcef8be-0f99-4910-a866-8009c68ffbc8", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/code", "title": "Code"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "10e32b23-f8b8-4a7b-9388-b13b651b37b6", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/code", "title": "Code"}, "hash": "81ab977c08f397297e9f3b8aca5cd94deedfce811670cefeb4188369e2a2b0d8", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.code.code.code", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 42, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c59588b9-36d1-4e53-9913-1c0896792abe": {"__data__": {"id_": "c59588b9-36d1-4e53-9913-1c0896792abe", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_picker", "title": "Date_picker"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8d6f5de6-10bc-4840-b2e9-44a3d11a7ced", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_picker", "title": "Date_picker"}, "hash": "d795cbdf78165de0866c7d9d8d6e5b6b61e4a571aec295265a6fc9dd1a927a12", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nDate picker allows the user to enter free text or select a date from a calendar widget.\nand is based on the Angular Material datapicker component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 158, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c609a930-de9a-4bb3-881d-e09ca9f8f2e8": {"__data__": {"id_": "c609a930-de9a-4bb3-881d-e09ca9f8f2e8", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_picker", "title": "Date_picker"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9c0242dd-bff9-4abb-b5d1-67a24a1d7f6e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_picker", "title": "Date_picker"}, "hash": "467ed14e1c0eb2b4863ed52c62b55387f2e507c067f7822b65f098ef0e8f7eee", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/date_picker.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 56, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ecb169b6-00b3-43b9-8b13-18b366ddb0db": {"__data__": {"id_": "ecb169b6-00b3-43b9-8b13-18b366ddb0db", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_picker", "title": "Date_picker"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6b7cadfe-134b-4f61-97c8-7521832e6c5d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_picker", "title": "Date_picker"}, "hash": "7e325fa071ef188bac3522ea1e9f0a4161afa1a1437712a0861d5641bd82e8d8", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.datepicker.datepicker.date_picker\n::: mesop.components.datepicker.datepicker.DatePickerChangeEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 126, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6ac61286-5964-4f3e-b499-9384de47969e": {"__data__": {"id_": "6ac61286-5964-4f3e-b499-9384de47969e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_range_picker", "title": "Date_range_picker"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ad20234a-aa6a-40b1-a9f2-c6273d0e930b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_range_picker", "title": "Date_range_picker"}, "hash": "7a1e104a0423588c465450255d6988cf8ff8247127839729fd406241e26bf3a1", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nDate range picker allows the user to enter free text or select a dates from a calendar widget.\nand is based on the Angular Material datapicker component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 165, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c8469698-90e0-4fda-914a-12141d3fe1b6": {"__data__": {"id_": "c8469698-90e0-4fda-914a-12141d3fe1b6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_range_picker", "title": "Date_range_picker"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d141e0eb-c7a6-4f13-bab1-d57fe1d9889e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_range_picker", "title": "Date_range_picker"}, "hash": "e9e8cfea77446d823f73ff0d7b29c210e614808f51bd7099767931c7638d8dcc", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/date_range_picker.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 62, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a9d8c5b5-e315-464c-8091-f0a9f886ad5f": {"__data__": {"id_": "a9d8c5b5-e315-464c-8091-f0a9f886ad5f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_range_picker", "title": "Date_range_picker"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c502d62c-889b-4d7b-a7af-8447ec3b9e72", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_range_picker", "title": "Date_range_picker"}, "hash": "6061606da8725469ce18764d283ad096dca2034824e25f5bd767deb7f5b1ee29", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.date_range_picker.date_range_picker.date_range_picker\n::: mesop.components.date_range_picker.date_range_picker.DateRangePickerChangeEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 165, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "789f77b8-c04f-4ac0-9a3a-04d2fc407cc4": {"__data__": {"id_": "789f77b8-c04f-4ac0-9a3a-04d2fc407cc4", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/divider", "title": "Divider"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4d8d659a-d645-4a00-acdb-68bc64b2c144", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/divider", "title": "Divider"}, "hash": "6bed7fcd5a5a36684aa6be1c2cdd262fd742a905144fb6c5fd9f24f32835296a", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nDivider is used to provide visual separation and is based on the Angular Material divider component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 112, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "274f5737-5b58-417a-a4a7-f9893e9207c5": {"__data__": {"id_": "274f5737-5b58-417a-a4a7-f9893e9207c5", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/divider", "title": "Divider"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6b399054-5acf-44df-bb55-6f735302d90b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/divider", "title": "Divider"}, "hash": "6392532f2b67d03cb84ea4a112a5a954cfd28d896eb6569dc36e341f9cc09b4c", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/divider.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 52, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6ca1df8d-ddc0-4c83-b93e-55c4b3eba58b": {"__data__": {"id_": "6ca1df8d-ddc0-4c83-b93e-55c4b3eba58b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/divider", "title": "Divider"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "59fa0dba-1390-4a43-a7d1-b7371a844d92", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/divider", "title": "Divider"}, "hash": "09c23659fca191e74b68501e99f7871d8cda3eaa5fede359b22f93bf8af503d1", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.divider.divider.divider", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 51, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9b222618-c2a6-4f62-bac8-9a9fd0eec472": {"__data__": {"id_": "9b222618-c2a6-4f62-bac8-9a9fd0eec472", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/embed", "title": "Embed"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "0f83a4f1-6e16-43fd-8333-da3844daf658", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/embed", "title": "Embed"}, "hash": "7d0088d03a21b5ef99e174184e0966be79a5d5d007dfaaee90b9866c84c473ef", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nEmbed allows you to embed/iframe another web site in your Mesop app.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 80, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9458b958-e768-4864-87bd-f76b62452217": {"__data__": {"id_": "9458b958-e768-4864-87bd-f76b62452217", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/embed", "title": "Embed"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a47f2554-e401-463e-95ce-60db5075e8da", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/embed", "title": "Embed"}, "hash": "d3aeeca7897385c80bd63d21eb8a5bd9bc2555b7993e659c9be0e6b2c3097eb0", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/embed.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 50, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bfdd5d60-2ebd-4db2-8ac9-88598f77cf6f": {"__data__": {"id_": "bfdd5d60-2ebd-4db2-8ac9-88598f77cf6f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/embed", "title": "Embed"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "dec70d41-f5fb-45bf-b64c-99bd05694e6d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/embed", "title": "Embed"}, "hash": "afd46d2c067a6bd05cd80407dc919c472c4998c91d6562963a65abe486a110f6", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.embed.embed.embed", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 45, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "002e730e-cae5-4f5f-84c1-be6ca6f24cce": {"__data__": {"id_": "002e730e-cae5-4f5f-84c1-be6ca6f24cce", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/expansion-panel", "title": "Expansion panel"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c6a5f5fa-ebd3-498b-a792-3f8f920633f1", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/expansion-panel", "title": "Expansion panel"}, "hash": "cb2d8e7f322ffd8ed487f9703e035c1af39fba8890e55605a148a48b39069f03", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nExpansion panel and is based on the Angular Material expansion panel component.\n\nThis is a useful component for showing a summary header which can be expanded into a more detailed card/panel.\n\nThe expansion panels can also be grouped together to create an accordion.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 278, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "02e4e0fc-60a6-4756-b42d-c0adec908d2c": {"__data__": {"id_": "02e4e0fc-60a6-4756-b42d-c0adec908d2c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/expansion-panel", "title": "Expansion panel"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4cffc8d2-8a76-4bf5-b918-df4672ca4571", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/expansion-panel", "title": "Expansion panel"}, "hash": "a4002d0ff55bdda427c4c4a54e12403e33b365af3d51dc11d791d56d6d6a11d5", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/expansion_panel.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 60, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "828240ac-2cca-4be4-a2a0-9bff7fa30d6d": {"__data__": {"id_": "828240ac-2cca-4be4-a2a0-9bff7fa30d6d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/expansion-panel", "title": "Expansion panel"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "3884edec-2543-4a67-b401-e21cd328943b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/expansion-panel", "title": "Expansion panel"}, "hash": "143fa143e3da5923c69de775c86313f1e73ec4105f5b130e04e935f34227727d", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.accordion.accordion.accordion\n::: mesop.components.expansion_panel.expansion_panel.expansion_panel\n::: mesop.components.expansion_panel.expansion_panel.ExpansionPanelToggleEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 205, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "790a6882-caf3-4fab-8f7c-c27f134eb62a": {"__data__": {"id_": "790a6882-caf3-4fab-8f7c-c27f134eb62a", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/html", "title": "Html"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9c7227cb-160b-42d1-b9f2-23682f7960aa", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/html", "title": "Html"}, "hash": "9dff192d58367c0e52b12397399367ea9deb3f105a68af85b704fcc285e9962e", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nThe HTML component allows you to add custom HTML to your Mesop app.\n\nThere are two modes for rendering HTML components:\n\n- `sanitized` (default), where the HTML is sanitized by Angular to remove potentially unsafe code like `` and `` for web security reasons.\n- `sandboxed`, which allows rendering of `` and `` HTML content by using an iframe sandbox.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 363, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "12a9924d-f5af-493b-969d-c6e26b4bde78": {"__data__": {"id_": "12a9924d-f5af-493b-969d-c6e26b4bde78", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/html", "title": "Html"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ddca0b96-1c8a-44ed-8ab5-a61888246229", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/html", "title": "Html"}, "hash": "73b048906028c20de3dcf3a1623b4d98da5cc8f2d21b891bcd4de1bd745446da", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/html_demo.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 54, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "806867d5-bf69-411a-beaf-03d7b699c79a": {"__data__": {"id_": "806867d5-bf69-411a-beaf-03d7b699c79a", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/html", "title": "Html"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c9297870-e6b1-4d3d-88ff-86981bfb7285", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/html", "title": "Html"}, "hash": "6056f425ec8b6a557393da1998fd1fb444a8a149d060ea17ed9ba57d58533f94", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.html.html.html", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 42, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e81f3bf6-bb93-4adc-903a-c1d67a54ccd8": {"__data__": {"id_": "e81f3bf6-bb93-4adc-903a-c1d67a54ccd8", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/icon", "title": "Icon"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "cf3b369a-28e0-41dd-a2f8-ef67fb9135ba", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/icon", "title": "Icon"}, "hash": "e8b226ed43b518c8569ea9bb10a69730da8d149330f005d2c7bad16d017c70ac", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nIcon displays a Material icon/symbol and is based on the Angular Material icon component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 101, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f0ec7efe-ffec-450f-9dd3-ed52d5edd8b0": {"__data__": {"id_": "f0ec7efe-ffec-450f-9dd3-ed52d5edd8b0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/icon", "title": "Icon"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "dadd25ee-8138-47a6-a12c-1223a1c78578", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/icon", "title": "Icon"}, "hash": "a760eceb72e8844ac6ae214a47cc5bef0b1692c64fcf002bffedd6c7717c4b3e", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/icon.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 49, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4a009c88-90f8-4c84-8b7d-f0a83e8466f8": {"__data__": {"id_": "4a009c88-90f8-4c84-8b7d-f0a83e8466f8", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/icon", "title": "Icon"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "087b8d58-e945-4658-b51e-762e834e038d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/icon", "title": "Icon"}, "hash": "bd341994e35bf078a6b92d3b59da02a2d3ec3c2675f8a6a1a95ec51cceff5fc8", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.icon.icon.icon", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 42, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "23899cb0-b8c9-4687-a741-fd6658b5b278": {"__data__": {"id_": "23899cb0-b8c9-4687-a741-fd6658b5b278", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/image", "title": "Image"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "06c20c5d-ca73-46b6-ac8f-0a46fe98152e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/image", "title": "Image"}, "hash": "90ae35f9ad33fc0a50d67e881c62a64fbec437e3f62497ab4e80e3a08df7831a", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nImage is the equivalent of an `` HTML element.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 58, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "289c1f02-5dc7-478c-a0ef-1fc3254d71e4": {"__data__": {"id_": "289c1f02-5dc7-478c-a0ef-1fc3254d71e4", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/image", "title": "Image"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ef3d7fd7-7d28-44e0-a174-b6a4d4dbccb9", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/image", "title": "Image"}, "hash": "7d5dd0b4e47ac478149d0c79b20accca982657bd35a19aa85f64feefcceab8a2", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/image.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 50, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3fafcf30-4986-4510-b21e-f11b7ed9c7b5": {"__data__": {"id_": "3fafcf30-4986-4510-b21e-f11b7ed9c7b5", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/image", "title": "Image"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "45251639-7a4e-4917-960b-b76695482ea1", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/image", "title": "Image"}, "hash": "b42eb11d6910d7c561180b930039f92916a40672ae90eaf8fa75c00839164784", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.image.image.image", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 45, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "30921076-c00d-4cdf-8d96-c505b19be5f1": {"__data__": {"id_": "30921076-c00d-4cdf-8d96-c505b19be5f1", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4c00e8ea-b8b9-4cee-9109-351e86824d92", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "hash": "5a7c32da8057c8f374620c130e2ea3bab81bdd036f4d1f1d079e860a8769656b", "class_name": "RelatedNodeInfo"}}, "text": "Components\n\nPlease read Core Concepts before this as it explains the basics of components. This page provides an overview of the different types of components in Mesop.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 170, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "352b496f-a2fb-46a8-bbcd-391b1db43a0c": {"__data__": {"id_": "352b496f-a2fb-46a8-bbcd-391b1db43a0c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e1ebe385-8735-48e9-8fb5-64229d959f70", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "hash": "396e879db915518091f118892826c22049c4040369b8226dbdd68ad522bfe8da", "class_name": "RelatedNodeInfo"}}, "text": "Types of components", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 21, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2ed0c5a2-e67f-4fe7-ba9a-0531cebe3c98": {"__data__": {"id_": "2ed0c5a2-e67f-4fe7-ba9a-0531cebe3c98", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "3509da68-2b8d-4155-bd4f-241a960681cd", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "hash": "9c63927c813c5ba2f0c2287618dbf545f78efe26b749d84b2aedf6d1241901d8", "class_name": "RelatedNodeInfo"}}, "text": "Native components\n\nNative components are components implemented using Angular/Javascript. Many of these components wrap Angular Material components. Other components are simple wrappers around DOM elements.\n\nIf you have a use case that's not supported by the existing native components, please file an issue on GitHub to explain your use case. Given our limited bandwidth, we may not be able to build it soon, but in the future, we will enable Mesop developers to build their own custom native components.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 507, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f439876e-e020-49b2-809f-9e6eaf15670e": {"__data__": {"id_": "f439876e-e020-49b2-809f-9e6eaf15670e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "5efc0236-e09e-4630-bfed-96a2b4b10f5e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "hash": "b09f4e4ec683df0d65c00d95c1c75eb9987b95e120902e404f63873279cc30e4", "class_name": "RelatedNodeInfo"}}, "text": "User-defined components\n\nUser-defined components are essentially Python functions which call other components, which can be native components or other user-defined components. It's very easy to write your own components, and it's encouraged to split your app into modular components for better maintainability and reusability.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 328, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f03a965a-1596-4d3d-80b5-cb3bf14d33e6": {"__data__": {"id_": "f03a965a-1596-4d3d-80b5-cb3bf14d33e6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9a32e112-ea41-4c54-ae78-5a6c48a170d5", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "hash": "5e48f29516a81ab348890e7d3a0d927b0a6fb4b3ef583dfa6958547f0fc3085f", "class_name": "RelatedNodeInfo"}}, "text": "Web components\n\nWeb components in Mesop are custom HTML elements created using JavaScript and CSS. They enable custom JavaScript execution and bi-directional communication between the browser and server. They can wrap JavaScript libraries and provide stateful client-side interactions. Learn more about web components.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 320, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "dc077629-cce2-4ddf-8a85-97642409a934": {"__data__": {"id_": "dc077629-cce2-4ddf-8a85-97642409a934", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "7afa0a22-42f2-416f-88ce-c28f1aeae204", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "hash": "3a548ed7aed4e5b114fb38504c94026bf873bb533eeae34a439ad960531e9471", "class_name": "RelatedNodeInfo"}}, "text": "Content components\n\nContent components allow you to compose components more flexibly than regular components by accepting child(ren) components. A commonly used content component is the button component, which accepts a child component which oftentimes the text component.\n\nExample:\n\n```python\nwith me.button():\n me.text(\"Child\")\n```\n\nYou can also have multiple content components nested:\n\n```python\nwith me.box():\n with me.box():\n me.text(\"Grand-child\")\n```\n\nSometimes, you may want to define your own content component for better reusability. For example, let's say I want to define a scaffold component which includes a menu positioned on the left and a main content area, I could do the following:\n\n```python\n@me.content_component\ndef scaffold(url: str):\n with me.box(style=me.Style(background=\"white\")):\n menu(url=url)\n with me.box(style=me.Style(padding=me.Padding(left=MENU_WIDTH))):\n me.slot()\n```\n\nNow other components can re-use this `scaffold` component:\n\n```python\ndef page1():\n with scaffold(url=\"/page1\"):\n some_content(...)\n```\n\nThis is similar to Angular's Content Projection.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1115, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e906ac25-ec92-460a-ab07-39e9e1629005": {"__data__": {"id_": "e906ac25-ec92-460a-ab07-39e9e1629005", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "0e20d78a-776d-495a-ac53-0cc553c55bdd", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "hash": "80dcb095da54603116f533afbad11eaf46a7b000c3aac94b23d0a0751d66c293", "class_name": "RelatedNodeInfo"}}, "text": "Advanced content component usage", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 34, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8f2497d4-397f-427d-b0fd-a02e883cd50f": {"__data__": {"id_": "8f2497d4-397f-427d-b0fd-a02e883cd50f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2e815f8c-a85f-4fcd-bfa5-ae6e578b8a4b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "hash": "78bb15fba52fc50719c077d21d653ecfc5702c55b8febf5958bd6b8cef644a42", "class_name": "RelatedNodeInfo"}}, "text": "Multi-slot projection\n\nMesop supports multi-slot projection using named slots.\n\nHere is an example:\n\n```python\n@me.slotclass\nclass LayoutSlots:\n header: me.NamedSlot\n content: me.NamedSlot\n footer: me.NamedSlot\n\n@me.content_component(named_slots=LayoutSlots)\ndef layout():\n with me.box(style=me.Style(background=\"black\")):\n me.slot(\"header\")\n with me.box(style=me.Style(background=\"white\")):\n me.slot(\"content\")\n with me.box(style=me.Style(background=\"black\")):\n me.slot(\"footer\")\n```\n\nNow other components can re-use this `layout` component:\n\n```python\ndef page1():\n with layout() as c:\n with c.header():\n me.text(\"Header\")\n with c.content():\n me.text(\"Content\")\n with c.footer():\n me.text(\"Footer\")\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 746, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "09d90338-e6f6-499b-b074-3e002cda9566": {"__data__": {"id_": "09d90338-e6f6-499b-b074-3e002cda9566", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "12770a76-14f2-4754-9ad7-67e6185071a4", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "hash": "f832fa5d5e4068592e10e0b469fbdb16df862714ff6f69ad394cb7b8a1023867", "class_name": "RelatedNodeInfo"}}, "text": "Composed content components\n\nContent components can also use other content components, but you need to be careful since\nslot rendering cannot be deferred to the parent component.\n\n???+ failure \"Slot rendering cannot be deferred by setting another slot.\"\n\n ```python\n @me.content_component\n def inner():\n me.slot()\n\n @me.content_component\n def outer():\n with inner():\n me.slot()\n ```\n\n???+ success \"Content components can use content components so long as the slots get rendered by the parent content component.\"\n\n ```python\n @me.content_component\n def header(background_color: str):\n with me.box(style=me.Style(background=background_color)):\n me.slot()\n\n\n @me.content_component\n def footer(background_color: str):\n with me.box(style=me.Style(background=background_color)):\n me.slot()\n\n\n @me.content_component()\n def content_layout():\n with header(background_color=\"black\"):\n me.text(\"Header\")\n with me.box(style=me.Style(background=\"white\")):\n me.slot()\n with footer(background_color=\"red\")\n me.text(\"Footer\")\n ```\n\n Now other components can re-use this `content_layout` component:\n\n ```python\n def page1():\n with content_layout():\n me.text(\"Content\")\n ```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1303, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2615f273-0e0d-4b67-913d-53d2ca4bce52": {"__data__": {"id_": "2615f273-0e0d-4b67-913d-53d2ca4bce52", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "0a4f17e8-3b50-4819-b9cb-73ef0997d5b4", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "hash": "b96b2707994de7b0d49d4dec2a0c5b190fc73ed6305dc560dbf42071cadda5fe", "class_name": "RelatedNodeInfo"}}, "text": "Component Key\n\nEvery native component in Mesop accepts a `key` argument which is a component identifier. This is used by Mesop to tell Angular whether to reuse the DOM element.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 178, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cc3af7bc-27aa-4ebe-bc55-c252eaee4a82": {"__data__": {"id_": "cc3af7bc-27aa-4ebe-bc55-c252eaee4a82", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a5368953-312f-45ce-9712-bc12d144e104", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "hash": "e4c1532222caa5935d3ef97f6e7ca35ade6e6f6297231d5e4e0f50a6c24a616d", "class_name": "RelatedNodeInfo"}}, "text": "Resetting a component\n\nYou can reset a component to the initial state (e.g. reset a select component to the unselected state) by giving it a new key value across renders.\n\nFor example, you can reset a component by \"incrementing\" the key:\n\n```py\nclass State:\n select_menu_key: int\n\ndef reset(event):\n state = me.state(State)\n state.select_menu_key += 1\n\ndef main():\n state = me.state(State)\n me.select(key=str(state.select_menu_key),\n options=[me.SelectOption(label=\"o1\", value=\"o1\")])\n me.button(label=\"Reset\", on_click=reset)\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 549, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c6352568-4f3b-4c62-9dec-2ef69d5ff09f": {"__data__": {"id_": "c6352568-4f3b-4c62-9dec-2ef69d5ff09f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "06fdae31-be22-442e-af9a-273dc0bad18d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}, "hash": "5cb0fb4e72a856e94329a6204a343a00a5f6ef137be24c38bb4fc79e7a2d6c88", "class_name": "RelatedNodeInfo"}}, "text": "Event handlers\n\nEvery Mesop event includes the key of the component which emitted the event. This makes it useful when you want to reuse an event handler for multiple instances of a component:\n\n```py\ndef buttons():\n for fruit in [\"Apple\", \"Banana\"]:\n me.button(fruit, key=fruit, on_click=on_click)\n\ndef on_click(event: me.ClickEvent):\n fruit = event.key\n print(\"fruit name\", fruit)\n```\n\nBecause a key is a `str` type, you may sometimes want to store more complex data like a dataclass or a proto object for retrieval in the event handler. To do this, you can serialize and deserialize:\n\n```py\nimport json\nfrom dataclasses import dataclass\n\n@dataclass\nclass Person:\n name: str\n\ndef buttons():\n for person in [Person(name=\"Alice\"), Person(name=\"Bob\")]:\n # serialize dataclass into str\n key = json.dumps(person.asdict())\n me.button(person.name, key=key, on_click=on_click)\n\ndef on_click(event: me.ClickEvent):\n person_dict = json.loads(event.key)\n # modify this for more complex deserialization\n person = Person(**person_dict)\n```\n\n!!! Tip \"Use component key for reusable event handler\"\n\n This avoids a subtle issue with using closure variables in event handlers.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1185, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "67b7fd18-d139-4ffa-a677-87c2272aff3f": {"__data__": {"id_": "67b7fd18-d139-4ffa-a677-87c2272aff3f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/input", "title": "Input"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9139c2d2-8a52-42b2-99ce-c20989b1adb3", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/input", "title": "Input"}, "hash": "f7c35c7e37c9c9b04316357ffd6a00db351863598dc11a9b687f0d8ab9276ee6", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nInput allows the user to type in a value and is based on the Angular Material input component.\n\nFor longer text inputs, also see Textarea", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 149, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c4caa573-9380-4c6b-9e00-6c3208026237": {"__data__": {"id_": "c4caa573-9380-4c6b-9e00-6c3208026237", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/input", "title": "Input"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2b9bd700-1945-45dc-a9bb-abd05d43c8ff", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/input", "title": "Input"}, "hash": "b2b18c02f0f14d6a53dee21708f3a7bea1bc9694e3da13eb7c56dfb1e4db4e2e", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/input.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 50, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bcc36d5f-372e-453f-a4bb-876bd3db88cc": {"__data__": {"id_": "bcc36d5f-372e-453f-a4bb-876bd3db88cc", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/input", "title": "Input"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "add47b6d-7ada-4f6d-b741-64ac27c03a18", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/input", "title": "Input"}, "hash": "da7631e2f9c540fb2d3987cf749d9f68c16ec83b1923a04449a80f91c1e2a23b", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.input.input.input\n::: mesop.components.input.input.InputBlurEvent\n::: mesop.components.input.input.InputEnterEvent\n::: mesop.events.InputEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 170, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c8c2e4ff-592f-4609-a78d-d5e3a9754121": {"__data__": {"id_": "c8c2e4ff-592f-4609-a78d-d5e3a9754121", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/link", "title": "Link"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c34bca40-2940-46e8-b91e-dc64a010e31c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/link", "title": "Link"}, "hash": "96a7237e5aa9eedf07adea0245c7b1aa988b13da84d1668d89abc0eb9a6f497a", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nLink creates an HTML anchor element (i.e. ``) which links to another page.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 86, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cf5f2183-9ee8-4ce2-a5ee-e7b1e3ef39ed": {"__data__": {"id_": "cf5f2183-9ee8-4ce2-a5ee-e7b1e3ef39ed", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/link", "title": "Link"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "7d72ad7d-7884-41d2-b415-989adb35b8cd", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/link", "title": "Link"}, "hash": "5ee1c7058ce78590c974b21f4138d9ee6a7493c7dd275cd3eb77c11562b81e53", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/link.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 49, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1af17f63-047a-4947-97a4-d09c33fe5eba": {"__data__": {"id_": "1af17f63-047a-4947-97a4-d09c33fe5eba", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/link", "title": "Link"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b5ce2e1e-6ff1-4924-af86-9b184d601cde", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/link", "title": "Link"}, "hash": "e2c9418e39c21c90f4d1b08bcd15b46d9c7d2b1c1bfb9ca035237e243406bc0b", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.link.link.link", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 42, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "93a450c4-ced7-49f5-b1da-0c2491f86b92": {"__data__": {"id_": "93a450c4-ced7-49f5-b1da-0c2491f86b92", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/markdown", "title": "Markdown"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e8350a37-9748-4489-924b-ea59f8583379", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/markdown", "title": "Markdown"}, "hash": "0bfbb673990c0f1d1bed51a59ccc26762047d7feb58b80702b4b3842b5131cde", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nMarkdown is used to render markdown text.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 53, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cd9d7958-0492-4584-92f2-0ce28ad8fa8c": {"__data__": {"id_": "cd9d7958-0492-4584-92f2-0ce28ad8fa8c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/markdown", "title": "Markdown"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2c3638cc-bb42-4666-b449-d6f5a4af8da0", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/markdown", "title": "Markdown"}, "hash": "e027827c8732182a9c6001d647d282b74bb0fca27ed22515f1c8a848975e018f", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/markdown_demo.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 58, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2823117f-9c01-46ec-b9fe-28e35796cdfd": {"__data__": {"id_": "2823117f-9c01-46ec-b9fe-28e35796cdfd", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/markdown", "title": "Markdown"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d2ebf18e-ac06-4f02-8a0f-455d0898cb72", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/markdown", "title": "Markdown"}, "hash": "cc257d1bb7214b2f562025bb00d32b2d9fcc1b5b0661e919e65f726e8a80cda0", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.markdown.markdown.markdown", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 54, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9f35f7b2-d3c6-4eea-9c2a-6eb5f8321c21": {"__data__": {"id_": "9f35f7b2-d3c6-4eea-9c2a-6eb5f8321c21", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/plot", "title": "Plot"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "dd180e5b-d1c4-4464-868c-cfc17ac33f8c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/plot", "title": "Plot"}, "hash": "cded31f5507cd362b0f95f3a6e38212173f655f619a32eb3437de5734e5e849b", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nPlot provides a convenient way to render Matplotlib figures as an image.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 84, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3c968fd2-e9b9-44ba-9e8c-22bb3eb8ecbe": {"__data__": {"id_": "3c968fd2-e9b9-44ba-9e8c-22bb3eb8ecbe", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/plot", "title": "Plot"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "59c4b57b-ec47-49b9-b517-ceb29335a9e1", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/plot", "title": "Plot"}, "hash": "98371d7bd17b88fc81ad68026b52565b4bde2acfc38b356df73916c907ae2935", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/plot.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 49, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e350daca-ef46-4af6-9d9b-c117fb9d4ab5": {"__data__": {"id_": "e350daca-ef46-4af6-9d9b-c117fb9d4ab5", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/plot", "title": "Plot"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f65738de-41db-4dfc-b4ad-5f514956be9c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/plot", "title": "Plot"}, "hash": "6e154226a5b42b00f60995c01d589851ea96bfbb5cc4644d729f38584eebed1e", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.plot.plot.plot", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 42, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ea9c0f6c-efb3-466e-b1ab-e17f1ba02140": {"__data__": {"id_": "ea9c0f6c-efb3-466e-b1ab-e17f1ba02140", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-bar", "title": "Progress bar"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c8f93c91-39fa-4d49-8d78-2272fca73a8d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-bar", "title": "Progress bar"}, "hash": "a6740780fb7510d601a583273671338be3495f09e03a009d7944a41ce381074b", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nProgress Bar is used to indicate something is in progress and is based on the Angular Material progress bar component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 130, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "28e77ef1-1ebd-4d26-ae03-e2e3d0ed15da": {"__data__": {"id_": "28e77ef1-1ebd-4d26-ae03-e2e3d0ed15da", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-bar", "title": "Progress bar"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "04f07c16-0533-4ea5-bc0f-8c2484915a14", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-bar", "title": "Progress bar"}, "hash": "1a10ed80e625e51e1076431065f9274da07ab845455456967569cf6fc9d9d6b1", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/progress_bar.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 57, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8057edd4-36c9-4233-8d3d-ae1c2a848b5d": {"__data__": {"id_": "8057edd4-36c9-4233-8d3d-ae1c2a848b5d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-bar", "title": "Progress bar"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "1dd90bc4-1e7c-4878-8d2b-7f170c68f54f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-bar", "title": "Progress bar"}, "hash": "27982628f8159086accc2e6cffb84ae00f832002be487a507ad7b13558f5b810", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.progress_bar.progress_bar.progress_bar\n::: mesop.components.progress_bar.progress_bar.ProgressBarAnimationEndEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 142, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0aa818bb-e955-4621-b605-864b08cba6f5": {"__data__": {"id_": "0aa818bb-e955-4621-b605-864b08cba6f5", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-spinner", "title": "Progress spinner"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d7e98457-8334-4b1c-8935-b7f49af555af", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-spinner", "title": "Progress spinner"}, "hash": "e78bf1bf895b62fca2cada6482f7d75478344d4211f5b1c599dd44e5ecbc5a53", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nProgress Spinner is used to indicate something is in progress and is based on the Angular Material progress spinner component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 138, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6d43e91a-cf47-4796-8af6-5541a777e128": {"__data__": {"id_": "6d43e91a-cf47-4796-8af6-5541a777e128", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-spinner", "title": "Progress spinner"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8d501f99-c052-45e4-b423-4e1c61188d59", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-spinner", "title": "Progress spinner"}, "hash": "82f07c8595630f4c49f427e0c8d38f7f05657dd1d5493141e500e20897777097", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/progress_spinner.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 61, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5e23219d-7300-4576-9f19-26066c616469": {"__data__": {"id_": "5e23219d-7300-4576-9f19-26066c616469", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-spinner", "title": "Progress spinner"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "5f9aad39-0aef-4c2c-98cd-14ddeb72e58b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-spinner", "title": "Progress spinner"}, "hash": "8d63f0783d2ee81f74e0d4a846781effeb40297908bb6c994a216ad69bd694f1", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.progress_spinner.progress_spinner.progress_spinner", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 78, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "79913388-8aa7-4dd3-9f8f-e9948933977d": {"__data__": {"id_": "79913388-8aa7-4dd3-9f8f-e9948933977d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/radio", "title": "Radio"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "da2473e1-9a22-4651-8b32-93be9079ffcf", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/radio", "title": "Radio"}, "hash": "0edc056fa122c69f2149e0084f0b39a9725196a61adfaee343a35d58fa25acf4", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nRadio is a single selection form control based on the Angular Material radio component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 99, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d3a2d556-aaeb-4e80-bb65-4f40ab3b6213": {"__data__": {"id_": "d3a2d556-aaeb-4e80-bb65-4f40ab3b6213", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/radio", "title": "Radio"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "fcbb4837-df5e-48f0-91d6-66b35b1800db", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/radio", "title": "Radio"}, "hash": "1ddf041af2dae2985aca76ec7096d687738b1625549f824b146fa9aae0fe9994", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/radio.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 50, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b17e4884-87c8-4f53-bfa3-c01f35e8bc43": {"__data__": {"id_": "b17e4884-87c8-4f53-bfa3-c01f35e8bc43", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/radio", "title": "Radio"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "bb6bb3e4-3a7a-45cc-95ce-f77583629569", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/radio", "title": "Radio"}, "hash": "91c2363ad448fdde8a4e258db37fe4d9580df3a754d12be4811381b7d1b8b71e", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.radio.radio.radio\n\n::: mesop.components.radio.radio.RadioOption\n\n::: mesop.components.radio.radio.RadioChangeEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 142, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1a6072f6-efac-4a72-b940-0764a9604a1d": {"__data__": {"id_": "1a6072f6-efac-4a72-b940-0764a9604a1d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/select", "title": "Select"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8ed492eb-c39e-4ecf-b559-dd2243446ad4", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/select", "title": "Select"}, "hash": "0956e5a4968cb584f5a67b26ad7f8cb3eba48d401d3999f3e59175e45608e180", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nSelect allows the user to choose from a list of values and is based on the Angular Material select component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 121, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9a9e7211-21ef-4630-845d-6ad186d4e325": {"__data__": {"id_": "9a9e7211-21ef-4630-845d-6ad186d4e325", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/select", "title": "Select"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "3c388d3d-0eac-4108-8bbc-ac4da25a6275", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/select", "title": "Select"}, "hash": "855fa7d8a59192571e855d87fd492de124fefcaff840cca87c78ce91cf936a10", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/select_demo.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 56, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "26529306-696f-40b3-9439-1763ab6e4b8c": {"__data__": {"id_": "26529306-696f-40b3-9439-1763ab6e4b8c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/select", "title": "Select"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e5444a2b-d50e-4bf9-8bd5-dd541ab37cfa", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/select", "title": "Select"}, "hash": "d36eba71acdd4fdd7fbff107c899aa8d147f3ea90666293dbc35cc012571f508", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.select.select.select\n::: mesop.components.select.select.SelectOption\n::: mesop.components.select.select.SelectSelectionChangeEvent\n::: mesop.components.select.select.SelectOpenedChangeEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 217, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "231b2920-155d-4bc5-93b3-374ebaffc790": {"__data__": {"id_": "231b2920-155d-4bc5-93b3-374ebaffc790", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/sidenav", "title": "Sidenav"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "7a75a122-34cc-4fab-8aa0-d38beb2bfcc9", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/sidenav", "title": "Sidenav"}, "hash": "e34d2842e446a64f0b5cf4ae6689990675570cde61fca757cc9e37c7c7c95eee", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nSidenav is a sidebar typically used for navigation and is based on the Angular Material sidenav component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 118, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "63a450aa-8362-40c1-ad62-88158b33ec58": {"__data__": {"id_": "63a450aa-8362-40c1-ad62-88158b33ec58", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/sidenav", "title": "Sidenav"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f9e4d986-3952-46d1-9653-ef0530a3602d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/sidenav", "title": "Sidenav"}, "hash": "c124ce3135108b1eccdf452a2f3d8f7516176fc1f9a7464910f83e47b4782e42", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/sidenav.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 52, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fb0d811e-79cc-4ac0-836b-f7ce4f84cda2": {"__data__": {"id_": "fb0d811e-79cc-4ac0-836b-f7ce4f84cda2", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/sidenav", "title": "Sidenav"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "3dc8f002-f527-42a8-941d-2106568feb19", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/sidenav", "title": "Sidenav"}, "hash": "fb575d2490ff22eb73c3d324a2e616d9985e3565d823d953ed43a40c680375b4", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.sidenav.sidenav.sidenav", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 51, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "94e72dcc-501a-4318-a965-16a7a5a00ba9": {"__data__": {"id_": "94e72dcc-501a-4318-a965-16a7a5a00ba9", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slide-toggle", "title": "Slide toggle"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2411193e-8b54-4a82-8eb0-e71f4d24434a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slide-toggle", "title": "Slide toggle"}, "hash": "6cbaa5f1e1c42fc27ece4dd2b0a6efb0d8c3baceb1d0c08af8b1db04c6daff28", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nSlide Toggle allows the user to toggle on and off and is based on the Angular Material slide toggle component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 122, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3c3d7fe1-c2bd-4643-a659-208eb74b81a2": {"__data__": {"id_": "3c3d7fe1-c2bd-4643-a659-208eb74b81a2", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slide-toggle", "title": "Slide toggle"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d6b99dd1-3159-4382-8842-1fd299afd250", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slide-toggle", "title": "Slide toggle"}, "hash": "a74aa40405fb6434471b2a3507d380f4d20f0e6fde9f09ab568bfc80a5aee782", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/slide_toggle.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 57, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3a9512e9-0f28-4e23-a975-556cf9a84361": {"__data__": {"id_": "3a9512e9-0f28-4e23-a975-556cf9a84361", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slide-toggle", "title": "Slide toggle"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b94cc6d4-4596-4603-a05c-7dedd351c29a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slide-toggle", "title": "Slide toggle"}, "hash": "45bc3ef90aa61d4254f423636ad25593faf44086b630293e33947acfb7934809", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.slide_toggle.slide_toggle.slide_toggle\n::: mesop.components.slide_toggle.slide_toggle.content_slide_toggle\n::: mesop.components.slide_toggle.slide_toggle.SlideToggleChangeEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 204, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "38fe9b84-67fa-4b09-be0a-2e74ae6e064e": {"__data__": {"id_": "38fe9b84-67fa-4b09-be0a-2e74ae6e064e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slider", "title": "Slider"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "52e7462d-8f64-4f6b-b90c-4c7fc01f912a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slider", "title": "Slider"}, "hash": "bee21d98ee7d6b381088b7305eac4e280c20d5f6ff5d59a6e697e6503513842f", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nSlider allows the user to select from a range of values and is based on the Angular Material slider component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 122, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "837251c2-9f5e-42cf-8290-921358e50926": {"__data__": {"id_": "837251c2-9f5e-42cf-8290-921358e50926", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slider", "title": "Slider"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d01f316f-abff-44da-97df-b402711b4d95", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slider", "title": "Slider"}, "hash": "0c7ff8c5624fd2571a2e43bd806f7e60844350fdacec2c61b1aa1f9d1c53d213", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/slider.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 51, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b6fa0b8c-03e4-4004-8b62-3b9f2356d1c3": {"__data__": {"id_": "b6fa0b8c-03e4-4004-8b62-3b9f2356d1c3", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slider", "title": "Slider"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "47464796-5f47-488b-a791-ad1ae227007b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slider", "title": "Slider"}, "hash": "4efddc74f85a6d8b58e67c2e9f5fde57927eba10084c303a2eadd80cf1c2cd29", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.slider.slider.slider\n::: mesop.components.slider.slider.SliderValueChangeEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 106, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "21d595b2-b489-4d2f-8bad-f3690b9eb730": {"__data__": {"id_": "21d595b2-b489-4d2f-8bad-f3690b9eb730", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/table", "title": "Table"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6672e7b6-04a4-44be-b010-3c258a283e13", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/table", "title": "Table"}, "hash": "aebfe1a6a6ed3604b73d639f29ffe2e09cbc718029f615e4e20c1c5658d8a444", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nTable allows the user to render an Angular Material table component from a Pandas data frame.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 105, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d62b53b1-9369-437f-9d34-f4d833ece296": {"__data__": {"id_": "d62b53b1-9369-437f-9d34-f4d833ece296", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/table", "title": "Table"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8f3b340a-e3c1-4b36-932c-398a14bcf21e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/table", "title": "Table"}, "hash": "8bdf04f293f7161a712019e5048383b8daa393bb1bfb09455b29436af4feebfe", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/table.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 50, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a7a81ced-06c3-4760-b20c-955557873218": {"__data__": {"id_": "a7a81ced-06c3-4760-b20c-955557873218", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/table", "title": "Table"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6cb13c0d-02fc-4ac1-9e78-2841dcf78cb8", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/table", "title": "Table"}, "hash": "80feed0f819e81a30efb333dc0c0a1b60bd4522e721a895bf8fe3d58bf74ef32", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.table.table.table", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 45, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1a157db6-92a4-4880-8b80-5d72be78ba0c": {"__data__": {"id_": "1a157db6-92a4-4880-8b80-5d72be78ba0c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-image", "title": "Text to image"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "cb47a9d0-dbe1-4bcc-9281-19e20523b0c6", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-image", "title": "Text to image"}, "hash": "a343316f71f2329ad1efa57f597ad71f68b8935eb88080f4ae9ccf24fa6ba96a", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nText To Image component is a quick and simple way of getting started with Mesop. Text To Image is part of Mesop Labs.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 129, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ee259d56-a2d4-405f-b6a9-af37d3654f5e": {"__data__": {"id_": "ee259d56-a2d4-405f-b6a9-af37d3654f5e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-image", "title": "Text to image"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e5963c06-bb6e-4d26-a3e9-d789f6588477", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-image", "title": "Text to image"}, "hash": "0b46f1bb874add5f48075a672fb7121dad2f420b66b11af404ec19622e068890", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/text_to_image.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 58, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "80cb4992-6cc9-41e9-8d97-c9077d9c30a4": {"__data__": {"id_": "80cb4992-6cc9-41e9-8d97-c9077d9c30a4", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-image", "title": "Text to image"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "09f34a80-7d37-4e71-b277-a75bbff0c9eb", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-image", "title": "Text to image"}, "hash": "2ffbb7afd7418fd423d45fd8c6e094f1b63a268136e155c77e9b80d929f5a4e9", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.labs.text_to_image.text_to_image", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 49, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0f01891a-501d-42a7-bf6a-ee5128d56d52": {"__data__": {"id_": "0f01891a-501d-42a7-bf6a-ee5128d56d52", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-text", "title": "Text to text"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8de0d0c9-31f3-41af-bd87-aa8a116c1d4f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-text", "title": "Text to text"}, "hash": "3ff5d043aa3c24cabca1b7f0c70c9d4dafe9d86908a97b9e9d5ad9788ed8ec76", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nText to text component allows you to take in user inputted text and return a transformed text. This is part of Mesop Labs.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 134, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "83f82e21-bd16-4450-b4e5-829c84cb152c": {"__data__": {"id_": "83f82e21-bd16-4450-b4e5-829c84cb152c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-text", "title": "Text to text"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "76509b09-ef13-4503-88bd-71fbeae32f93", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-text", "title": "Text to text"}, "hash": "77d5c760dfece9228688e990499ca91157677c4eff1210a33aa5e430a54520c9", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/text_to_text.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 57, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "516e9e28-4bb3-4aea-be3c-baf499432f61": {"__data__": {"id_": "516e9e28-4bb3-4aea-be3c-baf499432f61", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-text", "title": "Text to text"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "74559d62-5a91-4981-8fa0-1bb241e88b37", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-text", "title": "Text to text"}, "hash": "6cbdee25852c590ff65b8f6d9224d703373ab9acfd1d3947bde5d16c29a8e0ad", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.labs.text_to_text.text_to_text", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 47, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "669d78a9-d7ee-432b-995a-4cac7687c8e2": {"__data__": {"id_": "669d78a9-d7ee-432b-995a-4cac7687c8e2", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text", "title": "Text"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "1fd4af23-2b2f-4d6c-a872-2bbb9b78f5e1", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text", "title": "Text"}, "hash": "11d38be3e79747076a1db8f1efa66c6bc23247bf506fc7a711d221ea20f2261e", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nText displays text as-is. If you have markdown text, use the Markdown component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 92, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1cfa9356-4996-48a0-9ffd-54b0102a84db": {"__data__": {"id_": "1cfa9356-4996-48a0-9ffd-54b0102a84db", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text", "title": "Text"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "df9ff403-845f-44d2-a70f-ff64d66ca50a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text", "title": "Text"}, "hash": "ad445ea2a0b4ad9874c7c600c6907c91209fbdbc99bcd7975e6529ea99bbc904", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/text.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 49, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9b9886d7-fed0-40d4-a196-07d8ee6d195a": {"__data__": {"id_": "9b9886d7-fed0-40d4-a196-07d8ee6d195a", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text", "title": "Text"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8a84b427-ea7b-4253-99f2-165886852715", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text", "title": "Text"}, "hash": "59815ba43d85ce5c3916f40e77d23e8d7c3bbcfbcf79eb41431fc1838d706b5d", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.text.text.text", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 42, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "16a54d1e-13f8-45ac-a30d-6d5d62c35747": {"__data__": {"id_": "16a54d1e-13f8-45ac-a30d-6d5d62c35747", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/textarea", "title": "Textarea"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "993ce89f-5709-41f7-bdec-f6719061d1e5", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/textarea", "title": "Textarea"}, "hash": "37c1c04fe065fe79b30e43687afd71892e566f92cf97ce9fe63f138ca3a9221f", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nTextarea allows the user to type in a value and is based on the Angular Material input component for ``.\n\nThis is similar to Input, but Textarea is better suited for long text inputs.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 195, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f6fa4300-8b59-4e4b-aa99-904eca95d5c6": {"__data__": {"id_": "f6fa4300-8b59-4e4b-aa99-904eca95d5c6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/textarea", "title": "Textarea"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f1d50ab3-3d56-4b2f-8c6f-f1804c1d3c7d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/textarea", "title": "Textarea"}, "hash": "647f7d010e6375e991f50f57cb8ab5136cfa1c0c3a3980c79d451d3a763fd487", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/textarea.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 53, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3a7160dc-73a0-4904-a169-3ddf3852ef74": {"__data__": {"id_": "3a7160dc-73a0-4904-a169-3ddf3852ef74", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/textarea", "title": "Textarea"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "3fbead78-dab7-4896-9cc3-0812f896c55d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/textarea", "title": "Textarea"}, "hash": "11a330feff9c23b9bb3a287d3961ffc9678c983dc73c5172f37f57f08d5d8157", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.input.input.textarea\n::: mesop.components.input.input.native_textarea\n::: mesop.components.input.input.InputBlurEvent\n::: mesop.events.InputEvent", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 173, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cd9be09d-b23f-4e7d-a045-bba7f6fe858f": {"__data__": {"id_": "cd9be09d-b23f-4e7d-a045-bba7f6fe858f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/tooltip", "title": "Tooltip"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8bcc8a9e-0470-4954-a24d-b08116d67327", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/tooltip", "title": "Tooltip"}, "hash": "6a056b3b6e8c22736c719287d76e307ed2f1a3eefec582bebe462a61251a5145", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nTooltip is based on the Angular Material tooltip component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 71, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "26dae3c2-81ed-4cd6-aae2-678cd0713b64": {"__data__": {"id_": "26dae3c2-81ed-4cd6-aae2-678cd0713b64", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/tooltip", "title": "Tooltip"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "423594fe-812f-4102-b9b5-7da67c83fcb0", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/tooltip", "title": "Tooltip"}, "hash": "8626b586acf869722fd7b20f001abac1173a46d0fa1d68e457a32aaaf9e136f0", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/tooltip.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 52, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7a2b8e85-e85b-44ae-9980-0a578c4ab152": {"__data__": {"id_": "7a2b8e85-e85b-44ae-9980-0a578c4ab152", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/tooltip", "title": "Tooltip"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6f2c55a0-2443-47c8-a574-46434f1e157a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/tooltip", "title": "Tooltip"}, "hash": "a3b209295f63613e3e0d85ffa50772ec67e93504c5a7f4ace0c79e316024539d", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.tooltip.tooltip.tooltip", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 51, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2f800e3a-816b-4034-92f8-fb842d327fde": {"__data__": {"id_": "2f800e3a-816b-4034-92f8-fb842d327fde", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/uploader", "title": "Uploader"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "abd050a2-1f70-49d8-b798-242e7e018319", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/uploader", "title": "Uploader"}, "hash": "65ec32ad1865a68a9698a774e25270368df3455d1a8861d0ce9e498b4b9697a8", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nUploader is the equivalent of an `` HTML element except it uses a custom UI that better\nmatches the look of Angular Material Components.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 148, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fdd4e269-6582-43d4-93ed-0d28491208c2": {"__data__": {"id_": "fdd4e269-6582-43d4-93ed-0d28491208c2", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/uploader", "title": "Uploader"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "04e60fef-39e3-43cd-8e43-72c06e63f7c8", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/uploader", "title": "Uploader"}, "hash": "3866b24495b57868781fed9ce366e1a0c527bdc4770ab6c3af8b98c3c3e919eb", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/uploader.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 53, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "33ed5c82-4559-49bc-b5ef-e0fa850df218": {"__data__": {"id_": "33ed5c82-4559-49bc-b5ef-e0fa850df218", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/uploader", "title": "Uploader"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9463b6a0-fd67-422b-85ae-5c4be577bcf1", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/uploader", "title": "Uploader"}, "hash": "ff1b14b6b2d2d8766e14f78a5416b3faf9d61c0a36214e02d0267ab2c1145fe9", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.uploader.uploader.uploader\n::: mesop.components.uploader.uploader.content_uploader\n::: mesop.components.uploader.uploader.UploadEvent\n::: mesop.components.uploader.uploader.UploadedFile", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 213, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8b8505c9-bd1f-4c7c-8616-59ab4f035aba": {"__data__": {"id_": "8b8505c9-bd1f-4c7c-8616-59ab4f035aba", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/video", "title": "Video"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "31be7407-0282-499f-8814-8d077a59a7a4", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/video", "title": "Video"}, "hash": "5a073905092494acc534f8379abeb8023beb4c1f169b9118a83a4dabbb66dba4", "class_name": "RelatedNodeInfo"}}, "text": "Overview\n\nVideo is the equivalent of an `` HTML element. Video displays the browser's native video controls.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 110, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9a7ebab0-f452-4cb3-80fa-9a028a121825": {"__data__": {"id_": "9a7ebab0-f452-4cb3-80fa-9a028a121825", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/video", "title": "Video"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d3f084df-fe5a-4c90-829f-492225e1bc58", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/video", "title": "Video"}, "hash": "2dfd984c42b79aec9f63bf1c4ea54e1e65b8ead524a0b27b73e423a6ada18064", "class_name": "RelatedNodeInfo"}}, "text": "Examples\n\n\n\n```python\n--8<-- \"demo/video.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 50, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4c7a4434-abee-4c24-8087-9290b91a1379": {"__data__": {"id_": "4c7a4434-abee-4c24-8087-9290b91a1379", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/components/video", "title": "Video"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "260785ed-c96a-4312-949f-020237c0014d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/components/video", "title": "Video"}, "hash": "301be368cbf25dc84da57c9b6ec1c3e941ce908cf790e3261da00bd8b2241b9d", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.components.video.video.video", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 45, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3b74b05a-2e7b-4ec0-845c-f11ec2c78af2": {"__data__": {"id_": "3b74b05a-2e7b-4ec0-845c-f11ec2c78af2", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8a36a683-7a84-439f-9451-160515d9093b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "hash": "a0dc1f5ab4a39017ebc1d2f40fa783b37d8ff76bd194358f724e170ef2fc59b5", "class_name": "RelatedNodeInfo"}}, "text": "Frequently Asked Questions", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 28, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "880a7f6e-c256-454c-899b-df7fe11c7327": {"__data__": {"id_": "880a7f6e-c256-454c-899b-df7fe11c7327", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "da39804b-82da-4229-bd25-bfa375423bc0", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "hash": "c3968ac3f3ce6abf520715d9a1acf9725c05cd3580144a8683d8e5777050c6be", "class_name": "RelatedNodeInfo"}}, "text": "General", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 9, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fd3b29ef-46a4-4f60-bd2e-7bf7ddb87cf4": {"__data__": {"id_": "fd3b29ef-46a4-4f60-bd2e-7bf7ddb87cf4", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4bf2338c-f9d5-47b8-a6d2-02c390438ed3", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "hash": "9b4a94baa53ab061389b84e883c6d31fcc9d2f98f0761bff63c712998e784402", "class_name": "RelatedNodeInfo"}}, "text": "What kinds of apps is Mesop suited for?\n\nMesop is well-suited for ML/AI demos and internal tools because it enables developers without frontend experience to quickly build web apps. For use cases that prioritize developer experience and velocity, Mesop can be a good choice.\n\nDemanding consumer-facing apps, which have strict requirements in terms of performance, custom UI components, and i18n/localization would not be a good fit for Mesop and other UI frameworks may be more suitable.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 489, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e813bb0e-64c6-4741-a8ce-301c8d588f39": {"__data__": {"id_": "e813bb0e-64c6-4741-a8ce-301c8d588f39", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "356b6d18-4142-443a-9183-4c00fc9fb697", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "hash": "bc6a19e97aa93e857d2960d8b7cb4cda16157f7582fa8a3143b6853919d3261c", "class_name": "RelatedNodeInfo"}}, "text": "How does Mesop compare to other Python UI frameworks?\n\nWe have written a comparison doc to answer this question in-depth.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 123, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6ce76fd7-26a0-462a-9323-1acb1211414a": {"__data__": {"id_": "6ce76fd7-26a0-462a-9323-1acb1211414a", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6d880b02-a5b2-494c-a9d8-33b118276ec8", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "hash": "46d076c399d29eafee414582176815b25b6b843cba8be0ca97d647bcf76db27f", "class_name": "RelatedNodeInfo"}}, "text": "Is Mesop production-ready?\n\nDozens of teams at Google have used Mesop to build demos and internal apps.\n\nAlthough Mesop is pre-v1, we take backwards-compatibilty seriously and avoid backwards incompatible change. This is critical to us because many teams within Google rely on Mesop and we need to not break them.\n\nOccasionally, we will do minor clean-up for our APIs, but we will provide warnings/deprecation notices and provide at least 1 release to migrate to the newer APIs.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 480, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c96b337a-2683-4d86-a45c-ef0193b7668c": {"__data__": {"id_": "c96b337a-2683-4d86-a45c-ef0193b7668c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "322db41b-073d-40cb-9830-80b528266a71", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "hash": "1a93818a0e98303d6898b5221f2e79560fe3a6936f5d976f034ff9e831498cad", "class_name": "RelatedNodeInfo"}}, "text": "Which modules should I import from Mesop?\n\nOnly import from these two modules:\n\n```py\nimport mesop as me\nimport mesop.labs as mel\n```\n\nAll other modules are considered internal implementation details and may change without notice in future releases.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 251, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "15c1d16e-c850-4405-a774-aba8b4afa951": {"__data__": {"id_": "15c1d16e-c850-4405-a774-aba8b4afa951", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9fbadeac-d473-4461-8324-9a7ea0dc0037", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "hash": "76b12c193acc97ea3d5af3e6fb47a83aa32e982a2eb1c8776d5882f017190b02", "class_name": "RelatedNodeInfo"}}, "text": "Is Mesop an official Google product?\n\nNo, Mesop is not an official Google product and Mesop is a 20% project maintained by a small core team of Google engineers with contributions from the broader community.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 209, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "df3bc383-d6c6-4a8c-8f92-952f07935f0b": {"__data__": {"id_": "df3bc383-d6c6-4a8c-8f92-952f07935f0b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6641541e-c1df-4c90-bb15-7c1c208a03cc", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "hash": "2430d0ff0a1e0a941312a3b14816fec6fdb3de8b10e965a1fe539e98358ecc26", "class_name": "RelatedNodeInfo"}}, "text": "Deployment", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 12, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e7b6e3d4-4610-4034-a92f-211b9fb125a9": {"__data__": {"id_": "e7b6e3d4-4610-4034-a92f-211b9fb125a9", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e8415ffc-aa02-42f6-92f6-23e15d07b3b9", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}, "hash": "058f390bc39a92179d1802dc08c3f816dc4db5879b13c57c473cb0eafe15a423", "class_name": "RelatedNodeInfo"}}, "text": "How do I share or deploy my Mesop app?\n\nThe best way to share your Mesop app is to deploy it to a cloud service. You can follow our deployment guide for step-by-step instructions to deploy to Google Cloud Run.\n\n> Note: you should be able to deploy Mesop on any cloud service that takes a container. Please read the above deployment guide as it should be similar steps.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 370, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "76c756d8-a4d7-4381-b4c3-94258f689fa0": {"__data__": {"id_": "76c756d8-a4d7-4381-b4c3-94258f689fa0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "51d5ba87-6fdd-4272-a4d5-86bd9bb7b019", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "hash": "7b79c322e13592d1a64618334abcd30e33fd712c44e5d28b76bc8f02f8cfc1ae", "class_name": "RelatedNodeInfo"}}, "text": "Core Concepts\n\nThis doc will explain the core concepts of building a Mesop app.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 81, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f8b8026a-34c0-488f-9c08-8e96f1a470d9": {"__data__": {"id_": "f8b8026a-34c0-488f-9c08-8e96f1a470d9", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "367ac20d-e2b8-4a6c-a0a0-5c2ffd771c2a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "hash": "bd5b308015ef87e7e4a43425e85e35a1f114b5640499eb9a3d9bfeb73d7e57be", "class_name": "RelatedNodeInfo"}}, "text": "Hello World app\n\nLet's start by creating a simple Hello World app in Mesop:\n\n```python\n--8<-- \"mesop/examples/docs/hello_world.py\"\n```\n\nThis simple example demonstrates a few things:\n\n- Every Mesop app starts with `import mesop as me`. This is the only recommended way to import mesop, otherwise your app may break in the future because you may be relying on internal implementation details.\n- `@me.page` is a function decorator which makes a function a _root component_ for a particular path. If you omit the `path` parameter, this is the equivalent of `@me.page(path=\"/\")`.\n- `app` is a Python function that we will call a __component__ because it's creating Mesop components in the body.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 692, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0d37e51a-258b-4e91-b70a-1739c3b1251e": {"__data__": {"id_": "0d37e51a-258b-4e91-b70a-1739c3b1251e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "798051b1-3e4c-478d-9c2a-771d5ff4081b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "hash": "a45950b6f5fedf38de665ebfe280c4615d20bc909833accd4a2b3054f474346e", "class_name": "RelatedNodeInfo"}}, "text": "Components\n\nComponents are the building blocks of a Mesop application. A Mesop application is essentially a tree of components.\n\nLet's explain the different kinds of components in Mesop:\n\n- Mesop comes built-in with __native__ components. These are components implemented using Angular/Javascript. Many of these components wrap Angular Material components.\n- You can also create your own components which are called __user-defined__ components. These are essentially Python functions like `app` in the previous example.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 521, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "87b937f3-dc32-4015-893e-0db50d660313": {"__data__": {"id_": "87b937f3-dc32-4015-893e-0db50d660313", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f42569c5-8699-4ab4-9f31-c55f089d3983", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "hash": "70b4f28b0a2e8f0be9e5fa7c0ee06363c0fb56c4e44bbcc81168de3777a5cff1", "class_name": "RelatedNodeInfo"}}, "text": "Counter app\n\nLet's build a more complex app to demonstrate Mesop's interactivity features.\n\n```python\n--8<-- \"mesop/examples/docs/counter.py\"\n```\n\nThis app allows the user to click on a button and increment a counter, which is shown to the user as \"Clicks: #\".\n\nLet's walk through this step-by-step.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 301, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f6ad97d4-2f6a-473c-aaff-e98b937f25ea": {"__data__": {"id_": "f6ad97d4-2f6a-473c-aaff-e98b937f25ea", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "15073601-a8f6-4338-bf25-ad54a931427a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "hash": "7c2ae7e77bc51994a2d33935d11295197f6e12f9a07b399a7f43757168341e96", "class_name": "RelatedNodeInfo"}}, "text": "State\n\nThe `State` class represents the application state for a particular browser session. This means every user session has its own instance of `State`.\n\n`@me.stateclass` is a class decorator which is similar to Python's dataclass but also sets default values based on type hints and allows Mesop to inject the class as shown next.\n\n> Note: Everything in a state class must be serializable because it's sent between the server and browser.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 443, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "559029d7-ade9-41fd-9353-37fa1fb83f79": {"__data__": {"id_": "559029d7-ade9-41fd-9353-37fa1fb83f79", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "602c06a6-c258-4dce-9e13-72a3be8caa64", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "hash": "aac0ae600a98ae69fe79ccb9e3bc82c290dc05f360b70d4187a832ccd509d249", "class_name": "RelatedNodeInfo"}}, "text": "Event handler\n\nThe `button_click` function is an event handler. An event handler has a single parameter, `event`, which can contain a value (this will be shown in the next example). An event handler is responsible for updating state based on the incoming event.\n\n`me.state(State)` retrieves the instance of the state class for the current session.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 349, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "da6e4399-5437-4706-9152-b4eedae1942c": {"__data__": {"id_": "da6e4399-5437-4706-9152-b4eedae1942c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a4d91326-7871-4b43-aae3-cd856fd4799a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "hash": "b65af21d1f1fe05254eab4b3cb445a673cb643a9818a67a824aecd476434742e", "class_name": "RelatedNodeInfo"}}, "text": "Component\n\nLike the previous example, `main` is a Mesop component function which is decorated with `page` to mark it as a root component for a path.\n\nSimilar to the event handler, we can retrieve the state in a component function by calling `me.state(State)`.\n\n> Note: it's _not_ safe to mutate state inside a component function. All mutations must be done in an event handler.\n\nRendering dynamic values in Mesop is simple because you can use standard Python string interpolation use f-strings:\n\n```python\nme.text(f\"Clicks: {state.clicks}\")\n```\n\nThe button component demonstrates connecting an event handler to a component. Whenever a click event is triggered by the component, the registered event handler function is called:\n\n```python\nme.button(\"Increment\", on_click=button_click)\n```\n\nIn summary, you've learned how to define a state class, an event handler and wire them together using interactive components.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 916, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "116022c2-ff71-452e-9088-1beacbd446c0": {"__data__": {"id_": "116022c2-ff71-452e-9088-1beacbd446c0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "424007d3-f082-488f-a01d-cba128afa9d7", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}, "hash": "8905dac926cbef66d8d6461b8f4b7b8fc16305e035829ccf8b8f6671bf9160cb", "class_name": "RelatedNodeInfo"}}, "text": "What's next\n\nAt this point, you've learned all the basics of building a Mesop app. For a step-by-step guide for building a real-world Mesop application, check out the DuoChat Codelab:\n\n\n DuoChat Codelab", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 207, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "36b7b4c5-4bf1-4151-a34f-537aef2da6fa": {"__data__": {"id_": "36b7b4c5-4bf1-4151-a34f-537aef2da6fa", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "544931fd-6ecc-4964-b8d9-e91d32b1fe00", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}, "hash": "30293139fd6b599db38363d3f86694874a80a07f1895a05ba292e7b2302b1a50", "class_name": "RelatedNodeInfo"}}, "text": "Installing\n\nIf you are familiar with setting up a Python environment, then run the following command in your terminal:\n\n```shell\npip install mesop\n```\n\nIf you're not familiar with setting up a Python environment, follow one of the options below.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 247, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cd3a52ae-1b26-4406-9813-2b626ecd2371": {"__data__": {"id_": "cd3a52ae-1b26-4406-9813-2b626ecd2371", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ab7d6c26-36a0-4738-9c86-411a25fc02a8", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}, "hash": "bd03e64c5a5c971c110c4cfd4cdf7fb0867f9add00cafda65f0d075111f8fc2a", "class_name": "RelatedNodeInfo"}}, "text": "A. Colab (Recommended for beginners)\n\nColab is a free hosted Jupyter notebook product provided by Google.\n\nTry Mesop on Colab: ![Open In Colab](https://colab.research.google.com/github/mesop-dev/mesop/blob/main/notebooks/mesop_colab_getting_started.ipynb)", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 257, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "385cdb67-5384-48af-9e0c-f0fe6fddef71": {"__data__": {"id_": "385cdb67-5384-48af-9e0c-f0fe6fddef71", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "87f20e31-4b51-4c2a-9495-9d068b50e675", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}, "hash": "174a592f850068657e010c1b089c2c7a45e276c8bff30bbf98bb3425ac96fb92", "class_name": "RelatedNodeInfo"}}, "text": "B. Command-line\n\nIf you'd like to run Mesop locally on the command-line, follow these steps.\n\n**Pre-requisites:** Make sure you have Python version 3.10 or later installed by running:\n\n```sh\npython --version\n```\n\nIf you don't, please download Python.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 252, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e27d4904-51ce-4759-92d4-3e4446c0dd4e": {"__data__": {"id_": "e27d4904-51ce-4759-92d4-3e4446c0dd4e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "040fcfb0-ad5e-4715-ab42-eb3faf0fbe0b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}, "hash": "dbece9e9ec088bf55ea2d3c5f206c8a3241b5014806a174fd0b7a020da83d5c2", "class_name": "RelatedNodeInfo"}}, "text": "Create a venv environment\n\n1. **Open the terminal** and navigate to a directory: `cd foo`\n\n2. **Create a virtual environment** by using venv, which will avoid Python environment issues. Run:\n\n```sh\npython -m venv .venv\n```\n\n3. **Activate your virtual environment:**\n\n === \"macOS and Linux\"\n\n ```sh\n source .venv/bin/activate\n ```\n\n === \"Windows command prompt\"\n\n ```sh\n .venv\\Scripts\\activate.bat\n ```\n\n === \"Windows PowerShell\"\n\n ```sh\n .venv\\Scripts\\Activate.ps1\n ```\n\nOnce you've activated the virtual environment, you will see \".venv\" at the start of your terminal prompt.\n\n4. **Install mesop:**\n\n```shell\npip install mesop\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 705, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bf22958e-f650-46dd-a2ca-134bb464e646": {"__data__": {"id_": "bf22958e-f650-46dd-a2ca-134bb464e646", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "62168885-39f9-4995-8b2c-c13693db1342", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}, "hash": "2a53323ed236be531b47d3e4a7142623877d5783b054c75cd27839c0ebb0a77b", "class_name": "RelatedNodeInfo"}}, "text": "Upgrading\n\nTo upgrade Mesop, run the following command:\n\n```sh\npip install --upgrade mesop\n```\n\nIf you are using `requirements.txt` or `pyproject.toml` to manage your dependency versions, then you should update those.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 219, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9dfc075f-b621-446c-9b83-3e77fe82ed75": {"__data__": {"id_": "9dfc075f-b621-446c-9b83-3e77fe82ed75", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4fab5d29-9607-4028-b735-f4e5dd63d2ab", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}, "hash": "b9d13994c896553c0e93b34ad1f06d08444d2c0c73b5ac99b018b3edcb9b5411", "class_name": "RelatedNodeInfo"}}, "text": "Next steps\n\nFollow the quickstart guide to learn how to create and run a Mesop app:\n\n\n Quickstart", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 102, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "63a6af25-f404-47f7-846e-1a7dfd7c5d3e": {"__data__": {"id_": "63a6af25-f404-47f7-846e-1a7dfd7c5d3e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "65088b92-c30e-4ce0-afc7-32fce0fbcb70", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}, "hash": "efdfc9ad7df3a322a4c8242b3d4c74fe81533e760a4ba97c17c6f579e1841bdd", "class_name": "RelatedNodeInfo"}}, "text": "Quickstart\n\nLet's build a simple interactive Mesop app.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 57, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "88ca2f41-b85b-4c93-a841-3187cb28433f": {"__data__": {"id_": "88ca2f41-b85b-4c93-a841-3187cb28433f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b033f8c6-bb0e-45e3-9d41-eee8fb2b5259", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}, "hash": "5a4999c8a2e210f06115d22d92d19cccb0188fad5c8c4d66c3272f6953eeca18", "class_name": "RelatedNodeInfo"}}, "text": "Before you start\n\nMake sure you've installed Mesop, otherwise please follow the Installing Guide.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 99, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "00fe20d9-0449-4686-b930-a938f38ce820": {"__data__": {"id_": "00fe20d9-0449-4686-b930-a938f38ce820", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e6fe6c7f-799a-402c-8caa-3cb0448b81fb", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}, "hash": "86cfda440551ca4149d60702680352c04ded6bf7f0fab16f6820d04c25d33730", "class_name": "RelatedNodeInfo"}}, "text": "Starter kit\n\nThe simplest way to get started with Mesop is to use the starter kit by running `mesop init`. You can also copy and paste the code.\n\n```python\n--8<-- \"mesop/examples/starter_kit/starter_kit.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 212, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "efafa575-ed6a-4444-8ffd-d6c1e4571bd9": {"__data__": {"id_": "efafa575-ed6a-4444-8ffd-d6c1e4571bd9", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f137234d-81d7-4247-aa17-ce9c57bd9f1d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}, "hash": "bc9cfd338b58e930439b9ba9f2c6f019d717b1413e454064dab1b88268883b15", "class_name": "RelatedNodeInfo"}}, "text": "Running a Mesop app\n\nOnce you've created your Mesop app using the starter kit, you can run the Mesop app by running the following command in your terminal:\n\n```sh\nmesop main.py\n```\n\n> If you've named it something else, replace `main.py` with the filename of your Python module.\n\nOpen the URL printed in the terminal (i.e. http://localhost:32123) in the browser to see your Mesop app loaded.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 392, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "59255104-b91b-4f56-92c4-0f0d7e830a5b": {"__data__": {"id_": "59255104-b91b-4f56-92c4-0f0d7e830a5b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "28ae479f-38ae-46c9-b10c-d03c0c38bde1", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}, "hash": "c1bec14d0eaea58648dab53a33a3763eacca2f379f41ada21cfb0488899c58b2", "class_name": "RelatedNodeInfo"}}, "text": "Hot reload\n\nIf you make changes to the code, the Mesop app should be automatically hot reloaded. This means that you can keep the `mesop` CLI command running in the background in your terminal and your UI will automatically be updated in the browser.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 252, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "20491882-73ff-403b-99df-20b68218cea2": {"__data__": {"id_": "20491882-73ff-403b-99df-20b68218cea2", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "bc85e102-e272-4df2-a5cc-a736c947d1f4", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}, "hash": "7da953f402444b1301f55073f2007c6e4787d3a984508cd170392b10cec74c8c", "class_name": "RelatedNodeInfo"}}, "text": "Next steps\n\nLearn more about the core concepts of Mesop as you learn how to build your own Mesop app:\n\n\n Core Concepts", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 123, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "80e6bcc5-8525-4bf0-a306-868f3c8028a8": {"__data__": {"id_": "80e6bcc5-8525-4bf0-a306-868f3c8028a8", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/goals", "title": "Goals"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "62112b81-11d7-4bc1-8520-a05247504945", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/goals", "title": "Goals"}, "hash": "0ddf27a603ed93d395e8bd91064bfcc0d702e4ea2841aea00d90b21b0da58681", "class_name": "RelatedNodeInfo"}}, "text": "Goals\n\nI think it's helpful to explicitly state the goals of a project because it provides clarity for not only the development team, but also developers who are evaluating Mesop amongst other options:\n\n1. **Prioritize Python developer experience** - Provide the best possible developer experience for Python engineers with minimal frontend experience. Traditional web UI frameworks (e.g. React) prioritize developer experience, but they are focused on web developers who are familiar with the web ecosystem (e.g. HTML, node.js, etc.).\n1. **Rich user interactions** - You should be able to build reasonably sophisticated web applications and demos (e.g. LLM chat) without building custom native components.\n1. **Simple deployment** - Make deployment simple by packaging Mesop into a container which can be deployed as a standalone server.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 840, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1e5f9ac1-179a-4370-a73e-d2d288753463": {"__data__": {"id_": "1e5f9ac1-179a-4370-a73e-d2d288753463", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/goals", "title": "Goals"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "034648e2-18e6-414c-9877-efd6e07aef31", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/goals", "title": "Goals"}, "hash": "1dfeb9ce4b471f06dacb7d760ed872654afe044ab3f06bf37cf7113802ae996a", "class_name": "RelatedNodeInfo"}}, "text": "Examples of applying these goals\n\n- **Web performance**: This doesn't mean other goals like web performance have no weight, but we will consistently rank these goals as higher priorities. For example, we could improve performance by serving static assets via CDN, but this would complicate our deployment. For instance, we'd need to ensure that pushing a new Python server binary and JS static assets happened at the same time, or you can get version skews which can cause cryptic errors.\n\n- **Template vs. code**: Mesop adopts the pattern of UI-as-code instead of using a separate templating language. Our belief is that writing Python code is a significantly better learning curve for our target developers. Rather than making them learn a new templating language (DSL) that they are unfamiliar with, they can write Python code which allows them idiomatic ways of expressing conditional logic and looping.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 909, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c6521457-4956-4e1e-89d5-0e5da97c660b": {"__data__": {"id_": "c6521457-4956-4e1e-89d5-0e5da97c660b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "171370bd-6dd7-4868-ba00-f25649bd9da6", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "hash": "8b3729ea15f458575b9a6dfe4c9d6f3f1f21f357d072b26ab8f33e21b5da39f7", "class_name": "RelatedNodeInfo"}}, "text": "Auth\n\nTo ensure that the users of your Mesop application are authenticated, this guide provides a detailed, step-by-step process on how to integrate Firebase Authentication with Mesop using a web component.\n\nMesop is designed to be auth provider agnostic, allowing you to integrate any auth library you prefer, whether it's on the client-side (JavaScript) or server-side (Python). You can support sign-ins, including social sign-ins like Google's or any others that you prefer. The general approach involves signing in on the client-side first, then transmitting an auth token to the server-side.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 598, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f89a3e00-6a70-4468-bcb0-8eac7e83e40e": {"__data__": {"id_": "f89a3e00-6a70-4468-bcb0-8eac7e83e40e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "142ba94c-4445-42f3-ad40-db69f599f395", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "hash": "ae35e0c8e0dd649e3064bae7bb1ed65f412983a1b3e2cc8f2e193841fed90dc4", "class_name": "RelatedNodeInfo"}}, "text": "Firebase Authentication\n\nThis guide will walk you through the process of integrating Firebase Authentication with Mesop using a custom web component.\n\n**Pre-requisites:** You will need to create a Firebase account and project. It's free to get started with Firebase and use Firebase auth for small projects, but refer to the pricing page for the most up-to-date information.\n\nWe will be using three libraries from Firebase to build an end-to-end auth flow:\n\n- Firebase Web SDK: Allows you to call Firebase services from your client-side JavaScript code.\n- FirebaseUI Web: Provides a simple, customizable auth UI integrated with the Firebase Web SDK.\n- Firebase Admin SDK (Python): Provides server-side libraries to integrate Firebase services, including Authentication, into your Python applications.\n\nLet's dive into how we will use each one in our Mesop app.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 862, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e4589953-03e2-4431-a31a-1b9f6fa8e2c9": {"__data__": {"id_": "e4589953-03e2-4431-a31a-1b9f6fa8e2c9", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8653ef90-de35-421f-8d54-1fc44b3ddac4", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "hash": "67236303ebfdcf7253be32f57fd07782d528595bbfebbc2fa861a567a08202df", "class_name": "RelatedNodeInfo"}}, "text": "Web component\n\nThe Firebase Authentication web component is a custom component built for handling the user authentication process. It's implemented using Lit, a simple library for building lightweight web components.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 218, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ef038e8b-9f36-43d7-9510-fd34ae88d7aa": {"__data__": {"id_": "ef038e8b-9f36-43d7-9510-fd34ae88d7aa", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "bf9d4d52-1f0f-42ab-bac3-4fd855b011fa", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "hash": "bf02e37e2021b10560e5b281ed3e50ced257c0984f92fde93e4a610e3bc991db", "class_name": "RelatedNodeInfo"}}, "text": "JS code\n\n```javascript title=\"firebase_auth_component.js\"\n--8<-- \"mesop/examples/web_component/firebase_auth/firebase_auth_component.js\"\n```\n\n**What you need to do:**\n\n- Replace `firebaseConfig` with your Firebase project's config. Read the Firebase docs to learn how to get yours.\n- Replace the URLs `signInSuccessUrl` with your Mesop page path and `tosUrl` and `privacyPolicyUrl` to your terms and services and privacy policy page respectively.\n\n**How it works:**\n\n- This creates a simple and configurable auth UI using FirebaseUI Web.\n- Once the user has signed in, then a sign out button is shown.\n- Whenever the user signs in or out, the web component dispatches an event to the Mesop server with the auth token, or absence of it.\n- See our web component docs for more details.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 784, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c8c8fdaf-8927-433d-87fd-414c6f8019a6": {"__data__": {"id_": "c8c8fdaf-8927-433d-87fd-414c6f8019a6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "1352fe77-0c32-46df-ac07-266b9b517dab", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "hash": "57865876e935cfc18a4d66a7642c10c982e8915e314e0977ad248a1f6c4263b8", "class_name": "RelatedNodeInfo"}}, "text": "Python code\n\n```python title=\"firebase_auth_component.py\"\n--8<-- \"mesop/examples/web_component/firebase_auth/firebase_auth_component.py\"\n```\n\n**How it works:**\n\n- Implements the Python side of the Mesop web component. See our web component docs for more details.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 264, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7e2295a2-9b1c-4302-8897-ff02e7a7a457": {"__data__": {"id_": "7e2295a2-9b1c-4302-8897-ff02e7a7a457", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b9c11abf-1f0b-42b7-8216-57440d2420ef", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "hash": "a1dfe714c43f3204b299a1bc13acb782b6f8ae7c19ce9c674b0dbd796c4f79a0", "class_name": "RelatedNodeInfo"}}, "text": "Integrating into the app\n\nLet's put it all together:\n\n```python title=\"firebase_auth_app.py\"\n--8<-- \"mesop/examples/web_component/firebase_auth/firebase_auth_app.py\"\n```\n\n*Note* You must add `firebase-admin` to your Mesop app's `requirements.txt` file\n\n**How it works:**\n\n- The `firebase_auth_app.py` module integrates the Firebase Auth web component into the Mesop app. It initializes the Firebase app, defines the page where the Firebase Auth web component will be used, and sets up the state to store the user's email.\n- The `on_auth_changed` function is triggered whenever the user's authentication state changes. If the user is signed in, it verifies the user's ID token and stores the user's email in the state. If the user is not signed in, it clears the email from the state.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 785, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b550db85-dce1-4885-9bd1-a60c0deb95f6": {"__data__": {"id_": "b550db85-dce1-4885-9bd1-a60c0deb95f6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "def74948-f73f-4887-b549-e28ab0173c91", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}, "hash": "69889a202be3e0e4c29db255c38a2d9d52af70c0292512164341a4949a2d53ff", "class_name": "RelatedNodeInfo"}}, "text": "Next steps\n\nCongrats! You've now built an authenticated app with Mesop from start to finish. Read the Firebase Auth docs to learn how to configure additional sign-in options and much more.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 190, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1d3af14a-77e6-44c3-9dc0-37b574c35ce4": {"__data__": {"id_": "1d3af14a-77e6-44c3-9dc0-37b574c35ce4", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/debugging", "title": "Debugging"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "96a45c2b-7f0c-467f-8d4c-bee4cbfd6b3b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/debugging", "title": "Debugging"}, "hash": "9da6371fd588721a5f97c873dfe5937086fbc55def384834cc6a48af48e4f217", "class_name": "RelatedNodeInfo"}}, "text": "Debugging\n\nThis guide will show you several ways of debugging your Mesop app:\n\n- Debugging with server logs\n- Debugging with Chrome DevTools\n- Debugging with VS Code\n\nYou can use the first two methods to debug your Mesop app both locally and in production, and the last one to debug your Mesop app locally.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 308, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7349a338-2a66-4725-bd55-467896bddbf7": {"__data__": {"id_": "7349a338-2a66-4725-bd55-467896bddbf7", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/debugging", "title": "Debugging"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c683ed5e-3789-480f-a522-841d046d9eab", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/debugging", "title": "Debugging"}, "hash": "3438ee09d9f41142e0be5e94a790f8b02d84906c9fbd47a6a6cda3382f86b328", "class_name": "RelatedNodeInfo"}}, "text": "Debugging with server logs\n\nIf your Mesop app is not working properly, we recommend checking the server logs first.\n\nIf you're running Mesop locally, you can check the terminal. If you're running Mesop in production, you will need to use your cloud provider's console to check the logs.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 288, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "dcf52ac1-ef63-4e51-a7c5-bfea8b868292": {"__data__": {"id_": "dcf52ac1-ef63-4e51-a7c5-bfea8b868292", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/debugging", "title": "Debugging"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f123d174-cafb-46ad-bec9-794b2fe2376b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/debugging", "title": "Debugging"}, "hash": "be7f920b357f9eddd3e39082335ddf7a89ef44710f97ce749754eb0bf564e286", "class_name": "RelatedNodeInfo"}}, "text": "Debugging with Chrome DevTools\n\nChrome DevTools is a powerful set of web developer tools built directly into the Google Chrome browser. It can be incredibly useful for debugging Mesop applications, especially when it comes to inspecting the client-server interactions.\n\nHere's how you can use Chrome DevTools to debug your Mesop app:\n\n1. Open your Mesop app in Google Chrome.\n\n1. Right-click anywhere on the page and select \"Inspect\" or use the keyboard shortcut to open Chrome DevTools:\n - Windows/Linux: Ctrl + Shift + I\n - macOS: Cmd + Option + I\n\n1. To debug general errors:\n - Go to the Console tab.\n - Look for any console error messages.\n - You can also modify the log levels to display Mesop debug logs by clicking on \"Default levels\" and selecting \"Verbose\".\n\n1. To debug network issues:\n - Go to the Network tab.\n - Reload your page to see all network requests.\n - Look for any failed requests (they'll be in red).\n - Click on a request to see detailed information about headers, response, etc.\n\n1. For JavaScript errors:\n - Check the Console tab for any error messages.\n - You can set breakpoints in your JavaScript code using the Sources tab.\n\nRemember, while Mesop abstracts away much of the frontend complexity, using these tools can still be valuable for debugging and optimizing your app's performance.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1351, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d642b8ce-5dd9-4b52-89e7-05d980b0b135": {"__data__": {"id_": "d642b8ce-5dd9-4b52-89e7-05d980b0b135", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/debugging", "title": "Debugging"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b184721b-e1b7-463d-b2fa-5d9dcfe5c189", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/debugging", "title": "Debugging"}, "hash": "d0212400a98336fd3fad78e1db83d49690619f517750671d79b6ea8961acfa3d", "class_name": "RelatedNodeInfo"}}, "text": "Debugging with VS Code\n\nVS Code is recommended for debugging your Mesop app, but you can also debug Mesop apps in other IDEs.\n\n**Pre-requisite:** Ensure VS Code is downloaded.\n\n1. Install the Python Debugger VS Code extension.\n\n2. Include the following in your `.vscode/launch.json`:\n\n```json\n{\n \"version\": \"0.2.0\",\n \"configurations\": [\n {\n \"name\": \"Python: Remote Attach\",\n \"type\": \"python\",\n \"request\": \"attach\",\n \"connect\": { \"host\": \"localhost\", \"port\": 5678 },\n \"pathMappings\": [\n { \"localRoot\": \"${workspaceFolder}\", \"remoteRoot\": \".\" }\n ],\n \"justMyCode\": true\n }\n ]\n}\n```\n\n3. At the top of your Mesop app (e.g. main.py), including the following snippet to start the debug server:\n\n```py\nimport debugpy\n\ndebugpy.listen(5678)\n```\n\n4. Connect to your debug server by going to the Run & Debug tab in VS Code and selecting \"Python: Remote Attach\".\n\nCongrats you are now debugging your Mesop app!\n\nTo learn more about Python debugging in VS code, read VS Code's Python debugging guide.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1039, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "91337b67-7364-4658-9034-03765c4dfbbf": {"__data__": {"id_": "91337b67-7364-4658-9034-03765c4dfbbf", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8c805cab-bf36-4680-985c-0769ff20541b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "54e53feb83bd9c2c0921b4a359d8cd1b5d3e9a7c9cc841ba58f7a1c66bf0164f", "class_name": "RelatedNodeInfo"}}, "text": "Deployment\n\n> We recommend Google Cloud Run or Hugging Face Spaces, which both have a free tier.\n\nThis section describes how to run your Mesop application using the following\nplatforms:\n\n- Google Cloud Run\n- Google App Engine\n- Docker\n- Hugging Face Spaces\n\nIf you can run your Mesop app on Docker, you should be able\nto run it on many other cloud platforms, such as\nHugging Face Spaces.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 389, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2ab2298f-11e2-47bf-8386-0cb0a0f17805": {"__data__": {"id_": "2ab2298f-11e2-47bf-8386-0cb0a0f17805", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e0e6fdf8-58fb-4c8e-8538-ab9701d8fadb", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "4677ffac6ba5de903865bc6b58ab3d7908ff6bdacbb4f38867863d6e6f7b7af0", "class_name": "RelatedNodeInfo"}}, "text": "Example application\n\nLet's start with an example application which will consist of the following files:\n\n- main.py\n- requirements.txt", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 135, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5d4695df-eecf-4641-ba2b-d369ad1740e6": {"__data__": {"id_": "5d4695df-eecf-4641-ba2b-d369ad1740e6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2ebbc82e-c9dd-4df5-9616-ae652c17b4a7", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "2fca822969c2c9f86b9944d624ad570c713fa3fcfce83c0ba76dc55049db5975", "class_name": "RelatedNodeInfo"}}, "text": "main.py\n\nThis file contains your Mesop application code:\n\n```py title=\"main.py\"\nimport mesop as me\n\n@me.page(title=\"Home\")\ndef home():\n me.text(\"Hello, world\")\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 166, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "afec621e-945d-4a56-87f6-b6cac31a3e8c": {"__data__": {"id_": "afec621e-945d-4a56-87f6-b6cac31a3e8c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "50864516-f35a-44cf-b202-19bc1c0d5802", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "ff1387c4cdf4556a82a592566f68b97071001e04329e862235e471ecd44e753f", "class_name": "RelatedNodeInfo"}}, "text": "requirements.txt\n\nThis file specifies the Python dependencies needed. You may need to add additional\ndependencies depending on your use case.\n\n```title=\"requirements.txt\"\nmesop\ngunicorn\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 191, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "38b51013-96a4-4413-b0c0-9dabe0a704d6": {"__data__": {"id_": "38b51013-96a4-4413-b0c0-9dabe0a704d6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c5353d97-5190-4ae1-96d0-4d35e0886b4b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "f244cfae71c18f6f820230f30b8caf29fc348258a6527cc482de30583a9991e8", "class_name": "RelatedNodeInfo"}}, "text": "Cloud Run\n\nWe recommend using Google Cloud Run because it's easy to\nget started and there's a free tier.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 106, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e08288fe-eebd-46a2-bb01-6a2dfc95357f": {"__data__": {"id_": "e08288fe-eebd-46a2-bb01-6a2dfc95357f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "17cba339-d6e5-4b63-b2e3-cd33b2df0260", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "53f4b71a4bf669d78274e4c6a558b45071b1ac124b69e5e414cff564b136aacb", "class_name": "RelatedNodeInfo"}}, "text": "Pre-requisites\n\nYou will need to create a Google Cloud account and install the `gcloud` CLI. See the official documentation for detailed instructions.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 152, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "88cbd1ae-3929-4565-b6d7-88b7032ce992": {"__data__": {"id_": "88cbd1ae-3929-4565-b6d7-88b7032ce992", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "07e9943d-32ea-4349-9e6d-ec7e8d0d89c6", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "1eb9b784af6095f14ea3675b2f8bd823ac0c2c9e19753ccc2d5d03be3fb6e197", "class_name": "RelatedNodeInfo"}}, "text": "Procfile\n\nCreate `Procfile` to configure `gunicorn` to run Mesop.\n\n```title=\"Procfile\"\nweb: gunicorn --bind :8080 main:me\n```\n\nThe `--bind: 8080` will run Mesop on port 8080.\n\nThe `main:me` syntax is `$(MODULE_NAME):$(VARIABLE_NAME)`: (see Gunicorn docs for more details):\n\n - Because the Mesop python file is `main.py`, the module name is `main`.\n - By convention, we do `import mesop as me` so the `me` refers to the main Mesop\n library module which is also a callable (e.g. a function) that conforms to WSGI.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 515, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c160fb90-a26d-45e7-be39-83fd7e6cb449": {"__data__": {"id_": "c160fb90-a26d-45e7-be39-83fd7e6cb449", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "14727df4-f28e-4c15-92c1-acaadb9110e6", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "17c445b556a7e9829e97be333bc506af49a8f9978a610ac42db4efada04ec400", "class_name": "RelatedNodeInfo"}}, "text": "Deploy to Google Cloud Run\n\nIn your terminal, go to the application directory, which has the files listed above.\n\nRun the following command:\n\n```sh\ngcloud run deploy\n```\n\nFollow the instructions and then you should be able to access your deployed app.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 253, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e6719ca5-98ce-4c93-b8ea-90076c6e7bbf": {"__data__": {"id_": "e6719ca5-98ce-4c93-b8ea-90076c6e7bbf", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4f4ec3dd-9183-46e4-a1c4-f26b64247367", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "77c51474be90743659023aace3ef658de1e24936ee42db3ce5f4c143538a0e0d", "class_name": "RelatedNodeInfo"}}, "text": "Session Affinity\n\nIf you're running Mesop with MESOP_STATE_SESSION_BACKEND=memory,\nthen you will want to enable session affinity in order to utilize the `memory` backend efficiently.\n\nThe command should be:\n\n```sh\ngcloud run services update $YOUR_SERVICE --session-affinity\n```\n\nBy default gunicorn allocates one worker, but you should double check that gunicorn is\nconfigured correctly for the `memory` backend.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 414, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cb36de63-51c9-4ec4-9620-e6953895696e": {"__data__": {"id_": "cb36de63-51c9-4ec4-9620-e6953895696e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "beaf68d8-ca0b-42d3-b748-1866a562734e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "e02b2113339966ded33919f0c08dd773495ee1490737d3d43b826b4c525fe6c8", "class_name": "RelatedNodeInfo"}}, "text": "App Engine\n\nThis section describes deployment to Google App Engine using\ntheir flexible environments feature.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 111, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "93be358c-5884-4ae5-a164-814ca7872dc0": {"__data__": {"id_": "93be358c-5884-4ae5-a164-814ca7872dc0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a842918f-13c6-4966-b0d6-156431cfa40f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "65193bb62e8444777ce14a187649b0d4e830b5f1f60f5a9cde1080c7f2ec3655", "class_name": "RelatedNodeInfo"}}, "text": "Pre-requisites\n\nYou will need to create a Google Cloud account and install the `gcloud` CLI. See the official documentation for detailed instructions.\n\nYou will also need to run:\n\n```sh\ngcloud app create --project=[YOUR_PROJECT_ID]\ngcloud components install app-engine-python\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 281, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b9146ce6-5ba2-4bc8-8f6e-83988afe5d1d": {"__data__": {"id_": "b9146ce6-5ba2-4bc8-8f6e-83988afe5d1d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c29f9817-a360-4689-89de-941ec28a47f3", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "bc6ba5085d14afda13c3c79721adff193e8a67823518eb4c70d58d0e77095619", "class_name": "RelatedNodeInfo"}}, "text": "app.yaml\n\nCreate `app.yaml` to configure App Engine to run Mesop.\n\n```yaml title=\"app.yaml\"\nruntime: python\nenv: flex\nentrypoint: gunicorn -b :$PORT main:me\n\nruntime_config:\n operating_system: ubuntu22\n runtime_version: \"3.10\"\n\nmanual_scaling:\n instances: 1\n\nresources:\n cpu: 1\n memory_gb: 0.5\n disk_size_gb: 10\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 323, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7d82e61e-08f1-4ce4-9462-9cf591365423": {"__data__": {"id_": "7d82e61e-08f1-4ce4-9462-9cf591365423", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "0f674963-2693-442f-874c-7cda011b53cb", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "4e1b3fccbec50cb881bdab9dab0b750343960449685045be75c517fe0ef23f8c", "class_name": "RelatedNodeInfo"}}, "text": "Deploy to App Engine\n\nIn your terminal, go to the application directory, which has the files listed above.\n\nRun the following command:\n\n```sh\ngcloud app deploy\n```\n\nFollow the instructions and then you should be able to access your deployed app.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 247, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "22771e6e-f663-4a6a-83f7-b8849c3c611d": {"__data__": {"id_": "22771e6e-f663-4a6a-83f7-b8849c3c611d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f259735a-edc5-49ef-a265-1f8c76f8fb43", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "62ada12b80f6ec4c08182ecb531bbfa2643bc83d68760d21d2818af6a41a594a", "class_name": "RelatedNodeInfo"}}, "text": "Docker\n\nIf you can run your Mesop app on Docker, you should be able\nto run it on many other cloud platforms.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 110, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "af655da2-5af9-4e0e-a53f-2a27d4a11968": {"__data__": {"id_": "af655da2-5af9-4e0e-a53f-2a27d4a11968", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2df2b9d2-5c3c-4b5e-ad9f-9a31194042e9", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "38e698354c64aa55da427c6ee9fd172a0d215a56717099618af6601e86ba0b0c", "class_name": "RelatedNodeInfo"}}, "text": "Pre-requisites\n\nMake sure Docker and Docker Compose are installed.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 68, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d4ae8355-875f-4e2a-8a93-e4d432aab145": {"__data__": {"id_": "d4ae8355-875f-4e2a-8a93-e4d432aab145", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "0229cb1d-b699-443c-aaac-1302c6fc8276", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "86b2e460858ef2ad222abfffca64b6f09d33bdeed8cd82927e266b8a94e0a110", "class_name": "RelatedNodeInfo"}}, "text": "Dockerfile\n\n```Docker title=\"Dockerfile\"\n--8<-- \"docs/assets/hf/example.Dockerfile\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 89, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "be112380-bf47-4c77-aa10-80a9e0fd0c07": {"__data__": {"id_": "be112380-bf47-4c77-aa10-80a9e0fd0c07", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c1a74242-397e-4ed2-a42c-687b590ae2b4", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "d58c57c1653ee2ef3e00369b4c54d0f6b9030c43423f0fa83a0b616d036375ba", "class_name": "RelatedNodeInfo"}}, "text": "docker-compose.yaml\n\n```title=\"docker-compose.yaml\"\nservices:\n mesop-app:\n build: .\n ports:\n - \"8080:8080\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 124, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "15d864ad-25a6-4cb0-ab30-9d284bba5391": {"__data__": {"id_": "15d864ad-25a6-4cb0-ab30-9d284bba5391", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "94b4af93-112e-4e3e-bdb0-2f1a2ba32375", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "5a47eba9fc7e4940101e990891e08f6af9092f929cb63c8bd89a6cbadef03a7e", "class_name": "RelatedNodeInfo"}}, "text": "Run Docker image\n\nIn your terminal, go to the application directory, which has the files listed above.\n\nRun the following command:\n\n```sh\ndocker-compose up -d\n```\n\nAlternatively, if you do not want to use Docker Compose, you can run:\n\n```sh\ndocker build -t mesop-app . && docker run -d -p 8080:8080 mesop-app\n```\n\nYou should now be able to view your Mesop app at http://localhost:8080.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 387, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ffe2344b-3df8-4cbc-b406-bfc4b6414ce0": {"__data__": {"id_": "ffe2344b-3df8-4cbc-b406-bfc4b6414ce0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "70dde8d8-35e6-43fd-a9bb-c96085690190", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "050247b106270f2a8bb6c6b583928645e6c2320022ed095db0e249298a2eaa9e", "class_name": "RelatedNodeInfo"}}, "text": "Deploying behind a reverse proxy\n\nIf you serve your Mesop app behind a reverse proxy at a custom path, set `MESOP_BASE_URL_PATH` to that path. For example, if the proxy routes requests under `/myapppath` to Mesop, run the server with:\n\n```sh\nMESOP_BASE_URL_PATH=/myapppath docker-compose up -d\n```\n\nAll routes, including the UI endpoint and static assets, will then be served from `/myapppath`.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 396, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7703c310-db68-4e1a-a0ae-8ffb9f3abe42": {"__data__": {"id_": "7703c310-db68-4e1a-a0ae-8ffb9f3abe42", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "151bbd77-bc1d-4177-b7c7-d0192ed5620c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "73010294fe89c30c136f46d175d160675fa2f20cccdecc15437fe3bfad1d27c7", "class_name": "RelatedNodeInfo"}}, "text": "Hugging Face Spaces\n\nHugging Face Spaces has a free tier that gives you 2 vCPU and 16GB RAM, which is plenty\nfor running Mesop applications that leverage generative AI APIs.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 175, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "60d872dc-93c4-4664-a8e6-364cd14bbda6": {"__data__": {"id_": "60d872dc-93c4-4664-a8e6-364cd14bbda6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ca4b1d6e-b618-4e05-a497-2ab3110e3974", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "a459a3ca029dda9c47be2715a65834b56732043f4fd8601922605c8d787fb696", "class_name": "RelatedNodeInfo"}}, "text": "Pre-requisites\n\nThis section assumes you already have a free Hugging Face Space account.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 90, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "256eeaf0-68ef-4c75-8b1b-312c013c6358": {"__data__": {"id_": "256eeaf0-68ef-4c75-8b1b-312c013c6358", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "79c7d9d7-c031-4a16-8631-1f2b1524bd0c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "8ecea0b17a08f50bc10ae1e42706250dbbc114d49d9270446fe24d617433411e", "class_name": "RelatedNodeInfo"}}, "text": "Create new Space\n\nGo to https://huggingface.co/spaces and click\n`Create new Space`.\n\n!Create new Hugging Face Space", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 117, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "af72f631-d953-4ba3-8667-38156fd7480b": {"__data__": {"id_": "af72f631-d953-4ba3-8667-38156fd7480b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d19f6f43-c357-4444-8a7d-7a3298325cae", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "8995da69694fed0b60f8045ca3063b42419769161d902a962449ba3824ac4da5", "class_name": "RelatedNodeInfo"}}, "text": "Name your app and use Docker SDK\n\nName the Space `mesop-hello-world` you want and select the `apache-2.0` license.\n\nNext select the Docker SDK with a blank template.\n\n!Select Docker", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 183, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c8505c3c-a396-43d0-9123-2231c845e6e7": {"__data__": {"id_": "c8505c3c-a396-43d0-9123-2231c845e6e7", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "46233eb3-fb13-472f-8c53-e39018444eb1", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "0d670fc5d890256840f8e9e5f2ce10725066036149f609c0deca5da60eb51d9a", "class_name": "RelatedNodeInfo"}}, "text": "CPU Basic and Create Space\n\nNext make sure that you are using the free `CPU Basic` plan. Then click `Create Space`.\n\n!Create Hugging Face Space", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 145, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3231e9b8-d4d2-49a6-b47d-81336e1e4ba9": {"__data__": {"id_": "3231e9b8-d4d2-49a6-b47d-81336e1e4ba9", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "fd0af4fb-a493-4093-a8b4-03f3822dec41", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "b5f28ea986652cc22b5837a59ce4ce3936ad257a11872bf0db71b4cab94b1a2c", "class_name": "RelatedNodeInfo"}}, "text": "Clone your Hugging Face Space Git Repository\n\nExample command using Git over SSH:\n\n```sh\ngit clone git@hf.co:spaces//mesop-hello-world\ncd mesop-hello-world\n```\n\n> Note: You'll need to have an SSH key configured on Hugging Face. See https://huggingface.co/docs/hub/en/security-git-ssh.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 286, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f515980c-7f60-4ac7-b87b-c0108462cf83": {"__data__": {"id_": "f515980c-7f60-4ac7-b87b-c0108462cf83", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "0dcba7b8-28c9-462c-bcef-69c7bce441ea", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "66b2c40f6345d055dd710a60189d8038b7a1c4c77bfdf89b8c6eae4b849f056e", "class_name": "RelatedNodeInfo"}}, "text": "Create main.py\n\nThis is the same `main.py` file shown earlier, except we need to allow Hugging Face to\niframe our Mesop app.\n\n```py title=\"main.py\"\nimport mesop as me\n\n@me.page(\n title=\"Home\",\n security_policy=me.SecurityPolicy(\n allowed_iframe_parents=[\"https://huggingface.co\"]\n ),\n)\ndef home():\n me.text(\"Hello, world\")\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 335, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d14550b9-cd2e-471b-b6ba-532d2755a336": {"__data__": {"id_": "d14550b9-cd2e-471b-b6ba-532d2755a336", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c2dad965-2247-40fa-a9d6-e8ce2416a1fc", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "06fd4737f82b7d2d5fb8804abdaa93aa2f73ee7c3e2653e95ce0899c492d8fbf", "class_name": "RelatedNodeInfo"}}, "text": "Create requirements.txt\n\nThis file is the same as the generic Docker setup:\n\n```title=\"requirements.txt\"\nmesop\ngunicorn\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 125, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "04c6ef69-ce28-4f71-ba64-b3ba1141a8f1": {"__data__": {"id_": "04c6ef69-ce28-4f71-ba64-b3ba1141a8f1", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "1e86bde2-8aa8-4d62-a8d0-e80ac9bf5335", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "c6f4f3b490ebf676e8e3133856e79908af3b464747c69fdd40cd19713a701897", "class_name": "RelatedNodeInfo"}}, "text": "Create Dockerfile\n\nThis file is the same as the generic Docker setup:\n\n```Docker title=\"Dockerfile\"\n--8<-- \"docs/assets/hf/example.Dockerfile\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 148, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8b59cfd7-b908-4d46-be3a-250b896a4ddd": {"__data__": {"id_": "8b59cfd7-b908-4d46-be3a-250b896a4ddd", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2d9ced9e-f4f0-4703-8df5-54e0c45d7e01", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "2de33668e5453622577b415c6c595dd7183cc5a777a9482930a4e868ec5db441", "class_name": "RelatedNodeInfo"}}, "text": "Add app_port in README.md\n\nNext we will need to open port `8080` which we specified in the Dockerfile. This is\ndone through a config section in the `README.md`.\n\n```md title=\"README.md\"\n---\ntitle: Mesop Hello World\nemoji: \ud83d\udc20\ncolorFrom: blue\ncolorTo: purple\nsdk: docker\npinned: false\nlicense: apache-2.0\napp_port: 8080\n---\n\nCheck out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 425, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7d5765ce-dd4d-40cb-a1c7-fef85a2684e6": {"__data__": {"id_": "7d5765ce-dd4d-40cb-a1c7-fef85a2684e6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a52519a5-2962-4e20-9c6f-45381daaf52c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "1131a828dc339dfc0ef9d057648025d763875a4830288c3c74b79317e4d6b334", "class_name": "RelatedNodeInfo"}}, "text": "Deploy to Hugging Face Spaces\n\nThe commands to commit your changes and push to the Hugging Face Spaces git repository\nare:\n\n```sh\ngit add -A\ngit commit -m \"Add hello world Mesop app\"\ngit push origin main\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 209, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b81bc7bc-be17-4c11-a8e5-17eab3f781be": {"__data__": {"id_": "b81bc7bc-be17-4c11-a8e5-17eab3f781be", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "5a7b93a5-16fe-42de-b188-d99739846b5f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}, "hash": "25e8b72881cf6b177eafc03c44288670abf05fbc976f7d127bdf587e5ea21ecf", "class_name": "RelatedNodeInfo"}}, "text": "View deployed app\n\nCongratulations! You should now be able to view your app on Hugging Face Spaces.\n\nThe URL should be something like this:\n\n```\nhttps://huggingface.co/spaces//mesop-hello-world\n```\n\n!Your deployed Hugging Face Spaces app", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 239, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0119396a-7176-4f12-b168-1b8ba5c2cf82": {"__data__": {"id_": "0119396a-7176-4f12-b168-1b8ba5c2cf82", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "1cdde311-2255-47ae-83a4-871734964504", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "hash": "9d28bb241ea4eedd3a83f008b732e1ec3eed8a27ca1be9bc48e18deea433555a", "class_name": "RelatedNodeInfo"}}, "text": "Event Handlers\n\nEvent handlers are a core part of Mesop and enables you to handle user interactions by writing Python functions which are called by the Mesop framework when a user event is received.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 200, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7adf1aed-1a01-48bb-9a25-ddf96e61f8a1": {"__data__": {"id_": "7adf1aed-1a01-48bb-9a25-ddf96e61f8a1", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "473eea42-e62f-4f96-b358-92575c6d3d0e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "hash": "28a75a975d761106608c1bcede41a230f1bab28d24bd70faa24527f1b6983d79", "class_name": "RelatedNodeInfo"}}, "text": "How it works\n\nLet's take a look at a simple example of an event handler:\n\n```py title=\"Simple event handler\"\ndef counter():\n me.button(\"Increment\", on_click=on_click)\n\ndef on_click(event: me.ClickEvent):\n state = me.state(State)\n state.count += 1\n\n@me.stateclass\nclass State:\n count: int = 0\n```\n\nAlthough this example looks simple, there's a lot going on under the hood.\n\nWhen the counter function is called, it creates an instance of the button component and binds the `on_click` event handler to it. Because components (and the entire Mesop UI) is serialized and sent to the client, we need a way of serializing the event handler so that when the button is clicked, the correct event handler is called on the server.\n\nWe don't actually need to serialize the entire event handler, rather we just need to compute a unique id for the event handler function.\n\nBecause Mesop has a stateless architecture, we need a way of computing an id for the event handler function that's stable across Python runtimes. For example, the initial page may be rendered by one Python server, but another server may be used to respond to the user event. This stateless architecture allows Mesop apps to be fault-tolerant and enables simple scaling.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1242, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bc7e0ba5-7f9c-4386-95d1-119acd19ff62": {"__data__": {"id_": "bc7e0ba5-7f9c-4386-95d1-119acd19ff62", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "602698dd-9193-4556-848e-3080ed29ecbc", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "hash": "cd46a00ee952d7791ec8657f70554d312d4c1dfbffca30818d16b56acad61346", "class_name": "RelatedNodeInfo"}}, "text": "Types of event handlers", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 25, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3f179ef8-0e00-4100-b7ae-12d0d2672a76": {"__data__": {"id_": "3f179ef8-0e00-4100-b7ae-12d0d2672a76", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "65d45d63-e68c-45dd-9e6d-967672befec8", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "hash": "7a900fa954e5dde5bb35f0a4fbc56f91de64101f0c0274f9f69edd6b46ce3508", "class_name": "RelatedNodeInfo"}}, "text": "Regular functions\n\nThese are the simplest and most common type of event handlers used. It's essentially a regular Python function which is called by the Mesop framework when a user event is received.\n\n```py title=\"Regular function\"\ndef on_click(event: me.ClickEvent):\n state = me.state(State)\n state.count += 1\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 322, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4e8dbae9-a556-4a39-9e2f-8acba1d4355c": {"__data__": {"id_": "4e8dbae9-a556-4a39-9e2f-8acba1d4355c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e96ab8db-19b0-46a4-a91c-993df86c0654", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "hash": "56d2e93c6a88e4a6ca4c11714cc6aabfa9ad8ab2db9eaf36697cde0928a3419e", "class_name": "RelatedNodeInfo"}}, "text": "Generator functions\n\nPython Generator functions are a powerful tool, which allow you to `yield` multiple times in a single event handler. This allows you to render intermediate UI states.\n\n```py title=\"Generator function\"\ndef on_click(event: me.ClickEvent):\n state = me.state(State)\n state.count += 1\n yield\n time.sleep(1)\n state.count += 1\n yield\n```\n\nYou can learn more about real-world use cases of the generator functions in the Interactivity guide.\n\n???+ info \"Always yield at the end of a generator function\"\n If you use a `yield` statement in your event handler, then the event handler will be a generator function. You must have a `yield` statement at the end of the event handler (or each return point), otherwise not all of your code will be executed.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 784, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7a6ce127-b4b5-4b22-8977-d002d1f2ecee": {"__data__": {"id_": "7a6ce127-b4b5-4b22-8977-d002d1f2ecee", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2cc9f710-684f-4b9b-a8b7-ebf64ee81146", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "hash": "10e8753436dfded785854c5d0c8bc68151d0da501a8ec68b4a242b0992bc6845", "class_name": "RelatedNodeInfo"}}, "text": "Async generator functions\n\nPython async generator functions allow you to do concurrent work using Python's `async` and `await` language features. If you are using async Python libraries, you can use these types of event handlers.\n\n```py title=\"Async generator function\"\nasync def on_click(event: me.ClickEvent):\n state = me.state(State)\n state.count += 1\n yield\n await asyncio.sleep(1)\n state.count += 1\n yield\n```\n\nFor a more complete example, please refer to the Async section of the Interactivity guide.\n\n???+ info \"Always yield at the end of an async generator function\"\n Similar to a regular generator function, an async generator function must have a `yield` statement at the end of the event handler (or each return point), otherwise not all of your code will be executed.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 802, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0cf6c349-1573-4774-807c-540e73c5a13a": {"__data__": {"id_": "0cf6c349-1573-4774-807c-540e73c5a13a", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "7c5dc41b-b417-472a-a1c8-87ebb027418d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "hash": "f430b95e69fc30b84b4b8b3fa5bc72f0ae3a4e6e81fc0ad0d509039418439e22", "class_name": "RelatedNodeInfo"}}, "text": "Patterns", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 10, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c9b24da0-b7ec-4328-bbb6-dd2a98db5568": {"__data__": {"id_": "c9b24da0-b7ec-4328-bbb6-dd2a98db5568", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a0500c90-6438-44a4-89cc-7423923d4484", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "hash": "97cbb65c4699d315ef31d15c3e68e8ca3de3269995e15b02d84ed4494fd8a09d", "class_name": "RelatedNodeInfo"}}, "text": "Reusing event handler logic\n\nYou can share event handler logic by extracting the common logic into a separate function. For example, you will often want to use the same logic for the `on_enter` event handler for an input component and the `on_click` event handler for a \"send\" button component.\n\n```py title=\"Reusing event handler logic\"\ndef on_enter(event: me.InputEnterEvent):\n state = me.state(State)\n state.value = event.value\n call_api()\n\ndef on_click(event: me.ClickEvent):\n # Assumes that state.value has been set by an on_blur event handler\n call_api()\n\ndef call_api():\n # Put your common event handler logic here\n pass\n```\n\nIf you want to reuse event handler logic between generator functions, you can use the `yield from` syntax. For example, let's say `call_api` in the above example is a generator function. You can use `yield from` to reuse the event handler logic:\n\n```py title=\"Reusing event handler logic for generator functions\"\ndef on_enter(event: me.InputEnterEvent):\n state = me.state(State)\n state.value = event.value\n yield from call_api()\n\ndef on_click(event: me.ClickEvent):\n yield from call_api()\n\ndef call_api():\n # Do initial work\n yield\n # Do more work\n yield\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1238, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ea397f68-9691-481b-8357-aca9440d16aa": {"__data__": {"id_": "ea397f68-9691-481b-8357-aca9440d16aa", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6879da9e-e19a-4d5d-a8e1-0bb343839dcf", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "hash": "7a124fdc8e2a41d009741914f7a1a339ae65c7a7f1c3c67a19557f71395d680a", "class_name": "RelatedNodeInfo"}}, "text": "Boilerplate-free event handlers\n\nIf you're building a form-like UI, it can be tedious to write a separate event handler for each form field. Instead, you can use this pattern which utilizes the `key` attribute that's available in most events and uses Python's built-in `setattr` function to dynamically update the state:\n\n```py title=\"Boilerplate-free event handlers\"\ndef app():\n me.input(label=\"Name\", key=\"name\", on_blur=update_state)\n me.input(label=\"Address\", key=\"address\", on_blur=update_state)\n\n@me.stateclass\nclass State:\n name: str\n address: str\n\ndef update_state(event: me.InputBlurEvent):\n state = me.state(State)\n setattr(state, event.key, event.value)\n```\n\nThe downside of this approach is that you lose type safety. Generally, defining a separate event handler, although more verbose, is easier to maintain.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 829, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f218a346-7787-45ea-ba06-77c4175af733": {"__data__": {"id_": "f218a346-7787-45ea-ba06-77c4175af733", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "11d63da9-e046-455c-9333-4bd6ca960275", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "hash": "7fc25dc5d66250f5f5bbcb7fe9191a474947b1abd75bc4b52809e6f6af9c9bc6", "class_name": "RelatedNodeInfo"}}, "text": "Troubleshooting", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 17, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "47fe888c-ee11-462a-8cde-825e5bcc18af": {"__data__": {"id_": "47fe888c-ee11-462a-8cde-825e5bcc18af", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "38a14522-d8a8-4c6d-88d2-e194dbacb72a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "hash": "270ea4f5789b7c4493e1deab438c2487256fc56e0071cfd9ce959e5081465a46", "class_name": "RelatedNodeInfo"}}, "text": "Avoid using closure variables in event handler\n\nOne subtle mistake when building a reusable component is having the event handler use a closure variable, as shown in the following example:\n\n```py title=\"Bad example of using closure variable\"\n@me.component\ndef link_component(url: str):\n def on_click(event: me.ClickEvent):\n me.navigate(url)\n return me.button(url, on_click=on_click)\n\ndef app():\n link_component(\"/1\")\n link_component(\"/2\")\n```\n\nThe problem with this above example is that Mesop only stores the last event handler. This is because each event handler has the same id which means that Mesop cannot differentiate between the two instances of the same event handler.\n\nThis means that both instances of the link_component will refer to the last `on_click` instance which references the same `url` closure variable set to `\"/2\"`. This almost always produces the wrong behavior.\n\nInstead, you will want to use the pattern of relying on the key in the event handler as demonstrated in the following example:\n\n```py title=\"Good example of using key\"\n@me.component\ndef link_component(url: str):\n def on_click(event: me.ClickEvent):\n me.navigate(event.key)\n return me.button(url, key=url, on_click=on_click)\n```\n\nFor more info on using component keys, please refer to the Component Key docs.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1317, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "09bb85db-3e70-4b99-98c9-f9f6301f2a62": {"__data__": {"id_": "09bb85db-3e70-4b99-98c9-f9f6301f2a62", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6e284b11-216f-4867-bd84-1c88c8b79c38", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}, "hash": "13dc09237890c1099f1b875a8ddaa13edb7c28348100592ab4e0016c5ecc918b", "class_name": "RelatedNodeInfo"}}, "text": "Next steps\n\nExplore advanced interactivity patterns like streaming and async:\n\n\n Interactivity", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 99, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "49415fa3-53cd-4c0b-ab4e-ac73e886bea7": {"__data__": {"id_": "49415fa3-53cd-4c0b-ab4e-ac73e886bea7", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "dc224d87-2e4c-4b3b-ba34-e5e5a2a6c007", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "hash": "c0d04b156c223d1142edce9a5063c61662b4aea1844682b352b76908db1a4b20", "class_name": "RelatedNodeInfo"}}, "text": "Interactivity\n\nThis guide continues from the event handlers guide and explains advanced interactivity patterns for dealing with common use cases such as calling a slow blocking API call or a streaming API call.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 212, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "769dc8bc-e907-4596-90b4-e8c3fe87960e": {"__data__": {"id_": "769dc8bc-e907-4596-90b4-e8c3fe87960e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8e8f751c-5477-4bde-8eb6-486db5d2e989", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "hash": "2b01a95f8f4ddb6da827f42c25c0315597d946c188aff85c932dd33b1a7ed461", "class_name": "RelatedNodeInfo"}}, "text": "Intermediate loading state\n\nIf you are calling a slow blocking API (e.g. several seconds) to provide a better user experience, you may want to introduce a custom loading indicator for a specific event.\n\n> Note: Mesop has a built-in loading indicator at the top of the page for all events.\n\n```python\n--8<-- \"mesop/examples/docs/loading.py\"\n```\n\nIn this example, our event handler is a Python generator function. Each `yield` statement yields control back to the Mesop framework and executes a render loop which results in a UI update.\n\nBefore the first yield statement, we set `is_loading` to True on state so we can show a spinner while the user is waiting for the slow API call to complete.\n\nBefore the second (and final) yield statement, we set `is_loading` to False, so we can hide the spinner and then we add the result of the API call to state so we can display that to the user.\n\n> Tip: you must have a yield statement as the last line of a generator event handler function. Otherwise, any code after the final yield will not be executed.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1047, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6edb6a1a-59d2-41ed-8777-809fda742caa": {"__data__": {"id_": "6edb6a1a-59d2-41ed-8777-809fda742caa", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e3594a4a-47e5-49c4-923d-0b0ceb8c3b3f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "hash": "8b1f75b450b6f447b190ab1c6db2ddfbe3af0f5b7c9c443f3c2349012ff51656", "class_name": "RelatedNodeInfo"}}, "text": "Streaming\n\nThis example builds off the previous Loading example and makes our event handler a generator function so we can incrementally update the UI.\n\n```python\n--8<-- \"mesop/examples/docs/streaming.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 210, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a5ceb440-595c-4c46-ad09-f95d7e366841": {"__data__": {"id_": "a5ceb440-595c-4c46-ad09-f95d7e366841", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "57d29748-d9ca-43a9-8651-811c879d2d47", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "hash": "b66a38260b838b9b11aa5e6603d3eac3561e01a04a234da6d903e31e2bfdcc93", "class_name": "RelatedNodeInfo"}}, "text": "Async\n\nIf you want to do multiple long-running operations concurrently, then we recommend you to use Python's `async` and `await`.\n\n```python\n--8<-- \"mesop/examples/async_await.py\"\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 186, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4726fe41-5aac-4241-8f23-81008a0182d1": {"__data__": {"id_": "4726fe41-5aac-4241-8f23-81008a0182d1", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ebe7fb2c-58ed-47a7-ad9c-5afd88d65161", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "hash": "81f31948507a162246cfb4d896600af63a3975ef2c098c93d26d026a57e9886f", "class_name": "RelatedNodeInfo"}}, "text": "Troubleshooting", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 17, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "067f7aac-a3da-4b7b-991c-eaf895567526": {"__data__": {"id_": "067f7aac-a3da-4b7b-991c-eaf895567526", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "fcb35369-3cfa-4e14-ac98-597d3d0a8866", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "hash": "ad4c20372210562bb551c2d19037aa831cbcd0b7d9abd30c3e39b7a288288c76", "class_name": "RelatedNodeInfo"}}, "text": "User input race condition\n\nIf you notice a race condition with user input (e.g. input or textarea) where sometimes the last few characters typed by the user is lost, you are probably unnecessarily setting the value of the component.\n\nSee the following example using this **anti-pattern** :warning::\n\n```py title=\"Bad example: setting the value and using on_input\"\n@me.stateclass\nclass State:\n input_value: str\n\ndef app():\n state = me.state(State)\n me.input(value=state.input_value, on_input=on_input)\n\ndef on_input(event: me.InputEvent):\n state = me.state(State)\n state.input_value = event.value\n```\n\nThe problem is that the input value now has a race condition because it's being set by two sources:\n\n1. The server is setting the input value based on state.\n2. The client is setting the input value based on what the user is typing.\n\nThere's several ways to fix this which are shown below.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 897, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "601990c3-516b-4f9c-bbdb-49c011a6c2c3": {"__data__": {"id_": "601990c3-516b-4f9c-bbdb-49c011a6c2c3", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "618f536c-0c96-4460-986f-4be792022690", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "hash": "c4204115b5cead5fa36f94439b90048985607d86d26ec98f4dd86257b1a74c72", "class_name": "RelatedNodeInfo"}}, "text": "Option 1: Use `on_blur` instead of `on_input`\n\nYou can use the `on_blur` event instead of `on_input` to only update the input value when the user loses focus on the input field.\n\nThis is also more performant because it sends much fewer network requests.\n\n```py title=\"Good example: setting the value and using on_input\"\n@me.stateclass\nclass State:\n input_value: str\n\ndef app():\n state = me.state(State)\n me.input(value=state.input_value, on_input=on_input)\n\ndef on_input(event: me.InputEvent):\n state = me.state(State)\n state.input_value = event.value\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 562, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "45402fb9-99df-47d4-9898-ae02c2b319df": {"__data__": {"id_": "45402fb9-99df-47d4-9898-ae02c2b319df", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "458ad8a4-7ed5-4c84-b282-93e9a180bf76", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "hash": "f9bba0bab8cbed1999a358d655ddaf71ecf70951e331b4478ae2b1932ce4093a", "class_name": "RelatedNodeInfo"}}, "text": "Option 2: Do not set the input value from the server\n\nIf you don't need to set the input value from the server, then you can remove the `value` attribute from the input component.\n\n```py title=\"Good example: not setting the value\" hl_lines=\"7\"\n@me.stateclass\nclass State:\n input_value: str\n\ndef app():\n state = me.state(State)\n me.input(on_input=on_input)\n\ndef on_input(event: me.InputEvent):\n state = me.state(State)\n state.input_value = event.value\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 461, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1a427661-850b-4e7b-a605-f2c396ed11bd": {"__data__": {"id_": "1a427661-850b-4e7b-a605-f2c396ed11bd", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "35b4246f-5a16-498a-9690-68d3a20df5f9", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "hash": "d7b42bfad56e016459d17028d497b5cd0be8d03f40e2ecf46a41510386952aa3", "class_name": "RelatedNodeInfo"}}, "text": "Option 3: Use two separate variables for initial and current input value\n\nIf you need set the input value from the server *and* you need to use `on_input`, then you can use two separate variables for the initial and current input value.\n\n```py title=\"Good example: using two separate variables for initial and current input value\" hl_lines=\"9\"\n@me.stateclass\nclass State:\n initial_input_value: str = \"initial_value\"\n current_input_value: str\n\n@me.page()\ndef app():\n state = me.state(State)\n me.input(value=state.initial_input_value, on_input=on_input)\n\ndef on_input(event: me.InputEvent):\n state = me.state(State)\n state.current_input_value = event.value\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 666, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7c84d98b-fa40-4be7-bc5f-7f8ef009c8dd": {"__data__": {"id_": "7c84d98b-fa40-4be7-bc5f-7f8ef009c8dd", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2faf9263-e04f-4ef2-9d18-6bd4a61e92ac", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}, "hash": "7534ce22bacdd5cf50352be3161b6a3725e5e93c7452bd7251dc068284744f47", "class_name": "RelatedNodeInfo"}}, "text": "Next steps\n\nLearn about layouts to build a customized UI.\n\n\n Layouts", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 73, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0f3a88e9-dec4-4f03-8e7e-aee955ab97f7": {"__data__": {"id_": "0f3a88e9-dec4-4f03-8e7e-aee955ab97f7", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/labs", "title": "Labs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "37dffa22-1c67-48ad-b19d-d674078dcad0", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/labs", "title": "Labs"}, "hash": "311a4ff2f4337e2b1337d438bf681d85321a2563dca1a08c5cdfc74170867cf9", "class_name": "RelatedNodeInfo"}}, "text": "Labs\n\nMesop Labs is built on top of the core Mesop framework and may evolve in the future.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 92, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f5cdb171-8334-41f7-998c-2c5bd1cef0c8": {"__data__": {"id_": "f5cdb171-8334-41f7-998c-2c5bd1cef0c8", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/labs", "title": "Labs"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ccd3dd78-d223-4ea1-96f9-926f62db7889", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/labs", "title": "Labs"}, "hash": "3162ff95b474052e0d98b848134e490e29827d5cce8277c09e4fb09ec652b5fe", "class_name": "RelatedNodeInfo"}}, "text": "Using Labs\n\nYou will need to add an import statement to use labs:\n\n```python\nimport mesop.labs as mel\n```\n\nThe code inside Mesop Labs is intended to be simple to understand so you can copy and customize it as needed.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 218, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "19e9a796-3ff9-4abc-8675-9043277d2c0b": {"__data__": {"id_": "19e9a796-3ff9-4abc-8675-9043277d2c0b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "bf6a7a58-7839-4931-8626-ad2195164f3e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "hash": "375e95461af14b2452e83f17774f0e070b798f13631e9cb3452b5642f8d0e423", "class_name": "RelatedNodeInfo"}}, "text": "Layouts\n\nMesop takes an unopinionated approach to layout. It does not impose a specific layout on your app so you can build custom layouts. The crux of doing layouts in Mesop is the Box component and using the Style API which are Pythonic wrappers around the CSS layout model.\n\nFor most Mesop apps, you will use some combination of these types of layouts:\n\n- Rows and Columns\n- Grids", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 385, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f01ff53d-90c1-4ce7-b4b4-80ec3e42cada": {"__data__": {"id_": "f01ff53d-90c1-4ce7-b4b4-80ec3e42cada", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "5e4e8090-9d15-46d2-a23c-10973a455625", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "hash": "348fac429373481c72f0356be443b1e0cdb2ad34b8da63274491f1067adc60b6", "class_name": "RelatedNodeInfo"}}, "text": "Common layout examples\n\nTo interact with the examples below, open the Mesop Layouts Colab: ![Open In Colab](https://colab.research.google.com/github/mesop-dev/mesop/blob/main/notebooks/mesop_layout_colab.ipynb)", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 212, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b9ead12c-8c94-42f3-a716-3b231b553cf0": {"__data__": {"id_": "b9ead12c-8c94-42f3-a716-3b231b553cf0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b856360e-ac61-464b-9f8f-cf3bc03434b5", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "hash": "74e911e65d2f750bf77355e41b0f417b04264a8e001f3968cdf39c908dcb67c1", "class_name": "RelatedNodeInfo"}}, "text": "Rows and Columns", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 18, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bda318a2-9fd6-483a-abe7-c6ed3aca1679": {"__data__": {"id_": "bda318a2-9fd6-483a-abe7-c6ed3aca1679", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "dd2aed69-43a9-4a0c-97f2-13374cd3f28e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "hash": "897078709f044b02f397f9aba96d6921f9b20c8ac9dcb966a4f20a00385b07a3", "class_name": "RelatedNodeInfo"}}, "text": "Basic Row\n\n```python title=\"Basic Row\"\ndef row():\n with me.box(style=me.Style(display=\"flex\", flex_direction=\"row\")):\n me.text(\"Left\")\n me.text(\"Right\")\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 175, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1baa645d-bfdc-4f35-8504-11fe627af013": {"__data__": {"id_": "1baa645d-bfdc-4f35-8504-11fe627af013", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "0140f80d-63a7-43d6-b44c-970ec2d06fdf", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "hash": "a629448761b79c8cf4688923d5e8766690fd0baaeaf3851fd3d83c26f0e7d2bc", "class_name": "RelatedNodeInfo"}}, "text": "Row with Spacing\n\n```python title=\"Row with Spacing\"\ndef row():\n with me.box(style=me.Style(display=\"flex\", flex_direction=\"row\", justify_content=\"space-around\")):\n me.text(\"Left\")\n me.text(\"Right\")\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 221, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "14637348-5c5e-4c14-90c1-4c07baf8e19d": {"__data__": {"id_": "14637348-5c5e-4c14-90c1-4c07baf8e19d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "66b095f7-d23f-45ed-ad6d-4615d2216e5c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "hash": "e46e33407b6ae25d968fb91ab160b7a18c671bfe7d79e44dd40fffb697077537", "class_name": "RelatedNodeInfo"}}, "text": "Row with Alignment\n\n```python title=\"Row with Alignment\"\ndef row():\n with me.box(style=me.Style(display=\"flex\", flex_direction=\"row\", align_items=\"center\")):\n me.box(style=me.Style(background=\"red\", height=50, width=\"50%\"))\n me.box(style=me.Style(background=\"blue\", height=100, width=\"50%\"))\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 314, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7f1b74ff-2803-4a98-b718-f7b7d22e2400": {"__data__": {"id_": "7f1b74ff-2803-4a98-b718-f7b7d22e2400", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8f204a51-d397-4e59-9b54-82f3a7a9e990", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "hash": "3a8e68da7b350d1c448cac7cc4615087f67d76b5d6440ed208814a1a54392be8", "class_name": "RelatedNodeInfo"}}, "text": "Rows and Columns\n\n```python title=\"Rows and Columns\"\ndef app():\n with me.box(style=me.Style(display=\"flex\", flex_direction=\"row\", gap=16, height=\"100%\")):\n column(1)\n column(2)\n column(3)\n\ndef column(num: int):\n with me.box(style=me.Style(\n flex_grow=1,\n background=\"#e0e0e0\",\n padding=me.Padding.all(16),\n display=\"flex\",\n flex_direction=\"column\",\n )):\n me.box(style=me.Style(background=\"red\", height=100))\n me.box(style=me.Style(background=\"blue\", flex_grow=1))\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 548, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4f066662-d03a-43e2-8db7-4a03b17a0e2f": {"__data__": {"id_": "4f066662-d03a-43e2-8db7-4a03b17a0e2f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "1bb93057-9767-4f5d-ab23-94a0b5cd6b48", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "hash": "b03d4a2c08d9a841bb167064d6235e6dbb75e8274f6136d23d784a3097a5ac7b", "class_name": "RelatedNodeInfo"}}, "text": "Grids", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 7, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b3800f2c-1c09-4a9d-8d1f-6d183a09005f": {"__data__": {"id_": "b3800f2c-1c09-4a9d-8d1f-6d183a09005f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "eba43996-fb12-46ae-b942-78fcf68e7d01", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "hash": "588a51b42b1396871746e5c0e99a1d4d45f6a4006b0648397ae7ff94c721fead", "class_name": "RelatedNodeInfo"}}, "text": "Side-by-side Grid\n\n```python title=\"Side-by-side Grid\"\ndef grid():\n # 1fr means 1 fraction, so each side is the same size.\n # Try changing one of the 1fr to 2fr and see what it looks like\n with me.box(style=me.Style(display=\"grid\", grid_template_columns=\"1fr 1fr\")):\n me.text(\"A bunch of text\")\n me.text(\"Some more text\")\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 350, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4836b503-a861-4910-aec3-ec8e73ae79fb": {"__data__": {"id_": "4836b503-a861-4910-aec3-ec8e73ae79fb", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "d1dc290d-08ba-4a0d-8ca6-35a766d8787c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "hash": "20d8660b511807dc237ef0d6851fcc97b305d1705f4a89c1d008e3441737a858", "class_name": "RelatedNodeInfo"}}, "text": "Header Body Footer Grid\n\n```python title=\"Header Body Footer Grid\"\ndef app():\n with me.box(style=me.Style(\n display=\"grid\",\n grid_template_rows=\"auto 1fr auto\",\n height=\"100%\"\n )):\n # Header\n with me.box(style=me.Style(\n background=\"#f0f0f0\",\n padding=me.Padding.all(24)\n )):\n me.text(\"Header\")\n\n # Body\n with me.box(style=me.Style(\n padding=me.Padding.all(24),\n overflow_y=\"auto\"\n )):\n me.text(\"Body Content\")\n # Add more body content here\n\n # Footer\n with me.box(style=me.Style(\n background=\"#f0f0f0\",\n padding=me.Padding.all(24)\n )):\n me.text(\"Footer\")\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 761, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7c6ff988-c9b7-4084-90fb-0d1c7bda2ce6": {"__data__": {"id_": "7c6ff988-c9b7-4084-90fb-0d1c7bda2ce6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a4243b4a-7c00-4cc5-ae5e-0f08778810c0", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "hash": "2698ed0c0caa8836f081eae601c54f43421d5db61ea0183b50bd65cf2a37e625", "class_name": "RelatedNodeInfo"}}, "text": "Sidebar Layout\n\n```python title=\"Sidebar Layout\"\ndef app():\n with me.box(style=me.Style(\n display=\"grid\",\n grid_template_columns=\"250px 1fr\",\n height=\"100%\"\n )):\n # Sidebar\n with me.box(style=me.Style(\n background=\"#f0f0f0\",\n padding=me.Padding.all(24),\n overflow_y=\"auto\"\n )):\n me.text(\"Sidebar\")\n\n # Main content\n with me.box(style=me.Style(\n padding=me.Padding.all(24),\n overflow_y=\"auto\"\n )):\n me.text(\"Main Content\")\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 573, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "425e71c5-3f2c-41c8-8c7b-f9419d3d6cd4": {"__data__": {"id_": "425e71c5-3f2c-41c8-8c7b-f9419d3d6cd4", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "df2e52eb-b462-414c-9895-6204f6cba088", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "hash": "afe5f6f7ce97f8fe29feb85fdc4203383ebda4a5e699c5926ba468cb0a1cd428", "class_name": "RelatedNodeInfo"}}, "text": "Responsive UI\n\nThis is similar to the Grid Sidebar layout above, except on smaller screens, we will hide the sidebar. Try resizing the browser window and see how the UI changes.\n\nLearn more about responsive UI in the viewport size docs.\n\n```python\ndef app():\n is_desktop = me.viewport_size().width > 640\n with me.box(style=me.Style(\n display=\"grid\",\n grid_template_columns=\"250px 1fr\" if is_desktop else \"1fr\",\n height=\"100%\"\n )):\n if is_desktop:\n # Sidebar\n with me.box(style=me.Style(\n background=\"#f0f0f0\",\n padding=me.Padding.all(24),\n overflow_y=\"auto\"\n )):\n me.text(\"Sidebar\")\n\n # Main content\n with me.box(style=me.Style(\n padding=me.Padding.all(24),\n overflow_y=\"auto\"\n )):\n me.text(\"Main Content\")\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 882, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b05e07aa-e067-4d78-9587-d7e71610d694": {"__data__": {"id_": "b05e07aa-e067-4d78-9587-d7e71610d694", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "3cb51d2c-4f7e-4636-9656-ed03b0d63ed9", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}, "hash": "3bc3891e56f570bf88738be0a2fdcca359782d3a924a6921e8ffbb481b1af42b", "class_name": "RelatedNodeInfo"}}, "text": "Learn more\n\nFor a real-world example of using these types of layouts, check out the Mesop Showcase app:\n\n- App\n- Code\n\nTo learn more about flexbox layouts (rows and columns), check out:\n\n- CSS Tricks Guide to Flexbox Layouts\n- MDN Flexbox guide\n\nTo learn more about grid layouts, check out:\n\n- CSS Tricks Guide to Grid Layouts\n- MDN Grid guide", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 345, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "13f5300a-91a6-49d4-9a23-ce9725a5afe5": {"__data__": {"id_": "13f5300a-91a6-49d4-9a23-ce9725a5afe5", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/multi-pages", "title": "Multi-Pages"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "64b776b0-1e4e-495f-85ab-c1063a6734ea", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/multi-pages", "title": "Multi-Pages"}, "hash": "2fe8cd73ed9de0861d28292689259440c7c61f8e2da8c26e7502b4dfe3ce19b0", "class_name": "RelatedNodeInfo"}}, "text": "Multi-Pages\n\nYou can define multi-page Mesop applications by using the page feature you learned from Core Concepts.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 117, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e0898b5e-c2bd-4627-9d26-eb8ca29129a0": {"__data__": {"id_": "e0898b5e-c2bd-4627-9d26-eb8ca29129a0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/multi-pages", "title": "Multi-Pages"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "219c6433-665b-4662-aa77-1eb3152e8f93", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/multi-pages", "title": "Multi-Pages"}, "hash": "8aaf4ea9729d5e60015015d6050f934311fe96c56394dbe252a41c650c9c816e", "class_name": "RelatedNodeInfo"}}, "text": "Multi-page setup\n\n```python\nimport mesop as me\n\n@me.page(path=\"/1\")\ndef page1():\n me.text(\"page 1\")\n\n@me.page(path=\"/2\")\ndef page2():\n me.text(\"page 2\")\n```\n\nLearn more about page configuration in the page API doc.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 222, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9b24ea74-3bf8-49bd-b128-2c821788fcba": {"__data__": {"id_": "9b24ea74-3bf8-49bd-b128-2c821788fcba", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/multi-pages", "title": "Multi-Pages"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c1e95537-7170-4c8e-b718-e34e57dbe676", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/multi-pages", "title": "Multi-Pages"}, "hash": "c85638ddc2b8d06d6f40e9662e7ab87d4678dd59764eea0c6c58c02fc64e4f02", "class_name": "RelatedNodeInfo"}}, "text": "Navigation\n\nIf you have multiple pages, you will typically want to navigate from one page to another when the user clicks a button. You can use `me.navigate(\"/to/path\")` to navigate to another page.\n\n**Example:**\n\n```python\n--8<-- \"mesop/examples/docs/multi_page_nav.py\"\n```\n\n> Note: you can re-use state across pages. See how the above example uses the `State#count` value across pages.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 389, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "16f25f48-37d8-4143-b522-a408811c87af": {"__data__": {"id_": "16f25f48-37d8-4143-b522-a408811c87af", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "883be2f5-67b4-4088-86fc-ce579cb52516", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "hash": "2c20c9ae376885e6e68e04133df20eb36bbb12a86ed1d6268f3215695122b326", "class_name": "RelatedNodeInfo"}}, "text": "Performance\n\nOccasionally, you may run into performance issues with your Mesop app. Here are some tips to help you improve your app's performance.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 148, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "23f9c652-8efe-4de5-8cf3-d2782ed3ab51": {"__data__": {"id_": "23f9c652-8efe-4de5-8cf3-d2782ed3ab51", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "3afb111f-56de-4db6-8894-b65ff3d42978", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "hash": "511b9eef275b8076a3a81b2a2fa521699068f140a43e718d77733dc0aa525d6a", "class_name": "RelatedNodeInfo"}}, "text": "Determine the root cause\n\nThe first step in debugging performance issues is to identify the cause of the issue. Follow the Debugging with DevTools guide and use the Console and Network tab to identify the issue.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 213, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7ebde5c9-1395-4829-867c-9770b53cfe1f": {"__data__": {"id_": "7ebde5c9-1395-4829-867c-9770b53cfe1f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e9183d6c-9c30-40c0-ba82-5d0b247b8e8b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "hash": "04c5e44ae0391ce071bd749687c80e3c77e3b9d7a346526d16b177fe2d251af8", "class_name": "RelatedNodeInfo"}}, "text": "Common performance bottlenecks and solutions", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 46, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "47b0d96a-8798-4cb0-b29b-73b65d818df7": {"__data__": {"id_": "47b0d96a-8798-4cb0-b29b-73b65d818df7", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "5fdf7a05-9a33-4054-899c-c5d0bda98d72", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "hash": "97ea8b09490af8afc7288e488b9e761f759a2cc61db32da93a70def47436cefd", "class_name": "RelatedNodeInfo"}}, "text": "Optimizing state size\n\nIf you notice with Chrome DevTools that you're sending very large network payloads between client and server, it's likely that your state is too large.\n\nBecause the state object is serialized and sent back and forth between the client and server, you should try to keep the state object reasonably sized. For example, if you store a very large string (e.g. base64-encoded image) in state, then it will degrade performance of your Mesop app.\n\nThe following are recommendations to help you avoid large state payloads:", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 540, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "20c1ecff-53f8-48a2-beee-bcb5b7e76d5b": {"__data__": {"id_": "20c1ecff-53f8-48a2-beee-bcb5b7e76d5b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2124a341-7c9d-4c64-a59e-f28fc1c56d03", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "hash": "4fb81f36b1c7a7e4b8bead058ee8e5dcdcbfc9d47bda5d0cbc13a83b2ab88950", "class_name": "RelatedNodeInfo"}}, "text": "Store state in memory\n\nMesop has a feature that allows you to store state in memory rather than passing the\nfull state on every request. This may help improve performance when dealing with large\nstate objects. The caveat is that, storing state in memory contains its own set of\nproblems that you must carefully consider. See the config section\nfor details on how to use this feature.\n\nIf you are running Mesop on a single replica or you can enable session affinity, then this is a good option.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 495, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "075f8f0b-48a2-4b89-b2e5-f458362e900b": {"__data__": {"id_": "075f8f0b-48a2-4b89-b2e5-f458362e900b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "919945d3-970f-4e84-b542-e0df00cd9868", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "hash": "d1f8cb7678daa2c62e504c37b92eeb539ed17940943aff2f29762a0c0496eea3", "class_name": "RelatedNodeInfo"}}, "text": "Store state externally\n\nYou can also store state outside of Mesop using a database or a storage service. This is a good option if you have a large amount of state data. For example, rather than storing images in the state, you can store them in a bucket service like Google Cloud Storage and send signed URLs to the client so that it can directly fetch the images without going through the Mesop server.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 405, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ce762c9e-f0d4-4831-a1f9-fd8d0eadfa4d": {"__data__": {"id_": "ce762c9e-f0d4-4831-a1f9-fd8d0eadfa4d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "0a405421-f144-4507-a511-34e76db4c89b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "hash": "e417beeaf2bee6879b33075295bb9a5fc492dc9a7a1aa11a80c2afce79dac987", "class_name": "RelatedNodeInfo"}}, "text": "Handling high user load\n\nIf you notice that your Mesop app is running slowly when you have many concurrent users, you can try to scale your Mesop app.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 152, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f13887d0-7938-41e3-a4fb-0a09ba9c7f34": {"__data__": {"id_": "f13887d0-7938-41e3-a4fb-0a09ba9c7f34", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9d4097d3-f12f-4396-b909-464e6505c9bb", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}, "hash": "13c9a8b3ceb508a929b6ac1756f5b7cff4817c2e09691ca3c7b60bfc496dd414", "class_name": "RelatedNodeInfo"}}, "text": "Increase the number of replicas\n\nTo handle more concurrent users, you can scale your Mesop app horizontally by increasing the number of replicas (instances) running your application. This can be achieved through various cloud services that offer autoscaling features:\n\n1. Use a managed service like Google Cloud Run, which automatically scales your app based on traffic. Follow Mesop's Cloud Run deployment guide for details.\n\n2. Manually adjust the number of replicas to a higher number.\n\n3. Tune gunicorn settings. If you're using gunicorn to serve your Mesop app, you can adjust gunicorn settings to increase the number of workers. This can help to increase the number of concurrent users your Mesop app can handle.\n\nWhichever platform you choose, make sure to configure the replica settings to match your app's performance requirements and budget constraints.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 865, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "09a604fe-ee7f-4750-8bcd-a37502df37c6": {"__data__": {"id_": "09a604fe-ee7f-4750-8bcd-a37502df37c6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/server-integration", "title": "Server integration"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2e8a203c-4ae4-4c77-87ef-677b01cc7b83", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/server-integration", "title": "Server integration"}, "hash": "497ab65a8e164095886e002565f9a701fec46bb67ee25497d6f6db830efc1b0b", "class_name": "RelatedNodeInfo"}}, "text": "Server integration\n\nMesop allows you to integrate Mesop with other Python web servers like FastAPI or Flask by mounting the Mesop app which is a WSGI app.\n\nThis enables you to do things like:\n\n- Serve local files (e.g. images)\n- Provide API endpoints (which can be called by the web component, etc.)", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 301, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "17e7bcb1-1685-4287-88ca-b052dad43093": {"__data__": {"id_": "17e7bcb1-1685-4287-88ca-b052dad43093", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/server-integration", "title": "Server integration"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6e7ca8ee-ce97-4731-84a1-328378cd8cc8", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/server-integration", "title": "Server integration"}, "hash": "57dcb63e4f826c29671f2339054e361f9b8d5fbccf39e6bc51c860d7b5725eea", "class_name": "RelatedNodeInfo"}}, "text": "API\n\nThe main API for doing this integration is the `create_wsgi_app` function.\n\n::: mesop.server.wsgi_app.create_wsgi_app", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 124, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "beeee005-d33b-416c-8905-27cb245706b8": {"__data__": {"id_": "beeee005-d33b-416c-8905-27cb245706b8", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/server-integration", "title": "Server integration"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b1428690-9b86-4061-b135-915ef4138124", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/server-integration", "title": "Server integration"}, "hash": "044ce49dcdb1a9b0acff16e5df9cc76e243a31f355e6f148c7fdd7e3a411cb5a", "class_name": "RelatedNodeInfo"}}, "text": "FastAPI example\n\nFor a working example of using Mesop with FastAPI, please take a look at this repo:\nhttps://github.com/wwwillchen/mesop-fastapi\n\n> Note: you can apply similar steps to use any other web framework that allows you to mount a WSGI app.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 251, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "91900571-92c2-4c3e-acd3-9984272cc438": {"__data__": {"id_": "91900571-92c2-4c3e-acd3-9984272cc438", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "7c473d8b-e2d1-4798-85e5-79587bcb3dad", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "hash": "afdd2b3c8d3687b0dc0d9043ae020ee2391b82f5ed78acb5b297830051db5d32", "class_name": "RelatedNodeInfo"}}, "text": "State Management\n\nState management is a critical element of building interactive apps because it allows you store information about what the user did in a structured way.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 172, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "11830fe3-d51d-41b9-a969-675b75c0a133": {"__data__": {"id_": "11830fe3-d51d-41b9-a969-675b75c0a133", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "58c35737-c0ce-4da0-816c-93c47c0f9486", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "hash": "f1d31189bef9fff05fc4f0ff2333b173e7df31aaafe292b749eb7b6fb52e2e32", "class_name": "RelatedNodeInfo"}}, "text": "Basic usage\n\nYou can register a class using the class decorator `me.stateclass` which is like a dataclass with special powers:\n\n```python\n@me.stateclass\nclass State:\n val: str\n```\n\nYou can get an instance of the state class inside any of your Mesop component functions by using `me.state`:\n\n```py\n@me.page()\ndef page():\n state = me.state(State)\n me.text(state.val)\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 377, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cfcc0967-38dd-4054-8c01-3bcfa59312e9": {"__data__": {"id_": "cfcc0967-38dd-4054-8c01-3bcfa59312e9", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "89764d9d-e9e4-4b09-b81b-5d4d0493804d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "hash": "c03a8bbbc1ffa06f54ac1dd825906cd93f0a0fc425400ebaebcac393b49ce2e7", "class_name": "RelatedNodeInfo"}}, "text": "Use immutable default values\n\nSimilar to regular dataclasses which disallow mutable default values, you need to avoid mutable default values such as list and dict for state classes. Using mutable default values can result in leaking state across sessions which can be a serious privacy issue.\n\nYou **MUST** use immutable default values _or_ use dataclasses `field` initializer _or_ not set a default value.\n\n???+ success \"Good: immutable default value\"\n Setting a default value to an immutable type like str is OK.\n\n ```py\n @me.stateclass\n class State:\n a: str = \"abc\"\n ```\n\n???+ failure \"Bad: mutable default value\"\n\n The following will raise an exception because dataclasses prevents you from using mutable collection types like `list` as the default value because this is a common footgun.\n\n ```py\n @me.stateclass\n class State:\n a: list[str] = [\"abc\"]\n ```\n\n If you set a default value to an instance of a custom type, an exception will not be raised, but you will be dangerously sharing the same mutable instance across sessions which could cause a serious privacy issue.\n\n ```py\n @me.stateclass\n class State:\n a: MutableClass = MutableClass()\n ```\n\n???+ success \"Good: default factory\"\n\n If you want to set a field to a mutable default value, use default_factory in the `field` function from the dataclasses module to create a new instance of the mutable default value for each instance of the state class.\n\n ```py\n from dataclasses import field\n\n @me.stateclass\n class State:\n a: list[str] = field(default_factory=lambda: [\"abc\"])\n ```\n\n???+ success \"Good: no default value\"\n\n If you want a default of an empty list, you can just not define a default value and Mesop will automatically define an empty list default value.\n\n For example, if you write the following:\n\n ```py\n @me.stateclass\n class State:\n a: list[str]\n ```\n\n It's the equivalent of:\n\n ```py\n @me.stateclass\n class State:\n a: list[str] = field(default_factory=list)\n ```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 2081, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "aae0e900-a734-4197-b267-dfd7d53015e9": {"__data__": {"id_": "aae0e900-a734-4197-b267-dfd7d53015e9", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "da6b90e2-0281-418f-906f-b4dc8573a31b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "hash": "13289bb4cd7d229cc29ec658c71c66786aff96a9414b40079cd241f7c29b2f3e", "class_name": "RelatedNodeInfo"}}, "text": "How State Works\n\n`me.stateclass` is a class decorator which tells Mesop that this class can be retrieved using the `me.state` method, which will return the state instance for the current user session.\n\n> If you are familiar with the dependency injection pattern, Mesop's stateclass and state API is essentially a minimalist dependency injection system which scopes the state object to the lifetime of a user session.\n\nUnder the hood, Mesop is sending the state back and forth between the server and browser client so everything in a state class must be serializable.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 568, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "360322ec-314d-4e74-8a0e-8ad47a4f3e10": {"__data__": {"id_": "360322ec-314d-4e74-8a0e-8ad47a4f3e10", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "15e4d5ec-0499-4e11-bd05-b9934c30168a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "hash": "0a9de0c3a632392b0345d543664ca2b096e36f9abd5a6d10449423e8185c04eb", "class_name": "RelatedNodeInfo"}}, "text": "Multiple state classes\n\nYou can use multiple classes to store state for the current user session.\n\nUsing different state classes for different pages or components can help make your app easier to maintain and more modular.\n\n```py\n@me.stateclass\nclass PageAState:\n ...\n\n@me.stateclass\nclass PageBState:\n ...\n\n@me.page(path=\"/a\")\ndef page_a():\n state = me.state(PageAState)\n ...\n\n@me.page(path=\"/b\")\ndef page_b():\n state = me.state(PageBState)\n ...\n```\n\nUnder the hood, Mesop is managing state classes based on the identity (e.g. module name and class name) of the state class, which means that you could have two state classes named \"State\", but if they are in different modules, then they will be treated as separate state, which is what you would expect.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 775, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9dc79571-6997-49bf-a4ed-cdecb0edb0bf": {"__data__": {"id_": "9dc79571-6997-49bf-a4ed-cdecb0edb0bf", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "7b10a137-58b8-4c9a-8784-91af765bd51b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "hash": "2c5291c7656f029d631dcb4d233dd9a8ebd7100bca9a42a313516ccf5dad6199", "class_name": "RelatedNodeInfo"}}, "text": "Nested State\n\nYou can also have classes inside of a state class as long as everything is serializable:\n\n```python\nclass NestedState:\n val: str\n\n@me.stateclass\nclass State:\n nested: NestedState\n\ndef app():\n state = me.state(State)\n```\n\n> Note: you only need to decorate the top-level state class with `@me.stateclass`. All the nested state classes will automatically be wrapped.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 382, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4c28a7d6-59e0-4c02-98fd-ecaef997b8be": {"__data__": {"id_": "4c28a7d6-59e0-4c02-98fd-ecaef997b8be", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "bfb408c6-3bae-4f26-ade6-baaa1795264f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "hash": "79b672ced256c77f5ff721a21a88acc1a1978086714431f78f876a0fb9739eb4", "class_name": "RelatedNodeInfo"}}, "text": "Nested State and dataclass\n\nSometimes, you may want to explicitly decorate the nested state class with `dataclass` because in the previous example, you couldn't directly instantiate `NestedState`.\n\nIf you wanted to use NestedState as a general dataclass, you can do the following:\n\n```python\n@dataclass\nclass NestedState:\n val: str = \"\"\n\n@me.stateclass\nclass State:\n nested: NestedState\n\ndef app():\n state = me.state(State)\n```\n\n> Reminder: because dataclasses do not have default values, you will need to explicitly set default values, otherwise Mesop will not be able to instantiate an empty version of the class.\n\nNow, if you have an event handler function, you can do the following:\n\n```py\ndef on_click(e):\n response = call_api()\n state = me.state(State)\n state.nested = NestedState(val=response.text)\n```\n\nIf you didn't explicitly annotate NestedState as a dataclass, then you would get an error instantiating NestedState because there's no initializer defined.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 980, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "798e6196-fd14-47d3-8341-41f24c9ddb32": {"__data__": {"id_": "798e6196-fd14-47d3-8341-41f24c9ddb32", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "176610cf-5a5b-4529-8a12-124613951273", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "hash": "425d46fc53e096897da13afa0e2bf2b77c56ca5990144da5093e35ca86215470", "class_name": "RelatedNodeInfo"}}, "text": "Tips", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 6, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cd8f0983-9f72-4aca-a98b-df8bee05d46f": {"__data__": {"id_": "cd8f0983-9f72-4aca-a98b-df8bee05d46f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "89fd767d-f2da-400a-b488-f78766dca3dc", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "hash": "63aac256f90c5f77d5cd0b008d28fa1069e063e37b0bfda6cd39f429b2991b7a", "class_name": "RelatedNodeInfo"}}, "text": "State performance issues\n\nTake a look at the performance guide to learn how to identify and fix State-related performance issues.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 131, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bd4ddd4b-66e2-4329-abd8-d995f7e739f3": {"__data__": {"id_": "bd4ddd4b-66e2-4329-abd8-d995f7e739f3", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "86b264af-8754-4316-89f2-eec596b1153d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}, "hash": "d445b13cdfadf35444723fab783f5bb94ea8a0feb696e4a8b5d7ef42a1dbab79", "class_name": "RelatedNodeInfo"}}, "text": "Next steps\n\nEvent handlers complement state management by providing a way to update your state in response to user interactions.\n\n\n Event handlers", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 151, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "49f4cdbc-715b-4d5a-a8f5-c438baa97667": {"__data__": {"id_": "49f4cdbc-715b-4d5a-a8f5-c438baa97667", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ffc5c094-7dac-4f54-8e71-35405d094f4d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "hash": "b173558917194ec1edd10db5ed16cab0400844c4bb5dd5c9e81f18b95af2d064", "class_name": "RelatedNodeInfo"}}, "text": "Static Assets\n\nMesop allows you to specify a folder for storing static assets that will be served by\nthe Mesop server.\n\nThis feature provides a simple way to serving images, favicons, CSS stylesheets, and\nother files without having to rely on CDNs, external servers, or mounting Mesop onto\nFastAPI/Flask.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 306, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1bf18c8d-9fcd-4839-a8f2-78242eb5f9eb": {"__data__": {"id_": "1bf18c8d-9fcd-4839-a8f2-78242eb5f9eb", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "fa0d9fa6-5ecb-4add-af26-251be9f44d66", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "hash": "b5cc1c78e31b0eafbfd80b96f65c5310f54c48f6066463e69673a962f37db05c", "class_name": "RelatedNodeInfo"}}, "text": "Enable a static folder\n\nThis feature can be enabled using environment variables.\n\n- MESOP_STATIC_FOLDER\n- MESOP_STATIC_URL_PATH\n\nFull descriptions of these two settings can be found on the config page.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 203, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a4717e03-22cc-431a-8f23-7a15b2cf396f": {"__data__": {"id_": "a4717e03-22cc-431a-8f23-7a15b2cf396f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "949a04ea-9458-44a1-90e7-21518fbca2cd", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "hash": "4798acbbe76debad8062d562d33fd5551c544138dc9d732906d213461cf41616", "class_name": "RelatedNodeInfo"}}, "text": "Enabling a static folder named \"assets\"\n\nThis will make the files in the `assets` directory accessible from the Mesop server\nat `/static`.\n\nMesop will look for the `assets` directory relative to your current working directory.\nIn this case, `/some/path/mesop-app/assets`.\n\n```bash\ncd /some/path/mesop-app\nMESOP_STATIC_FOLDER=assets mesop main.py\n```\n\nHere is another example:\n\nMesop will look for the `assets` directory relative to your current working directory.\nIn this case, `/some/path/assets`.\n\n```bash\ncd /some/path\nMESOP_STATIC_FOLDER=assets mesop mesop-app/main.py\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 578, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "da0a201b-4166-4ca8-beda-ca131be887b4": {"__data__": {"id_": "da0a201b-4166-4ca8-beda-ca131be887b4", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b471b744-fb4e-4b9d-9d62-5428f8635845", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "hash": "8a773cd52a4c898df4cf5796fdaa68fad5fe67b5482db67589e5df468ae2792c", "class_name": "RelatedNodeInfo"}}, "text": "Enabling a static folder named \"assets\" and URL path of /assets\n\nThis will make the files in the `assets` directory accessible from the Mesop server\nat `/assets`. For example: `https://example.com/assets`.\n\n```bash\nMESOP_STATIC_FOLDER=assets MESOP_STATIC_URL_PATH=/assets mesop main.py\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 291, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1557958c-e6f0-47e0-81ac-305daf9f4a4a": {"__data__": {"id_": "1557958c-e6f0-47e0-81ac-305daf9f4a4a", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8fa54cd0-9561-4302-ba9a-963055ec7d7b", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "hash": "86a1b528547efbae57efc2d4c1ed678e2429136a4e64391fed34521808f15b8e", "class_name": "RelatedNodeInfo"}}, "text": "Using a .env file\n\nYou can also specify the environment variables in a `.env` file. This file should be\nplaced in the same directory as the `main.py` file.\n\n``` title=\".env\"\nMESOP_STATIC_FOLDER=assets\nMESOP_STATIC_URL_PATH=/assets\n```\n\nThen you can run the Mesop command like this:\n\n```bash\nmesop main.py\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 310, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c1d3f163-9fb8-4767-802a-0d6ab126db6e": {"__data__": {"id_": "c1d3f163-9fb8-4767-802a-0d6ab126db6e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4b1fc1e7-6b1e-43b7-af14-0092390410ab", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "hash": "3676413a098f5584fa0fcc6a5d12c13b8e0191a0f8bad34bc140afdd417e04c4", "class_name": "RelatedNodeInfo"}}, "text": "Example use cases\n\nHere are a couple examples that use the static assets feature.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 83, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7e23377a-e6ca-4a0c-a70a-f17bec571e02": {"__data__": {"id_": "7e23377a-e6ca-4a0c-a70a-f17bec571e02", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f2e14b05-0bc7-4fe0-a829-5ad20475e440", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "hash": "0dc8913b953fb76da7a7283ddb348c1283e968c1a2dfc26927e9c1662fbabe7b", "class_name": "RelatedNodeInfo"}}, "text": "Add a logo\n\nThis example shows you how to load an image to use as a logo for your app.\n\nLet's assume you have a directory like this:\n\n- static/logo.png\n- main.py\n- requirements.txt\n\nThen you can reference your logo in your Mesop app like this:\n\n```python title=\"main.py\"\nimport mesop as me\n\n@me.page()\ndef foo():\n me.image(src=\"/static/logo.png\")\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 353, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "efe452b9-3dfa-4f97-b942-0fe6fab56ef0": {"__data__": {"id_": "efe452b9-3dfa-4f97-b942-0fe6fab56ef0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "405659ec-d03a-4c46-8404-dd86c5fef24e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "hash": "01f900fd61cf75aab48758efd68f8c4df8dc63206a9c4d23bca6df441337c3c1", "class_name": "RelatedNodeInfo"}}, "text": "Use a custom favicon\n\nThis example shows you how to use a custom favicon in your Mesop app.\n\nLet's assume you have a directory like this:\n\n- static/favicon.ico\n- main.py\n- requirements.txt\n\nIf you have a static folder enabled, Mesop will look for a `favicon.ico` file in your\nstatic folder. If the file exists, Mesop will use your custom favicon instead of the\ndefault Mesop favicon.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 385, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6592969e-1fe6-40e2-958e-f263ca20109f": {"__data__": {"id_": "6592969e-1fe6-40e2-958e-f263ca20109f", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "dee77364-0b29-431b-9694-55afa90f4e1e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}, "hash": "eff1f4d19bea92801d789e878d1ddb3c7080f7ab13b3d353034e7cb78189e05c", "class_name": "RelatedNodeInfo"}}, "text": "Load a Tailwind stylesheet\n\nThis example shows you how to use Tailwind CSS with Mesop.\n\nLet's assume you have a directory like this:\n\n- static/tailwind.css\n- tailwind_input.css\n- tailwind.config.js\n- main.py\n- requirements.txt\n\n\nYou can import the CSS into your page using the `stylesheets` parameter on `@me.page`.\n\n```python title=\"main.py\"\nimport mesop as me\n\n@me.page(stylesheets=[\"/static/tailwind.css\"])\ndef foo():\n with me.box(classes=\"bg-gray-800\"):\n me.text(\"Mesop with Tailwind CSS.\")\n```\n\nTailwind is able to extract the CSS properties from your Mesop main.py file. This does\nnot work for all cases. If you are dynamically generating CSS properties using string concatenation/formatting, then Tailwind may not be able to determine which properties\nto include. In that case, you may need to manually add these classes to the safelist.\n\n```js title=\"tailwind.config.js\"\n/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n content: [\"main.py\"],\n theme: {\n extend: {},\n },\n plugins: [],\n safelist: [],\n};\n```\n\nThis is just the base Tailwind input file.\n\n```css title=\"tailwind_input.css\"\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n```\n\nThe command to generate the output Tailwind CSS is:\n\n```bash\n# This assumes you have the tailwindcss CLI installed. If not, see\n# https://tailwindcss.com/docs/installation\nnpx tailwindcss -i ./tailwind_input.css -o ./static/tailwind.css\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1425, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3e7e0ad2-b710-4351-bc48-d07366028425": {"__data__": {"id_": "3e7e0ad2-b710-4351-bc48-d07366028425", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "bcf8e45c-68e1-4cb5-8e3b-3f48b994092a", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "hash": "8426bb1b96d84e432fbb5ed1ddf302ec942d316ea54552cb9c6e9277f80329d0", "class_name": "RelatedNodeInfo"}}, "text": "Testing\n\nThis guide covers the recommended approach for testing Mesop applications using Playwright, a popular browser automation and testing framework.\n\nHowever, you can use any other testing framework and there's no official testing framework for Mesop.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 257, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9b7f2a7d-ce76-4340-a480-0271477e27d7": {"__data__": {"id_": "9b7f2a7d-ce76-4340-a480-0271477e27d7", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a34895e7-6e1b-4303-8234-420d77315a8c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "hash": "3eb31f58ea0341acb1f1e9dd3776128284648400e9b768098a4a4918edb18488", "class_name": "RelatedNodeInfo"}}, "text": "Testing Philosophy\n\nBecause Mesop is a full-stack UI framework we recommend doing integration tests to cover critical app functionality. We also recommend separating core business logic into separate Python modules, which do not depend on Mesop. This way you can easily unit test your business logic as well as reuse the business logic as part of scripts or other binaries besides Mesop.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 389, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c88b0546-c411-4400-8004-fb6a649d37a4": {"__data__": {"id_": "c88b0546-c411-4400-8004-fb6a649d37a4", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "7e3b8aa8-3049-42ef-8138-e4a426fb1370", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "hash": "5bb105b7f4cc166c9a244a32cb98625495217013b4e25bf951ea5507a35202d5", "class_name": "RelatedNodeInfo"}}, "text": "Playwright Example\n\nWe will walk through mesop-playwright-testing repo which contains a simple Mesop counter app and a Playwright test written in TypeScript (node.js). Although Playwright has a Python flavor, we recommend using the Playwright node.js flavor because it has better testing support. Even if you're not familiar with JavaScript or TypeScript, it's extremely easy to write Playwright tests because you can generate your tests by clicking through the UI.\n\nThe testing example repo's README.md contains instructions for setting up your environment and running the tests.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 582, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8475ba91-6698-46be-b32d-2f91a17223fe": {"__data__": {"id_": "8475ba91-6698-46be-b32d-2f91a17223fe", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "78fd639a-1bf3-449f-a0b1-4bdbff773458", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "hash": "2f0172cf2c970701c1225891c18817e55508e8d1be3b96bf76e749448b1552ed", "class_name": "RelatedNodeInfo"}}, "text": "Playwright config\n\nThe playwright configuration used is similar to the default one, however we change a few configurations specific for Mesop.\n\nFor example, in `playwright.config.ts`, we configure Mesop as the local dev server:\n\n```ts\n webServer: {\n command: \"mesop app.py\",\n url: \"http://127.0.0.1:32123\",\n reuseExistingServer: !process.env.CI,\n },\n```\n\nThis will launch the Mesop app server at the start of the tests.\n\nWe also added the following configurations to make writing and debugging tests easier:\n\n```ts\n use: {\n /* Base URL to use in actions like `await page.goto('/')`. */\n baseURL: \"http://127.0.0.1:32123\",\n\n /* See https://playwright.dev/docs/trace-viewer */\n trace: \"retain-on-failure\",\n\n // Capture screenshot after each test failure.\n screenshot: \"on\",\n\n // Retain video on test failure.\n video: \"retain-on-failure\",\n },\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 882, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bf89dcd2-2179-4143-8bd8-e157424548bf": {"__data__": {"id_": "bf89dcd2-2179-4143-8bd8-e157424548bf", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "44521809-a70e-4d8e-ba91-55cef7f2a87c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "hash": "3eaf3aa33944bfabd322992f2f0c229d9a350126af0ac65118daec145bc7a6ee", "class_name": "RelatedNodeInfo"}}, "text": "Running and debugging a test\n\nTry changing the test so that it fails. For example, in `app.spec.ts` change `\"Count=1\"` to `\"Count=2\"` and then run the tests: `npx playwright test`.\n\nThe test will fail (as expected) and a new browser page should be opened with the test failure information. You can click on the failing test and view the screenshot, video and trace. This is very helpful in figuring out why a test failed.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 423, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f1283935-e317-4d7a-91be-e7393e81fc32": {"__data__": {"id_": "f1283935-e317-4d7a-91be-e7393e81fc32", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ec449c9d-ffe5-44ad-9160-454154c7daab", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "hash": "175c29a4d28e54cb203c9e7789498f7147e3890234d64d893bbabdb32198294c", "class_name": "RelatedNodeInfo"}}, "text": "Writing a test\n\nAs mentioned above, it's very easy to write Playwright tests because you can generate your tests by clicking through the UI. Even if you're not familiar with JavaScript/TypeScript, you will be able to generate most of the test code by clicking through the UI and copying the generated test code.\n\n???+ tip \"Use the Playwright VS Code extension\"\n\n You can use the Playwright VS Code extension to directly generate test code in your file. You can also run and debug tests from VS Code as well.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 512, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "651d4277-2f30-446e-ae40-5adf80fe23b1": {"__data__": {"id_": "651d4277-2f30-446e-ae40-5adf80fe23b1", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4126c5e2-8a73-4bd5-9792-4cc2be6faf48", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}, "hash": "bfd978ac34b5e4128c871fedb09c3a808e303cb0870583cfd7b8af892e92c2a9", "class_name": "RelatedNodeInfo"}}, "text": "Learn more\n\nWe recommend reading Playwright's docs which are easy to follow and contain much more information on writing browser tests.\n\nYou can also look at Mesop's own tests written with Playwright.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 202, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "de5c4660-ab99-465f-a0c9-c9740e5ba837": {"__data__": {"id_": "de5c4660-ab99-465f-a0c9-c9740e5ba837", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6893b9aa-6dff-4543-be6c-93817b6fdaed", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "hash": "64f7a34da40def0a8c799d7d5d4d3c41942699e9ac417aa3be37b47a857d5161", "class_name": "RelatedNodeInfo"}}, "text": "Theming\n\nMesop has early-stage support for theming so you can support light theme and dark theme in a Mesop application.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 122, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a2c4043e-f9ef-456e-8b8d-237ae657e97d": {"__data__": {"id_": "a2c4043e-f9ef-456e-8b8d-237ae657e97d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "988a83dc-617e-4139-9343-86f22056096c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "hash": "0bf886c27b24fea1c29d55e84f8b64c9e676440c0e961385b9eaaa8288afcb3c", "class_name": "RelatedNodeInfo"}}, "text": "Dark Theming\n\nFor an actual example of using Mesop's theming API to support light theme and dark theme, we will look at the labs chat component which itself is written all in Python built on top of lower-level Mesop components.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 229, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "50b4ca9c-0922-41a9-a1e2-1e8e33410699": {"__data__": {"id_": "50b4ca9c-0922-41a9-a1e2-1e8e33410699", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "478dcea2-6b5d-4b84-a730-b6016f449048", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "hash": "a5b593bc2d3a1a78c99c59eb1316589f077ada80fe0562ded82d93f5a4d9df02", "class_name": "RelatedNodeInfo"}}, "text": "Theme toggle button\n\nInside the chat component, we've defined an icon button to toggle the theme so users can switch between light and dark theme:\n\n```py\ndef toggle_theme(e: me.ClickEvent):\n if me.theme_brightness() == \"light\":\n me.set_theme_mode(\"dark\")\n else:\n me.set_theme_mode(\"light\")\n\nwith me.content_button(\n type=\"icon\",\n style=me.Style(position=\"absolute\", right=0),\n on_click=toggle_theme,\n):\n me.icon(\"light_mode\" if me.theme_brightness() == \"dark\" else \"dark_mode\")\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 511, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ded0de38-2a22-4826-827f-3b21e9da60c0": {"__data__": {"id_": "ded0de38-2a22-4826-827f-3b21e9da60c0", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e44e50e0-9a96-4af6-985a-e99c0b1f26bd", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "hash": "149ede092252aaf5e21e91de1981abd79a211694e21d5d036952adbf1d5575e1", "class_name": "RelatedNodeInfo"}}, "text": "Using theme colors\n\nYou could define custom style logic to explicitly set the color based on the theme:\n\n```py\ndef container():\n me.box(\n style=me.Style(\n background=\"white\" if me.theme_brightness() == \"light\" else \"black\"\n )\n )\n```\n\nBut this would be pretty tedious, so you can use theme variables like this:\n\n\n```py\ndef container():\n me.box(style=me.Style(background=me.theme_var(\"background\")))\n```\n\nThis will use the appropriate background color for light theme and dark theme.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 497, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "039d9ce3-8328-4d9c-9fcf-d1757e02031e": {"__data__": {"id_": "039d9ce3-8328-4d9c-9fcf-d1757e02031e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "7125c9f8-a701-4ed4-b858-9ad3da26c72c", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "hash": "8721fa3c211409f7f160bb576c624b6130a242b64343af4fc44f4233363e18dd", "class_name": "RelatedNodeInfo"}}, "text": "Default theme mode\n\nFinally, we want to use the default theme mode to \"system\" which means we will use the user's preferences for whether they want dark theme or light theme. For many users, their operating systems will automatically switch to dark theme during night time.\n\n> Note: Mesop currently defaults to light theme mode but will eventually default to system theme mode in the future.\n\nOn our demo page with the chat component, we have a page on_load event handler defined like this:\n\n```py\ndef on_load(e: me.LoadEvent):\n me.set_theme_mode(\"system\")\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 563, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a117d740-23d3-46f4-a77a-c2e86025b8fc": {"__data__": {"id_": "a117d740-23d3-46f4-a77a-c2e86025b8fc", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "676e159c-48a8-4238-8892-8531bb1c89c2", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "hash": "abdd54d6c4f2e965c13deda54e1addc21e0d258951d5eed220f0d0c660c56f4e", "class_name": "RelatedNodeInfo"}}, "text": "Theme Density\n\nYou can set the visual density of the Material components. By default, Mesop uses the least visually dense setting, i.e.\n\n```py\nme.set_theme_density(0) # 0 is the least dense\n```\n\nYou can configure the density as an integer from 0 (least dense) to -4 (most dense). For example, if you want a medium-dense UI, you can do the following:\n\n```py\ndef on_load(e: me.LoadEvent):\n me.set_theme_density(-2) # -2 is more dense than the default\n\n\n@me.page(on_load=on_load)\ndef page():\n ...\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 501, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ec5c619b-c71f-4638-bcfa-ccd49e0a4501": {"__data__": {"id_": "ec5c619b-c71f-4638-bcfa-ccd49e0a4501", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6cc624e7-c3d5-434a-bb91-e722f6ad1b18", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}, "hash": "2641e69c1420deb58001368a5c68a73eabe44b670c0cd1a63db0870e13a4408f", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.features.theme.set_theme_density\n::: mesop.features.theme.set_theme_mode\n::: mesop.features.theme.theme_brightness\n::: mesop.features.theme.theme_var\n::: mesop.features.theme.ThemeVar", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 200, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "966c99d2-17df-405c-9c6d-b0534fe86e2a": {"__data__": {"id_": "966c99d2-17df-405c-9c6d-b0534fe86e2a", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a7a124d9-d521-428e-a21b-53022f590b50", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "hash": "3d4d6db6fce8531809c481f358a7c792c71f4578451ca73245450f46e1e5b610", "class_name": "RelatedNodeInfo"}}, "text": "Web Security", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 14, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "33a1831d-61bd-409b-8e61-82a2cfcfec0e": {"__data__": {"id_": "33a1831d-61bd-409b-8e61-82a2cfcfec0e", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "f22385ff-aa51-4f0c-b94f-74feee84cbd0", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "hash": "c6681196896bfd0900579af05f7652d9a16c269f5a14ff7aee31067bb755d6bb", "class_name": "RelatedNodeInfo"}}, "text": "Static file serving\n\nMesop allows serving JS and CSS files located within the Mesop app's file subtree to support web components.\n\n**Security Warning:** Do not place any sensitive or confidential JS and CSS files in your Mesop project directory. These files may be inadvertently exposed and served by the Mesop web server, potentially compromising your application's security.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 378, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6be0323b-0694-4aaf-854c-27b7c7a99f06": {"__data__": {"id_": "6be0323b-0694-4aaf-854c-27b7c7a99f06", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "de605bd4-2119-4f59-8c28-65d4867a3ff1", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "hash": "8e2a93f2d639919165f41c1d206104581ed74f747183aaf82109793efa8706f1", "class_name": "RelatedNodeInfo"}}, "text": "JavaScript Security\n\nAt a high-level, Mesop is built on top of Angular which provides built-in security protections and Mesop configures a strict Content Security Policy.\n\nSpecifics:\n\n- Mesop APIs do not allow arbitrary JavaScript execution in the main execution context. For example, the markdown component sanitizes the markdown content and removes active HTML content like JavaScript.\n- Mesop's default Content Security Policy prevents arbitrary JavaScript code from executing on the page unless it passes Angular's Trusted Types polices.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 543, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "83393434-1850-4216-a3e9-8f8d70566002": {"__data__": {"id_": "83393434-1850-4216-a3e9-8f8d70566002", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "84ce1bbd-c3aa-4bee-9c81-036a5b1bfcd5", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "hash": "e94e20fe16e5defbaa2f34ef6c0d087a7755970159240cd9f611456e02c572ee", "class_name": "RelatedNodeInfo"}}, "text": "Iframe Security\n\nTo prevent clickjacking, Mesop apps, when running in prod mode (the default mode used when deployed), do not allow sites from any other origins to iframe the Mesop app.\n\n> Note: pages from the same origin as the Mesop app can always iframe the Mesop app.\n\nIf you want to allow a trusted site to iframe your Mesop app, you can explicitly allow list the sources which can iframe your app by configuring the security policy for a particular page.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 462, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2bd73067-8ddc-4f99-82a2-6c9cd483eb28": {"__data__": {"id_": "2bd73067-8ddc-4f99-82a2-6c9cd483eb28", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "ccc48f18-4597-4717-8d85-07e525532c06", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "hash": "796e6d7a6532cc6b7598efeb9e269887b069abf07e9ed14ec6e3326069b6f81e", "class_name": "RelatedNodeInfo"}}, "text": "Example\n\n```py\nimport mesop as me\n\n\n@me.page(\n path=\"/allows_iframed\",\n security_policy=me.SecurityPolicy(\n allowed_iframe_parents=[\"https://google.com\"],\n ),\n)\ndef app():\n me.text(\"Test CSP\")\n```\n\nYou can also use wildcards to allow-list multiple subdomains from the same site, such as: `https://*.example.com`.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 321, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c7b1b8fe-2982-4db6-b597-7f54ddef4b6c": {"__data__": {"id_": "c7b1b8fe-2982-4db6-b597-7f54ddef4b6c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e2cef8f3-968c-4bf8-8efb-17b62d223fdf", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "hash": "ef33741b9857deff4f31a7acd5cb6acc7354e758940e3610539a439c77f6ab08", "class_name": "RelatedNodeInfo"}}, "text": "Cross Origin Opener Policy\n\nMesop sets this value to `unsafe-none`, which is the default value. It is recommended to set this to `same-origin` to ensure process isolation from random domains. In most cases, your Mesop app should run without any issues.\n\nFor more information, see MDN and XS Leaks Wiki.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 304, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6e648588-9837-44e6-aa12-7d10c9fab8ef": {"__data__": {"id_": "6e648588-9837-44e6-aa12-7d10c9fab8ef", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "c851c9fc-d2af-4187-a479-3fba2141bf65", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}, "hash": "ad864f95342b0063aed51d9420a8df2a8af69b36e8ac9f7943f266b5f32eff6a", "class_name": "RelatedNodeInfo"}}, "text": "API\n\nYou can configure the security policy at the page level. See SecurityPolicy on the Page API docs.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 104, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "138b94d8-8596-4dc0-9150-cd140d183c70": {"__data__": {"id_": "138b94d8-8596-4dc0-9150-cd140d183c70", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/index", "title": "Index"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "11539700-c3b6-43b3-a18b-80e57a02bc1f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/index", "title": "Index"}, "hash": "fe931d2dfde658447d3e8198233bd5477abae109972f21002d13930d5ab47d86", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "aae9f1f2-994e-4e1d-851d-ecd9b450f0b2", "node_type": "1", "metadata": {}, "hash": "b2b1441676700241b60fc25f9e2db2673a1a9e68aa087a11e3ee76cb33089efb", "class_name": "RelatedNodeInfo"}}, "text": "---\nhide:\n - navigation\n - toc\n---\n\n\n :root {\n --modern-ui-principles-offset: 560px;\n }\n\n .md-typeset h1 {\n display: none;\n }\n\n .md-content__inner {\n margin-left: 1.2rem;\n margin-right: 1.2rem;\n }\n\n .tabbed-set, .highlight {\n max-width: 768px;\n }\n\n .tabbed-set {\n margin-top: -40px !important;\n }\n\n #modern-ui-principles + .highlight {\n margin-top: calc(-1 * var(--modern-ui-principles-offset));\n }\n\n code {\n background: none !important;\n }\n\n\n\n Rapidly build AI apps in Python\n \n Create web apps without the complexity of frontend development.\n Used at Google for rapid AI app development.\n \n \n Get started\n View showcase\n \n\n\n\n \n \n Create your AI chat app in minutes\n \n \n \n \n \n \n \n \n Open in new tab\n \n \n \n \n\n\n\nfunction openDemoGalleryInNewTab() {\n window.open('https://mesop-dev.github.io/mesop/demo/', '_blank');\n}\n\n\n Python-native\n \n Write your UI in idiomatic Python\n \n \n With Mesop, you can leverage your existing Python expertise to build UIs effortlessly. No new languages to learn - just write clean, idiomatic Python using familiar constructs like functions, loops, and conditionals.\n \n\n\n=== \"State management\"\n\n ``` python\n @me.stateclass\n class State:\n val: str\n\n @me.page()\n def page():\n state = me.state(State)\n me.text(state.val)\n ```\n\n=== \"Control flow\"\n\n ``` python\n @me.stateclass\n class State:\n is_loaded: bool\n\n @me.page()\n def page():\n if me.state(State).is_loaded:\n me.text(\"Loaded\")\n else:\n me.progress_spinner()\n ```\n\n=== \"Streaming UI\"\n\n ```python\n --8<-- \"mesop/examples/docs/streaming.py\"\n ```\n\n=== \"Composable\"\n\n ``` python\n @me.content_component\n def scaffold(url: str):\n with me.box():\n menu(url=url)\n me.slot()\n\n @me.component\n def menu(url: str):\n ...\n\n def page1():\n with scaffold(url=\"/page1\"):\n some_content(...)\n ```\n\n\n\n Modern UI principles\n \n Declarative UI that's easy to understand\n \n \n Mesop streamlines UI development with a declarative approach. Build expressive, maintainable interfaces using battle-tested patterns in Python. Say goodbye to complex imperative logic and hello to intuitive, clean code.\n \n\n\n```py\n@me.stateclass\nclass State:\n image_data: str\n detections: list[Detection]\n\n\n@me.page()\ndef object_detector():\n state = me.state(State)\n\n me.text(\"Real-time Object Detection\", type=\"headline-4\")\n me.uploader(label=\"Upload an image\", on_upload=on_image_upload)\n\n if state.image_data:\n me.image(src=f\"data:image/jpeg;base64,{state.image_data}\")\n\n if state.detections:\n me.text(\"Detected Objects:\", type=\"headline-5\")\n for detection in state.detections:\n detection_component(detection)\n\ndef detection_component(detection):\n me.text(f\"{detection.obj}: {detection.confidence:.2f}\")\n\ndef on_image_upload(e: me.UploadEvent):\n state = me.state(State)\n state.image_data = base64.b64encode(e.file.read()).decode()\n state.detections = detect_objects(e.file)\n```\n\n\n Building blocks\n \n Jumpstart with ready-to-use components\n \n \n Mesop provides a versatile range of 30 components, from low-level building blocks to high-level, AI-focused components. This flexibility lets you rapidly prototype ML apps or build custom UIs, all within a single framework that adapts to your project's use case.\n\n \n AI components\n e.g. chat, text to image\n \n \n Form components\n e,g. input, checkbox, radio\n \n \n Data display components\n e,g. table, plot\n \n \n\n\n\n Build anything\n \n Build any user interface you can imagine\n \n \nWith Mesop, you can build virtually any web-based user interface or application you can imagine. From quick prototypes to enterprise tools, Mesop provides the customizability to bring your ideas to life.\n \n \n\n\n\n Extensible\n \n Seamlessly integrate JS with web components\n \n \n Get the best of both worlds with Mesop web components. Leverage Python's simplicity for core logic, while accessing the vast ecosystem of JS libraries", "mimetype": "text/plain", "start_char_idx": 0, "end_char_idx": 4259, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "aae9f1f2-994e-4e1d-851d-ecd9b450f0b2": {"__data__": {"id_": "aae9f1f2-994e-4e1d-851d-ecd9b450f0b2", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/index", "title": "Index"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "11539700-c3b6-43b3-a18b-80e57a02bc1f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/index", "title": "Index"}, "hash": "fe931d2dfde658447d3e8198233bd5477abae109972f21002d13930d5ab47d86", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "138b94d8-8596-4dc0-9150-cd140d183c70", "node_type": "1", "metadata": {"url": "https://mesop-dev.github.io/mesop/index", "title": "Index"}, "hash": "180e2b6f0e5a5a84de7c0f976629cae041af9ee1eaeaa21b979dd9cf0a4a516f", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d86fc7f3-2693-4e1e-a7c4-4d15613339d1", "node_type": "1", "metadata": {}, "hash": "1d44311ccd34ee91c19c31b00ede9b4e7bcd37f2a76bb59050215312a2c302d9", "class_name": "RelatedNodeInfo"}}, "text": "Build anything\n \n Build any user interface you can imagine\n \n \nWith Mesop, you can build virtually any web-based user interface or application you can imagine. From quick prototypes to enterprise tools, Mesop provides the customizability to bring your ideas to life.\n \n \n\n\n\n Extensible\n \n Seamlessly integrate JS with web components\n \n \n Get the best of both worlds with Mesop web components. Leverage Python's simplicity for core logic, while accessing the vast ecosystem of JS libraries\n \n\n\n=== \"counter_component.py\"\n\n ```python\n --8<-- \"mesop/examples/web_component/quickstart/counter_component.py\"\n ```\n=== \"counter_component.js\"\n\n ```python\n --8<-- \"mesop/examples/web_component/quickstart/counter_component.js\"\n ```\n\n\n Simple deployment\n \n Deploy your app and share in minutes\n \n \nMesop streamlines cloud deployment, enabling you to share your AI application with the world in minutes. With step-by-step guides for deploying to Google Cloud Run or any cloud service that takes a container, you can go from local development to production-ready deployment without wrestling with complex server setups.\n\n\n \n Google Cloud Run\n Free for small apps\n \n \n \n\n\n\n Developer experience\n \n Delightful developer experience\n \n \nMesop streamlines app development with features like hot reload and strong IDE support with static types, eliminating friction and boosting productivity.\n\n \n \n Instant hot reload\n \n \n \n \n \n IDE support with static types", "mimetype": "text/plain", "start_char_idx": 3755, "end_char_idx": 5287, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d86fc7f3-2693-4e1e-a7c4-4d15613339d1": {"__data__": {"id_": "d86fc7f3-2693-4e1e-a7c4-4d15613339d1", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/index", "title": "Index"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "11539700-c3b6-43b3-a18b-80e57a02bc1f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/index", "title": "Index"}, "hash": "fe931d2dfde658447d3e8198233bd5477abae109972f21002d13930d5ab47d86", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "aae9f1f2-994e-4e1d-851d-ecd9b450f0b2", "node_type": "1", "metadata": {"url": "https://mesop-dev.github.io/mesop/index", "title": "Index"}, "hash": "0f6fbc8337e613af7c7ddaf0e626dc602459730923b1687e87841ef613aea6ad", "class_name": "RelatedNodeInfo"}}, "text": "Simple deployment\n \n Deploy your app and share in minutes\n \n \nMesop streamlines cloud deployment, enabling you to share your AI application with the world in minutes. With step-by-step guides for deploying to Google Cloud Run or any cloud service that takes a container, you can go from local development to production-ready deployment without wrestling with complex server setups.\n\n\n \n Google Cloud Run\n Free for small apps\n \n \n \n\n\n\n Developer experience\n \n Delightful developer experience\n \n \nMesop streamlines app development with features like hot reload and strong IDE support with static types, eliminating friction and boosting productivity.\n\n \n \n Instant hot reload\n \n \n \n \n \n IDE support with static types\n \n \n \n\n\n\n Community\n \n See what others are saying\n \n \n Join developers around the world who are building AI apps in Mesop.\n \n \n \n \n\n \n \n\n \n \n\n \n \n \n is this the thing that will finally save me from ever learning front\n end?https://t.co/eDgY0AfG6U\n \n — xlr8harder (@xlr8harder)\n June 6, 2024\n \n \n\n \n \n i hate writing frontend code, but can\u2019t resist a sleek UI. just\n tried Google\u2019s quietly released Mesop\u2014what a find! no frontend fuss,\n just python. if you value your sanity and good design,\n you should def try it. gives a balance between streamlit and\n gradiomesop docs :\u2026\n pic.twitter.com/SmBAH5Leri\n \n — Sanchay Thalnerkar (@7anchay)\n June 23, 2024\n \n \n\n \n \n New Python-based UI framework in town - have you tried Mesop from\n Google?I gave it a spin, here's what I found out:\ud83d\udccc\n Provides a unique approach to building web hashtag#UIs in\n hashtag#Python with component-based architecture for customized UIs\n by taking inspiration from\u2026\n \n — Harshit Tyagi (@dswharshit)\n June 11, 2024\n \n ", "mimetype": "text/plain", "start_char_idx": 4517, "end_char_idx": 8602, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4176ce6e-0491-4ec3-95e1-4a1e5f6fb925": {"__data__": {"id_": "4176ce6e-0491-4ec3-95e1-4a1e5f6fb925", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/index", "title": "Index"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "7c40b50f-3bce-41bd-a4c3-f9e0d2042ce0", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/index", "title": "Index"}, "hash": "69c0e7387ab985987c3c86886e022c660a27994b397b6b78416108554dd54b15", "class_name": "RelatedNodeInfo"}}, "text": "Disclaimer\n\n_This is not an officially supported Google product._", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 67, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f5367311-bc28-40b4-9b98-3f49fd2a9ac3": {"__data__": {"id_": "f5367311-bc28-40b4-9b98-3f49fd2a9ac3", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/api", "title": "Web Components API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "fe3178be-9837-49e6-a472-92d010e3307e", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/api", "title": "Web Components API"}, "hash": "6e55ba58f2bef334c22549cf1ec602e9edea9b1e640050c43164cca4f945be6a", "class_name": "RelatedNodeInfo"}}, "text": "Web Components API\n\n> Note: Web components were previously launched under the labs namespace (i.e. `import mesop.lab as mel`). As part of the v1 release, all of the web component APIs are now exposed in the main mesop namespace (i.e. `import mesop as me`). You can continue to use the labs namespace for the web components API until v2 (which will happen much later).\n\n**Example usage:**\n\n```python\nimport mesop as me\n\n@me.web_component(...)\ndef a_web_component():\n me.insert_web_component(...)\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 503, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ae1ea50c-5ed7-405c-b446-4426ebccb7bc": {"__data__": {"id_": "ae1ea50c-5ed7-405c-b446-4426ebccb7bc", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/api", "title": "Web Components API"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "135f60b4-75b0-4310-8fdb-a3400a066a16", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/api", "title": "Web Components API"}, "hash": "3bbc008a38bc146f254e93dc8c85dd6eeff304add59fbadb46359452d75d0e52", "class_name": "RelatedNodeInfo"}}, "text": "API\n\n::: mesop.component_helpers.web_component.web_component\n\n::: mesop.insert_web_component\n\n::: mesop.WebEvent\n\n::: mesop.slot", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 130, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a9d40228-7437-4509-a043-089fe3f6e673": {"__data__": {"id_": "a9d40228-7437-4509-a043-089fe3f6e673", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/index", "title": "Web Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "fbb13cb6-8579-4e5a-9de3-09452747bbc0", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/index", "title": "Web Components"}, "hash": "2a86e89b2a5746e1053ff40b6c3ce51a12d7f4d930e1f10fed69ff632c0a70b7", "class_name": "RelatedNodeInfo"}}, "text": "Web Components\n\n> Note: Web components are a new experimental feature released under labs and may have breaking changes.\n\nMesop allows you to define custom components with web components which is a set of web standards that allows you to use JavaScript and CSS to define custom HTML elements.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 294, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "55cc2e70-e3c9-4a19-b704-45ffe1bd0839": {"__data__": {"id_": "55cc2e70-e3c9-4a19-b704-45ffe1bd0839", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/index", "title": "Web Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9cbc0e78-1d6a-4ccc-8a39-096ef3059b22", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/index", "title": "Web Components"}, "hash": "5e034d8ce3678f2c1a10318bfc6aaa78393ea3fd6d060149f21d669c080a3977", "class_name": "RelatedNodeInfo"}}, "text": "Use cases\n\n- **Custom JavaScript** - You can execute custom JavaScript and have simple bi-directional communication between the JavaScript code running in the browser and the Python code running the server.\n\n- **JavaScript libraries** - If you want to use a JavaScript library, you can wrap them with a web component.\n\n- **Rich-client side interactivity** - You can use web components to deliver stateful client-side interactions without a network roundtrip.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 460, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1d0d9a19-ff15-45c8-b0ef-0ef84c22f1b8": {"__data__": {"id_": "1d0d9a19-ff15-45c8-b0ef-0ef84c22f1b8", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/index", "title": "Web Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "3d79603c-228c-48c2-a686-7608f887e635", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/index", "title": "Web Components"}, "hash": "84552c1199a93fd4652f49e847903a1fee28d31b30a1f42d3a52329381a92890", "class_name": "RelatedNodeInfo"}}, "text": "Anatomy of a web component\n\nMesop web component consists of two parts:\n\n- **Python module** - defines a Python API so that your Mesop app can use the web component seamlessly.\n- **JavaScript module** - implements the web component.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 233, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5a3e62c5-fe8a-4869-b915-4c9a25e95cbf": {"__data__": {"id_": "5a3e62c5-fe8a-4869-b915-4c9a25e95cbf", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/index", "title": "Web Components"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "27da4392-c88b-4667-a025-ded7ed251842", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/index", "title": "Web Components"}, "hash": "1bec6d4b75fbae75ccf5fe6c33d4971d49adb7e7f6faf312a02547277ea4fc59", "class_name": "RelatedNodeInfo"}}, "text": "Next steps\n\nLearn how to build your first web component in the quickstart page.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 81, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e96f2ed3-b24a-49b6-b486-574660fea3a3": {"__data__": {"id_": "e96f2ed3-b24a-49b6-b486-574660fea3a3", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "4a2e083d-eb23-4d0f-9401-759383518a32", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "hash": "74877ef0f20e387929478321d3eb6cb67fdf7183fbb382a6c6e893fbb418efe5", "class_name": "RelatedNodeInfo"}}, "text": "Quickstart\n\n> Note: Web components are a new experimental feature released under labs and may have breaking changes.\n\nYou will learn how to build your first web component step-by-step, a counter component.\n\nAlthough it's a simple example, it will show you the core APIs of defining your own web component and how to support bi-directional communication between the Python code running on the server and JavaScript code running on the browser.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 444, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9d545c3a-5411-4fc0-922b-f38c033aba45": {"__data__": {"id_": "9d545c3a-5411-4fc0-922b-f38c033aba45", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "0f1bddf8-4d80-4349-a4b9-e5fa9c43feeb", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "hash": "0cb977c8c11facc75804bd9c9b3af8b5d506e121f41520fb084ad885dd8a3d9f", "class_name": "RelatedNodeInfo"}}, "text": "Python module\n\nLet's first take a look at the Python module which defines the interface so that the rest of your Mesop app can call the web component in a Pythonic way.\n\n```python title=\"counter_component.py\"\n--8<-- \"mesop/examples/web_component/quickstart/counter_component.py\"\n```\n\nThe first part you will notice is the decorator: `@me.web_component`. This annotates a function as a web component and specifies where the corresponding JavaScript module is located, relative to the location of this Python module.\n\nWe've defined the function parameters just like a regular Python function.\n\n> Tip: We recommend annotating your parameter with types because Mesop will do runtime validation which will catch type issues earlier.\n\nFinally, we call the function `me.insert_web_component` with the following arguments:\n\n- `name` - This is the web component name and must match the name defined in the JavaScript module.\n- `key` - Like all components, web components accept a key which is a unique identifier. See the component key docs for more info.\n- `events` - A dictionary where the key is the event name. This must match a property name, defined in JavaScript. The value is the event handler (callback) function.\n- `properties` - A dictionary where the key is the property name that's defined in JavaScript and the value is the property value which is plumbed to the JavaScript component.\n\n> Note: Keys for events and properties must not be \"src\", \"srcdoc\", or start with \"on\" to avoid web security risks.\n\nIn summary, when you see a string literal, it should match something on the JavaScript side which is explained next.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 1626, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6e1bd78d-9201-4878-81fe-f172d4c66258": {"__data__": {"id_": "6e1bd78d-9201-4878-81fe-f172d4c66258", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "8678027a-7928-48f1-8f33-253a5cfd6d26", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "hash": "d9f4b3ab1bdffb20f239de2aa960b9513f93b6bc7f1f5646bf0e6ad6dc41f847", "class_name": "RelatedNodeInfo"}}, "text": "JavaScript module\n\nLet's now take a look at how we implement in the web component in JavaScript:\n\n```javascript title=\"counter_component.js\"\n--8<-- \"mesop/examples/web_component/quickstart/counter_component.js\"\n```\n\nIn this example, we have used Lit which is a small library built on top of web standards in a simple, secure and declarative manner.\n\n> Note: you can write your web components using any web technologies (e.g. TypeScript) or frameworks as long as they conform to the interface defined by your Python module.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 524, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "beccca6f-24d7-493b-8877-cb2ecf1b7e2c": {"__data__": {"id_": "beccca6f-24d7-493b-8877-cb2ecf1b7e2c", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "86f638a8-cad9-4e97-8a54-00ea4f2349e9", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "hash": "64f7c9eacc104f97a26480f94c4f1a805378682fbcee39d75ad1a0e377140b79", "class_name": "RelatedNodeInfo"}}, "text": "Properties\n\nThe static property named `properties` defines two kinds of properties:\n\n- **Regular properties** - these were defined in the `properties` argument of `insert_web_component`. The property name in JS must match one of the `properties` dictionary key. You also should make sure the Python and JS types are compatible to avoid issues.\n- **Event properties** - these were defined in the `events` argument of `insert_web_component`. The property name in JS must match one of the `events` dictionary key. Event properties are always type `String` because the value is a handler id which identifies the Python event handler function.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 640, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3febcf98-0188-410d-9ffa-951f4cee81b4": {"__data__": {"id_": "3febcf98-0188-410d-9ffa-951f4cee81b4", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "bfdd24e6-fe43-4e2c-86c8-04dd303c0de3", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "hash": "163a00914e248e9956bf69a63e284056cab8270073d4711b1820d77e54107076", "class_name": "RelatedNodeInfo"}}, "text": "Triggering an event\n\nTo trigger an event in your component, let's look at the `_onDecrement` method implementation:\n\n```javascript\nthis.dispatchEvent(\n new MesopEvent(this.decrementEvent, {\n value: this.value - 1,\n }),\n);\n```\n\n`this.dispatchEvent` is a standard web API where a DOM element can emit an event. For Mesop web components, we will always emit a `MesopEvent` which is a class provided on the global object (`window`). The first argument is the event handler id so Mesop knows which Python function to call as the event handler and the second argument is the payload which is a JSON-serializable value (oftentimes an object) that the Python event handler can access.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 683, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "018785b7-29a4-4bca-a447-06e58ae1eb7d": {"__data__": {"id_": "018785b7-29a4-4bca-a447-06e58ae1eb7d", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6dd858ac-76de-434a-8304-e54c48307d55", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "hash": "04ec81e56dddffa20b1969a6ede57938de7ab6802a970cc69d5f96356c4c7b27", "class_name": "RelatedNodeInfo"}}, "text": "Learn more about Lit\n\nI didn't cover the `render` function which is a standard Lit method. I recommend reading through Lit's docs which are excellent ahd have interactive tutorials.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 183, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5c2aafeb-3ef0-4622-ba8e-7412ecc3e142": {"__data__": {"id_": "5c2aafeb-3ef0-4622-ba8e-7412ecc3e142", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "a7f8f8ce-2435-455c-af3f-368f61a5324d", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "hash": "1e352c14943394851eccc77e9b9469ed10882bb2bca81bb4200b7c0d6f55a664", "class_name": "RelatedNodeInfo"}}, "text": "Using the component\n\nFinally, let's use the web component we defined. When you click on the decrement button, the value will decrease from 10 to 9 and so on.\n\n```python title=\"counter_component_app.py\"\n--8<-- \"mesop/examples/web_component/quickstart/counter_component_app.py\"\n```\n\nEven though this was a toy example, you've learned how to build a web component from scratch which does bi-directional communication between the Python server and JavaScript client.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 464, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6f2c3478-741e-4baf-8bfe-0deb6aa89a10": {"__data__": {"id_": "6f2c3478-741e-4baf-8bfe-0deb6aa89a10", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "2964273b-a714-4d66-95d7-9a6f10b18db0", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}, "hash": "39320c966712724ab1334deb882c07bf12af6f69fd574cc5ca0fff290a440498", "class_name": "RelatedNodeInfo"}}, "text": "Next steps\n\nTo learn more, read the API docs or look at the examples.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 71, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bc05a31d-bd94-433f-b4dc-a25ab719b20b": {"__data__": {"id_": "bc05a31d-bd94-433f-b4dc-a25ab719b20b", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "cb3e35e9-fbe4-438f-8d47-bbc4b5047d82", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "hash": "d1b689ea63a4428134656db09f70ad83d1f019e526296086bb096b0ab3c4790f", "class_name": "RelatedNodeInfo"}}, "text": "Web Components Troubleshooting", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 32, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a7bf654f-4a68-4bfa-8a79-b3a968605c71": {"__data__": {"id_": "a7bf654f-4a68-4bfa-8a79-b3a968605c71", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "9c31ff3a-aed0-4515-8c9d-e99c48a93494", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "hash": "d6e9f4c76fb5a87fc466822684cf3982942c7bf3f8791af77fdc83f01196b5b5", "class_name": "RelatedNodeInfo"}}, "text": "Security policy\n\nOne of the most common issues when using web components is that you will need to relax the stringent security policy Mesop uses by default.\n\nIf you use the `mesop` command-line tool to run your app, you will see a detailed error message printed like this that will tell you how to fix the error:\n\n\n\nIf you are using Colab or another tool to run your Mesop app, and you can't see the terminal messages, then you can use your browser developer tools to view the console error messages.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 502, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e26762a9-a1f4-45f2-a6a6-b97de482e177": {"__data__": {"id_": "e26762a9-a1f4-45f2-a6a6-b97de482e177", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "35f77308-d4a7-47d4-b147-a73aec4620eb", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "hash": "86808e7a85786c76d1ed5fe9e43679105a05438b6c3c6d473db123044196e996", "class_name": "RelatedNodeInfo"}}, "text": "Content security policy error messages\n\nIn your browser developer tools, you may see the following console error messages (the exact wording may differ):", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 155, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1a934a9d-d2a9-401a-8213-06093d2ea2ab": {"__data__": {"id_": "1a934a9d-d2a9-401a-8213-06093d2ea2ab", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "abc41903-1dbc-4833-b51f-44ce1be4ec73", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "hash": "40b42323c146f00ee027f767147369fb90d883a0db41024d4f85a25195bb5a37", "class_name": "RelatedNodeInfo"}}, "text": "script-src Error\n\n???+ failure \"script-src Console Error\"\n Refused to load the script 'https://cdn.jsdelivr.net/gh/lit/dist@3/core/lit-core.min.js' because it violates the following Content Security Policy directive: \"script-src 'self' 'nonce-X-_ZR64fycojGBCDQbjpLA'\". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.\n\nIf you see this error message, then you will need to update your page's Security Policy `allowed_script_srcs` property. In this example, because the \"script-src\" directive was violated, you will need to add the script's URL to the Security Policy like this:\n\n```py\n@me.page(\n security_policy=me.SecurityPolicy(\n allowed_script_srcs=[\"https://cdn.jsdelivr.net\"]\n )\n)\n```\n\n???+ tip \"Allow-listing sites\"\n You can allow-list the full URL including the path, but it's usually more convenient\n to allow-list the entire site. This depends on how trustworthy the site is.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 951, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bb79ec66-91e3-4d6f-a960-c2b1f7d21af5": {"__data__": {"id_": "bb79ec66-91e3-4d6f-a960-c2b1f7d21af5", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "e670ffd6-f058-4fe7-8c90-476ed2f9beb9", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "hash": "861c811b17b666ea7391e9cb591fd37f0b8c14c9e0c013c8e857cd48e3b98b2b", "class_name": "RelatedNodeInfo"}}, "text": "connect-src Error\n\n???+ failure \"connect-src Console Error\"\n zone.umd.js:2767 Refused to connect to 'https://identitytoolkit.googleapis.com/v1/projects' because it violates the following Content Security Policy directive: \"default-src 'self'\". Note that 'connect-src' was not explicitly set, so 'default-src' is used as a fallback.\n\n\nIf you see this error message, then you will need to update your page's Security Policy `allowed_connect_srcs` property. In this example, because the \"connect-src\" directive was violated, you will need to add the URL you are trying to connect to (e.g. XHR, fetch) to the Security Policy like this:\n\n```py\n@me.page(\n security_policy=me.SecurityPolicy(\n allowed_connect_srcs=[\"https://*.googleapis.com\"]\n )\n)\n```\n\n???+ tip \"Allow-listing domains using wildcard\"\n You can wildcard all the subdomains for a site by using the wildcard character `*`.", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 900, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7131e455-4c72-4e5f-85e6-7db5250922a6": {"__data__": {"id_": "7131e455-4c72-4e5f-85e6-7db5250922a6", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "732e8ca1-b13f-4be7-a120-1d49506606b6", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "hash": "f3e8c0567c0c7d1f24abe306f09ea7fee28faa4e3a1f4fbeaf482d303ff767c1", "class_name": "RelatedNodeInfo"}}, "text": "Trusted Types Error\n\nTrusted Types errors can come in various forms. If you see a console error message that contains TrustedHTML, TrustedScriptURL or some other variation, then you are likely hitting a trusted types error. Trusted Types is a powerful web security feature which prevents untrusted code from using sensitive browser APIs.\n\nUnfortunately, many third-party libraries are incompatible with trusted types which means you need to disable this web security defense protection for the Mesop page which uses these libraries via web components.\n\n???+ failure \"TrustedHTML Console Error\"\n\n TypeError: Failed to set the 'innerHTML' property on 'Element': This document requires 'TrustedHTML' assignment.\n\nYou can fix this Trusted Types error by disabling Trusted Types in the security policy like this:\n\n```py\n@me.page(\n security_policy=me.SecurityPolicy(\n dangerously_disable_trusted_types=True\n )\n)\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 927, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4efd9f1d-6f0c-4113-8c08-4a326c18c248": {"__data__": {"id_": "4efd9f1d-6f0c-4113-8c08-4a326c18c248", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "6b527ed1-0508-43c6-ac51-9b7c9492f638", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "hash": "2059dc16e71cbfebf3371ccb36dec0b9491ec667a2c888ec371038da5b3c6152", "class_name": "RelatedNodeInfo"}}, "text": "Colab", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 7, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b4c43e19-acc7-417f-892a-d4b968a8d029": {"__data__": {"id_": "b4c43e19-acc7-417f-892a-d4b968a8d029", "embedding": null, "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["url"], "relationships": {"1": {"node_id": "b4669aa0-c395-4a48-af39-d32afe3f5a0f", "node_type": "4", "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}, "hash": "7d1c04edf7e84c6a7fcd149c7780bf0be8e66468b7cce4635c5202d188d4f66c", "class_name": "RelatedNodeInfo"}}, "text": "Site level user permissions\n\nSome APIs like `navigator.mediaDevices.getUserMedia()` require that users grant permission through a browser prompt. Colab attempts to detect if a code cell requires user permission, but this detection does not work for Mesop apps running in Colab using `me.colab_run()`.\n\nAs a workaround, use the IPython `%%javascript` cell magic to trigger a user permission prompt. Once permission is granted, it applies to all cells in the notebook. For example, to request the `microphone` permission, create a new code cell and run the following code:\n\n```\n%%javascript\nnavigator.mediaDevices.getUserMedia({audio: true, video: false});\n```", "mimetype": "text/plain", "start_char_idx": 2, "end_char_idx": 660, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}}, "docstore/ref_doc_info": {"d33dcef9-811c-4877-ba22-b17e4d133446": {"node_ids": ["85263f6a-6f44-4c57-853b-baecc6a03254"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/focus-component", "title": "Focus component"}}, "81739346-75c5-440f-b912-c9176f5053c9": {"node_ids": ["32c8a043-aeb9-461a-bf52-d7ec107cf7c0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/focus-component", "title": "Focus component"}}, "630a934b-5287-4c49-8154-0bac47f9ea34": {"node_ids": ["e58a55cf-3d17-45f2-bd42-bc815f82b35e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/focus-component", "title": "Focus component"}}, "935f16db-76d4-4008-83b7-f372e9cdb12b": {"node_ids": ["cfaad92e-8653-451c-b09d-70ae00d97afe"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/navigate", "title": "Navigate"}}, "c559db73-5d8a-42d3-8c77-48293f89dc65": {"node_ids": ["37acc96a-84ba-49ac-b717-ed85b3bc3569"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/navigate", "title": "Navigate"}}, "8ebdddeb-f607-46e1-b85d-7f39a8bccb9b": {"node_ids": ["9019895b-946a-4d9e-9305-14bc28546d84"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/navigate", "title": "Navigate"}}, "43543171-e694-468c-8aba-4a691f538106": {"node_ids": ["52b15560-c8fb-4058-b86c-333bd0b49614"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/scroll-into-view", "title": "Scroll into view"}}, "4beb44e0-b079-4041-ac8e-10e65242380f": {"node_ids": ["54b63699-3a38-4596-bd37-cd4dc1b045d4"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/scroll-into-view", "title": "Scroll into view"}}, "b1d1b528-9eea-4198-a74b-d57f16112374": {"node_ids": ["4bd5774c-2844-4ef6-a663-07ff6cb45cdb"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/scroll-into-view", "title": "Scroll into view"}}, "d2df3686-41c6-4dd5-adf2-8e69c5586270": {"node_ids": ["9398631a-b8ab-45a0-b2ce-adc2f33987f3"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/set-page-title", "title": "Set page title"}}, "b934be95-f8fc-43a4-ae20-22989392b870": {"node_ids": ["414ad929-ff88-4971-8fde-738ea93ab076"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/set-page-title", "title": "Set page title"}}, "73981f32-3dc6-4fe2-8c04-15c790c3e1fe": {"node_ids": ["94ffce9e-fd29-4d9f-a07e-a50db41ecae3"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/commands/set-page-title", "title": "Set page title"}}, "760353fe-a00a-4f8e-8f2b-cdad5b29af4a": {"node_ids": ["b06bbcfe-0272-4244-b6aa-cbbf77bee23b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "f1c2e95d-e8e4-48f3-a18d-e278cea28f88": {"node_ids": ["6664f368-38cd-4e2f-b46d-e84917f6e77d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "d675300b-9fce-4538-a4b0-6f2c4ad610b7": {"node_ids": ["0ce90919-2b73-43b9-973b-3c1b00b570c3"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "4319f288-98ba-4a07-bf30-12039cb35a3b": {"node_ids": ["dc3223d8-c591-4131-9d81-c2454fc2b982"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "1cb8ba0c-fcdc-4881-bcc0-765066756cea": {"node_ids": ["de8ebb46-d083-4ee5-b94e-f1fe8b9cb58e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "e42f20e1-c0be-45ed-b649-cc469e303923": {"node_ids": ["f0f18f30-6c16-4f79-996d-b14218e7dfcb"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "9754078c-c393-4134-8118-84ef5a4ec20b": {"node_ids": ["e3118f9e-14c1-422a-b652-dfad78377e0b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "c67d367c-8b36-4d78-b1a2-5ef3f622a62f": {"node_ids": ["16b3bb29-6737-47dc-84ff-2e34afeac191"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "3d3c42be-ee56-41c4-9a9e-f2f921ad5015": {"node_ids": ["2bfb313a-e252-4911-aaea-082b8a06803c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "54d0e438-aff6-4279-b3f5-d789dcac8298": {"node_ids": ["2d2ec94a-091c-41b7-a189-99c240480104"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "d5c6ec4a-5f78-428d-926b-52a51b9452e1": {"node_ids": ["8cbc39e8-c6d0-44e5-999a-4a30865bb75e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "bdb944d4-63e7-4f12-9ccf-b736249f89fd": {"node_ids": ["eb9a1450-0e18-4cbe-a585-6edd6b323420"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "9a85db8d-fe67-4c49-a737-db14139831bb": {"node_ids": ["b5d894b1-5d06-40e2-8803-3b05136422b6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "5ab779a3-1216-46a4-850d-a2e3cfd6b83c": {"node_ids": ["69e733ab-e1f9-41bb-b37d-fbd5f06d2d01"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "441a55c0-c331-40e0-9452-d49c8332fff6": {"node_ids": ["7eb89bdd-8f0c-45fc-a91c-5322a1ae711d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "6979d524-2f53-441b-9ca1-a4749d88fdba": {"node_ids": ["4681d307-db85-4fc0-9f68-88fa9ceaa0c8"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "eddcc4ee-4a41-4c0a-a25c-78bccd389936": {"node_ids": ["88e22c40-71b4-47df-9864-3db709c4c6a2"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "4fbe9a25-91ac-45c7-9910-50099c5401ca": {"node_ids": ["791640e5-5db2-4bfe-993c-faa30657d4b0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "a87f62b2-558c-4a5e-a8f8-1fe024dd264c": {"node_ids": ["333b7296-660e-4fcc-83fa-a165ee938f0c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "6ef469a1-01e0-4872-85ca-dddec4c57707": {"node_ids": ["c1b77c7c-6fb2-406e-9017-2d01bd786b90"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "f1973931-8b2d-4fc2-9e36-e7f7583c5d82": {"node_ids": ["2d5515ef-ab44-4b83-9f3d-a4b4473dafb9"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "15059657-8fd9-449b-a356-ca8a99e2b111": {"node_ids": ["79308bcc-3894-4555-a5a6-de70dea038cf"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "7c192707-7c5b-4fba-9651-1f25d96cba00": {"node_ids": ["c941fd97-6f1d-491d-ac80-b0f12fbde8d3"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "22d137f0-ec93-4ea9-8c8d-5a9d3a01d904": {"node_ids": ["f36cf6b4-3949-4c1e-a2e7-08abe9347df0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "a17d53aa-5b88-4a50-b7ff-1d56d3ab7f09": {"node_ids": ["a7287b4c-c6dc-4e20-975d-ec49a38e470f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/config", "title": "Config"}}, "65a5b424-9528-4f97-acdc-43019f8eb111": {"node_ids": ["ad149351-6ecd-47fa-86e4-93b1c38727ff"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}}, "e216818b-28ac-42de-a60b-f299859e968e": {"node_ids": ["5958bedb-5ff7-4ab4-bc28-4ba91589719d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}}, "435798af-fbbe-4611-9733-8f2fdd401428": {"node_ids": ["ee920357-cb2c-4dd0-ba12-0afb14d91d61"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}}, "4fe263ed-152f-4240-bb43-2affad0166a5": {"node_ids": ["09d6f71d-593e-4cf5-bd42-f829d4112fed"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}}, "4ecebb00-0dfe-445a-8279-8e3a0557d3ae": {"node_ids": ["61571715-9c34-4f8b-8935-509142863bc8"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}}, "d926343e-2365-4de7-97d4-f5d0303c95eb": {"node_ids": ["3a49fb03-7c1a-4bd3-8b64-9ee13b96304b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}}, "a167faa6-650b-418f-8a61-0f0d101cc161": {"node_ids": ["18cd8329-d075-4585-a8d5-44ee7501c6ba"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}}, "a610a10e-ba66-48b7-8ebe-734868bb1c60": {"node_ids": ["add5ebb8-29c7-480d-9f2f-6302faf7edcc"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}}, "6dd1cb20-564c-4e3e-afbe-cc2dc687522a": {"node_ids": ["2d27c53c-bbb4-4519-bcdc-6d1b322bac98"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/page", "title": "Page API"}}, "acf13854-529c-4b03-82be-b9e96ed5a4b0": {"node_ids": ["27042a8f-7fc9-4bc6-99a5-f9bda0126d75"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}}, "cfcbd9c9-24b7-4f43-996d-918221f14b6f": {"node_ids": ["a643a70b-73a5-4f4b-b225-4707cd2e1cf8"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}}, "ccbde9b5-3cec-4579-8c1a-05dbba6bdedd": {"node_ids": ["ac11663d-4073-4658-9576-513402d70608"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}}, "ba2c9da4-b8d2-4e05-ae1b-f3d522f9688f": {"node_ids": ["a8b51a7e-1144-41df-be77-566a225270a0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}}, "0ac558d3-a107-4b97-8797-fa65a6e5c248": {"node_ids": ["bc844cbb-bb2e-45f4-abf6-81bf106ea583"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}}, "f658c726-6286-4429-89c0-06ccacfe8488": {"node_ids": ["0cf43976-0890-463c-b32d-244fc5e44dda"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}}, "408201f6-2ebc-4f2a-8d9f-f65a62619eb7": {"node_ids": ["62f34ff7-0ba6-4f66-96cd-18ae41d44fab"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}}, "0db5c4a4-4bae-46de-b3bc-7da7fce494ca": {"node_ids": ["f8304870-a2e8-4bf3-85fd-f0a1c5b095a7"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}}, "6010f816-93e5-40f0-9ab8-c8ba0995ff3e": {"node_ids": ["7639ca07-ca2e-4062-b900-b30655fc9627"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}}, "1f221282-aa00-4549-b5d9-35c82803f1d9": {"node_ids": ["c4da8a5f-5d54-41b7-8d90-4cfd401f9a38"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}}, "2566a117-a230-4925-9869-892ac73bcafe": {"node_ids": ["47df6df8-9f1a-4d7c-8d88-b40c0ca1886e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}}, "e9b367f6-6da5-4876-b321-e5339bf264a7": {"node_ids": ["de2abf1f-c48f-4a7b-aeab-31b3545d5f53"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}}, "d0d195f8-9c79-49f9-bf00-50e40d5b8d22": {"node_ids": ["682d956a-911d-4fb8-8726-ed6a54eb7c0b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/query-params", "title": "Query Params API"}}, "2d7f157f-779d-4e7e-8015-f6e05275b833": {"node_ids": ["8fd915cf-b629-43c5-a6dd-5e6e0dbd6833"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/style", "title": "Style"}}, "c1c4201c-f444-4d78-83ab-5faa5340d8d0": {"node_ids": ["4ce03f2e-0b56-4236-bde4-a8719060fc99"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/style", "title": "Style"}}, "142c467c-f0ce-48b1-b658-2ba37dd02387": {"node_ids": ["7a58dbb3-7541-4d00-bc47-3b3e45c3f3de"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}}, "1cc359a3-8995-4d23-9657-25049d5803a1": {"node_ids": ["00b97aa6-a3f5-4859-8788-cbd770957004"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}}, "82b82f6a-8331-4706-94ad-d1647432901b": {"node_ids": ["c460f74e-9e54-4183-91b3-1b60d8df6d3b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}}, "e554411a-930f-4c29-b9d2-5b157b031b9c": {"node_ids": ["294e69e5-d76b-448f-92e2-abf8ee80ebd7"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}}, "e0f3b408-2e7e-4fb9-bdf4-1546ed2a34b3": {"node_ids": ["810c5fc4-e352-4064-9d97-75cdfbe101ef"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}}, "468a7a0d-9fa5-4518-b0f7-5fa55c6aec89": {"node_ids": ["a44bf914-9f62-4616-b58b-7ac8c7f472cd"], "metadata": {"url": "https://mesop-dev.github.io/mesop/api/viewport-size", "title": "Viewport size"}}, "35ef8a34-a351-4a39-aef3-0999cd865b4b": {"node_ids": ["7d019073-fdf2-4d5d-b146-e05c0d3a97bc"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}}, "4e91567c-770a-46f7-8d17-84b7ef8a00e1": {"node_ids": ["7be442bb-ccca-4e69-adb4-11f361e0a738"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}}, "2b89fd00-438d-4cf4-9e81-d48b0394f432": {"node_ids": ["86720040-4b24-4f57-8e79-6081af655b4c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}}, "b0bc439f-dc48-489d-8f47-ae6a3b9134e7": {"node_ids": ["2e2278d9-0a27-4449-9e8f-9dcec3877053"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}}, "e6898a83-0800-4165-b8b7-2f97d17dd442": {"node_ids": ["bc0323ae-fba1-4316-9500-c4a75a38cc1a"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}}, "b6d04257-e356-47e3-9348-118c410d2d01": {"node_ids": ["66d1c691-0240-4d84-a82d-819c2542415e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}}, "cbf11523-368e-41a9-8462-26b6016459c2": {"node_ids": ["69a92504-73d3-413c-b733-466df9d9441d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/2", "title": "DuoChat Codelab Part 2: Building the basic UI"}}, "f2663c1f-f11e-4456-aa73-52058fb1f810": {"node_ids": ["5ed3b8d7-9563-4677-890e-d2adfaa1037d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}}, "e193a3f7-6496-4cff-8d99-b9932fe85d4a": {"node_ids": ["b492d61f-de1a-43c6-a43b-454e4203e325"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}}, "fb0bc33c-0104-4351-9a88-4371d549b045": {"node_ids": ["b0c726ea-9206-4871-851e-f439811d5879", "44734187-e1b8-4f3a-a3c8-b0f95321e772"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}}, "8286beb5-2897-4723-8955-15bd3ec7b974": {"node_ids": ["378213fc-0b67-4a83-9647-ee04bbf97355"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}}, "33c6bfbb-af78-4af8-9422-cdaf8782a531": {"node_ids": ["b9dbae4e-ab15-4540-bfa8-97dc73790528"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}}, "5ecbc694-328b-442b-b485-26b59b8e7ffe": {"node_ids": ["2aa73dfb-9d99-46db-94c1-cb96b7696db6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/3", "title": "DuoChat Codelab Part 3: Managing state & dialogs"}}, "e1365385-b9ae-4b80-b914-829f08aa6062": {"node_ids": ["d321a6c0-2252-47e1-a68e-dc2306e2c08f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}}, "25bdacbe-ad82-49d0-8a08-d12b464a07d8": {"node_ids": ["9af1e4c3-93ab-4e4a-a390-1ba49e2c2808"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}}, "81ade61a-902c-459e-a856-cdb846dad6d9": {"node_ids": ["d5464ae1-655a-4810-b616-88e67f76dd86"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}}, "a4ee67fa-bc9e-4fd0-bd08-0f0e662bc965": {"node_ids": ["83642f97-7055-43c4-8026-8b082bf0a824"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}}, "0bda94d7-4ec6-4960-84c6-b4d663cd6e0e": {"node_ids": ["1b735144-0c6b-406a-bdcf-2dce90c5bfc4"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}}, "a887b3f0-0a47-4028-a212-fe2e5beba62b": {"node_ids": ["6a9bb807-8089-4cd8-a455-23246b5a4c11"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}}, "a03f5083-86d2-4e58-8873-491b51ddc6cd": {"node_ids": ["f53632e8-59e4-4444-af03-7d5636feaa7f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/4", "title": "DuoChat Codelab Part 4: Integrating AI APIs"}}, "e5fdbdd2-86aa-4f96-8473-f0ce293b0321": {"node_ids": ["807a3fba-73ee-4ca4-baf6-cdd8477dcbb0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}}, "b068438f-df1b-4fd7-b729-3669aebb160f": {"node_ids": ["03f7699d-4c9e-48d6-a9cd-8e6cb462cfb0", "1a49fdea-1c40-454c-8d80-4679b7c0e529"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}}, "c8bf059b-5ff6-4022-bc6c-eb4bf0bca4be": {"node_ids": ["6faa2c10-e8ab-4cf2-b608-42a51bc2ea70"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}}, "c48cccfa-ab8b-4b0f-bd05-e13fde0e393a": {"node_ids": ["a2043e36-30c2-45a4-b520-b703b4fc9837"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}}, "3ec777b0-0544-4e56-8144-1c12e1802698": {"node_ids": ["cc987a2c-4324-4992-90f5-f1152af1a23b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}}, "d168367f-92de-4a38-8cab-ab567f97fed8": {"node_ids": ["66cdc670-3b07-4974-947e-30962f8b3c44"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}}, "d72c8c58-cd23-4766-bcb9-091b205a5e1e": {"node_ids": ["9c9f963c-3822-4b08-916e-ffeeae65d015"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}}, "b8c62aaa-117e-4a8e-87f0-24626a54d266": {"node_ids": ["03b57f90-1abd-4323-9db0-7701bf1da0d9"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/5", "title": "DuoChat Codelab Part 5: Wrapping it up"}}, "5716488c-43e2-4c89-b7cc-430258673200": {"node_ids": ["79b89516-ac29-4429-8fc2-80c541ebbc17"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/cloud-run", "title": "Cloud run"}}, "1ff25416-4c95-49c7-8b4d-711999987599": {"node_ids": ["fab64a12-4527-4570-9d6e-213b67372b79"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/cloud-run", "title": "Cloud run"}}, "955d2c39-6f59-47cd-bf1b-084c55fb896d": {"node_ids": ["e7c716b3-837c-4a12-b431-99dfa8f88c46"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/cloud-run", "title": "Cloud run"}}, "cacc392a-ebe8-4bf8-b316-632e2537370a": {"node_ids": ["3bfb85d3-9adc-49b0-837b-47db4f36bf23"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/cloud-run", "title": "Cloud run"}}, "6b50b255-7a04-4ae2-ba05-cd323007367e": {"node_ids": ["e6ce7c09-756b-4b22-847a-07e922c812fa"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}}, "fccc91f3-27b6-4f08-8712-de56b486399c": {"node_ids": ["35b06307-a07a-4b5c-8f32-fa5f4b798465"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}}, "37520d21-4e38-407a-b9a0-078e921dc6fc": {"node_ids": ["0797e0b2-0379-4bac-930f-eaba2a869412"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}}, "24bbc1e8-361b-4b02-b448-74ef632135a7": {"node_ids": ["c58ccef6-5108-4574-a0c2-513174f8f9fa"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}}, "9e5daa55-e1cc-45b0-a6f6-696fec7a5ffe": {"node_ids": ["70bf8a0b-c84d-4c1b-b9b6-0b4d6dcc1370"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}}, "6738bf5e-dc11-4e1b-acf2-1adfee17bcf4": {"node_ids": ["6094576a-7d5f-4858-9b53-1f2e3e09b97d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}}, "647cf230-01ea-4d55-8306-4b3762885235": {"node_ids": ["6e7b4b7c-b751-4015-983f-7ff109ff6c5a"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}}, "aded2923-cb85-4908-b352-e06380cffb5a": {"node_ids": ["f34c3b68-1270-489b-ac46-9c1986713908"], "metadata": {"url": "https://mesop-dev.github.io/mesop/codelab/index", "title": "Mesop DuoChat Codelab"}}, "6ba4915c-7c20-4da0-a722-99500b352966": {"node_ids": ["8ea9a9f7-7e63-4f9a-aebc-af25054fd9d3"], "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}}, "e3013511-6d21-4bd5-8e35-62efe7ce6df8": {"node_ids": ["fdc7525a-8e5e-41f3-b82f-74789017311b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}}, "356962c1-b56e-4811-9164-b7e95cbfaf84": {"node_ids": ["6fdd3c67-9504-43c1-8f0d-5be1b57d47f5"], "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}}, "cc30703c-02a5-44ff-ab94-409b3b91867b": {"node_ids": ["19605ae8-22e8-4d51-bebd-c93161cbc4df"], "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}}, "34532850-716f-48ae-9bce-a230287ceafd": {"node_ids": ["487cc039-9291-475e-9fac-bc26953f4b59"], "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}}, "ac8432f1-cb02-4e71-8b16-5d3a548a2b05": {"node_ids": ["7ce0c61e-574f-4d57-b1c0-5bf9f3952e47"], "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}}, "872fdb8a-d4d6-4caa-b19e-14b9b3b4f9df": {"node_ids": ["1dc748cb-5f71-4762-90fa-23bf896e3015"], "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}}, "9e8b939e-9ad9-4a4a-8b0b-27dde7c581ee": {"node_ids": ["b37d568d-ef65-4cd9-8020-31cc7441a1e9"], "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}}, "940e3670-5c7b-4be8-8422-3f1e4ab4a59a": {"node_ids": ["a9d164e8-4493-43b6-8709-5802cec4ecd1"], "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}}, "5993368e-7d77-41f0-b51e-88112e006ea0": {"node_ids": ["2701f10d-fe8c-4689-a445-06de4580c092"], "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}}, "6335f574-0b2d-482b-8797-91aa1195db2e": {"node_ids": ["d09e8f1b-665f-446d-ac54-3426171be8e3"], "metadata": {"url": "https://mesop-dev.github.io/mesop/comparison", "title": "Comparison with Other Python UI Frameworks"}}, "41bc1e9a-d7f0-47d8-8b55-58bb18cfec5e": {"node_ids": ["13d4a3e6-2f1c-47cf-8c8d-6fa73accf290"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/audio", "title": "Audio"}}, "e6b349d5-c818-41b4-8ea7-7d0cf73ad132": {"node_ids": ["a387a64b-12e3-446d-9faf-b46179ff9a61"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/audio", "title": "Audio"}}, "99d4edca-3483-4665-9bba-dc866478b2fb": {"node_ids": ["0b859005-f54b-4532-8685-25df1a311144"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/audio", "title": "Audio"}}, "f8c7b7b5-9346-4a7a-ad29-8ed8bb79df87": {"node_ids": ["25dbb7d4-3741-4bd6-b2e2-69e41ed1b977"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/autocomplete", "title": "Autocomplete"}}, "9d560c52-2643-4cb3-acb7-b3fa96265e1b": {"node_ids": ["973f2901-6ef8-4228-ac7d-d4e62e835c38"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/autocomplete", "title": "Autocomplete"}}, "f64b40e9-9087-4cae-813e-52f49e876bbf": {"node_ids": ["b4e055ea-5230-4e18-973f-ce5492998d0f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/autocomplete", "title": "Autocomplete"}}, "e3371448-78e7-480a-a7ea-bc0b5b9394ad": {"node_ids": ["0daf9433-b283-48b8-a0af-dba0d95194cf"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/badge", "title": "Badge"}}, "83fec48b-3923-48a3-a24d-de7e78439326": {"node_ids": ["4bb94fd3-d8e9-4651-b429-33d28abff278"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/badge", "title": "Badge"}}, "c4abd4b3-29c6-4375-91fc-274314c12c88": {"node_ids": ["5f2a9f7d-9f6d-445a-85d9-ac83099b70e0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/badge", "title": "Badge"}}, "8367f398-922d-431e-95ef-eec4381b78ed": {"node_ids": ["b8ab8bd3-8fb8-4fe9-99ff-c7ea4c97924e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/box", "title": "Box"}}, "3cd81bc6-ab97-4988-97c1-3fc111c8db05": {"node_ids": ["5b1fdb0b-2c53-425b-b298-e0577590cd5a"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/box", "title": "Box"}}, "3e619ea8-e8a6-4244-87db-ba1bcc62a6fe": {"node_ids": ["4d6b9fd9-a18c-4edf-9fe9-2b3b9d272a81"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/box", "title": "Box"}}, "5c0355ba-d984-40e4-adf1-7b83f2aeb60e": {"node_ids": ["08be3d28-3178-4e78-a723-7d4b3f1dbe4f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button", "title": "Button"}}, "dc480c4d-5579-4bae-8f57-4fee0f2dbe6e": {"node_ids": ["9aad0286-4641-4015-9ff4-6c8f8e5f5b11"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button", "title": "Button"}}, "ed3397a7-8734-42e2-b3d7-5aaa20c272ca": {"node_ids": ["1c0b6158-3566-470e-aa88-7e8fba3e6ab5"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button", "title": "Button"}}, "c638594f-6bb2-4d89-83df-b6ca4809060b": {"node_ids": ["d3da4656-3d8a-4d9f-bf52-47187d714e7c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button_toggle", "title": "Button_toggle"}}, "84c97e89-effa-48b4-85ba-2fa86ea745e6": {"node_ids": ["f115609c-7f65-4fb4-99ef-3bb1eea5dc42"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button_toggle", "title": "Button_toggle"}}, "324e9837-ffb3-4ecd-90a6-e7dde72d6415": {"node_ids": ["38809cbc-6b02-4cab-a7ea-a1041346491a"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/button_toggle", "title": "Button_toggle"}}, "5976fe6a-f28a-4a16-b399-38d9ecd0eece": {"node_ids": ["2d484eed-3d46-4ff5-b0f9-128e035554ef"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/card", "title": "Card"}}, "8429eff1-8b97-42aa-8ad8-c5f95d3a7f37": {"node_ids": ["1c1f3301-5c9e-4f1d-af1f-35386fbf6a16"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/card", "title": "Card"}}, "fff59f0a-fd83-4ea1-80ce-375e87191de7": {"node_ids": ["7b763367-4de9-4374-9780-d447872a79f5"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/card", "title": "Card"}}, "24b33dfb-9d7e-47c6-838b-82fe8a73ef24": {"node_ids": ["3c539325-48e0-4d03-8054-a9f6755aa1c8"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/chat", "title": "Chat"}}, "df25f0eb-bb63-44bb-8e91-03a932a6da63": {"node_ids": ["ddb3f41f-287f-4ccd-86db-875f055ab147"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/chat", "title": "Chat"}}, "1c24a641-1f30-4efd-8180-7f926266d917": {"node_ids": ["c37749a8-3668-4266-97e8-4cb49d8993cb"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/chat", "title": "Chat"}}, "ee83851b-77d2-4f97-8910-ee65c490f010": {"node_ids": ["d3b3e3ca-2369-481e-b4fd-3774ba3f6fc8"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/checkbox", "title": "Checkbox"}}, "03dc371b-3b5d-40c5-a563-e35dc4901f87": {"node_ids": ["b497961a-8006-495d-9149-e5fc3ba82903"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/checkbox", "title": "Checkbox"}}, "1f61dd6a-7eb5-4be8-810a-6583403edb35": {"node_ids": ["263d4ec3-5917-44f8-9b05-bf34cda32bf3"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/checkbox", "title": "Checkbox"}}, "8fe3b7b6-8362-403e-9307-cae984e91111": {"node_ids": ["2d194e51-ed2e-4359-aa9a-bbf57097ac4e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/code", "title": "Code"}}, "9256af8d-b98c-4f9b-b4e1-4db798848b19": {"node_ids": ["9c2fa191-295b-44a2-af04-bb21ca1cb8eb"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/code", "title": "Code"}}, "10e32b23-f8b8-4a7b-9388-b13b651b37b6": {"node_ids": ["2dcef8be-0f99-4910-a866-8009c68ffbc8"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/code", "title": "Code"}}, "8d6f5de6-10bc-4840-b2e9-44a3d11a7ced": {"node_ids": ["c59588b9-36d1-4e53-9913-1c0896792abe"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_picker", "title": "Date_picker"}}, "9c0242dd-bff9-4abb-b5d1-67a24a1d7f6e": {"node_ids": ["c609a930-de9a-4bb3-881d-e09ca9f8f2e8"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_picker", "title": "Date_picker"}}, "6b7cadfe-134b-4f61-97c8-7521832e6c5d": {"node_ids": ["ecb169b6-00b3-43b9-8b13-18b366ddb0db"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_picker", "title": "Date_picker"}}, "ad20234a-aa6a-40b1-a9f2-c6273d0e930b": {"node_ids": ["6ac61286-5964-4f3e-b499-9384de47969e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_range_picker", "title": "Date_range_picker"}}, "d141e0eb-c7a6-4f13-bab1-d57fe1d9889e": {"node_ids": ["c8469698-90e0-4fda-914a-12141d3fe1b6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_range_picker", "title": "Date_range_picker"}}, "c502d62c-889b-4d7b-a7af-8447ec3b9e72": {"node_ids": ["a9d8c5b5-e315-464c-8091-f0a9f886ad5f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/date_range_picker", "title": "Date_range_picker"}}, "4d8d659a-d645-4a00-acdb-68bc64b2c144": {"node_ids": ["789f77b8-c04f-4ac0-9a3a-04d2fc407cc4"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/divider", "title": "Divider"}}, "6b399054-5acf-44df-bb55-6f735302d90b": {"node_ids": ["274f5737-5b58-417a-a4a7-f9893e9207c5"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/divider", "title": "Divider"}}, "59fa0dba-1390-4a43-a7d1-b7371a844d92": {"node_ids": ["6ca1df8d-ddc0-4c83-b93e-55c4b3eba58b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/divider", "title": "Divider"}}, "0f83a4f1-6e16-43fd-8333-da3844daf658": {"node_ids": ["9b222618-c2a6-4f62-bac8-9a9fd0eec472"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/embed", "title": "Embed"}}, "a47f2554-e401-463e-95ce-60db5075e8da": {"node_ids": ["9458b958-e768-4864-87bd-f76b62452217"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/embed", "title": "Embed"}}, "dec70d41-f5fb-45bf-b64c-99bd05694e6d": {"node_ids": ["bfdd5d60-2ebd-4db2-8ac9-88598f77cf6f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/embed", "title": "Embed"}}, "c6a5f5fa-ebd3-498b-a792-3f8f920633f1": {"node_ids": ["002e730e-cae5-4f5f-84c1-be6ca6f24cce"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/expansion-panel", "title": "Expansion panel"}}, "4cffc8d2-8a76-4bf5-b918-df4672ca4571": {"node_ids": ["02e4e0fc-60a6-4756-b42d-c0adec908d2c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/expansion-panel", "title": "Expansion panel"}}, "3884edec-2543-4a67-b401-e21cd328943b": {"node_ids": ["828240ac-2cca-4be4-a2a0-9bff7fa30d6d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/expansion-panel", "title": "Expansion panel"}}, "9c7227cb-160b-42d1-b9f2-23682f7960aa": {"node_ids": ["790a6882-caf3-4fab-8f7c-c27f134eb62a"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/html", "title": "Html"}}, "ddca0b96-1c8a-44ed-8ab5-a61888246229": {"node_ids": ["12a9924d-f5af-493b-969d-c6e26b4bde78"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/html", "title": "Html"}}, "c9297870-e6b1-4d3d-88ff-86981bfb7285": {"node_ids": ["806867d5-bf69-411a-beaf-03d7b699c79a"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/html", "title": "Html"}}, "cf3b369a-28e0-41dd-a2f8-ef67fb9135ba": {"node_ids": ["e81f3bf6-bb93-4adc-903a-c1d67a54ccd8"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/icon", "title": "Icon"}}, "dadd25ee-8138-47a6-a12c-1223a1c78578": {"node_ids": ["f0ec7efe-ffec-450f-9dd3-ed52d5edd8b0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/icon", "title": "Icon"}}, "087b8d58-e945-4658-b51e-762e834e038d": {"node_ids": ["4a009c88-90f8-4c84-8b7d-f0a83e8466f8"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/icon", "title": "Icon"}}, "06c20c5d-ca73-46b6-ac8f-0a46fe98152e": {"node_ids": ["23899cb0-b8c9-4687-a741-fd6658b5b278"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/image", "title": "Image"}}, "ef3d7fd7-7d28-44e0-a174-b6a4d4dbccb9": {"node_ids": ["289c1f02-5dc7-478c-a0ef-1fc3254d71e4"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/image", "title": "Image"}}, "45251639-7a4e-4917-960b-b76695482ea1": {"node_ids": ["3fafcf30-4986-4510-b21e-f11b7ed9c7b5"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/image", "title": "Image"}}, "4c00e8ea-b8b9-4cee-9109-351e86824d92": {"node_ids": ["30921076-c00d-4cdf-8d96-c505b19be5f1"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}}, "e1ebe385-8735-48e9-8fb5-64229d959f70": {"node_ids": ["352b496f-a2fb-46a8-bbcd-391b1db43a0c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}}, "3509da68-2b8d-4155-bd4f-241a960681cd": {"node_ids": ["2ed0c5a2-e67f-4fe7-ba9a-0531cebe3c98"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}}, "5efc0236-e09e-4630-bfed-96a2b4b10f5e": {"node_ids": ["f439876e-e020-49b2-809f-9e6eaf15670e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}}, "9a32e112-ea41-4c54-ae78-5a6c48a170d5": {"node_ids": ["f03a965a-1596-4d3d-80b5-cb3bf14d33e6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}}, "7afa0a22-42f2-416f-88ce-c28f1aeae204": {"node_ids": ["dc077629-cce2-4ddf-8a85-97642409a934"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}}, "0e20d78a-776d-495a-ac53-0cc553c55bdd": {"node_ids": ["e906ac25-ec92-460a-ab07-39e9e1629005"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}}, "2e815f8c-a85f-4fcd-bfa5-ae6e578b8a4b": {"node_ids": ["8f2497d4-397f-427d-b0fd-a02e883cd50f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}}, "12770a76-14f2-4754-9ad7-67e6185071a4": {"node_ids": ["09d90338-e6f6-499b-b074-3e002cda9566"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}}, "0a4f17e8-3b50-4819-b9cb-73ef0997d5b4": {"node_ids": ["2615f273-0e0d-4b67-913d-53d2ca4bce52"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}}, "a5368953-312f-45ce-9712-bc12d144e104": {"node_ids": ["cc3af7bc-27aa-4ebe-bc55-c252eaee4a82"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}}, "06fdae31-be22-442e-af9a-273dc0bad18d": {"node_ids": ["c6352568-4f3b-4c62-9dec-2ef69d5ff09f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/index", "title": "Components"}}, "9139c2d2-8a52-42b2-99ce-c20989b1adb3": {"node_ids": ["67b7fd18-d139-4ffa-a677-87c2272aff3f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/input", "title": "Input"}}, "2b9bd700-1945-45dc-a9bb-abd05d43c8ff": {"node_ids": ["c4caa573-9380-4c6b-9e00-6c3208026237"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/input", "title": "Input"}}, "add47b6d-7ada-4f6d-b741-64ac27c03a18": {"node_ids": ["bcc36d5f-372e-453f-a4bb-876bd3db88cc"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/input", "title": "Input"}}, "c34bca40-2940-46e8-b91e-dc64a010e31c": {"node_ids": ["c8c2e4ff-592f-4609-a78d-d5e3a9754121"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/link", "title": "Link"}}, "7d72ad7d-7884-41d2-b415-989adb35b8cd": {"node_ids": ["cf5f2183-9ee8-4ce2-a5ee-e7b1e3ef39ed"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/link", "title": "Link"}}, "b5ce2e1e-6ff1-4924-af86-9b184d601cde": {"node_ids": ["1af17f63-047a-4947-97a4-d09c33fe5eba"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/link", "title": "Link"}}, "e8350a37-9748-4489-924b-ea59f8583379": {"node_ids": ["93a450c4-ced7-49f5-b1da-0c2491f86b92"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/markdown", "title": "Markdown"}}, "2c3638cc-bb42-4666-b449-d6f5a4af8da0": {"node_ids": ["cd9d7958-0492-4584-92f2-0ce28ad8fa8c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/markdown", "title": "Markdown"}}, "d2ebf18e-ac06-4f02-8a0f-455d0898cb72": {"node_ids": ["2823117f-9c01-46ec-b9fe-28e35796cdfd"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/markdown", "title": "Markdown"}}, "dd180e5b-d1c4-4464-868c-cfc17ac33f8c": {"node_ids": ["9f35f7b2-d3c6-4eea-9c2a-6eb5f8321c21"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/plot", "title": "Plot"}}, "59c4b57b-ec47-49b9-b517-ceb29335a9e1": {"node_ids": ["3c968fd2-e9b9-44ba-9e8c-22bb3eb8ecbe"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/plot", "title": "Plot"}}, "f65738de-41db-4dfc-b4ad-5f514956be9c": {"node_ids": ["e350daca-ef46-4af6-9d9b-c117fb9d4ab5"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/plot", "title": "Plot"}}, "c8f93c91-39fa-4d49-8d78-2272fca73a8d": {"node_ids": ["ea9c0f6c-efb3-466e-b1ab-e17f1ba02140"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-bar", "title": "Progress bar"}}, "04f07c16-0533-4ea5-bc0f-8c2484915a14": {"node_ids": ["28e77ef1-1ebd-4d26-ae03-e2e3d0ed15da"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-bar", "title": "Progress bar"}}, "1dd90bc4-1e7c-4878-8d2b-7f170c68f54f": {"node_ids": ["8057edd4-36c9-4233-8d3d-ae1c2a848b5d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-bar", "title": "Progress bar"}}, "d7e98457-8334-4b1c-8935-b7f49af555af": {"node_ids": ["0aa818bb-e955-4621-b605-864b08cba6f5"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-spinner", "title": "Progress spinner"}}, "8d501f99-c052-45e4-b423-4e1c61188d59": {"node_ids": ["6d43e91a-cf47-4796-8af6-5541a777e128"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-spinner", "title": "Progress spinner"}}, "5f9aad39-0aef-4c2c-98cd-14ddeb72e58b": {"node_ids": ["5e23219d-7300-4576-9f19-26066c616469"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/progress-spinner", "title": "Progress spinner"}}, "da2473e1-9a22-4651-8b32-93be9079ffcf": {"node_ids": ["79913388-8aa7-4dd3-9f8f-e9948933977d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/radio", "title": "Radio"}}, "fcbb4837-df5e-48f0-91d6-66b35b1800db": {"node_ids": ["d3a2d556-aaeb-4e80-bb65-4f40ab3b6213"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/radio", "title": "Radio"}}, "bb6bb3e4-3a7a-45cc-95ce-f77583629569": {"node_ids": ["b17e4884-87c8-4f53-bfa3-c01f35e8bc43"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/radio", "title": "Radio"}}, "8ed492eb-c39e-4ecf-b559-dd2243446ad4": {"node_ids": ["1a6072f6-efac-4a72-b940-0764a9604a1d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/select", "title": "Select"}}, "3c388d3d-0eac-4108-8bbc-ac4da25a6275": {"node_ids": ["9a9e7211-21ef-4630-845d-6ad186d4e325"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/select", "title": "Select"}}, "e5444a2b-d50e-4bf9-8bd5-dd541ab37cfa": {"node_ids": ["26529306-696f-40b3-9439-1763ab6e4b8c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/select", "title": "Select"}}, "7a75a122-34cc-4fab-8aa0-d38beb2bfcc9": {"node_ids": ["231b2920-155d-4bc5-93b3-374ebaffc790"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/sidenav", "title": "Sidenav"}}, "f9e4d986-3952-46d1-9653-ef0530a3602d": {"node_ids": ["63a450aa-8362-40c1-ad62-88158b33ec58"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/sidenav", "title": "Sidenav"}}, "3dc8f002-f527-42a8-941d-2106568feb19": {"node_ids": ["fb0d811e-79cc-4ac0-836b-f7ce4f84cda2"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/sidenav", "title": "Sidenav"}}, "2411193e-8b54-4a82-8eb0-e71f4d24434a": {"node_ids": ["94e72dcc-501a-4318-a965-16a7a5a00ba9"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slide-toggle", "title": "Slide toggle"}}, "d6b99dd1-3159-4382-8842-1fd299afd250": {"node_ids": ["3c3d7fe1-c2bd-4643-a659-208eb74b81a2"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slide-toggle", "title": "Slide toggle"}}, "b94cc6d4-4596-4603-a05c-7dedd351c29a": {"node_ids": ["3a9512e9-0f28-4e23-a975-556cf9a84361"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slide-toggle", "title": "Slide toggle"}}, "52e7462d-8f64-4f6b-b90c-4c7fc01f912a": {"node_ids": ["38fe9b84-67fa-4b09-be0a-2e74ae6e064e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slider", "title": "Slider"}}, "d01f316f-abff-44da-97df-b402711b4d95": {"node_ids": ["837251c2-9f5e-42cf-8290-921358e50926"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slider", "title": "Slider"}}, "47464796-5f47-488b-a791-ad1ae227007b": {"node_ids": ["b6fa0b8c-03e4-4004-8b62-3b9f2356d1c3"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/slider", "title": "Slider"}}, "6672e7b6-04a4-44be-b010-3c258a283e13": {"node_ids": ["21d595b2-b489-4d2f-8bad-f3690b9eb730"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/table", "title": "Table"}}, "8f3b340a-e3c1-4b36-932c-398a14bcf21e": {"node_ids": ["d62b53b1-9369-437f-9d34-f4d833ece296"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/table", "title": "Table"}}, "6cb13c0d-02fc-4ac1-9e78-2841dcf78cb8": {"node_ids": ["a7a81ced-06c3-4760-b20c-955557873218"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/table", "title": "Table"}}, "cb47a9d0-dbe1-4bcc-9281-19e20523b0c6": {"node_ids": ["1a157db6-92a4-4880-8b80-5d72be78ba0c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-image", "title": "Text to image"}}, "e5963c06-bb6e-4d26-a3e9-d789f6588477": {"node_ids": ["ee259d56-a2d4-405f-b6a9-af37d3654f5e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-image", "title": "Text to image"}}, "09f34a80-7d37-4e71-b277-a75bbff0c9eb": {"node_ids": ["80cb4992-6cc9-41e9-8d97-c9077d9c30a4"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-image", "title": "Text to image"}}, "8de0d0c9-31f3-41af-bd87-aa8a116c1d4f": {"node_ids": ["0f01891a-501d-42a7-bf6a-ee5128d56d52"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-text", "title": "Text to text"}}, "76509b09-ef13-4503-88bd-71fbeae32f93": {"node_ids": ["83f82e21-bd16-4450-b4e5-829c84cb152c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-text", "title": "Text to text"}}, "74559d62-5a91-4981-8fa0-1bb241e88b37": {"node_ids": ["516e9e28-4bb3-4aea-be3c-baf499432f61"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text-to-text", "title": "Text to text"}}, "1fd4af23-2b2f-4d6c-a872-2bbb9b78f5e1": {"node_ids": ["669d78a9-d7ee-432b-995a-4cac7687c8e2"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text", "title": "Text"}}, "df9ff403-845f-44d2-a70f-ff64d66ca50a": {"node_ids": ["1cfa9356-4996-48a0-9ffd-54b0102a84db"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text", "title": "Text"}}, "8a84b427-ea7b-4253-99f2-165886852715": {"node_ids": ["9b9886d7-fed0-40d4-a196-07d8ee6d195a"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/text", "title": "Text"}}, "993ce89f-5709-41f7-bdec-f6719061d1e5": {"node_ids": ["16a54d1e-13f8-45ac-a30d-6d5d62c35747"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/textarea", "title": "Textarea"}}, "f1d50ab3-3d56-4b2f-8c6f-f1804c1d3c7d": {"node_ids": ["f6fa4300-8b59-4e4b-aa99-904eca95d5c6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/textarea", "title": "Textarea"}}, "3fbead78-dab7-4896-9cc3-0812f896c55d": {"node_ids": ["3a7160dc-73a0-4904-a169-3ddf3852ef74"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/textarea", "title": "Textarea"}}, "8bcc8a9e-0470-4954-a24d-b08116d67327": {"node_ids": ["cd9be09d-b23f-4e7d-a045-bba7f6fe858f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/tooltip", "title": "Tooltip"}}, "423594fe-812f-4102-b9b5-7da67c83fcb0": {"node_ids": ["26dae3c2-81ed-4cd6-aae2-678cd0713b64"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/tooltip", "title": "Tooltip"}}, "6f2c55a0-2443-47c8-a574-46434f1e157a": {"node_ids": ["7a2b8e85-e85b-44ae-9980-0a578c4ab152"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/tooltip", "title": "Tooltip"}}, "abd050a2-1f70-49d8-b798-242e7e018319": {"node_ids": ["2f800e3a-816b-4034-92f8-fb842d327fde"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/uploader", "title": "Uploader"}}, "04e60fef-39e3-43cd-8e43-72c06e63f7c8": {"node_ids": ["fdd4e269-6582-43d4-93ed-0d28491208c2"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/uploader", "title": "Uploader"}}, "9463b6a0-fd67-422b-85ae-5c4be577bcf1": {"node_ids": ["33ed5c82-4559-49bc-b5ef-e0fa850df218"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/uploader", "title": "Uploader"}}, "31be7407-0282-499f-8814-8d077a59a7a4": {"node_ids": ["8b8505c9-bd1f-4c7c-8616-59ab4f035aba"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/video", "title": "Video"}}, "d3f084df-fe5a-4c90-829f-492225e1bc58": {"node_ids": ["9a7ebab0-f452-4cb3-80fa-9a028a121825"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/video", "title": "Video"}}, "260785ed-c96a-4312-949f-020237c0014d": {"node_ids": ["4c7a4434-abee-4c24-8087-9290b91a1379"], "metadata": {"url": "https://mesop-dev.github.io/mesop/components/video", "title": "Video"}}, "8a36a683-7a84-439f-9451-160515d9093b": {"node_ids": ["3b74b05a-2e7b-4ec0-845c-f11ec2c78af2"], "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}}, "da39804b-82da-4229-bd25-bfa375423bc0": {"node_ids": ["880a7f6e-c256-454c-899b-df7fe11c7327"], "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}}, "4bf2338c-f9d5-47b8-a6d2-02c390438ed3": {"node_ids": ["fd3b29ef-46a4-4f60-bd2e-7bf7ddb87cf4"], "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}}, "356b6d18-4142-443a-9183-4c00fc9fb697": {"node_ids": ["e813bb0e-64c6-4741-a8ce-301c8d588f39"], "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}}, "6d880b02-a5b2-494c-a9d8-33b118276ec8": {"node_ids": ["6ce76fd7-26a0-462a-9323-1acb1211414a"], "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}}, "322db41b-073d-40cb-9830-80b528266a71": {"node_ids": ["c96b337a-2683-4d86-a45c-ef0193b7668c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}}, "9fbadeac-d473-4461-8324-9a7ea0dc0037": {"node_ids": ["15c1d16e-c850-4405-a774-aba8b4afa951"], "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}}, "6641541e-c1df-4c90-bb15-7c1c208a03cc": {"node_ids": ["df3bc383-d6c6-4a8c-8f92-952f07935f0b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}}, "e8415ffc-aa02-42f6-92f6-23e15d07b3b9": {"node_ids": ["e7b6e3d4-4610-4034-a92f-211b9fb125a9"], "metadata": {"url": "https://mesop-dev.github.io/mesop/faq", "title": "Frequently Asked Questions"}}, "51d5ba87-6fdd-4272-a4d5-86bd9bb7b019": {"node_ids": ["76c756d8-a4d7-4381-b4c3-94258f689fa0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}}, "367ac20d-e2b8-4a6c-a0a0-5c2ffd771c2a": {"node_ids": ["f8b8026a-34c0-488f-9c08-8e96f1a470d9"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}}, "798051b1-3e4c-478d-9c2a-771d5ff4081b": {"node_ids": ["0d37e51a-258b-4e91-b70a-1739c3b1251e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}}, "f42569c5-8699-4ab4-9f31-c55f089d3983": {"node_ids": ["87b937f3-dc32-4015-893e-0db50d660313"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}}, "15073601-a8f6-4338-bf25-ad54a931427a": {"node_ids": ["f6ad97d4-2f6a-473c-aaff-e98b937f25ea"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}}, "602c06a6-c258-4dce-9e13-72a3be8caa64": {"node_ids": ["559029d7-ade9-41fd-9353-37fa1fb83f79"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}}, "a4d91326-7871-4b43-aae3-cd856fd4799a": {"node_ids": ["da6e4399-5437-4706-9152-b4eedae1942c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}}, "424007d3-f082-488f-a01d-cba128afa9d7": {"node_ids": ["116022c2-ff71-452e-9088-1beacbd446c0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/core-concepts", "title": "Core Concepts"}}, "544931fd-6ecc-4964-b8d9-e91d32b1fe00": {"node_ids": ["36b7b4c5-4bf1-4151-a34f-537aef2da6fa"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}}, "ab7d6c26-36a0-4738-9c86-411a25fc02a8": {"node_ids": ["cd3a52ae-1b26-4406-9813-2b626ecd2371"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}}, "87f20e31-4b51-4c2a-9495-9d068b50e675": {"node_ids": ["385cdb67-5384-48af-9e0c-f0fe6fddef71"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}}, "040fcfb0-ad5e-4715-ab42-eb3faf0fbe0b": {"node_ids": ["e27d4904-51ce-4759-92d4-3e4446c0dd4e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}}, "62168885-39f9-4995-8b2c-c13693db1342": {"node_ids": ["bf22958e-f650-46dd-a2ca-134bb464e646"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}}, "4fab5d29-9607-4028-b735-f4e5dd63d2ab": {"node_ids": ["9dfc075f-b621-446c-9b83-3e77fe82ed75"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/installing", "title": "Installing"}}, "65088b92-c30e-4ce0-afc7-32fce0fbcb70": {"node_ids": ["63a6af25-f404-47f7-846e-1a7dfd7c5d3e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}}, "b033f8c6-bb0e-45e3-9d41-eee8fb2b5259": {"node_ids": ["88ca2f41-b85b-4c93-a841-3187cb28433f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}}, "e6fe6c7f-799a-402c-8caa-3cb0448b81fb": {"node_ids": ["00fe20d9-0449-4686-b930-a938f38ce820"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}}, "f137234d-81d7-4247-aa17-ce9c57bd9f1d": {"node_ids": ["efafa575-ed6a-4444-8ffd-d6c1e4571bd9"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}}, "28ae479f-38ae-46c9-b10c-d03c0c38bde1": {"node_ids": ["59255104-b91b-4f56-92c4-0f0d7e830a5b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}}, "bc85e102-e272-4df2-a5cc-a736c947d1f4": {"node_ids": ["20491882-73ff-403b-99df-20b68218cea2"], "metadata": {"url": "https://mesop-dev.github.io/mesop/getting-started/quickstart", "title": "Quickstart"}}, "62112b81-11d7-4bc1-8520-a05247504945": {"node_ids": ["80e6bcc5-8525-4bf0-a306-868f3c8028a8"], "metadata": {"url": "https://mesop-dev.github.io/mesop/goals", "title": "Goals"}}, "034648e2-18e6-414c-9877-efd6e07aef31": {"node_ids": ["1e5f9ac1-179a-4370-a73e-d2d288753463"], "metadata": {"url": "https://mesop-dev.github.io/mesop/goals", "title": "Goals"}}, "171370bd-6dd7-4868-ba00-f25649bd9da6": {"node_ids": ["c6521457-4956-4e1e-89d5-0e5da97c660b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}}, "142ba94c-4445-42f3-ad40-db69f599f395": {"node_ids": ["f89a3e00-6a70-4468-bcb0-8eac7e83e40e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}}, "8653ef90-de35-421f-8d54-1fc44b3ddac4": {"node_ids": ["e4589953-03e2-4431-a31a-1b9f6fa8e2c9"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}}, "bf9d4d52-1f0f-42ab-bac3-4fd855b011fa": {"node_ids": ["ef038e8b-9f36-43d7-9510-fd34ae88d7aa"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}}, "1352fe77-0c32-46df-ac07-266b9b517dab": {"node_ids": ["c8c8fdaf-8927-433d-87fd-414c6f8019a6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}}, "b9c11abf-1f0b-42b7-8216-57440d2420ef": {"node_ids": ["7e2295a2-9b1c-4302-8897-ff02e7a7a457"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}}, "def74948-f73f-4887-b549-e28ab0173c91": {"node_ids": ["b550db85-dce1-4885-9bd1-a60c0deb95f6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/auth", "title": "Auth"}}, "96a45c2b-7f0c-467f-8d4c-bee4cbfd6b3b": {"node_ids": ["1d3af14a-77e6-44c3-9dc0-37b574c35ce4"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/debugging", "title": "Debugging"}}, "c683ed5e-3789-480f-a522-841d046d9eab": {"node_ids": ["7349a338-2a66-4725-bd55-467896bddbf7"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/debugging", "title": "Debugging"}}, "f123d174-cafb-46ad-bec9-794b2fe2376b": {"node_ids": ["dcf52ac1-ef63-4e51-a7c5-bfea8b868292"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/debugging", "title": "Debugging"}}, "b184721b-e1b7-463d-b2fa-5d9dcfe5c189": {"node_ids": ["d642b8ce-5dd9-4b52-89e7-05d980b0b135"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/debugging", "title": "Debugging"}}, "8c805cab-bf36-4680-985c-0769ff20541b": {"node_ids": ["91337b67-7364-4658-9034-03765c4dfbbf"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "e0e6fdf8-58fb-4c8e-8538-ab9701d8fadb": {"node_ids": ["2ab2298f-11e2-47bf-8386-0cb0a0f17805"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "2ebbc82e-c9dd-4df5-9616-ae652c17b4a7": {"node_ids": ["5d4695df-eecf-4641-ba2b-d369ad1740e6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "50864516-f35a-44cf-b202-19bc1c0d5802": {"node_ids": ["afec621e-945d-4a56-87f6-b6cac31a3e8c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "c5353d97-5190-4ae1-96d0-4d35e0886b4b": {"node_ids": ["38b51013-96a4-4413-b0c0-9dabe0a704d6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "17cba339-d6e5-4b63-b2e3-cd33b2df0260": {"node_ids": ["e08288fe-eebd-46a2-bb01-6a2dfc95357f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "07e9943d-32ea-4349-9e6d-ec7e8d0d89c6": {"node_ids": ["88cbd1ae-3929-4565-b6d7-88b7032ce992"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "14727df4-f28e-4c15-92c1-acaadb9110e6": {"node_ids": ["c160fb90-a26d-45e7-be39-83fd7e6cb449"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "4f4ec3dd-9183-46e4-a1c4-f26b64247367": {"node_ids": ["e6719ca5-98ce-4c93-b8ea-90076c6e7bbf"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "beaf68d8-ca0b-42d3-b748-1866a562734e": {"node_ids": ["cb36de63-51c9-4ec4-9620-e6953895696e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "a842918f-13c6-4966-b0d6-156431cfa40f": {"node_ids": ["93be358c-5884-4ae5-a164-814ca7872dc0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "c29f9817-a360-4689-89de-941ec28a47f3": {"node_ids": ["b9146ce6-5ba2-4bc8-8f6e-83988afe5d1d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "0f674963-2693-442f-874c-7cda011b53cb": {"node_ids": ["7d82e61e-08f1-4ce4-9462-9cf591365423"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "f259735a-edc5-49ef-a265-1f8c76f8fb43": {"node_ids": ["22771e6e-f663-4a6a-83f7-b8849c3c611d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "2df2b9d2-5c3c-4b5e-ad9f-9a31194042e9": {"node_ids": ["af655da2-5af9-4e0e-a53f-2a27d4a11968"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "0229cb1d-b699-443c-aaac-1302c6fc8276": {"node_ids": ["d4ae8355-875f-4e2a-8a93-e4d432aab145"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "c1a74242-397e-4ed2-a42c-687b590ae2b4": {"node_ids": ["be112380-bf47-4c77-aa10-80a9e0fd0c07"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "94b4af93-112e-4e3e-bdb0-2f1a2ba32375": {"node_ids": ["15d864ad-25a6-4cb0-ab30-9d284bba5391"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "70dde8d8-35e6-43fd-a9bb-c96085690190": {"node_ids": ["ffe2344b-3df8-4cbc-b406-bfc4b6414ce0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "151bbd77-bc1d-4177-b7c7-d0192ed5620c": {"node_ids": ["7703c310-db68-4e1a-a0ae-8ffb9f3abe42"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "ca4b1d6e-b618-4e05-a497-2ab3110e3974": {"node_ids": ["60d872dc-93c4-4664-a8e6-364cd14bbda6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "79c7d9d7-c031-4a16-8631-1f2b1524bd0c": {"node_ids": ["256eeaf0-68ef-4c75-8b1b-312c013c6358"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "d19f6f43-c357-4444-8a7d-7a3298325cae": {"node_ids": ["af72f631-d953-4ba3-8667-38156fd7480b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "46233eb3-fb13-472f-8c53-e39018444eb1": {"node_ids": ["c8505c3c-a396-43d0-9123-2231c845e6e7"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "fd0af4fb-a493-4093-a8b4-03f3822dec41": {"node_ids": ["3231e9b8-d4d2-49a6-b47d-81336e1e4ba9"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "0dcba7b8-28c9-462c-bcef-69c7bce441ea": {"node_ids": ["f515980c-7f60-4ac7-b87b-c0108462cf83"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "c2dad965-2247-40fa-a9d6-e8ce2416a1fc": {"node_ids": ["d14550b9-cd2e-471b-b6ba-532d2755a336"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "1e86bde2-8aa8-4d62-a8d0-e80ac9bf5335": {"node_ids": ["04c6ef69-ce28-4f71-ba64-b3ba1141a8f1"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "2d9ced9e-f4f0-4703-8df5-54e0c45d7e01": {"node_ids": ["8b59cfd7-b908-4d46-be3a-250b896a4ddd"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "a52519a5-2962-4e20-9c6f-45381daaf52c": {"node_ids": ["7d5765ce-dd4d-40cb-a1c7-fef85a2684e6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "5a7b93a5-16fe-42de-b188-d99739846b5f": {"node_ids": ["b81bc7bc-be17-4c11-a8e5-17eab3f781be"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/deployment", "title": "Deployment"}}, "1cdde311-2255-47ae-83a4-871734964504": {"node_ids": ["0119396a-7176-4f12-b168-1b8ba5c2cf82"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}}, "473eea42-e62f-4f96-b358-92575c6d3d0e": {"node_ids": ["7adf1aed-1a01-48bb-9a25-ddf96e61f8a1"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}}, "602698dd-9193-4556-848e-3080ed29ecbc": {"node_ids": ["bc7e0ba5-7f9c-4386-95d1-119acd19ff62"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}}, "65d45d63-e68c-45dd-9e6d-967672befec8": {"node_ids": ["3f179ef8-0e00-4100-b7ae-12d0d2672a76"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}}, "e96ab8db-19b0-46a4-a91c-993df86c0654": {"node_ids": ["4e8dbae9-a556-4a39-9e2f-8acba1d4355c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}}, "2cc9f710-684f-4b9b-a8b7-ebf64ee81146": {"node_ids": ["7a6ce127-b4b5-4b22-8977-d002d1f2ecee"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}}, "7c5dc41b-b417-472a-a1c8-87ebb027418d": {"node_ids": ["0cf6c349-1573-4774-807c-540e73c5a13a"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}}, "a0500c90-6438-44a4-89cc-7423923d4484": {"node_ids": ["c9b24da0-b7ec-4328-bbb6-dd2a98db5568"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}}, "6879da9e-e19a-4d5d-a8e1-0bb343839dcf": {"node_ids": ["ea397f68-9691-481b-8357-aca9440d16aa"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}}, "11d63da9-e046-455c-9333-4bd6ca960275": {"node_ids": ["f218a346-7787-45ea-ba06-77c4175af733"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}}, "38a14522-d8a8-4c6d-88d2-e194dbacb72a": {"node_ids": ["47fe888c-ee11-462a-8cde-825e5bcc18af"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}}, "6e284b11-216f-4867-bd84-1c88c8b79c38": {"node_ids": ["09bb85db-3e70-4b99-98c9-f9f6301f2a62"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/event-handlers", "title": "Event Handlers"}}, "dc224d87-2e4c-4b3b-ba34-e5e5a2a6c007": {"node_ids": ["49415fa3-53cd-4c0b-ab4e-ac73e886bea7"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}}, "8e8f751c-5477-4bde-8eb6-486db5d2e989": {"node_ids": ["769dc8bc-e907-4596-90b4-e8c3fe87960e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}}, "e3594a4a-47e5-49c4-923d-0b0ceb8c3b3f": {"node_ids": ["6edb6a1a-59d2-41ed-8777-809fda742caa"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}}, "57d29748-d9ca-43a9-8651-811c879d2d47": {"node_ids": ["a5ceb440-595c-4c46-ad09-f95d7e366841"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}}, "ebe7fb2c-58ed-47a7-ad9c-5afd88d65161": {"node_ids": ["4726fe41-5aac-4241-8f23-81008a0182d1"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}}, "fcb35369-3cfa-4e14-ac98-597d3d0a8866": {"node_ids": ["067f7aac-a3da-4b7b-991c-eaf895567526"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}}, "618f536c-0c96-4460-986f-4be792022690": {"node_ids": ["601990c3-516b-4f9c-bbdb-49c011a6c2c3"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}}, "458ad8a4-7ed5-4c84-b282-93e9a180bf76": {"node_ids": ["45402fb9-99df-47d4-9898-ae02c2b319df"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}}, "35b4246f-5a16-498a-9690-68d3a20df5f9": {"node_ids": ["1a427661-850b-4e7b-a605-f2c396ed11bd"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}}, "2faf9263-e04f-4ef2-9d18-6bd4a61e92ac": {"node_ids": ["7c84d98b-fa40-4be7-bc5f-7f8ef009c8dd"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/interactivity", "title": "Interactivity"}}, "37dffa22-1c67-48ad-b19d-d674078dcad0": {"node_ids": ["0f3a88e9-dec4-4f03-8e7e-aee955ab97f7"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/labs", "title": "Labs"}}, "ccd3dd78-d223-4ea1-96f9-926f62db7889": {"node_ids": ["f5cdb171-8334-41f7-998c-2c5bd1cef0c8"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/labs", "title": "Labs"}}, "bf6a7a58-7839-4931-8626-ad2195164f3e": {"node_ids": ["19e9a796-3ff9-4abc-8675-9043277d2c0b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}}, "5e4e8090-9d15-46d2-a23c-10973a455625": {"node_ids": ["f01ff53d-90c1-4ce7-b4b4-80ec3e42cada"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}}, "b856360e-ac61-464b-9f8f-cf3bc03434b5": {"node_ids": ["b9ead12c-8c94-42f3-a716-3b231b553cf0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}}, "dd2aed69-43a9-4a0c-97f2-13374cd3f28e": {"node_ids": ["bda318a2-9fd6-483a-abe7-c6ed3aca1679"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}}, "0140f80d-63a7-43d6-b44c-970ec2d06fdf": {"node_ids": ["1baa645d-bfdc-4f35-8504-11fe627af013"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}}, "66b095f7-d23f-45ed-ad6d-4615d2216e5c": {"node_ids": ["14637348-5c5e-4c14-90c1-4c07baf8e19d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}}, "8f204a51-d397-4e59-9b54-82f3a7a9e990": {"node_ids": ["7f1b74ff-2803-4a98-b718-f7b7d22e2400"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}}, "1bb93057-9767-4f5d-ab23-94a0b5cd6b48": {"node_ids": ["4f066662-d03a-43e2-8db7-4a03b17a0e2f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}}, "eba43996-fb12-46ae-b942-78fcf68e7d01": {"node_ids": ["b3800f2c-1c09-4a9d-8d1f-6d183a09005f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}}, "d1dc290d-08ba-4a0d-8ca6-35a766d8787c": {"node_ids": ["4836b503-a861-4910-aec3-ec8e73ae79fb"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}}, "a4243b4a-7c00-4cc5-ae5e-0f08778810c0": {"node_ids": ["7c6ff988-c9b7-4084-90fb-0d1c7bda2ce6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}}, "df2e52eb-b462-414c-9895-6204f6cba088": {"node_ids": ["425e71c5-3f2c-41c8-8c7b-f9419d3d6cd4"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}}, "3cb51d2c-4f7e-4636-9656-ed03b0d63ed9": {"node_ids": ["b05e07aa-e067-4d78-9587-d7e71610d694"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/layouts", "title": "Layouts"}}, "64b776b0-1e4e-495f-85ab-c1063a6734ea": {"node_ids": ["13f5300a-91a6-49d4-9a23-ce9725a5afe5"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/multi-pages", "title": "Multi-Pages"}}, "219c6433-665b-4662-aa77-1eb3152e8f93": {"node_ids": ["e0898b5e-c2bd-4627-9d26-eb8ca29129a0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/multi-pages", "title": "Multi-Pages"}}, "c1e95537-7170-4c8e-b718-e34e57dbe676": {"node_ids": ["9b24ea74-3bf8-49bd-b128-2c821788fcba"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/multi-pages", "title": "Multi-Pages"}}, "883be2f5-67b4-4088-86fc-ce579cb52516": {"node_ids": ["16f25f48-37d8-4143-b522-a408811c87af"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}}, "3afb111f-56de-4db6-8894-b65ff3d42978": {"node_ids": ["23f9c652-8efe-4de5-8cf3-d2782ed3ab51"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}}, "e9183d6c-9c30-40c0-ba82-5d0b247b8e8b": {"node_ids": ["7ebde5c9-1395-4829-867c-9770b53cfe1f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}}, "5fdf7a05-9a33-4054-899c-c5d0bda98d72": {"node_ids": ["47b0d96a-8798-4cb0-b29b-73b65d818df7"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}}, "2124a341-7c9d-4c64-a59e-f28fc1c56d03": {"node_ids": ["20c1ecff-53f8-48a2-beee-bcb5b7e76d5b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}}, "919945d3-970f-4e84-b542-e0df00cd9868": {"node_ids": ["075f8f0b-48a2-4b89-b2e5-f458362e900b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}}, "0a405421-f144-4507-a511-34e76db4c89b": {"node_ids": ["ce762c9e-f0d4-4831-a1f9-fd8d0eadfa4d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}}, "9d4097d3-f12f-4396-b909-464e6505c9bb": {"node_ids": ["f13887d0-7938-41e3-a4fb-0a09ba9c7f34"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/performance", "title": "Performance"}}, "2e8a203c-4ae4-4c77-87ef-677b01cc7b83": {"node_ids": ["09a604fe-ee7f-4750-8bcd-a37502df37c6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/server-integration", "title": "Server integration"}}, "6e7ca8ee-ce97-4731-84a1-328378cd8cc8": {"node_ids": ["17e7bcb1-1685-4287-88ca-b052dad43093"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/server-integration", "title": "Server integration"}}, "b1428690-9b86-4061-b135-915ef4138124": {"node_ids": ["beeee005-d33b-416c-8905-27cb245706b8"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/server-integration", "title": "Server integration"}}, "7c473d8b-e2d1-4798-85e5-79587bcb3dad": {"node_ids": ["91900571-92c2-4c3e-acd3-9984272cc438"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}}, "58c35737-c0ce-4da0-816c-93c47c0f9486": {"node_ids": ["11830fe3-d51d-41b9-a969-675b75c0a133"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}}, "89764d9d-e9e4-4b09-b81b-5d4d0493804d": {"node_ids": ["cfcc0967-38dd-4054-8c01-3bcfa59312e9"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}}, "da6b90e2-0281-418f-906f-b4dc8573a31b": {"node_ids": ["aae0e900-a734-4197-b267-dfd7d53015e9"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}}, "15e4d5ec-0499-4e11-bd05-b9934c30168a": {"node_ids": ["360322ec-314d-4e74-8a0e-8ad47a4f3e10"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}}, "7b10a137-58b8-4c9a-8784-91af765bd51b": {"node_ids": ["9dc79571-6997-49bf-a4ed-cdecb0edb0bf"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}}, "bfb408c6-3bae-4f26-ade6-baaa1795264f": {"node_ids": ["4c28a7d6-59e0-4c02-98fd-ecaef997b8be"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}}, "176610cf-5a5b-4529-8a12-124613951273": {"node_ids": ["798e6196-fd14-47d3-8341-41f24c9ddb32"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}}, "89fd767d-f2da-400a-b488-f78766dca3dc": {"node_ids": ["cd8f0983-9f72-4aca-a98b-df8bee05d46f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}}, "86b264af-8754-4316-89f2-eec596b1153d": {"node_ids": ["bd4ddd4b-66e2-4329-abd8-d995f7e739f3"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/state-management", "title": "State Management"}}, "ffc5c094-7dac-4f54-8e71-35405d094f4d": {"node_ids": ["49f4cdbc-715b-4d5a-a8f5-c438baa97667"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}}, "fa0d9fa6-5ecb-4add-af26-251be9f44d66": {"node_ids": ["1bf18c8d-9fcd-4839-a8f2-78242eb5f9eb"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}}, "949a04ea-9458-44a1-90e7-21518fbca2cd": {"node_ids": ["a4717e03-22cc-431a-8f23-7a15b2cf396f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}}, "b471b744-fb4e-4b9d-9d62-5428f8635845": {"node_ids": ["da0a201b-4166-4ca8-beda-ca131be887b4"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}}, "8fa54cd0-9561-4302-ba9a-963055ec7d7b": {"node_ids": ["1557958c-e6f0-47e0-81ac-305daf9f4a4a"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}}, "4b1fc1e7-6b1e-43b7-af14-0092390410ab": {"node_ids": ["c1d3f163-9fb8-4767-802a-0d6ab126db6e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}}, "f2e14b05-0bc7-4fe0-a829-5ad20475e440": {"node_ids": ["7e23377a-e6ca-4a0c-a70a-f17bec571e02"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}}, "405659ec-d03a-4c46-8404-dd86c5fef24e": {"node_ids": ["efe452b9-3dfa-4f97-b942-0fe6fab56ef0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}}, "dee77364-0b29-431b-9694-55afa90f4e1e": {"node_ids": ["6592969e-1fe6-40e2-958e-f263ca20109f"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/static-assets", "title": "Static Assets"}}, "bcf8e45c-68e1-4cb5-8e3b-3f48b994092a": {"node_ids": ["3e7e0ad2-b710-4351-bc48-d07366028425"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}}, "a34895e7-6e1b-4303-8234-420d77315a8c": {"node_ids": ["9b7f2a7d-ce76-4340-a480-0271477e27d7"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}}, "7e3b8aa8-3049-42ef-8138-e4a426fb1370": {"node_ids": ["c88b0546-c411-4400-8004-fb6a649d37a4"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}}, "78fd639a-1bf3-449f-a0b1-4bdbff773458": {"node_ids": ["8475ba91-6698-46be-b32d-2f91a17223fe"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}}, "44521809-a70e-4d8e-ba91-55cef7f2a87c": {"node_ids": ["bf89dcd2-2179-4143-8bd8-e157424548bf"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}}, "ec449c9d-ffe5-44ad-9160-454154c7daab": {"node_ids": ["f1283935-e317-4d7a-91be-e7393e81fc32"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}}, "4126c5e2-8a73-4bd5-9792-4cc2be6faf48": {"node_ids": ["651d4277-2f30-446e-ae40-5adf80fe23b1"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/testing", "title": "Testing"}}, "6893b9aa-6dff-4543-be6c-93817b6fdaed": {"node_ids": ["de5c4660-ab99-465f-a0c9-c9740e5ba837"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}}, "988a83dc-617e-4139-9343-86f22056096c": {"node_ids": ["a2c4043e-f9ef-456e-8b8d-237ae657e97d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}}, "478dcea2-6b5d-4b84-a730-b6016f449048": {"node_ids": ["50b4ca9c-0922-41a9-a1e2-1e8e33410699"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}}, "e44e50e0-9a96-4af6-985a-e99c0b1f26bd": {"node_ids": ["ded0de38-2a22-4826-827f-3b21e9da60c0"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}}, "7125c9f8-a701-4ed4-b858-9ad3da26c72c": {"node_ids": ["039d9ce3-8328-4d9c-9fcf-d1757e02031e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}}, "676e159c-48a8-4238-8892-8531bb1c89c2": {"node_ids": ["a117d740-23d3-46f4-a77a-c2e86025b8fc"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}}, "6cc624e7-c3d5-434a-bb91-e722f6ad1b18": {"node_ids": ["ec5c619b-c71f-4638-bcfa-ccd49e0a4501"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/theming", "title": "Theming"}}, "a7a124d9-d521-428e-a21b-53022f590b50": {"node_ids": ["966c99d2-17df-405c-9c6d-b0534fe86e2a"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}}, "f22385ff-aa51-4f0c-b94f-74feee84cbd0": {"node_ids": ["33a1831d-61bd-409b-8e61-82a2cfcfec0e"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}}, "de605bd4-2119-4f59-8c28-65d4867a3ff1": {"node_ids": ["6be0323b-0694-4aaf-854c-27b7c7a99f06"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}}, "84ce1bbd-c3aa-4bee-9c81-036a5b1bfcd5": {"node_ids": ["83393434-1850-4216-a3e9-8f8d70566002"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}}, "ccc48f18-4597-4717-8d85-07e525532c06": {"node_ids": ["2bd73067-8ddc-4f99-82a2-6c9cd483eb28"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}}, "e2cef8f3-968c-4bf8-8efb-17b62d223fdf": {"node_ids": ["c7b1b8fe-2982-4db6-b597-7f54ddef4b6c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}}, "c851c9fc-d2af-4187-a479-3fba2141bf65": {"node_ids": ["6e648588-9837-44e6-aa12-7d10c9fab8ef"], "metadata": {"url": "https://mesop-dev.github.io/mesop/guides/web-security", "title": "Web Security"}}, "11539700-c3b6-43b3-a18b-80e57a02bc1f": {"node_ids": ["138b94d8-8596-4dc0-9150-cd140d183c70", "aae9f1f2-994e-4e1d-851d-ecd9b450f0b2", "d86fc7f3-2693-4e1e-a7c4-4d15613339d1"], "metadata": {"url": "https://mesop-dev.github.io/mesop/index", "title": "Index"}}, "7c40b50f-3bce-41bd-a4c3-f9e0d2042ce0": {"node_ids": ["4176ce6e-0491-4ec3-95e1-4a1e5f6fb925"], "metadata": {"url": "https://mesop-dev.github.io/mesop/index", "title": "Index"}}, "fe3178be-9837-49e6-a472-92d010e3307e": {"node_ids": ["f5367311-bc28-40b4-9b98-3f49fd2a9ac3"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/api", "title": "Web Components API"}}, "135f60b4-75b0-4310-8fdb-a3400a066a16": {"node_ids": ["ae1ea50c-5ed7-405c-b446-4426ebccb7bc"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/api", "title": "Web Components API"}}, "fbb13cb6-8579-4e5a-9de3-09452747bbc0": {"node_ids": ["a9d40228-7437-4509-a043-089fe3f6e673"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/index", "title": "Web Components"}}, "9cbc0e78-1d6a-4ccc-8a39-096ef3059b22": {"node_ids": ["55cc2e70-e3c9-4a19-b704-45ffe1bd0839"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/index", "title": "Web Components"}}, "3d79603c-228c-48c2-a686-7608f887e635": {"node_ids": ["1d0d9a19-ff15-45c8-b0ef-0ef84c22f1b8"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/index", "title": "Web Components"}}, "27da4392-c88b-4667-a025-ded7ed251842": {"node_ids": ["5a3e62c5-fe8a-4869-b915-4c9a25e95cbf"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/index", "title": "Web Components"}}, "4a2e083d-eb23-4d0f-9401-759383518a32": {"node_ids": ["e96f2ed3-b24a-49b6-b486-574660fea3a3"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}}, "0f1bddf8-4d80-4349-a4b9-e5fa9c43feeb": {"node_ids": ["9d545c3a-5411-4fc0-922b-f38c033aba45"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}}, "8678027a-7928-48f1-8f33-253a5cfd6d26": {"node_ids": ["6e1bd78d-9201-4878-81fe-f172d4c66258"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}}, "86f638a8-cad9-4e97-8a54-00ea4f2349e9": {"node_ids": ["beccca6f-24d7-493b-8877-cb2ecf1b7e2c"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}}, "bfdd24e6-fe43-4e2c-86c8-04dd303c0de3": {"node_ids": ["3febcf98-0188-410d-9ffa-951f4cee81b4"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}}, "6dd858ac-76de-434a-8304-e54c48307d55": {"node_ids": ["018785b7-29a4-4bca-a447-06e58ae1eb7d"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}}, "a7f8f8ce-2435-455c-af3f-368f61a5324d": {"node_ids": ["5c2aafeb-3ef0-4622-ba8e-7412ecc3e142"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}}, "2964273b-a714-4d66-95d7-9a6f10b18db0": {"node_ids": ["6f2c3478-741e-4baf-8bfe-0deb6aa89a10"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/quickstart", "title": "Quickstart"}}, "cb3e35e9-fbe4-438f-8d47-bbc4b5047d82": {"node_ids": ["bc05a31d-bd94-433f-b4dc-a25ab719b20b"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}}, "9c31ff3a-aed0-4515-8c9d-e99c48a93494": {"node_ids": ["a7bf654f-4a68-4bfa-8a79-b3a968605c71"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}}, "35f77308-d4a7-47d4-b147-a73aec4620eb": {"node_ids": ["e26762a9-a1f4-45f2-a6a6-b97de482e177"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}}, "abc41903-1dbc-4833-b51f-44ce1be4ec73": {"node_ids": ["1a934a9d-d2a9-401a-8213-06093d2ea2ab"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}}, "e670ffd6-f058-4fe7-8c90-476ed2f9beb9": {"node_ids": ["bb79ec66-91e3-4d6f-a960-c2b1f7d21af5"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}}, "732e8ca1-b13f-4be7-a120-1d49506606b6": {"node_ids": ["7131e455-4c72-4e5f-85e6-7db5250922a6"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}}, "6b527ed1-0508-43c6-ac51-9b7c9492f638": {"node_ids": ["4efd9f1d-6f0c-4113-8c08-4a326c18c248"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}}, "b4669aa0-c395-4a48-af39-d32afe3f5a0f": {"node_ids": ["b4c43e19-acc7-417f-892a-d4b968a8d029"], "metadata": {"url": "https://mesop-dev.github.io/mesop/web-components/troubleshooting", "title": "Web Components Troubleshooting"}}}} \ No newline at end of file