@wix/himalaya-cli 0.1582.0 → 0.1583.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/builder.d.ts +8 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/schema.d.ts +26 -2
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/validator.d.ts +18 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/core.mjs +5 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/sdui.mjs +5 -1
- package/dist/cli.mjs +888 -553
- package/dist/preview-assets.generated.bin +0 -0
- package/guides/component-reference.json +4 -3
- package/guides/component-reference.md +24 -2
- package/package.json +2 -2
- package/templates/beauty-salon/config.ts +20 -1
- package/templates/beauty-salon/dev/index.ts +1751 -629
- package/templates/beauty-salon/tier5-src/_shared/booking-location.ts +147 -0
- package/templates/beauty-salon/tier5-src/_shared/booking-session.ts +222 -0
- package/templates/beauty-salon/tier5-src/himi-booking-service/index.ts +277 -14
- package/templates/beauty-salon/tier5-src/himi-booking-services/index.ts +351 -92
- package/templates/beauty-salon/tier5-src/himi-booking-time/index.ts +25 -5
- package/templates/beauty-salon/tier5-src/himi-branded-lite-agenda/index.ts +219 -220
- package/templates/branded-lite/config.ts +20 -1
- package/templates/branded-lite/dev/index.ts +1688 -566
- package/templates/branded-lite/l10n/en.json +2 -2
- package/templates/branded-lite/tier5-src/_shared/booking-location.ts +147 -0
- package/templates/branded-lite/tier5-src/_shared/booking-session.ts +222 -0
- package/templates/branded-lite/tier5-src/himi-booking-service/index.ts +277 -14
- package/templates/branded-lite/tier5-src/himi-booking-services/index.ts +351 -92
- package/templates/branded-lite/tier5-src/himi-booking-time/index.ts +25 -5
- package/templates/branded-lite/tier5-src/himi-branded-lite-agenda/index.ts +219 -220
- package/templates/community-club/config.ts +20 -1
- package/templates/events-meetups/config.ts +20 -1
- package/templates/gym-fitness/config.ts +20 -1
- package/templates/gym-fitness/dev/index.ts +1751 -629
- package/templates/gym-fitness/tier5-src/_shared/booking-location.ts +147 -0
- package/templates/gym-fitness/tier5-src/_shared/booking-session.ts +222 -0
- package/templates/gym-fitness/tier5-src/himi-booking-service/index.ts +277 -14
- package/templates/gym-fitness/tier5-src/himi-booking-services/index.ts +351 -92
- package/templates/gym-fitness/tier5-src/himi-booking-time/index.ts +25 -5
- package/templates/gym-fitness/tier5-src/himi-branded-lite-agenda/index.ts +219 -220
- package/templates/nonprofit-cause/config.ts +20 -1
- package/templates/podcast-creator/config.ts +20 -1
- package/templates/portfolio-creative/config.ts +20 -1
- package/templates/restaurant/config.ts +20 -1
- package/templates/retail-store/config.ts +20 -1
- package/templates/yoga-studio/config.ts +20 -1
- package/templates/yoga-studio/dev/index.ts +1533 -411
- package/templates/yoga-studio/tier5-src/_shared/booking-location.ts +147 -0
- package/templates/yoga-studio/tier5-src/_shared/booking-session.ts +222 -0
- package/templates/yoga-studio/tier5-src/himi-booking-service/index.ts +277 -14
- package/templates/yoga-studio/tier5-src/himi-booking-services/index.ts +351 -92
- package/templates/yoga-studio/tier5-src/himi-booking-time/index.ts +25 -5
- package/templates/yoga-studio/tier5-src/himi-branded-lite-agenda/index.ts +219 -220
package/dist/cli.mjs
CHANGED
|
@@ -38,8 +38,8 @@ var init_define_HHP_CATALOG = __esm({
|
|
|
38
38
|
"<define:__HHP_CATALOG__>"() {
|
|
39
39
|
define_HHP_CATALOG_default = {
|
|
40
40
|
encoding: "gzip-base64",
|
|
41
|
-
sha256: "
|
|
42
|
-
data: "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"
|
|
41
|
+
sha256: "6fc19ad4171f77686de1a420ad97eb1e9bb8dcdc7a7217edf498a3cb8baf4ff0",
|
|
42
|
+
data: "H4sIAAAAAAAC/+y923IbO5Yo+CsOnoqYhyPVjuhTcc7M7pcjS7KtLslSi7Td1d0eBZi5SKKEBLKRSEp0hSPmI+YL50smcMk7kCQlkUl6r/2wrQTATFwW1v3yj9ESZEYFH/0+WizS3/7p9/h/TuP/Bf/jn6b/9H/+L5j95f8anYyyaAEJGf3+j9GfaDz6fRSJJBUcuPqz7fnz3zPBRycjRRWD0e+jTzQhjKzIu/HFl6t35ejRyeghEkmi//x99PHy8+X92eTy4t1MiuRdJCT8prLfMhn95t6qsnfT1bs58FP9/lPXmvw9e/f//T//77tYvONCvVsQHp9CTNWf310Dp8DVO8Hf5fyRiyf+LpUizf75XaYkjUyHhP/KqYT43X9/BzxPsj+PTkZ/kjAb/T76b7/9KYZZ9lt9vqZFL7xq/P0fI7VK9TLF9O8Q6VH6KyAVBTNUb1E5Rn+Zz0c/T0ZTEa/MFja/Zpp/nowSEdMZBZl1P/DzZBQtKIsl8FonkZKsRicjqiDJPC+uZvzz58/a99uTL3Zk9Pt/2L7v7QWlJHokc7DbwDN9eAt3wnpu9oWeFZvN9yzn58mIMHY7G/3+H/8Y0Zn5ROODxRuLr30dKxI9mh92Z6tnsLA705q2//Pt1b1ya/Va6JwnDjQ0UOm5MSCx3oaTUQRcgdS3QxLKdJuecpaSSP9dfZTnyRRkZ5Hl9L6bY9xswz7hhm23Yf/+q23YW2zKNfmxuqaZ2tG2lGt/0Z4shKQ/BFeE1V4xFYIB4aNeeDkZZYrM5yBvMm+v4Hc5YxNxDzMJ2WL0+z80LiNzyokyhPIf5hU0elx9AhKD7J/ryUiKp/ETTeEs0r/P7AvMKu+IWnhRJ+E0IQquWltUW58ETbjhmqxErvxDIsEVcHXFM1ATkXoXWx/zXiglEv+ORVLoPdETCk5a8IlI9YjzBeGGXrQBxx7tNjD4UdL4IOEvEixPeBbYVNN3AzHNk74Rl88p4THE/j3vgeB+6Hk1fHuPrVrzNgd4TmR8qHg1JXEcxBE9ux8JyUHek5jm/i2ekuhxLkXO/azgQPh8nDKqvlJ42tF5pJImRK7WocMYFKFs3Sj3shvy/I3GDTgP0P3i6+UHttmaC7qkseelb7IxP7c6IxLtah6jJWG5n1WPBGMkzeDbAvhlkqqVj6Jssw7zkrEiCna0Fidr+rBfPg130khw/52MKuJu/74mU2Deseb1Y7VaM4HwCPuBsr9AARUIZxAJHtu/U0YoNxvmfkZ/NH6VJaOTURJ3kYTdhW2uwaWUQu7y1JZEUtLEexnIpcF2YjZjlIP+DciEZkYrcTLK6Jxf2fW7XwfpXvjYW8JvDfAVsWceKRI+8JSRCNoIO4skALeHZWDn+1Y3ZALPu+KslX61d4MgSZk+XbNkRRO41xhYPySU0yRPxhFh8IFESkgvZUsEF5o0QnxB51QFmFMlcx4V3ISPPwldjEiwxoernoQ8X1MOfnqbEPkYiycemA08qzNNcjcltyejv+eZorOVPQp4VhdUQoEgyleQXInRyYgp/WOpmBkdQyQkaQ/NeQzSQbde0yOohRT5fGF+ozvGvfzGBti5FBq+trB8d8Q9LMEvN20DwFeJVgrtBoJz6b+IJMvAD9qUU0UJy7ydTwEW4mS0ADpfqD7R6AKySNI0CMxu2I2IG1h5RvWqZpQxe+SgInvYBpcsBHOCo2eJKUTqXoOQnzFdkLTxJen0eJrdhFgDNJURs4cQJHd6Ym3Gqn5lKPdvswQNyZTP2+stUcvJSEiqhQm2JUK80nPdDThxksBmy+mCThtAqi5Djqasc+Gqs4LZTE/HiwMdFe/8Jrj1G8Fja/vMwrfhAN7nSu3sGKQIoP0w4a6zZWGyEdNMH0TsB+aiN8g3OFpwFbosBWEIDmCCtATJuiYqwK+djJhVbc7y3ruo7/AtZ6uQkmeNLJpQ/imM5NzMA1vjZSjLQ/m+JbfzgQLblS5gHVYNiz6mp0enVSmzTkaPsJoKrdCw8AhRLgOUNsmZ0jADN/18y/M18HmANmn+4pykVBFGf3RYCi4MN/EkZJwZJlRjhwiMnmZBJImUNiZ9N2sY59OEKjfrfD6HrNBElq8zvLaYzayy3Ywv+eFiTGw/OddcD9c8pvlsbP4h0tG3mYjybHdXLWJApMNS3p1fAEtBTkIsMGgRx//LVMKMPgdEulmoayqk5u0gC/DCS8JoXNMcmwkE98f0Bie/pBmdUkbVaiLmcxaAvRimIucRePV/W4ko9iO7ubEsKG0twwzsNpdVSRI93gbBLHq8nc38nYs8mb4VH9naO7u2rbR2CtJ0byqhakX9W51QHsJoofYNjy2VoHFZB98VapBXb+jZkiiyq/2kWij6EpBeemWUAEO4zX19T+KdSWRBnUKYK1PiEXi4Z0OeQ393K06DzPeuVhlkoXdSzCVk2fudAXPqvuC90UVnjzYuIMgY5Hse1PSEURLlMSitG+RWhxXWcMRhsTY833Jamx1YuTvbHNoHIZNdoZ44IOkDi19u57SsYMVw9dls6oxm24QYj8qptF667fbtUowI7GGYV9HcZpBdq+a3MWN4A1nmfK36oY/G222c3jSj3t87fdCOCtTqLAtabpnwk9ETkbxw8NEvCN5Nw/j6+d1Xo1EaPe6MvRJpKWgFbp+5Y8AgUhBfxZvwR2skXffJ4FaaS9jPaiXAc306CwCjvVwAqC7nVaxtKzsrUbDTDTfE4wunzyFdSLiPPIf7WsrO2Co6tQFF25uJAvPn985h9THRW5mFtU1ulrOxs0LsZvMy5ehqaSQRhZEEjNnhpLy5MVHE2i4q1VcfaQBntqhJ4D/dW9b80n3goyQBibYc8oEJ4Xd6ae2WXedWQtgjMNidYvSF9ok1mr9I5FwFHOBalme9IzQyd50mCcgtVfcfJJlr8+iYiV3ZNCOShaVR3bkOycYwIzlT5yTbgLqWXyve3fz9NqDzTchHkON8qiTsTDiTAP+SCR7coFQwGrn7NyOMaQeltaxfY571L5Tvq71sq9tktIWHqQ5u4u+m6rRXsdav+dzqNlGmQJ4vaJrtznMu3Zwp6RUeuvfIqL7H5td+xre1xb38StfvLc22VAdMd7WLSr/6DTm7DlZWItUoWfsOW95iDWun7TJL2EKENStozHK7a2yQPsTngisp2PHw0FvBXPH9F+/TOZEiz2BX+5OSeUjEjHIpjXd3DGH16yv9oGufCLgb13de27RSRlZX2udmSVgAlfb7NzO6hG+Ux+JpPa+3vcv5HZnvTDzRZ7W3vc4W4umKxzQiKmTy2mYn7dy3NV1UE9iVzALplgRq7TZ2EHEslL7/U6JFHzsOPA6Xdi6tD2yFKayjF+VzF1kyhJFCd54F/axe6HcLLtLhU588Y73cese83uVfEsbIc9DF8dU+tNa8NFaSpjs6PmK+0MMG2P51BDPkgCSWIBlJwx5oCXn+2tHH1R3UxNPtEuSMNbBKnQF0vedBATUiYYc7wScktRhOWsVATMFratjOdsb5zi6cTwdK+UwYVXgUaSNCpQzVahE+NzJ433VLgpriptdUTDPjTD0NuQv0e7u3UVyxkpMXXI0xJ9HjdGfmqo13JLcOugHe4+WHtdVOFrPdCrcwkOqCEibmew+r6NvdSPAZlclZbZMjwiNg9ZYYMiVzI6IE4xX1W8Ju+Pad4f5ExAG3Zr8fW3Pa2xzEPY0WO3Tgl/kaeaf1VTN+K6UUTHcYCJYH/R+0R9wnlYRsaUG6v9Yp2sSnXvIeL1Bz2PMCOFNi/KgoZPddI90GPORU0nje4BGtL96jQwWUZ0pDa0ActZJ62LsmVz3uqhK0wvuvsOqx8TAW8o7Te/wGSiodGK5jfXflHQYbmRVeyI0aFkdHY/S5IK63dpd8CDFkQciVx0EzWsBSGu/KaAHRow5VqSj7a4LITPd5T8BMX0xM8frw74s9Co3YynzFdhdd2eMvsq2TmpbfNpCrpfvTs625dtX7+kKfuqDDzBq9c5/3+1anZNRbVPDd6vNe5Pj5SG0sdXG5zF2aimcd+EJiKsy0dMh1upECsP8g+sMJ1nohbbPnmvdYUrXatZrkpX6eG7hcbR/JIgOxElvJayZZxdi4JuzISGLjbTYIZweuNlFB1VQMa4UyLUR/lGQ6BRkyolzYdzRcOUIwW3aHHc9b7MzUJgM5qQVKNvLxBHntQLSs1SqYbTFcoBWYciXcMkKm/ZAwtQWo3Gh3lh2pYni0EGsTwKzTsP/06hylSA39dpFfJtzCSpgPhUfOOkV53yFJWGoJYF3isC2CBQRTu9N5bbTRYQ/dsGKyBffW5tYH/RZs7ZIk1YlWGr8n+vdM8PlDKq2uoBzeuLPb7O2dSPX9GXRvN0SHr9rPV2OxFlYMKwS2UcovdgbVYVaoze+QLNOZuDT2THMTeFWGcdkwY+UEz3UBVq7faqlDNgAJiViSIHGqST6C3+uxhcXJGUgDNM31hmkQg2WP83bQy76fX+v1wd8SDrIrs/075NG2tGXZ34T9ftY5i/KzOPad5NvJFLt0WFyU+de6KhAhVKDr1UYkypvWsRftzAXNIiayXMJHLbYcVpoc6CYmq92oojfsj1fRihdtsM4k5+Ibt1NKaXxq/VG8Tmx7ll+9G/I23JZVgu/ZlT+YTWL7hC4/t3Ph2lkUajeN3wZIV4qndey8HvIGNOcjyedw5KGfmzM5WpNDdMSBFhBJYQDtUSKsO4UXR4Ntc0baKsHn+1duBrabas8q0mNma2rCwhmXgre9HzyycHqyrZgtInfLZ4VjjTZlw2r6nAKSt0ho1WPtykDSNf7sW3EagudqlxuaMRqt9b+3g9aCTVeLuKDRIw9FodrkXZMgI2P7x328zluQqGuY60QYwySq/blWDyQkrcd5vWKhF0SRYenx6wnwyWhBY/jUlh0aIqOyYfrl32FqSJ7vm7OpgPMHTCV5tQRl8n3tZrd70Nba2KJiAHVRJdbk7P6qOWUZ9lCKx62Zee1jsVtOPhZRrvXUvaEz9UEBGfqa8setYmtetguXMd2dgSiYIq1Y/8s3aJ0SQgnB1l3nJtOSp9oDYgxySSMIekCcLQllYS1Wf2Kstz9JnQ6c7DLoqZ8vW79nYUa9HSjc3W63W5O+IO4FtLOkBVzjqoW0p/0SH60B8gX0nIR2QVYKpC6483//53/+KbMr+/3P//0///PPf/7vf1pzEGv1eaHotdelD/gqaASfxc7yAj+RJcx0aoytuO7iV2HU1O/pWXX3BE5mtOcNVXdfMn4F4Z7w3EEHZ8hVb2ePIeROW1sdGNyRPKtgAuCxVPkSBU2IuQclV4Wfi9pWDpLNtVYbJfuWGpTxp0SGfMS3wrxE/lcOe8+MtM7PeLdKM5qAsbPvZtHA1VoZ9aQY9QZKFh2UtVu3pHC0/FZhV9ss6ptOsHFs+UfWxE5uF+0k5O6zgWwSeftEVLTY1va2xhDwBjt0q9JdGhxZOPfo2+RL1a6EScpAwbqMqVvFx5Pprti5oNU8eNSNBMUt1aeEec5MzGCWEJMInBE5hz699nZkbXd+CYqqPIZAthU+D/f+EIESUtofGdZGpblRPTJEUGJbq/iWIm9wJ361Ua6gk9ucmnARW4BS50n57jz0vmQgr0Wn0kHtmzPB2EbjqJqI847ZtC6uknTsSduiq4SYDLxEAWPU5CVarHR4gnM5uiFpzVvjxuxvw31jTlvuzXoLelKtJCBJmNvV2qq19MYM6sEhRudVTlJv/1jkMtqawH6lMYg9B7mkIgs5HhTB7+FybbKpCalHaotGBbdGqumghesVETXryxpsZ9C5i2cDRBz1GVkW4qnGVQa2PVNEqrtm3FsT2YUVTERf/fGCvJ7iGdWRFuh2GKFq6u0EOMDNHFiJ7I2p1xvpxOWxKW8UyivqT0rn3IY1BjIIT2vhiFmJLl0zMkr9GGyhoPpVKh2ac8rUFXfjE2NnjvLMuiWaWJ3vrStaBvKAK1DEI7Bp8XgR/1z/ydcqOfdCF9YTzF/Xr+e+Fpe8FUJk/08YK8sFuNpD1vWbRiqXcMXv7B+2tSpBp+HGaTKN745WPhHWbE3d0/32Iv9MyCci4/EjTfuOVb99k3H6Wv5rDnmPX/z5gqSqyUq0Rkwk4bZKxiB4sSACIfdKkqZApA4PdHwjEyqrCDKJK8VNSIlzyUu3vcsqn57gd1XKXvP8oQSWJl/eLNPpcNU5MGYY1pD3rVbFBoJieuyPWxlShVJ0V0qLrGAifBU8QuS1n2hnKQTKd/bAmH7dWzieaE537ztFpCpqYARUmjckWoSCK/t3M5xFfxtiKbhanBMGmjXe0f6sgATrowUk6kLJchFUB9cG9GiFi/Ji6/MdliN74oRlpr4BPMaNE6lrtmxQ4EVZNE5wu7+tPENn8d9JZPAiV4sAZtab1hOqwtWiz+csuG8Jee7tEyrrORCtn23hcp1/xwh8NtDze+1sxpqLWXuC5aiwmORGXvL18ODG9IlLZuR9dSIxzfQlay/MAqeuaQU2Brk2LuyUb5x9+4IBLqq3NImM45LMxF6mIdVa7B2WgO7m9dW36H/Yf8pdsvExwXOqusN7uFwTIvizHNRnR5Lqk8j9eAd4HOxbe8v1Bf4snq6bSLtxxhbELpelT4e2HTWO1S1gUpWY7C+KDpbGrPXjKcb1RC5SFQbPjJP0hvJcQagatllUS2spoUR4OibibE1BWAla9dc/aquoYO1NRnZlunkLYHT14MPIqzagB6Rp9LiyjlgBmmHyRgcT7HvgcisgjCGLgIdLt5Uo7KJhJzX/ff9py8C715n5fx0r5zKSkujRaA1GCy1rkhXRIW9kbhvo6TIzI+vlGephKVbV+IqiDXJGzN36jxEVJgaRx1KYIgwJiUzLE0w1ieNVp1rqOS5trzaIiGz0vfBtrabXLmBezZXw1e1s9Pt/VIBchPtpwC/aXL3VelMZC/jz+45mb+0ZzbrunU2uYcTdTSFYyf2Nv2qwwbi9xHBC4NeFRDUg4q3gIFgSN7iHuufTxpdwgZcQLyFewl1cwn/f+BL+wEs4xCXEG7DZIfRC+TX5sdKJ0DaBc0Z+rE6ZDeKvQL1c1iHD+cloSksu2dUPqml8dW7IaEE4zZLR79q9dWGmtBCS/hBc2QwMnfU1kpH9yrTGiO46TchNNuQkBL/LtUR2DzNtnfJOJZQgxAi2AdsgJ8sN9MnGBBF4Q9vi1723aZ4tGjdUgvGEbrTZpDj1Fm0pe3Cmsnq7sXvVG1w6Jot0iZx7pWgSx8Z4SdidR3ivO4YpMg2pCQJ5A0JvnxGWgUtbnbxyVtuuq3MMPGdM71p7XV1I9lzyPm3DGuhZszsGE78Ahrrw4oOqEjT64CcEaETn621+tEyB3CEt5S37vg4adoEnnB+bgbW5zvbmNnJTHBHlMgtlkuTXgsQ3ouEHgagGUQ2imoNHNbroxzhQmbpVJqe65YMgsBq3VWmVmxisTxW8iyllphyeiUUe6yJO1kCQbYNWWSdmLuSSs3W2msLZuYRfDTwVMAevXrjl+8/vdY9oRPWI6hHVHw2qX1OfofVei1fK277m7a206ojKEJUhKkNUdpSo7Oeg3G3D0bbDRdbTO+5wEi6v2lVQeb0v5a7UrvkZXJOVyNWgM3F+4Vc6NejE+hIPpemtT8WmyR9U+e08gTSwDA23Oq9o2nB9Rx04kngk8agDb+jA/SWEhzSMv65Gc9MS6wtiCfl4tGyXHu/ZjlER0SiiUUSjR6Tfrxn70MSHKABRAJr43sLE17LC9cYCde1jaBVD7IjYEbEjWsUQlSEqQ1SGqOzYrWL9FSraFiVP9r62qcefQa1lgwnl72kZR7pqL4/VwiP1dswJiBERIyJGPA6M6Ffz62aTcmSDmK65NLr/P0Q4V60yz3CGbTMFnQ0xTw5gIpe1KpmDmdeHD287CJcUjLFD1gBZA2QNMMYOUQ2iGkQ1aIDbW+4Qe/SVhHDEnlLd8qN1zVFL+giNqIsFXf6zx9eqX0WGnlhIBZAKoCcWMoKIAhAFICO4GSO4jlfTA85dOv916m5XeeUoE/WlepMGTgM2vKq2Xdd9qHlU1WkGDWPE5I2HlLyxdkW3EpvaQO2tPVRBW9f3YL9JI8cpo8rUQtsA5WZ68OlSj64j3lTShNja0MOnt4lBEcoOYy5uY27I8zcaByxSQ2QYLg6s3K1Br2oNfPrT4xcH2zfKs+X9zEt3L/SIC7qkzld83aWI3dDajWh+YsjN/WnvOIk2W0tmR9Yvd1l7dxC66PUOKLrqngGaL6ccWKE4YyTN4NsC+KWu2TBgMP7hwEJPGWXvhnlqRJ6MTO9YuXIW6+DJFMw4NXW4GkClqGIwqIE+nw4+h8Ij2sPrvZFv9G751WhbiyFqeFDDgxqeP4pXAWkWoBoKyxo0X9YqH5reDD4ReyqeaXgg3XHGDbgzxXLbrSkjlI/2RXIKpWTf3LOkMcEk3rcWxHIXg7J7JYPjgbBpuBMDtZBLQC4BuYQCGsiacpNNuhbENeERLZL0RoSoSSs2pBB+JG7kXl3XfHO5V4/2yL1LIilZr+HPQC5bCl0xmzFdEbWxWpAaWiy/Vfs1nfOrnZPjgGbGrC8UueFKclenfzLiwjyrBbx7EvIR5P+RvTO7905/7Z/fEf4u549cPPF35rvvHgHS7J0eT3K1EBLid8WunpiNoxHccrYa/a5kbiyO9UkNzYgOOYGpiFdDfj9SBLUFyAcgH4Dagq62IFJkcFWBOYdNLPCeTc/ALeX7H8icUDIzu2RhWuTbz396ewqC1zV3KKQ/SH+Q/hwV/alTiO5tqqPubRG2MWxO4HmjyqlKj2vYMt0PD8c+7qYYNI8rSFLmJNlNufH6b7q7/+qL2ha8i69txZXoLfQKXgnca48RP1FfQwVUIBFxUFuhPydbN4wRk+emccX08houWzSBNr3UmNNzZ9Taffk1l7VzA0NCOU3yZBwRBh9IpITc2mermIPk3g8ILoyTTXxB51S9bb0KH+zLnEfh0N4+FNW/kGxoQ1YkWOB09jSBhDxfUw6Dei4nRD7G4okPWmxEk5sz7bX65o7Ltca/55mis9UejIx6ORdUgse9pbskkivRmCdTLSSp2B7mHEMkJNlkwjmPQXbEMH1lHkEtpMjniz3MV09gfAgBCIfjJ1hmnfsadLjc80TuYQmE/VFcJwlj7qpsyhoWjH9X6Gyyss9q9H09R+ZhsI+KFQ/+bIOlVwz6r8i1doyKdrXGK2Ldiv0MaWcHfGxl96o2mUFPSH/IQlvyWp2eOhPUmdUvfq5N9suz3XW+aIfcUIdheQ2b0uQkXsE/tEi8Lz3FepfzLlEMjqioVddv3RzuVULmGxnvqRlYV/Hkkh2WhkdPqEfBQzKnch3MtZ1TRQnLhpzD07AhVyejBdD5Qh1A7cULyCJJ0xdpAd5+NjciXuu+OaMtmwZlrI1wQEX7EFWMZnkhmIsGG8xvN0shUvcaMw8aNb4g6drT06SoSV10tCvETVJHZcRgDwd45GE2GvTD0aN70/FQPihBkaD5Dsrnm2CPUvZoMHqS6pQ27I9koXd8S9fjMmuaZGvO3zXC3el8CkTU1kldKMV9iwZ5RIwGcXgtSWhhbc8ONNBpF4kWeO4NsNuuHOobmMEjfrgr6zHIt+7SC26QURNcuYWtZaj1uDo/zUkCR4ySe5DRxnYVH8Ma5hdf9D7jODNlPQrF9XYsz2thNtM34A2JgY/P6MT47JfPGZreHRLn3lKMmMs7KFkr0MdbI43Ove5SwDadq7o6t60DsNXF6Z6eP89WDxLfiKx6T063vs+V2gx3T+3IOvaWYljL77CO9H6PGzOlPo0MBsuj+yG6H6L7e8D9fXB3mphmmnrFw2kZvIi1mFZfLaDGmAG30Bl0ro5b31TYm458GUyQYIbN4cDZzaoPmrOXZTeo2/bme9Cqauw7vFpSaxZssOeAkziUNKYJ5Z8GNznVIfxQJNaCO6+Khw4nuxbC0xZhTJg4AyUGlBiOUGII+lPVme0usWrzs52ftxjNt+bL2hzgW7+/xpp5KPU2CTs8TE+DL+m+vs4w+Eo2r8nd3CCxnd4W7VvjF9oiSkUM2gfLKm4WiHZqGctGMubD8Fc41LSxfax3NWDAjRO8qt+NukKk/Ej5UVdY0xWejGDpwpwfYVVDeMAjYTFeHaYeYTUVrqBKn0YhhhnJWXMrINHp0BvZGhai5fhbg6jSQ1g2fxRDpOnXHnQSGUS5HDZ0JsmZ0swT3BxEdODzNfD5sF6w2vX8nKRUEUZ/bBSixttA9iRknLWC97X1U0+54XSzIJJECmS2B2ATfJxPE6qQTiOdRjqNdPp1dDrL53PI9C+zdeixlSpJzGb7IK0G13kydHlYiTb6njdDj7gOiGwh87jVQORefPtnIsozNBui2bCy5TAgsvKOGoyPXABLQU6GTC2kPdZ0ItYDM6GaOW2fYNbmlE0gy8gc/vmdKUzzLgHCM51XlsYjR/xm9HnYOgGzgWcwFVJHeEKWDXoBzKGQbZ3mKjbAN2EJc3j2hzFTXklKXa1vXY7y6YTDPp8JeQ532gYfDd1E9G7L2R5RnHIFc9tmUKcDf/8WBIMBWDuqWvCHKctlu83yCO5jP4fgvZqIa2jCbiYxNApf0oxOKaNqNRHzORtWOxLDVOQ8gpvsUEohDlv4cE2QUrheW8NS4am6XpkQUCGBCglUSByLQqKurh9QSV/q0bv0wavg3pJj8quEd6gIrutqESEiQkSEeDwa2oZedBttaENhuWs1ZUOT+Ks5bLWUYl2i0NRWdZZfqpG6v6w0Lh6xaBbqauooum9tKg9QZfCLqAwaUr0fyoIw6JODPa6XDQG1XTjeuOiVv17rn2dH1n3z2NAVTpbD5hZFtzxkJpGZRGbyj2nur4OtkiR6vB00HZ+dwmw26BwWeTLFJJHqUNThrnVQrTgLFvlZhpPAokIcSTaS7F+PZNfoZDditkbAup0FZXmLLIZ+JKmbxwrS1Jrv1smDmRvarAf9ktRsKI5pDcrAnvWHdWoJee47s6IbBWikxkiNkRofpwCtcyH69rxCJ+WeM0L5H05yWgbNBv3ikSOmPktEqB1FLUTuiNx/KeTeXmwLl4ZloLMlUWQjEYjYkXUJyBTb+SLZmuq8fSbqvTPb5Zx7Er76K+Ac+LqKOfesa9jE3AdeEbAOzNuUVmjdrfI1GxSI6y3Y0DOf9ieL12xUlS6QrtoV2npP4s0KbU3NwOOupT544lYlHoEf2J7pKfWpI6oBB5Mi0FTpHJJ5VyHPlXAasfLo/T0b5qGy9Um1awuZb+TXQuZHfmfxyvziV+aNL8adFHMJWfZ+My43dcNPpy1et+g4LNVxMas+6GuMGbT0Az80XEO56r232kh1XtTPPaB5l/Naa+sZ0tBCeQwKZEK5K3g9dFH0ePAyfIPfwSbkHAo5KpHrsCGdNRTfuSltLOrJAR2o9tPEImsdY6pPdu5PsH5yHK4iF55vBxT6SWp1Rrrng5DJJvR0psc1dEbxkPBfzaMzg7YWcvQnqcufj/7bb3+KYZb9FokkFRycGWMXs4wWlMUSeJWzx5fMJDyt3cwqY0JhzjQ0E6CZAG3AfXWQ2krJWmbrFjoblMhTPyqpqUReRg6a6LoPSWNAM6JPRJ/Hhz63QHAFh7xxPQDNJnvqAQzLLA8e8ahDk4fOwVQPMcaEahgdfawJ1W6q1Q51leyz36Wi/6+qtH0rr4OL07Z27xLXO2f9ZmtKo8dOY6w1KwYaWlrXN9wIDdshJIbJxZD1RNYTWU9MLobJxRAhIkJEhIjJxTC5GCYXQ/H5qJKLreXedipchnODY5YOZKSQkUJG6lizdAyKV7MqPUiGQbyIiRETIyY+vCDeQVGks6lsgSFFWorsIUebF/nvhFnazEx42xDLkxHdkcwc04xMmV+s9LkY2JWt903IgEGkIA5gYyQLSBaQLBwlWVhjDHYoNcgQzgonpP5La1Vn4TgF2/8tyNpHQnKQ9ySmeRbSbX0Ksf8a5uMizKn76gUspeCFFrOLUqodCs3/57bEtwtSCfC8aXRaADAfkHUOu6B6w1LrOBSG1SfNfOH0OXSc4T7yHO4L6gatM0bdu4MmretJFNjG70jSkKQhSTtSktanDRlSmd7lv/eWpuaNpZ6666znGvdZttBG9uvayG6CE/KAvlfgDQBC4dvZ8tRsp3lAf0fkEJBDQA4B/R3R3xERIiJERIjo74j+jujviLLcL+Tv2MJxRjQ8KVLynWwtSboQv7qjI7o3It+EfBPyTb+0e2MAjVok+AJEWoZFN1wb0aERcS/iXsS9R+LQ6EeKBT57AVYs0kLUnRnRhRFdGJEQICFAQoAujOjCuJULo58+O9L6AvLsfAJL30X0WEQKhhQMKdgReSz6UaJBHd8NQ62ThWoCd1lYh9ZmC9WjT60x6fCrOfXVKMlgCZKqVSgtYGnTMWttUC4i+R5qLToXtqHrdhijDRuyiMoR1VyrwdTWkFQ/bL/pzG8xC9efKrUKa0tP2ZH1C11TNayvV4FKh5cpHfaLEeuiThAp1tUgQ6GcOq+K9T6Qa0WuFet91Op9nIxgCbbi1SOsjBNYibVORsAjYTFfHbBaaqDBMFtT2zRoLaptsOsfXL2108Noo4U+YWQbLdo+efKaim44thytY2gdQy4NuTTk0tA69ge0jumOC6Jgc7WPVgT7dD8NW9YuSjh7uKCahWxfX6zsbvv6orPm9XF429r13nJ+qHdBio4U/Y+id/GhgpCGpdAq15QrOafPpxlEgsfZaQ2UGubKXSg41sii31/36q0kTnT6QDSOaBzR+J6dPvRrx4oomOVsDFGxIevY/cz9RGNth+Yrnt90rmNOmTAx1K3kF6laNVs6du6YKLIHd4lieo1V9NXD3sVsMibMu+2+bMFJK6oYBEjlNNy5K10iiTaL3UbKgZQDKcfhUA478jposzCYZKxWa3BNeIT9QNnv2UxJEyJXrTwdWlBot7porArdjOmPwEuzpPHLJPZskkWS34eveLwHtC9ByRViZ8TOiJ2PCTubaxtCzgeIzgznfhD8tGPuP0pSpIbZhdZ+CzHjAxNCDjmTFrhYCW5QD4xSiNyF6FiT7vpgsJS7UNpCeo70HOk5SluDSlvtxIMoBiHaRLSJYtBbi0GFpNLHG3ZliA6/3mXu+/OpOa7bmGQegYHa0BZTjK3bYMrsbkNJNlUSuaFm0Pb0G24eOR90I7KC4vfZ4zTw0aiFE2iSgNxzAMCgUucLkiJu4FJaQkD33MPMWP+BGMPtB0nmCXA11nqNTSLu3fhTowipo4uIZDB0JJGewy6DhCOhawuodYidRBFkRXLhM85NAuEEuNqo3Ez1mSFjdk3qY1Nc4pxkMNyhtvanhLLisJvTfOubr09CCmaCWJTMYUtcUL8TXWAqgPXXBtEWFPW/e93x6vHfhHwEOc6nSgJsgrOezA9OM/eLRqIQCfAvmeBDI65UMBpt5Z9BGBNPEE9W6UZAVJdb7C/PHHu85a8T8nyp3S4hfr9S4Vovn0Uc7ryANJwk/9OGqYMbG+BZVXeqtYnVplH/6LDWjRlhzIhCB2DhaEs99XtSgmttygeGeNv3uqsjKS8cXrPDu2b1mxCG/61h1IjFpkTLhyJSbK1kbIbbRFMNynEgIfxlXnLMjoL6T9R/ov7z0LOjeGJ3ajBVL8uH2ASxCWITxCYvxybN2l1D6c4bhQAPQYk2qHr85RWuMXwQKQJShGOkCFhsGW8u3txjvLm91U/7axxb8zJlCuT5gqbZZvnc9fDTyIxvGJeLN+w9+/OOCzWH7PqHmci5kXxvu/OooYedzi/JmaJjM8kBk8SjXhSpH1I/1GS8JGt05tNnnNrj/HkoWZvbfhuGPg+qWChZBGQM1ifO3dYa3SSqXVKKuhmkcUjjjlI305tT14/mdfOETDcS6ZQe13C5cz/cuyQ3JfEcNnRvPDBRCx08EMkjkkck/4uUv9komkiJtLkRTzSFPaTtO5CiOHp7l2CSvB+UpOfoee2Uhy1+6LiJY+YhsJwJUl2kur8g1Q1HZvYQt3VFTjyEYU3EehdjW0d4E8gJ8bkNtdjMG9795tTFZxxMkdbjEu6wICrSJqRNSJtQIiz8/g/QplWQs8MRdvZfUhLlHaQpSFOQpry9KcmPXfWocyJFnsFGAklUjG2E5pI5xIM6f0W5lMDVFY/heWhFYkka1stkvaHWu5hktKAslsD9ApGZV584VN/mwSJ8vFPvAEBgBShKIdlDsoeiVECU0nudK5EysrriCuSSsGFjGSuUPCBFY3QJ3yiPxdPmW7FO2LPwP2xkZMG2dJkVHz/RTQbfkgG3I+9tWtrZTJTLkEAhgTrKrPBeEtK54A3c3tURNZDuGqdki0x18x2Zb1b9PTUD22LcwQsuhyKFoCyBqBpRNcoSvbJEthBPVzymEVGBqoD7UpDtgoW39GJwFh5ZcMTriNcRrzfxehvzdvHtNgy2Q3W28jqkjTevr7sO6Sktf9Gsug7pYUb1HwqPvZHneixUG/qaVQTtZCHec1kMd76t3Ry4RCOkW8airqWSPW6XW53MRptnDJaCMZJmlM8/AYk3E3ej8jenC/uj+kWkCZnDF8kG07L67XHFrJrGLI3FKQdmTseMOcsc1RxKQ1xWaBtqAvUqcUPNAZ5TwmOIPx1AGSUD7AcxlUJxc/h6Jc1BMkaeP5AoJK4NUdi3LIA2HNWoo8euGaSBgfwlMLev7Ni9TJ4STR0o746pgd+LgK4LFP2cojst3Xy2JIrIsZI03YRCETP8NDPj68TJdgwfIGen8SbRBr3wxKmihIVEtIMKIagfTSiEwFVZHUxLvQTJSHqv5b4h55GQ5680o1M26G5oufB2CXLGApqwvaUrc5M4H7rSYETSQiNwOJxvMakexlfwCUnR9IIqOlTRoemla3qRttBvTIErzAPf5SK7Ya4Ve3dwTJ1jobr2mRZv46u7VWM6uoS1xQ148qy1yXRXwqjopye0xtEopExImZAyHU15+hbt8CXafk8430zzPLUjG3YfWIKkarXOsEH5TDSXl5syso22JyJ5ASjlrmqrtdxD8p7Bla4JZBmZw9CZgwICFCJ8RPiI8P/goohbcVD1tS+Vk53RdRF7fhAx/yUlPDkEO0edLu+IGoctHjVK5s1B1JAxkLAgYUHCcvjlfJqov4vwWzi5P4S/iyyNQ1ox0U180YqxdWkEWWjEdIjpENMdMgudS7ONwwZj/zpqm0MUBQoyNKgEgEw4kiYkTb8YE94gHl2SsXuhfysuv8SDxodQb8kFJUzMN/Ih1MNPYzu+UQQG9fT6ZGZUJmcoayBCR4SOskZA1ogIj4AhlkAsgVgCsURQIwGZkrkpDTFs5lPL1AwsyhdYc/BpJCImbMAD8UYDtVnPYQs4vcgA2eGdkRYiLURaeCy0sM3T4u3F24u392gUmE1e05OutsUEdsl3kzvrkv6CbfJA6gb8jB52T6PFBJ7VJmpKSaPFqdKD6zpKmb9NLbNIl2rzx6K7+XV50iKFSXdniHzsDYrpQt5UsLgBBFQRRqNGU85jkIzyJvBFIm42MMofHejoPxGBIwJHBH5sCLyNQzUSGrTSfWtCBu8OKpMWmB/xPeJ7xPeI7/94+N6LknXrN5h+pfC0CVf9BNPTpR5bZ6rzN0xqV2F8X6USrtHbJ5Xs6XuLt01t1vstkqUQqbdNodP7wSySgrFLTqbsLSur9X7TyHTzbSye+pq9z5UK3miR+i7dE0w1mD4saKaEXD2oBfCHVBfoNtidMfEE8a2kc8q3TFUJzwokJ+ya8scs5M/z4L7fvParTEHyMJXiKSu8diISLeBGk2h/bkuYkZy1ERQTpMkMiNlMX4wHYBk82N7vBnx1EspXUow8A3k290cpn4zSnLGJuIeZhGwRAJ2FeLqTYi4hy96TUKJcQXR+nkmImQIphZwEzQqU63X9S3YholwXMx8rItVGIy95qHzqSuQqdL5Zi2hAPIcHJR70v861dsWjsSIq12s+S1MgUutHAhEaGh4zDVF3EpYOFXeHzSFTuYQN2NWYZvpanzHmf5Prv6M8Wvy7EEnvKH0oY1PPsckodkfqqvPwrG6A573jvmQgLySZ93+WpJ/ofMFaefe6A8cGkb0XeXB/GwPLxMpZ7+ALosgFKIhCI9fyawnEdBOfDn34V4ay3TGyMnyFH0pcyZceGPqQM+awYXjQHY00GF1x90fP0DMqQ19cz65KkaTqPcyEhMsa0vR/bsYEUZTP3zfwff/OQUW7ui/U+ziXIufxeVh2o1yFe2tvyLKvpOcVoe61e0R19Z4IUmXK+NSpiv/47w3uv+XnkoTQraMFG4hjC51yhnN9r5dUrYK42eDeW5MGJwB7EiKdxGbVM2gDcIEZqGixgXWZyDmol5C1teTdnLqKFmN/NqC1i2AiIszkKX2f8zhArGKRjJWQZA6XfQCsFlTGd0Sq1bkQjxSy3tHZgkiINxn5BNMLmObzOeXz3oFTSeM5jCHKC9flNXEN5PlMzsdmndfA540kUI18SWdyfgFpuP/Gegm8Xynw+1NLouCaJlTdkOdzwtiaUTYFf8A3O5ViRkPJxZuSXJo+RJrE6byt39dDgxv7gTIF8j5nXhbrRL9WE6/4QiRke3Y0XUACkjBNrzRYQd9hfiYJZKll5LfKzy54Jhh8EPKJyCKRoq/cwQyiVcTgcglcBfCYwXlWzp0AgwSUXIVGaji7gIzO+UQ8Ag9hRjYXkqpFQqMLIh+BBye4oDF8EpmCeEwVVJndPd9OEpBZ0BpmkCcTGXRoVW3QI0B6xoLvSCm3c+mdR50wnGVjQ9yzEBo2MuQnpdJzLVeEDHlLkO9JH13U2/SNPp/F2Sbb+EEIFZp+BllGBX9voC/wsvJFZzFJ3ZvW3MQn+txSxmTwl784qacxuTAvKoz0d5UJ1qMwaimLiCkjUGtKQT5QninD25vPzyRJ4E4wGq02eGUNnWiNsaEKY2hg5BD55iTNFkKFK7Ov0R+9lWdjv8BPUjKljOqX35fKp10XI+md0rSExb74yia4CfnoiZn0aqgsLFzFm2uoArGTS9guG7fPUzFXEL/6LVbh8FdYvfpNM8q2cZwMauReOZFXZMxsQNZW9qc8mLWyrtPsouJw3vmWxrCrJ2wr+AJOHXPUwqEWDrVwqIVDLRxq4VALh1o41MKhFg61cKiFQy0cauFQCzekFi6kPtscZ1Tari10XE0tljdJVaWd6rq31rVOHv/HljapM6LQEnmAtKH98aXMv6aZulKQbOLLxmimTvXWNZzZGJACtVbqpXD5vt04UWdMqOFT33vLZhXhOcGiWYOXSfVOu5xVX7mvpfOfPqiZl7PqmbmShLKDgVosm4a+5ehbjmlNAmlNiEluJ+TaHKdctGNZFrCUgrfbokcdUbOvSjTjIq5n6Drkg0/EzKKUXwZLx0LkYyye+KApcoozGXw3Cm5h4IkcUFHCGkPfxxC9sIZ4nWfsqqVrbFnft7GGH7JJyCYdHZvUYGTehn1pEvYgKgqPaFIhb+hxQSx9JHK65vcd8uJTwowZjTerW5jZkXX9iyUgbx8B9zLh23QZhVNT+k51k15rQvnAFe8HrVagIB3y+4KfL3QObFQ2IBVFKvqrKxu20TOcjGDp3OUeYVVD8sAjYbH8KBa5Lpplph7EIvuSIPM0Bfn1TYnfC2ZR0btB9QpcDfn9GKbGjW3YSkDOAy4+mEyzg0rxJVvY9VShPOTB4j80x7N0OurMBLIQyEIgC3EsLIRsXdsadmyS1c6db9A7r1up33mwQSE6b62j7g5oGwm5cOTWvtpSsI1k5eI3p5H7UcNtYeis6GG5fS+06mXSu31FvxXKaGimounqJElMxR4sTtrzOd0mmAxlbCSQSCCRQO7NoL+JoF0H24OQMA9AttJeljEokAnlRAFKeQ0upgMObfmv7uDtiPj2pLtGXbuWDpQGkdghsTtCYtcv0/XJZh6c7BXfzlywXhnEulHdVPejU1r+and2z/2ITwdByw+FjJ6MMhevOJTGeGi9uex4oKO2ejuF01r0UwFZ581BZZUMBOIZVPZeKCWSsUH2GyCxqRl+aolDHX0VIVQHEYCgN9FFPm6caKgWXbxr0UNTTDplAyOrhXj6KMl0CnLQeQh+4XgI1C8hy40sN+qXOgEjbiuHVNd4+eNyXn08cnPQgNwZbJD1zpL3ZrkY5z5fbyv92ndvABm62O7JyNzApMPbdDdPuLwrjTI93Bbk2fk+6bw0jpAO67YysCHygISAGkvcxwjXmNXNWdQWF+lPjVFj7zyJF+p8F3JbyG0ht3Us3FaDH/JktGlzHN08jsGUIC9iAIKVXVvEc3uS2aFqHVoWshgZ5UaRdmadViPR4+raDMKjRTt8cihlRkkFXluzloZybIZsbjRqXSZ9TNUhBvFAuOW7OdW1tYb7dfQEKxYi2UKyddwVCw1qtKhnyDq1XrnenHGfTJ91My94skZLkZpQy06msefm5todfHAHu3NJsVrdkEkbhhfrqxzPQ9P4A5JZK8anbyvaDAcyIsiIICOCjMivz4gUhP9NyX2DIndTNvRI1xUNC6NrIwlPhGCKppsIw8oNPVR5WLnqFINmvTp0Q47SRVZOXqHXqQNsrvYR6qIknc/bzgielZHmypjg8weNvrIhJo3eC8gPID+A3gtB74Wjk+1UqPhTOAde2JywGzJUoxRvQB/QEIqIGxH3MQpy+od3ItVGxE0Em9QNPVTB5qBcqH9RIQNdCVHqQeKJxBOlnh37bA9t4Ds6uWtDb9F9y1qv9jVD8QopBFKIo6QQQcuTkbzOF5vZk6JFy5g0eKqyTbJ+kSyjmWo5pqZ5a5fzua4GTls53Wem1OgepBmHz6+ce4RnPW/kKLGPVZwtiSLyixwUNCQkYkmGjs3FAmpIOZFyomwVkK0Ev9doCjMyIoZADIEYwoMhbK7gg9NyF9Pq9a2vjxnSy4rBkqiBU0Qq8Qj8wOo/6yn1HeBB5NasZomR6H1pNcO5M99KAG7JqG8tmfqERw/Rrkl1vlB4LL+ILBSyUEfGQtXFILy5eHPx5h6N8FMTTzyMYUsC6Pqb1ljz7s9LnnnL1L8NltGXTUIbPLIrwwNtaPbITi3L1Mnzu10+h9odGCIDcLY2BfDg4cQG7BeCxTBs8XV+FseolUPChIQJtXIvqJNSgynU8SM2QWyC2ORtsAnWku1k58+2Y7ybfG4XNzYZUI8XpOMMEYMjBkcMjipGvLl4c/Hm7u7mblCCuczetb7ycsF0VWq8BZCBlU0zIdSwM4gWlMUy4KDQ4al6MhTtZp7l9ExhJYdWkPutILcDLRVIdbrqZ/2iEy5PwHsbL2gWMZHlEj7qmpyb3Mq4/MmpqePZuJ6DJ2nK8unwiaKeU8Ljg/MCK6bVZ1ZojBkSxfli8g8Swwk+EfM5Q4UhMq3ItKLC8JATUYUzSdWpZtfsXyNnXSLWphhdDqZC5S9C4HUEi2gV0Sqi1SNKE3WtPaAhPq9wwDrxgtlfnBZo43AimL1MtZ1Sk5vWJ0w5sMqAcVhzLrqCcz6gjFhH4c3fLjvtJX5rMkVfF2/f6II0he6BMzPT446D91QV2bewy4TEgJkaJO+tEkV59p6b6w7F55I6KYJa1iZ1NwObBdtZnvADdETVYCCe3qTiWQSMbWXnb7EY9vcHV59Ib0+f8qzsx6vcgPPNobsAwMMGu/o5+7DDR5LPN8IOczOw46U+WBnhMLe41hV98MJWlA9ZfTkhz3/c4s8vE4w2yQYlSUwJa+bSoxzIPpI8KcrVgYWAU6566Q/l8zeh3215poLixl33pKrnKqDUGYqQ629zmgyfUaA4O+QNXg5fDsl3fuWw78ZFivvi79egnACI1y7fkVy5+q3wBOXVwNXH4twT5ZDTOh5H2pHHzuQMTOApVyBJWTFxwAx55wvC52jtRrMMmmXQ2v2S8Bjq7LoDaz2PXm19EGJ3Rn+sLVeSNZOhJ/HOhbejYHVDTGuL1PvSJlU0GCkvUl6kvMdCeUM2pd3Zt/qFxwJ7b4izXTYWIjdMxKIHdlOwDE2yXpAIprgfh5gIpqtG/UMZr09GC6DzhRpSOM9AUngTxesaF5NsO1hdEzsdxkYFTHUPUknxCIem4j24EPfglr/kFIOHET6/6kp0L0IJqwihLW9FHQ4leK42pnCxHu2hcxmj0V7wgfeEg44rh+ZOYbepNyd1NeKgZNz9khe1oNEjh0DVxz1NItLVxuRk0NA6LxTVJ9bn0mqGjYeODuxZQjm3Xsdc9BSEFo49CszaQGRBOazzxcbV786neSe75LMD89t5OV7DHCyZXeuTbEfWiWB5DrujgWH2IOyQnRD5CEdBHs329FHHasCQqTclratv/vB4qQ3UxwrsDeDqptVqnroPeVwQRTZ2k46JIm/kKx3YWGOO8vpPhFAjYXTuz2f8FBKvBnZ0eiv3bRqQN1/gXosO3Furs2gMn8JJbvZXyEURtlWd+T1BzQCFd/RO9IFNbcSQHtDk+T6EAPYkJP6AqSSY7We78IfDJlivi8jYHyXpiclo41RfCYIC2R0IimtiFA9fV171zgUv76A/+9qCpBtxZJkZWGfGhjc0SQ7ynsQ0H1YTVs6DbkMelUivbc0sv6Qv0okklIX6p0IpkfS9wY7oecmAhFXnOKOMbbdf/nIiLeO7HfZ98KV91H7joYxVIRQfdEIvPM5Pun7pNmpVpK/AyuFKLSRAJLbecTNJZ0bpJpTx2m5an7FrHPZgK2NStjnZb0jpewHuJxo3CEWFE2KSLbaxyA2JIg6IeesxuTZpkEdF3CAOR08SCqy9T3Buo1NEojtHom2j+R8Su9nAJhottshWJGm08KYqikWUJ8DVv2SCD60ZqM/lsCyfnV0KaFgEv6b8EYOO0PUZXZ8x6KidYvNkNCOMmRVixrL6dfARoW51zhZ18NTQKZAvolxEuYhyjwXl1pHimuSDNa73MqbKMvnb8L6nYH9WZ4E5SeAQ2F5kvw+qWK8Sgm3mpvATsxkglUMqh1RuU8HirbMXxFSqVbC4Z54yQeIxyCWNBiV0WmF6tiSUFe52g3kNJZR/Gjwc72iEwd0KfwX7FRT4Xi4Rrqu6WpL4HsKOWQyQ4iLFPUaK26F73Xp2bYLUJUMNStGhD1uIrjcQU/LB2hPWy6yJHn1qzQ+d1AS7FBQ9dGov/MO+k8X65M7W5djTZwsYmsCz2vPJLiqb/F6+2LrK9WSGTSD7/rqvbh8KH+Qx1iORcChMG6C6+Mdz9J4g+bbjRMBO3bOdhe5Mf2hjHGT0ZrrSgQcP0Xjw1ChDq8uGzWV9OHoyVE4hq4ysMlq9w1Zvwcf5NKEKMQRiCMQQiCH6S89q3nLY0Pg4HL4e5NJ7pIA1SkhUMCJORJx4jDixztfgzcWbizf3SCo+d/kN3fZV0Ag+C7VR3PFSDz7lenRdL/ZEljATMjmStL3FdPtiGhpjhnRPy6UBzpvssEryVPPq28XWqCHVhiKjh7iP1bz69rE1ash0m4qoA0vQaKbUm6i0HDDkRQZGlyBXBxbi5WbVe4nrYwZVud8xskJ1GjKgyICiOs2ncL8jeYYWOUQQiCAQQfgtcgAYp474AfED4gcvfrgnCtCvB7EEYgnEEj1YApREPQQiCEQQiCA8CEISdYgVLN3MDsv8Ideo7uUBaO4VDSSO3dP3p0Sei5wPGLV7QEmT6qbmzW9V25rbDaptmFm7uQw7dswuEW4YGDtv6FrwPMUR3fX094TnXrMsBTvDxWJKqwryMMjDIA9zPG54pbUDLy5eXLy4R+Q/66wQeG/x3uK9PZ5727QO4O3F24u394hub6G1x4uLFxcv7rFc3FKbvrm2Tzb1aJUSTvap0Qo1b6ejrn/tFC3ROa6I/K8cNoqfSdzQevCMzjXzB48wMSrOFYNhCxi66jl/+CLpBUBuqyQvj3Dj6ujm+kxoAroY1Cb3RxVj6xcIuJIU3qS2drh8a5ZPw516Wt4OGrUwtEaPFboOEpdwy3dDtmPB4QW0df/2PXc2fSa++hC8fg1wRiD2A3ELZHxY5Y7MQddMkIJtglhSMgdTLUGPryOXaFjL68koyqUErq54DM9DzgMTnqEshbIU+j1tls5oUAoaBaS1LjLtDMC0RIjbELcdYXIT/cNvCwB2R6NH2KhC1pMefpra8XWeT6T6M28iUAayqoXzpmUG6fn58ITM4Ytk+2XSaabTxMeBG9rKKFOs7PuhyaHuSHuzRACDSEF8FR9YeotqXs2Z67tNObDRT2TPkYQhCUP2fIviWQ2s4q+gVceZqJhrsAXIDLwtM9AgvZgrFikaUrRfw+umSUJ8ivpzbRvcXGgzpkSf0GbpxUFx7vXSNF6RA5l2RHGI4pBp35RpL3CNn1+33OKWjhD13//SdaMOoHrWAckyJbVEZhspEVKiX4MS1fD/5lg/rH3oK/1iWPdblV7xNFeb8O1CpafUDK4z7Qz4PICR9+TWcoxiw0EUgkTZBSkGUgyUXd5GdhH8XCQpA4X4BPEJ4hPEJ6/VhUCUSz8uqY7+DyLrV0x2h7UOqwH66z6ikgBRNKLo44yDrzNaeHfx7uLdPRr2qmRqOoCkX/rBgt86TdyMTBs6uMJZqGKU3tpt6MWsz77tSJ7vOfYThVLEmog1/1hCqS+3d0Z/QABZ1jZmnjMimytJCGONFkbkHEZvjh93max6h0LutjLtrjxcw9awihAg+kf0j+j/aNC/w9hvgKcDGaJcEqh0swRQadMAThRVebyzqgw+Dlrw+b6/+UOIZI+fS4h8BPkmAZz1A+rMubGV3d4gLQkEggQzkO2G2rWuVLnS+rp2GMi5kS+EO8k+b4j6kP3JhQug84XaI0xTrkBqtLfcnVnDVzJG5AGbLF6kY7pI5hx7K+3oATciXiveKMpavKQZrGj09tJMthBPXzKQ1yIiQT3MjiB/Jhgb8OtUTYROYAUBeW5H301IOu6mYuxCQaYIj4mMm5BAFDBGVRM+FquppPHbA4fgNySdWL4LlXMonaF09gdXzmmEoHlBxAmIExAnIE4oqvXOKTqrI1pAtIBooarRW4rD+1MZRSQBSfb80WxBUthlKjv7QR/smUTtdTBIBVvNRRNYIioj5vTrqaBcZahi2pmKSZKY5tlNIHu/FI9+X+AZZYH8ROY332jsdS/+ObDKy4J+b8q/asT+bqTgY/1ZFFKQG0FuBLkRS0wYjEUuo60ElFyyCSQpC1UNJ0pJOs1bbitVf0Ke/93ZZbfD3L+GC9EruIUf/m1rGJ6RhdkJC9Oy9nbmXtllOxvUsqB27SilrRPPbjfsZ93E+ALDoscY2D1Ev9nOM65lYOuOqJvC3swAVjdaIceHHB9yfMcTOdewLuHlxcuLl/eYyj83zUB4f/H+4v09mirQdXtNt75sw7LS1d6WNhC0fKDl4zAsHw3Lgye/St1GgKQKSRWSqmMhVU1l/oGq8E3M2lcag9gkam1pBtbj1nL5dkkYeq2lqciUrQyx+2+RXImUkdXb+dv3+4PYctPZnj7HhEj39KkkVxDv6VtvHIjVDyBZCpG613hsPx+MrH56k7CcGW2RV826bBlzsRs73ctNdHmgvlWFFLoYs3aHuzBXv3Ld3uKGeEwBBUB3u3oMTi1w6VYjbp7u5mdqK9zHs68Unjaqbh/PTpd67CAofJ83VNuI7sgczveLWzNFpLojc9jPKrX9WRdi29PqiLaojRdE7ueDB4Vqeq63D9Y8W1IHDa8nQXGS3d82N96b9OsGYkruGFltVj4r0cNPUzu+jg0yyLJSjNyTJ1yp3Ni7ayrJYyoaqNWyuE2dTRyRrCWDEPM7TVWDtEkK/S7Z2xmQtROawMQ0+lUOQJKi27cm1VqAFHOpj3XZMkezpsAUEy172QQXigUEEalo5lf7EDbNk9CPnoR8DFWpjHNpJMIxRILHmV87FXTWiBYkVa/ytQnqt0KbYK5y32x7F7xeKaTgWU0kiR73WWOUET7Pm+hpkxuU5VOzUU1QioirkdpoLE6q997Q7AJmJGcvUcEM7mpsDqfX01iDzhWP4XmPKSMs6REZbd2yPX2+rfXpk14o7+jMo7ZzTSSSlERNhJxQTpvIjcax1vO8dbC5X1jvLmSaU6aueGeSCWmmFYryTImk0cQF30FCOL9SoztxDkto5kISvKVte1oA/0ozOmU7nKf5AGVUrSYLCdlCsHifmYPeVnOxSTamtlbGczSidTXaz2R7UX+DDBQ5Y05rWp/fzw4+fPlHNZKgkcolXPE7+8cuv6U1w3Mpch5rhtnoiXf4NXhWIDU52sO3UveNe6K2DPaq6YvfNnmKfCIyHj/SdP+ER+/EcF/XYuG/5pDvNU2T/uh5jSPe53cnkvAskjTda6KavSfg2oXydzO+Y48a4A24OqN7/SL3moQ7TYFIwqMtA/gj4MrUF29u2AZ+B3Vi8dI3zISE170hM8iLyNVLX1CoAF68CflsBhJevADHNY+DOTh9PL0vL2ctC2ckJAfZ45nfYZe6ST21GixPfF+o608Kbfv+oqFORhkTKtsGyitbyJ8kzEa/j/7bb3+KYZb9prdWcB3dYNhMUsisfcNASrH2XXVRqG+cWIJ0gkffMKOLe1/etnXDK7b0drP3Q5KqNYP2esLaFZXEKwz+RRcfdPHB4N+R4HchnxNEB4gOEB384dAByTPMVIb4APEB4gONDy55jNgAsQFiA8QGGhsUKhrEB4gPEB+gtOBU/IgSECUgSkCUMBL8Q2kiwazniBoQNSBqKFHDlYIEkQIiBUQKiBQcUjBBZufAmHG62aMHXypBu6Xs85NVnMavXyK9EdHXDbdp+QFjxB1G3GHEHUbcvWHEXSPkzZN1yx+c1hm4nrLvJHis7uW4ozCvemjW2wRkrQmi6uarD+e1KAKTXhOO1Agh8gf7hMJy/AE0vlCXzQNc/EEpnU0JhI944//LQA8P39IKyfCPaAZPHEZ6kZaTf5fKNNzx0QkfnfAPwQm/cJxHd/nB3eVrLu6oWELFEiqWjidN+l0zdxreW7y3eG+P4d4WTuN4cfHi4sU9novrvLvx2uK1xWt7RNe2EP3x4uLFxYt7RIxyzV8a7y7eXby7x3N3fY7NeIfxDuMdPp473PRAxtuLtxdv77Hc3o6rcNdfpebU2+1suN+2AUVP61ooRWGTQhbMjmyUsCiLru2+ps0ei2ntuSpZlgLE+yljs8/CQHoH39Tx+9AK2GTtkoM1h9NgXav+alklKHQOpccrrb7Rvit+7/yL111wqccNdb2JVFOhXUj38rVMEQU3JFpoL9ZfsdLh/i76oV29OiD5vNsb575lMbvgJbSFoQRXi3PCQPsublQaSv/gNCp+Ub96KwhEBr1BzuuTkVraXqKihcg2K7iiZ9RXb8Us5rCmbKbUWyMGGEQK4gtXDXYX8Ukvm3p9ZpuuYJdRVmtXoWNdIBI22uVNSozFoRK9sVDnIud+Ymg6mZAT8Qj+Cr4xzXT9twDDPCWxN05kh/WOXgYhtd3uA5D2sAHhY0Zlpr4BPMYBMrgPRGFLvZtbE7z1qBtB3QjqRn7dmOweJFHP3GD5OUzdgGgC0QSiiQCa0BGFZ/HfSWTi/rha7K4Y1Ca8TSmlDcjnVWLXkJOgfFCpTk+BPB/CFELVbfbEbVsJlWpyur6gVkb5nEErHQWfv7b45ebzhHiso+QPVyFQTm8TrUBz8IBwWEzokh+wrsVNbpONrQ8dcFsLSfYeeVTkUZFHRR7Vz6PGNNM2jU0IsNXiNzKeADzumvz6FZzVrHsVnK1hA6JjeE4Jj7VyeVAZQPCLak9Qf4G0AWkD0oawmtOlszI8JGILxBaILRBb+LHF22VW9X1sKwegwj+mm1+vcEPparlazh5d3tDjS9H1Hmg6OfwxXBs8TgSdb7et+53pt83uSFeQriBdOZ4wopY5HK8vXl+8vkfDFnrN1F0eoW4/7qZurxt2PYndeZC1qplCvX3NRKJtnq1mPNzaZOiz6gU5v469LDiyZshaNyb4ro71BlEqolREqceCUltWle1sKR6rRQdQm+aELq4O6PkRiyAWQSxyPHKVX/+OtxhvMd7i47jFJvpzQhP4KG1ponWBn4omcDqXRk9exXwmG/hnaOVqffb/o92wD3cNffw8Wgh5eL581bz6fEZao4Z0GVkCV28SLrl9pS9X3SpcBszPlfI4UCKNXYTipqN+swWNWihCA/QWJVd8RVi+u2jvPAvI3hOSIp1FOot09pi4ZXhWkrwOGCTY5BHeK3lwUd6WPvTRstqIIR38Nb34JHI5ZKgJ8HjoKRxKjLvW938WT9eh/Db780W1Ou5LDaXoV4aUFykv+pX5vFDR/RTRBKIJRBO9aMLwuhNIUtZRPPUV2NzFpHTx01FNnDhAHU6v1uXgJJ1yI/uEneagIfV2MVWDB3plnKQ3lOcKsmHzaRnuHok3Em8k3ki8wzz+uQRMuYcYAjEEYggvhkjEEs7M0zWZAhuSv5OQ0R+HMZkDirpLgr6OW/glNF0Hunbkjm2+a4IujeZoKkdTOZJqJNVIqg/QVN60TPvxZmGv7WgsarbcTt/aUOOW9dPnOt8ySyJuQ9yGuO14nObRWx6vL17fY2VN2ma8PuNdw8D2C5jVOiasrthYsy15LEpNo48nzUrLGoO4EXEj4sbjYW0qKwneXLy5eHOP5eZ6rBc+WOuaFXw1W8/muibkJrGExI6sBxJiUBlqyhFxI+JGxI1BZUcdVBZJwdhEHGDJmNrMeuvFtMcNGqJHo8fVJyAxyGGLlEGSqtUEntUh1M7ByDQk30i+0SfteEJOYsgiKEnSgKG9LnOVJm7o/I9oFNEootGDLxyBvqOoEUNagLQAacFR+462NEO9A3o8UFsakS5Kbagqghnc0Y0U0RyiuV/bD60pdftcyr3iMGIExAiIEY4mj7Px44jpjJY2Es1HXHElvlJ42sCE07IdvaGga4A1Dqr9AviBAWnhrMpVVElCWbBTpN72qVBKJJ6utVdtp1ujIWcuRW7F5k13R4XdeOsAZId9H3SBkZAc5D2Jab4u28tO5/FE48Al2NMEFkDnCzXkDGaUsRvy/C24EzW2YKcTSfomsS94GPw4GFmJXF1QaUuFrUuhz5Rs0ibFGs9MRIS58mE7nbeYzTJQ/zbk1tkp/G3QKRQqQjQcIc+MPPPxSdFNW8/bo4cLkU8ZIJJAJIFIApGEF0mQKIIso1PKqFptkq5ptwIKjWPggwoGdgpDqysEvxZ8fichyxB3I+5G3I2424ckztIUiEQMgRgCMQRiiC6GUAtItnItNn5wrwTOLCVR0zSy6Utq9hBZautf/g61SsVcknSxesF7QtiP/gCvpq9S5na6WDOZWi0bG0koW3nxCwOlQI47W1nfohrAmWmVk3Cf/L7WVyghCiQl/ojrJZGUcL/7Tgw8o8o/9UQUN7fr60mm7w29GtjklS1ILJ5+UXNXZc/7qG/RljFaR73QocW2akbnGpEeznSuEjKH4YXaGyBZLreiSNZmGXRENDbVQO+wOKY58aH2vLE/AztfTER6IDN5bzwxhp7M/AXo2U7Ia5ylXMuCDSaYxJq4u1ADkb4ieEMFYyOIWs+ebEQtXhDU0eaCzBqHJUoJyR7xQH+hA50KGcNWOpbSz6fD8Bvxar88WOs3dm7FTIbdWaGlG7Ua0oWCZClE6l7rGgadxtZ6vCNi0+tC5i+4vJqYPBQjUZPGh5pCJfQPxtppY9kHgNio9IY0YpJU0ejtZtD6pi0EQ/WtOhdcAVdjp5MazGaqJNEAGAKAUDwxVyD9vMEzDaid6p6K6xVPe0EuMc0U4REcnF+3hCUQdsvHxhF/UADRNg/GyPOgNNbemX6l2P5vzFU8KNqGbHEQGxIJPgOl6KCTsFGtw07BXNY7KeZB3499TWUJkRLyjNNkSAg1VOICGFndDBq8YdiLG7EtkTsiRjZ7oilcOBvp1i4F6HqArgfoenBMrgd9zLT3pQPjJwlWWQNxHkHcg4r3R6tJoIz9nmiSFBWoDjWHH1c8hkEZ+ynL5aBRlVRNICvrzgwGjlPxPN7ar6Gtka6RmbYHTrWdz97W1Xqzgf1a+e5h8UnD9f1etE/PU6kXIiGJossmblc6x029YeECx+ttVBvgm+g/V0o0ET2jvEkRlJjPWfNn0QKix6l47tiFRPOXZNp+ZjRrzpPEf88d3DaICxAZLTpLtAmcG1MRyVS0p9L5im7QVLrRmADPOw2dUdrYJeZraGHqZKVpy1aW5UlCZLOUssu3Vm/S/hFpq4XGnYYIGGtR+blJ0Pd9r2D6iQ6raW5NZvhoDXvVrmEZCFzZl3Kpvi9fzScO5ZQmktBNS5p0cV5msnRB3OZmNdZoNuZpTBRkDzON8IEr1rx6KSOr7CEzaSZaV1Kq7CGBmBLHzu42A4GI8uw2aNLdVx4EPYuPBvUMeX0op4oS9kHPZtCJEM5F7pTom7IuqWBUAXdqMo+oZvqb1CPL9O+XLkeBCmWnU5LO5xZCuu8V/CGySarqrxb8wVlxG0ReqCYl5YKDA/MhM6Iwmo4XJB0US+lJnJepWeh2WrX0ui87j0gnfQl6bCKevjfYET0vGfb8SDLVGvvt1ZGFt1HXdkb5R5Le+Pn9hDyHOl+xD+YS0CQV0pKn/11U6fptsTBoMSIpMTSM2vHaMOhG/8dI2z61qhy0PFE92HyS2iQ+oxwag7iQCWH0B3RHW9r1XhMnS7z1Jv/vJ/r826HNqZyPZmVh7YzO0nQMckkjuJTSiF6tlnMR62O5FiQ2z3/Vx3Uy+kyW70n0eCsLfbBpcolilmAfJ2JslVXuaUI0/N4JxuoD9fNYibTedg8kvgFFYqKIexxzkmYLoYpHy6mfjNxkL/TeURckUyzArbNs+ER4zPT7x0oCSepftC3F3n4ljMZGdfKBUKY9kj1t97l5F0lT7S/FSJbR2arcKONDxbn5gPa9OBlFpvqknnzjiO2puxmOtEEjEjGM86mSoJ8dDW4smmbdg6OZmeFXd5E4WdK5BoFSwj5vTmdp1wO1P88Yq550nI/2D1YLuzcemEcYQxjbAYyV8KULMKq18JUZ7zH6Az4IeWZ+0YXUV72pfEskJPy2LM9o7fvuIRNsCXF1rDcW1Lc5+xhmJGfqBrJMq4hORjCbWZD6oDUubhToE3JjPtizSlJGIf4rrKaCyLg6vZEx9GTwOU9A0mhkM0qzJdSGuhY33WwhchbfG3+RAhQ2OdruOeAOvmAHy91TNNkA3S4JZbZ7NWZCXdNH/YlzwnQ105J90Ll0XdcFWV041aVBbRdkZUVP8+dfQd9k03Cb6hH6yppMINXjjeBqcQ5m9vqbZzFJFchqwDeAx9joEkgcX5CVbouLd8fEZRYxf2bvQT1ZjB7ndk5Fr9HFvV9dmBctFklijmRMErBNiZ7GDVGSPus9Z0JlE1EtLasaL22tCueAfjuzv9f7W3xL/31vpDgtL1zYc3oCeLyduT+KafvgHE/qgE+qPKUnGs9hPVkYW5lkQqQefTLS+WobvMA3857zMqd10eIZ9MGG9JaPkiRQPt3DTEK2uBOMRtWYsY3dtTRcf7t8sP0e8PuVFlYuypjWu0uyJvfmwi6A0SVIiD8LRWc0Ku5L/bG4Xnd5trgDqTlMx9lFC4hzBtc6W2V1MSLtxMnOGDPtZUP5xIDI9yQ2YGgeykno+wCq6DPbp5kqW07GNFTfL9kvbRapv0GkwMfaA47PM0NeSOxbjVGuZqqxoKy+IP1cTWYJ0gzqghDu9o53u9zpmGap1t2sva4XbmC1S+VPu+f3Zm+teOhcrX/bWa4WjvtyYp1uuU2hpFn2ufiWfrqHLGfKPYyVReAXlx/OvlxPHs6+TD493N1ffrj6N02Tqte7p4qrI7Vf0xi4ompleC17gnOaKZA3YPRSzkvqjmTZkzD8Wkbn/IqXf1i5zT3e5sVfEF/xy4RQ5pMxcH/a+1Px/doqLfL1JOmSm5Jeib1fH+/PPk/GD2fn55fjscYeZHWbq0gY0nJHVvf2/unFGX7+jhF+FWdGwq2/h2buvZaJvyMr3TEGlafVbqVkdU6yBQVpzT+mxf7pEWR+gQWVi6EkPd14QWfGeKhVBVaTw+CKpOfFr7tNF5ACj4FH+mXd7rsFycDTfi9y5f1BAcLvpWYSqt2zz/cwyzODd93SzXtGJyP9BpEkIKPWU3XXrkh6yejc2UVtg9kuxyTXWq60K4J5vMtlpJdwLtJVs8UIl1mz7SNJmw33xsgAmRt3D5kSEsobbz+vlC6WVDw20YdpuiNSGXbMsumm7R5mtT/LEbW2sbKIoXoW0sGhhiZ70NVz6XSudV2G2hnls913zT1q1X6ktUgzw+I9lz1TIR4pn5vvZDVF1rkO/i2UVh5Qsh3Nk7Nt34R8dGBdm7itOkOjR1Dlt6jnQLQ92y3qkltLtc4+oQOqzSJJUv48lVRn2NH3sGwzR5SZ+Y4Jg6x6h+25kyLOo2IKXdyB1w2vG163XV63ykJhjAPZRmyZAynDZJmfNbkwpwqvGt/nmQElrWknhhdqtbjwS1+H+VKrNfjmdV+uCSrFabovlJe4tZ6yvf3mC1CEMoht5b6zIutcs7l2hfmSqsI22W6uGVdsQ+drrtlUM6xab7kGzjt3WcoHt5uF9lSDyL14MhKkXtwlXwITacnoFlahaXOvrrULZaf1TlBzTtP2xhYbMA3ueNTY4up6VRBTtvmPtexuHUp1Ic0uNZSF3hFVq3ZEjaGxj3HjBLv8pP1GsVz7+N56oBaP5QppVr36yt5l3yE5jFl1FtvpMSTiNcVritf0AK9peUVz6tMG5rSlCzzT/tfngs+o1BybeaxdUP1YcltjF6VU9RctE+0Fd+KcuU+qcKY+heUhTrCc3FSKpwzkaUBHNHL9D6a/OeH3tqupFqo1lrOttZV6TZtfqW/bDmpm1axIBn/5i3c+tqdLF+6kWFJ7aRofem9+UOAj+2Qxkv37S2Z+Y/Qpq9J7418yc6X0P7eFq9w1zWqgci3mlJdLNNtz4mZXfMxcXiuHzXIeFb+kWXNOSjSfew4Lt6UNKY+rqYbelK5lHv6qR56ltNKxVS1ZKngGlUa/9xT288mKOUoBvHr8kesJW5VHJ6MPlFU+SfcQiTmnP2pkvGyqsF4K5LGG8sxHWm+1jU2HponOWRFJmlYItGoaw9zRMNJ8kyynxA1RzPTXrWyXmn/0Jz5rR+ziYewwR/Fkxin3pSnoBfceH+7nq/ezrsrybaRubu3i3d315cPd/e3Xq/HV7eerzx8f7r9cX2oduO0an11fVk1GF1LiqrM0fU9NgWjLhBZqKq2p4bE2DBZqp1JLUCPpRZPz8zHPZiPLpOrvb2//evX54/ihmsr44fLz2fvrywvdbfUp1deMukvp2LN7mIEE18RE9Ggce5OUgYJC5VFjslpd5bm69rpF0rBoz9UQZ51caZdIMP6RRUv9A0WbVpiVliLXVqj+iuei//LrpbFJeNd+GYnEs9amVeMD5TRb1Pa0nPVHbUPqbEPVWg78dHVzdn32t7OH8eX918uHq7O7h/vbL5NL3SUydU4Yu3zW4d2FmUy3XjkrVgkVutEpy2p0r9bqvAz068/PJmfXtx8f/nr1+WJs1YFnaarHlg8MnG7JqTDtPlzxNG+1lOpJ1+A8WKuGO6vXarSNIysHNZS3EXVm5CuS6tcWEybpDUnT+g3QWk23iZXOte34qpskjerqUv1Y6Uq1ak63FMBwc/Zv2qR4e3M2uTp/OJtMLm/uJmPXcX85uf/bw8Xl9dnfHm5Mo7EWOlAtnzvHcnd/da5v/N312ecAnN2R1RNhzDDmepvchjW8WF1bS8PtWotTKR7tkbgnt3edhhqQuI7iUIpHty3u8Qt32JZpTbLlhe6kMNF0fH4WPXLxxCCeFxejAh/312Rl315qsYudq1qEjCnX3n/+1vbqS8W2u0hFQ4lIioaswqKa4Exu7y9Dl951Xk0ubx7uzv52c/l50u29u7+9+HI+qRB3paiubatrqXlWG3JzVVMJ1xBDu8+ZG75wvbHcM6Aisroj9MbO4HyaUK1gF7OKtBo9dgPH1xBa/ZW15srWWmss1ONf+MzgRYhrnVn5wa8gS3+Szil+o88aLTBaeF1Vjy0AsF3VRBrPDg/ZtrqTgW1x+9J+LkHHthbo5Rt9NgvRNN36pDO4IZzMIS6WTOq01gQxlfvZMDRVbAuD9sYbr71pm+Sa1sKQod2z9Zes/3uWJ5WOpYbrGxaNNhq2PT4s43q899FZQ5qHU1PRGJGmTQyd01ELwekmixMy++QHF+0+KTLl4YAW1Uo/SJF8ZGJqDHG0jeOTBlI2G9kwvjhUmboV1/78IGQdSp0jVPEmY46yniLu+LMFkRB/8s9X+c45zKUjZ4mcJXKWyFkiZ4mcJXKWyFkiZ4mc5Ys5yypKnyb0lKSpz9VgpDsfTGeTwzQMAZ8JbedOgZ9JY1HWf7roPv1necEiwvWz/iuX0h7konqDsH1hxvcwp1h5uafpKdXjPLMjafpg+joB4Jd8SaXgDiecpan7lDY5M6JmwhhjdeABI6uv7sMGeHv3aujJlBORwIBkcBrZ++6bjxvyUAxpu3lqvurejjFmBPOXtq1VTyXEF88uhZkmhjoNU83IYJ4rM1zBtZW40cW8FI7+E3GtkzMZM4D5ae+2//KrLVfKdBDPaTz1LdH0PWjXGW3ebMdETa3l1FhEI8L+NQcz9TswuOubpIZWmeZzwePCWdQ03KblX85xv2XkiURuM4ZIQvm/5pDboP7/cn9ZSJ2DsvHEaS6Nc8l/uTmYYReQGtOshESYzcrTDNb4Cvzhd6PciRll4EXQtqO5+obJUD9oNqgOkiTWlu7/+Rf3MLGMezmXzA5flpjoyexX93wOZlaVrVXTba+p1XT0zGisB1RXvHXk9ue9Vt59frn8qiadp7n0okTd96D7mt+uEemKLhcpC5xv1jqeYX+frQKgGE1trgPPN6vOVgKkot3UGy0cOzytTiBqnMvVzdnHy4ebq5vLh8nf7i4L1YFtfv+3iWmJvF9YkMw82z8dJNPMP50asLeAu3iHeTBDPIFhuC/P7cjtssx4ez9sR4dBY6v3kvC4JOj3OddB/qbRyYKr4sFGAruH8A0ZZgrNvCdTPeTU5Dg+TcgmwaLn51pBMv5y/+Hs/PLh+urjp8nDt0v9j2ZXbe/k8t8mDzdXnx/Obz9P7s/GE6fl5upMJsbT6/7s88XD+e317f3D5Pavl5/HZePH69tvD+NPZxe334ybHnGFiYtgafPu92fnf724v72rfqyPeFwkajOSspIkc2XyNBaRdAl2DmVagHqj+22r1cGWbRpDJHQSjJXt03RJewxqodOkjJDATKbl6zyh3GlVdLa61CxCi61XMRWaj1e1yd7OQjlp8GwO5WyqDAQLoYSXnXE9PTTcE+J/R6OaF5ZOP0GW4BmXUmNr0f8U/vR6/mQJE3FNp9KKID2JE45m2tWUJdjg7dM8ZYJ4SVc55sGNaS7DUJzP11efLx/en40v/+dfSsqje77cXd+eXZRNX8wbbkAtRFw+Vou0zyXqtdr3NFdrPfuOeB0NHv5Un6JNL+vj5B9c9xp+vgk5Rcs9/L0Ml6jaiil6gcg8GtOPkFpDanPe9Z7E0a6iogouC5OXjSv6Wlycay4jOctMTjFVQlY22VaCp+LZqaGKR22gqwX3fIan9g89aMDqkauMotomXDzNQdX+DGRBKb5RPJf5l1ztG7uW6tnOMpALxeYoLT4aBhfc7N1udo3XMTFNXvJU9nWT1tq4Oc8i/EtzF9CbHccWj+gFhsOcYyVKkOzROznb0ZyZ58sTXQHe/pNVPhfT8i8LVb1wU9fD+FegCoeQNWLRca+llnsnpuJU+777BW/T/+D620EyMRW2QMSJfbg3w6w1bx17Vo51OpPyuXLQrzUVa6qanBdA2fBNJ14q7rDNeVX+Uf3ev5uaOSyH6K11c8jKR9NpoJ/kWWjDJTi7Z1YGBhBZe3MZSSDSWmM+teECxU7WVAR6SS7iwPxdBBy4B5F6kynhgR77gdbJO8sCtJ1l/fE29cd7cCybcdrS2hnnKWOeKwLPnHeC/rPwTdN/Fx4C+u92Hq2r80vrIXZvXLYiE6draO1trqbaID2mc27s4J6TGk++fH64/Xz9t4frq5urydnk6vazxou55Pe6NqlJ2Z89ea0XxWS0YGwl9hmd6+y1+odZvSUum2Kwh1PfhDAMuaXqohQmV+iCZMWsGLEucLcz7YIXl82WOWH6DUJ32cgi0NJ/sQ0SXACgNLPS03fhgQEg1Plwy43NLGq/yS1az0DdUz43NQ/Nk4maMt/NzAeLkCXzUIYsuScHv66xgNySm+plPBEyETIPAzJr6VufT6MF8SWHGj3R5wfT106UTZhWUJs315IsFO3lWRQNFaGqnh0BdA12smnlaNQZWq6n6NFSCO+2+hLU/oIrrEeYagg5jSmR9Eco0/nIDXuoD+vFOBfVwHBPKfk2jZr2W7WwUU7Y6kcR3dm6+b3Bs7/Q0splmfJip9rfx9xzz4rMiIdyRI/W6kaPvBBPvKH9M6137ufn9Ze3+kp/6XZjXg41Pg7Ouc40OLbNpgKzLY80vdKl0ZfEoMr222M3v6oYhH1FQ9XcmmYNYXOL8wquM6WRyiVc8Tv7h26y6NopLj7kjGVFYpJUwpKK3KYdLVyArAx4UU0rA3h0/0xEByUXbh4aO9spZY/U4doiwYTFvcVdLbewdn/LtjDAI2QgZPj9wkK4r+xrQsJHEDMX41L8WTCGxfON4E7f12qp9r7oMJ68hZtU0WhkTcOZXLs5nEVRLkm0qjV9ayZ7bjSb37pvapZrXst13WquwgI8NitRTq32DlfipWhz79Myc54Wnt9x3PpMYV5vNVfa1+7exTRTWry+AWWZOQ2vpZ+rnxdNuq+XwVlagOxO1Ku90qyf1ozpighcO2BHj1YRoaHQ29EStIt/i4WWtd46W+J32EMwRTA9PDCt6KsIAajraafvUlTlMYxJYsM0PtkqjeWzrXnY4iFtY2vMGHgmZPnYArhao43i8ojWCtJPVIcorBpt5XdarKdxQbXTt09u7v0SMqTnzr/VFCWofVNn+w6cZ/twPHwN7vu+9r0K7dDiojfzkOtpBXVcnl1PPpVOfe7xy+crEzb5yfykteG28X2uA2LKx8KBr/bk/AhtS3MHqvbCS9s+1U+eqYWLN7QPxoHbtXy7vf/r7ZfJw9n55Orr1eTKzF0nELZJht1fZ1WRuO5peY7EbVDxR1WQrrnEwqnbi+PIEqp59ATg4Ckd5imVJ8RBPQnpFcaKruYZfbat5Tzds9uLsshqe1jWUQN5wGXoyZQTmafP6yvQsjxrlPv6mD5fiCgvylOkz0WO1Y/ps/60G2PovsbOJL2jJjaZcvcuW/rS1k2s1e+xnXe0qChjeJ2qYJipn/cxNdW/il+7R1N2b2aqfImbKkhUSSek9svrf9hdqFR08eOprsK8QTrlr2dX12fvr66vJn97uL78enk9btk1tEni7P9n792WG0eSRMFfgeVLZU6nlFM93TNjqt01o0RKyWld2CSVNXXOaVOFgCAZLRBA4SIlu23GzkfsN+yHnS9Zc4+bxwWklJWZXdWNF4lwD0QE4uLh4deZLgLE4ub6bopRDQh8PrmYLpbzH3zJHHqVoIMVcuKuyRZBaBZ9Mr+aLiCIx91iOVreLpAoxRiAzMpJdnTPBGUjAsxhdNzRcWTylfZ/7JHLG7wXCVaYbkIsjVo4TvE3qxU4BesbGn1URE+ByGXN8QubiWI9xwRFxs0cpTwZ3tJg4Himyy5kIwuVjEjuOOp3rsM7KwMwcLlWbsfukz4oxUe3LgqHaMs2mDVYvghUgfEqlwGsuRkNdODOGfrlim//XQZollEtQIsg4zXLYcBPOYWYLyq9D4UHgQu25uonNWJQEgVv8vpmFfpyfPop5zD//3Dz78x9nm8P0sQLXkCoB3Ty0XFRKMzM4GW+1V5B0m/XORfBXkwadX3U7KSs4z+0wthWiRyPquHg+v0VfoN14iuOMkxVeMSioczL4k7i75jYr0x79hfeFDI5ove+Bk+KtVxMz/n84ILw82d0GJHAKkBmWepVmyu0Z7cpg6/YCEhe0Bo/OItoRsRx3rAP1nQW4hLxbFnaKC/7d+WvotdOj4Gcv3vCrEeH+USZgfHmP3+weRhHKTql2zhzkImxzJiswnwTgOG0kbJtN5FJCYthxmq2bfSKPV1M7+Y3y9Fycje9Xk7mH0aXMlrW2Wi2PHs/upsszkaXaOJzd3YzRgbxjFVtumGTJmW5PjwVbCnw3qIWPKRW0YFnCEh31YL0Ld5CSCg5DVoCrymtcQgQXNcaB1Qa8wDIM3LFtyhgwzNrOtbBfwzCO9TLWlLnq8lytJguJ3fvJ6PxZI5SxHsBkbRQvqBsrq7RKY1+wXW5FFte68cbnEn4czOf/o/J3eR6PLuZXi9xsTXNA9+d5WVh/GEhle2oqurykRmbrflkPDpbYjAryrDQ8OAWaqPCq18mP/JiIhn905vb67HKFnm3OLuZYSis6cX1ZHw3vV4sR9dnk7vJf87sh5uxkwaoFGITjwQD7A7sXBpE1QFCsT6LMhUs95ILfD/9z7vF5HoxXU4/TO7+MPlhYYD4Lf9yt7g5X95Nr6fLu8VsciZZKL1PDJcCMGevSBiZO02BvxcfbwAwLrcML+OsgZAN0GMU3I6yR+hzppizWV1+3Bnez4HKZCsNBc0a3mWl/m6FUTu1rMesZdiGtJpzNyuF3NawAe4bsdiUXZ7NS7VM7juRZ32bH5Hx1ZPKjauTB5hATDp8lVncSnKYdSyX4zMiXZLpRGEYFznnlaSd+svJN4vmXNRNC7nsdt+LjyqAoWhAgC9gPs5rjsfXtcz1TTAyMZ5o3PUz+ViJWvG0EiNd5EwCcgwiMma7aZHxj5SKy/pQXCJpxx9r/Rw0AQjcSOfKbT1jaXtaZjvzcAYxwPiiVUyzBNpVIJ/VMd3gzCnyyRXl7DnnhlNjODWGU2M4NYZTYzg1ek8N98RodkV69Ofyvum7HEGaIffksBvAirCk46qWsAGgKIvdtuyaD6IB8dCU+KUDuqpCSK4WlSZVAIX+/Ud57z6do081bU0jVJzJCEoZJXqQUZb1lg5aQW8A2mftF6jfsqQxijQZlxCLG7EhT/q3TAwYrdJDORUiLjvdeY+qwzeFDEsJqK5uynrG1nIdGYhqf8x7P8lH0fblhiWjRQCwjEkHZCw21UPyhoTLRkL4LboXU/gFb6PddOC0j1K0qoN+jmXSySh8mpH+QlhAujAap7UIlrapA0c7C+eKNw1ENrJeBHAuPBW8Jj+dPsjp0rkyP/xWQqXbj25dZ2x2utdXhPZRpaG221mOdXRwfRStB3K20S9d24kAixS5g/p414ESDZRooEQDJfralMihQqCkOsKoAC8hQpHtCNcD0fLG24gW7OyYnn3gDrXEoLlVWDUF06oXoiW/ljVrNiOt1/eKNecib/W8I0CbdqWm39p4Sj9IG194AidHrN7GzVZt76f7w4h/4RF3NSF7Ypu8ZLB1uBP7MMqyWgbCCWAyCFIUxV3oZMtEHkLcQlonSiCGXOj03eyeu/Woy54FzDZlEYG4TVmnIQKrBYSBDtpsnNXkwNz1pHF6rgloIS3nzamp4JGj12Cckw8PrCjqgrdROI5UHAOOzqpf4cJ/DobWhihszENIKh77UA9jXkrpAJi4R/Z5bT4Vvbjt92nvbb0H1M7yn2Uv0R3Le7ujPSL7DH/hF84gdGOPEnLYesPWG7beV9h6zrZT+VZeeKsklhOTotVrBdKlLfKydXYkAHk2IRZcEqI9xigMZNQqqYCBLdINz2QCNwvLyzYsa5a4TtuWyUD1LEeRqosz2UjsblEoNYgOaVCo87LeBuXBQ9YBhF8GCaekVcMpy5UcNkDFGoQPDQBBgx9ExkvQ6WCWNn8Y8E6yi9WubfIsxKEULsylFBpHKIUGEUoRUGfcH6pghHQYTHhfVnqOyEsGE9KbKOqCt2Tm+nABXNXlfI8FhwRKD0dwBbUI+grI40UqKla012VLM+9oEuXGswkoWLQ9DxO8pDdRDKe+7Iy1fF3WYl+ZGOdvMO79FRQgvF6W3zPRAskL7rdqu0enwd3zC4wDGO2Cj3JuFmi6zTOdaayy42yVafbB4R40jEzFWVmASkcYsVCkjLNoFB4+cLRqeS0TlWkloVsAqEMEoxReLqEx8wWhy6RW+JzzyOu0xAH096LIyicPjevBeycgPhrRNW25jXcUUU4mMoUZM5HvjI6awLs6rEYD56xYuzN3Lj6aWXYQ78uujjZA+DcFuRRb0U5Yne/6pwPLXFryFSsSGwAM9xBCrPxTQ8uCu9XdYBYv58xTmBlbK/0khRnS0kT6FhshZ2+461bWMOY0NI/FQkgHwuJa6qi2daR994DXwJatVlIi1wd3TjSDrjlvY1tWaUgt4AOrRXx5aNIU6Ss5MTVxISegA7LHoAZLokRPWBdDapIMZpQGSlTsOPQw9CX9Sc71SAMJB2epsmPND0wimaZ7xeeZQIl2JTrPo8bMIEYiq7ekID3wzbMlwBlP3TWecRnsxBYgJzwJhuLM09qc586D4qDW5vhG5bWzfT+I0ljW5BycHtXQKFZdH6rqUWMNq07wPzknrRFYhceEh7Inr4ewz7AbVJAB91iVMi/3LDWhc0k1jRkTE1uZgGhOzI6urpde7odbxnDLGG4Zwy1juGUMt4zhljHcMoZbxnDLGG4Zwy3jZ90ynBsGRvl8/vUCafAZKzKRSeNtBBiTZTBxH0+Wo+mlzNOoQJfTxdICxEd8aSGdQoVTY6MhM/GR57pIc1s04i88Q8MiSZZ1dGsoO+c2te6TKgJkNn6n+rv/YudrwSOhfP7Xnr0fXV9PLrWXxfl0cinjfii4AaAuccOKgucNCWcomlbmoMZbD8F8mI4nN3dno/nY1iFh5hHGTYIu5qPZ+z9e3t3OL3vuKlg9+XnG6ow+yp4RCDG5tM/nKnCBBhIOQz4XYUWEL8DnmfvKrBaWzZKQrk5VSPyUyQhwuveprP2sfOS15AsgCAWTg0f4qTVv9Sv6pwznKF8SDXgj8EyXEc2MCfKkOlZCRinZNwWbc5ZJ1wTd2e/5/ZyvugZ9lXIyk1rTKnscg+nHS/etRzI98rf92kf6nQueytXszNcTGeaGPOvjeFd2bXfP5XRlPVt+2ATDJvhH2wTOBqhFukFLIeCmn70P5tOz95jiFXK+YpqNhYlMY9MSiLRsSJQxfNY+mvhwLd2vJAs4Fym4Ubay8Kbd5tNmWYtHoWLFzHImCnxNuzThg/I/qgALTlbLUpepbYU3j7zG656Cl82ynOk3ekjDMDJtzF4ZrD5fIHVG18kL3s7qMusc0x7EGCkOeTrblMr/0sJMdDANVvV5jwudyI4CHTnS85iyUZapl5GeeYLNuHjUfGEg6Qy/3Ug6o6jocHmsIjwW4A9Q1jsreXBA5NJr4HB7ZvreLKPjG1G1HVL7QMg5hdgWFRToOrdeBbr7zsJ14aR3evLaEoMNWkhYpnHF2RpKL+caRq7l+NOMQUQealeKLw+NrSHxEZdXc46nEYgkayt9RAwByNt9T+MSGVs5Hsa8xNyViadmrQU+M7ZTGQNSuvDw1r1iXd6araWe6bbK6IKUZy3mPWhZXq4/mDC/a7M4ddxgZzeCc6uqU3sB9dxatnr1ycPO+LAGo2oImIxpAw1dsDyXs6sAmjVRj3Z7VmR96uu3mQwN0JNs7+eEetgLlto808zeyL2Cjf52GS1pZ+7ftMmOTq1/Iz9wRR3I70B+B/I7kN+B/H4N8uuQXp6W25dZW2TZEq527SH6xazivVbmBPb5UhTc7ncK8Utqz0j52/XRQNCY5+KR17sr3m7KjGLCRj78lqivJOCPHSPeqBTjfyDA7BQYEJXNIxDXNrSr7z4WOudSManr3PBUR2q3T163pa+AwsWMEcai5mm7r4RUfKixixW4qTOIX0oRk7Tchu59AHWpJULsoMKjVTZNmlZsMXJGOKDgzxEsowvejiUV2dPnC34AG/kcEFI5L/mKeCiA72GuG4YbLlJkwR6Nnk6uuKh7sLNOHRBoe6wrj4OS+kLlMFxnxncYfp52O15bax+EnXf5SuS5VRn6UHclIXYPiGhRL22UnT0l7Gc4pXrAM0JxNc5ReEoI0FRnl6nJXHVFRgA6g403JHTyCPh70W7IuHhThkUaw+ZJEyWcYLuuTdhK2w/5WyF8H20X5VmddDmrY3ZWc3RK1QPmswew8kCmZj85XIzU4ER+VsQSRSNCpkE3rYliDNdopMtAnJVdVRbLUuU+UuSfZZl5z8EhWWd4lrgv1OlGPHK9/FOWpx3G3nFKScWuKeSQyAAADr7e6yFVNFC30sg+kyyN/7JSAMcmBI5YPxiGCtHENX30BsbmkFI9dgG6TIxUSkwEpD9MNJNt1e5IdTa/h1wZ52V9L7KMm7gdeUg8NXQXIYgKF9uQW1Y/IHyE4moFCetQLorI0VHiCaaTV6x5QP6J7jHj0i3XYTjntbu3XloAh7wh20fqpntmADGULTkva78y5YpHofodW1Hnbr1pEa8l2JsG4/dsfxSBgRscuMGBGxy4wYEbHLjBgRscuMGBG/wH4gZdOwGeISPxs8MIGoDLKITxBduWpZtRni/5tkIjFIdWxdCUYkk8GoxE3lNw5wUdE9cpfsoamdEo6mDkGeM2vcxunkMqdhMS2Eb600EU52p4TV73MCjg/qJTaedAggAeeCtk87wiEe1TvERP04c/6UVfsv8D0FtDrmYw9G3+ZiELI4vlU4MSOl4Z0YCC1xwsviBsOVGwQcwfJepHpsEZtigQwz2TtemhtbE4/H9GMX2w7imqh9n5GK8M3jAOVwXFKLOog6fveQNm6Dm9vCzXotiP31+BXI+Nonl7CsJhN8tZ8ZxezWp9S4zjtW5QaqScerwYkBAre1rczi9dJtBCHf7SLDD45fkFKKjrAHc7v3TY1w8sR4NvTQ39hqN4300EHFilA0EaowoHBRrDMTYcY8MxNhxjwzE2HGO/nmPMjYmRl+sXnV6nebl2/aIB4sRSMM/e+ZCXaxpDIS/XB+MnjGu2amdlE7NRI7jQSq0PqcHeIzHbmmzveUaMyEBMHK8MjN78rhmYK8x94CGUtCEt1KyriO0h/KIWbWXTGp9n7LhoXXs1GWNyXyAD8zUR2zGKC03O4u9EigdWdPJMiM9mgLORLFH0pr1x6dyl7gowQjEKWZOJU1ZgpfJpldMBtlbdfS6aDS33kzuAGmJHxphgqYeaP/LaaaqJ9LgrSLOd+8kHGc1hlw67dNilv7Bd6uzQrgE57c+KGn21s2wwpEaY1eVKYBCCTDRVznZK2QUid11UFKIVLG966MYvoldOjwr+dFTznLOGv/DWXBRlV6R8S3LGWIjx6PfhTcMjxZt9BgWgT3AK9wzur/dT3LNFRdg5WnGeveg7zjnPoLePot1dlmu7TgDhhN8AgNUEw5Oy+ybxOABKvmXNW/1W3wT8anruuqNgisMX9nk8OR/dXi7v5pPRGeTg7DuOedHWLIfmHXjsK9Y8KGL3NpyRddlVQU1w0TBf5yuble7NqtTlAUBaR+de20k5RhJMn2uoalmSF7sCYQbS4+ozjO3nGls371fB8l0r0hfQuTFkrRdbDpKr+hG9blGjarKpyB9npY29ISFwlxeQoREizgmQ1qm27VgZPlYHdpMpYlUwti2oJdOrMuM5bGzLxWAe19H16PKH5fRscTefgMMx5EIdjzClqH4V+6kTktLq/Gcda9EB2hnS4A8s72Ry07o1/Lf5LOjjrBT2KFDwK86arnYOCYXxZLQWDJycmxAtPM5lrWAPwOpc8EaLLXLwhUL4agUOIY/8f8gEEBg5yB2EtTczFgQzrt4TauLPIanpDgOzhF2ExenU3thUna2U+pknHfUMAVciK8R60962qY0Y5M18XxK7YTEPi/lXupidhSyK+/Ljz85U88jrhtqUEoiSr89q/ij4EzF5NDlWTFH/eh0vE8mfYrBNzIgS2w/jilqEe1VHqH5wvC6pt6WNEYh+cTIfCh0GNGrSda3jH2OTpdgvOCjHGWbsFz5j7kEhZOK7dMNelvhOZYSOTt/+bJo/dwzjeR9lZB+noAOy0aPtTcgpYD/IAZMu5qR/IFtxir00UPcw8F9n4J1BX8Od5IWCjKqqy0f+H6Uo8EajeuWf6U0j1sW8zPmzghLQmiLwUIgcQSCI/BylqbTdb2tBxCuIw+BRRKqLQPikSJU0SisBNIp1owQVO1U6F74Fb1sVJ1ODiETbPhNfDgRGqveHPA6VIZTM58JSPjBX/TQY+0C/OSJ6lr31b67QhwPNSmP0/tpvC9aziKRYOhwKB25tx3sWLKBMA+ZurVdRZpeZPF30zz/renTgVPMQG2nN2slR0k/qe/FiHh0pYy5Mhwdv7U6XO/vB7hNZdfuZk4EADARgIAD/OAQgEiTpKC1zFQ7kpQGTospMitn5z3rL6XhLGn6ISJgu+s9EA2uBZINZYONnHDUIN0mpAdNcpOpioXHR5KMWGcs/GsdiCtI4SiUONd2JZRUlyDDuzxUTdHgU0NNn64Si0S8LkUQBLCcO83iTZ1116g0KyUlKQGv6+SRQD1k+P3lf6gS/cZTBndfbwxnOh/U/rP9/nPXv+uWj8efz1/vkAwRqXSxHy9vFBGTNaD0618lTjAx2KdIHvt9yaM4bkKu2fdbXzWOU45MNuj7knrkxirONxhxBZKrx2TUmlnX6JjEIVbYt1jMdgS1ru4YAqHUSjij6UVNA3G9e4ogT9gVvZf9ExJYp8ukXsErPWcp1Wh4EoJO5k8FJQyNvw0CTRzpzNCGTntMY76c+g7ZIZndaPJYmwJxtTVZHYs9JAHEtlNZFEkzqw1DXZjQpFBeOXg2pWUbmIVaVTLihX8rsGsN4wpkR3+NOsQ6O+Oimh0HQpMiuRJ4LU0avPPnQzBhSFe4tQny+YpU0HeNqkdWtW9f3G67Ig+6h/mkmmMDMulpzNatjvkL7HGzShLDTdbmAkTG18heAhstGUPAEoTf0QLWizfmZDFEuaZFsoCcwyECABgI0EKCBAH0lAuRlsJEX6pe58EnbMeT49K7xgFpos5eZH5MAD+ik5C3s8zLPyyessfEC0oRxanYxBCrtpCO/RJ/mZRrkpNxTKgw4Q3+flUVBbyMGak3oJIjQPvW51CBKSTXcawmVrWljVNtekFTSE1UZOZJ/VYgLmEgEgwjfH4ysEiSZAbmH8TJPNG6H9yhnGYPVwtSaMmA16E62Ca2hrWvNk2hkUdQ4KRiIos7K7bYrJNlCcZQD6JviUBDVFfg5TmkEe32mYR/s426Rd+vedFHDZhs227DZvsRmczZaiqFpmp9rawKV0N+L1LimKkDFUy+Dr0REdBZaOAToPYiYxCjEoLQoBB/QX6i+xZZjpF8uwsp7SHeJLEc9rnXHrMBGToWVyiA2TiCHeftVzJurOOWFeKmxymg+Hd3dzKcXU7A3x6f5ZHS5nF5N7kaz2d14cn43HWvUYjqe3E3OzydnyzuVNy2GWlzeXmj47fX0fDoZ340Wi+liObpequruyxpcSUTTskIbjlzwgtf+HXhUC7YQGZ+gCSUA9Fsmm7CMG6GMOhX5kyvqSsYci5imeVBrYEqh4GikypMe7bVPk8hzkfPbCvwz7IbwMeSl866Qcf+lhQx9NIa4F5Pr6eTudnZ5MxrfLc7eT64maM9bCH62YSag2YVrkxYxGfJKeKhFt15j5ALp/0PusREkeRXN+nG/0IFXAbrkWY4PJseBMvp3gbO6hMxptUq4Ny2aFvIVZBpOWzQTY+OLapDURKonI5+QuSw8p4Y/diJ9mPMqR73I7cXFZLGE5YouGAuVp2/Bi0zVZseDAKmqxR2iV29fkUVEqAvbvwEwLKBg4VpnZq03eMFMyVROswBEGieUxzFGTL11aRP/0l23ImtStrz2lx4C9NpehfaRxBrMw2hjZ295IdcTrHABMyitmFkTDKFiesKVg3H1Crlb7YrZyrdUjE71JGuv9Jv49JNZPBjrrsjCTaoxtieNv5lQJFCL9RqiAQYd73DsZBZaKfvo7PSpyT1gOzMcAcMRMBwBwxEwHAH/IEeAQ/4rmaL3qIJ4Rc8/AdC2fAdBjmScV+cSN5LRiQF7MPw9aChMNdGg60UuiljodXD8sDjlNxIG0IjXrTChDMx+UhwXA0OMhzSCJIGxw57q62LX8J4+Atj+Ikou80i0ZAamQ9/u0px7KCcdM0BnvH5oyKOPn/MUa0tJTU0s9Aos5W3fdyzkWH8QjZAhpqh8zC4Vo7CiX5v6a0A5ycSGcy3bsb/0C7m3WBUoCjC/7aRiml06TTJJGf1gGczY/coefmvYcMOGGzbcl9twntciqs6bl+ZuMdEH926mC94q3byXOpQq7NWDUnU4IfQ0CqNdOnlFLZims1AINzmFAjo5IhRsWbbMayu6mGYySFH0W3Q2T3w5VJJYjLsAiyxa24dSRBDMDLhcSnb8KqdnJKWknFXJOVnso62+1411WBD/yAvCjcLDsjX/2RGQ/UDH6NlwClW7kYopnA4BgshPWZBnBKS1pV3REqj2LOFZr711V7QhxFWESEiEDYhZnEVi/rpxe+OeqrE1JjHUOps6tUotjNOgBjnKmq8fEfiCtzj6Wn3vO6N7SI8H8kt7dOITQwubxCMNtj7NYo7AHj6e9qn3xUgaKD8AUPBqzChAd2BPGORAhea0FCr5IgYUYXBcGvNDb5xwk3qYUGWHCGkY5vQqwEa0eg42rDpSX6QSSiVtV1F+0xGzPUk35V9nRTp5arwnMjc/qX3ZFW4rnc7/1vmf9FJP+YH4DsR3IL4D8R2I75cnvg7hXZX19uda6eBnLrr7rehLBkGRrqVivbW/bCniOA6IiC3PJV+zdOe+9YwCzs4xJT4EoiuXQN6sViDwMHq02M7AfkYuR7b1ENvxYDARalISakpnK/Gf8VdrzEktQkXcdyOPkc6EQ6pj9PeOWerNpTZAxDlc89YO6OlusSlrE+TIeeUnM1rG7c/2ChUe8EW2Lri4RXt2UJk9rO1hbf+drG1/XXcvSEB9DsVPVys3jn5EGeCi5VO/FeU2FIFhS3T1EIC76hAR+Igh1Ebpd+PShz0Jg9wfDkfvh49XmmtoWH2SsajUod5FA+468KRKyM/jRRSMkyOh+svW1ifeiwzftN7kSK9nCJIBZSBpuHmvEsX+mPE2QjwGxlWFZcgNOVRM2xN0ha3tIA0d1tqw1r7EWnPXGfvpqyWfk26HrtPqqEg3EBPVvFVAkmGLrirM1EEKEMioquAfuQf6uYuN4MGEvu8yUdraTln6kNVlZZ8gilWR+c8XNcsEt7IHDSeOMqesKPSR2ZfhDhw1furKlo/9rHcUYFWe8vdZmRupgIR8LzKTj+20yx9GKn6H01iXP8g7/R9hO8GIFK3cMTQXX38pR0LT5Q/y9kWLudfSnjJBc9Eyz2iMskqnXY7SCrhjk6Hr2pYKDeTzot3lvD+NYOUKGiBrefjkrwyAu/XqnYoU6LQTuZlED0c/I06Po5ncNFKLaaJIyR1WPHXBWoTjvsPzHD9BPYIz8n350R3Rs7wsuEocTWkuPSt6ijhSsTLjuPjHTswYVjXiPudek7DaI4/BFJBdoc4rEwAnPMrisXEQ179ao/jPLO1TQgJVflNSqZYnD0zLmpBG++zRQOU7ExsMHxVzuSlaaVBnQP3jE8W7dYLkRP0WW140xJtSoImenWkCoFtrXKbdFj3JzVp9icwzE21Z57xpXKGyhfsyZO+8wQT0nzmdJeRYKFLunXUabOw2dWgF0pnwTJl8bHmR8UyGi1A8lsjJCQNPC5JD0D57C+e8LNpzthU5SdkDsIX4C6nuYnpufhAoWGzWuwDgauYd2CXblZ2VA0cXbG9YqwuIsdC3LkOkG4iRnuXvl1eXttf6yRuZ95xlziH9nkO89Z8lsiasA/4kL+rHM8OZGBDdGQh0ANb8oOVb7xsA5OVQbfmW7KpLds9z/XPHTWRjnCY4LWwPJSz27FPpGIZ8+aUoHuwvUqF6ckT8xYOyenLLESAdDPSSNudRIKrvOc18lC/yhzG7LjNOu9C0Hu8UNLaPA4vi/WZ11gRMYVtWHuUAEKUaV6yy/btiXtzQK9Y88MzZIJFUdYW7mKNqClhOkOgAnUFZTkhcDKMSH5EpdZcjJAJrKpaCxXix1uT4WnojqF/emgAQWcE3GUey7pJ6DfUJ/Q2I/PXvyo6m/E2PLgmh9Arl/T77ORufuyMdD+oN+WPXNas25E1eE2kVAETKmqZ0P0QB/e+Y5WwHuV2dVTfLuzX4mBctEwU9ZSMIvE3sx3rjjik6eE3X3KzMc/uLtKee6OghjIyvffbJRwxjfzk9ynOnCWnUafsRiA2CCID7RAqSE6OsO4L37ftYgbDVvTvfQ4ZXi1gBr5P+JndAo6J54jUZRgcbvYc4JaKXEaeEdyNxcNFryZznPQrMubi/d29zgXBp3hXKewSpo8I5o95XxDWUw/u0Ykg1rH4Egz7wLIGNagXqCJcBiA3M5T/wZHVXR7yImzS6p4hnZEzozWLDKnIymUc6ZkCV1cRagJpHC3gP914feMXqB56NmiXfVjnTocIoRj1ahLJhpLXMunrNM2Bb64Ll+c5i5rxgW1p0WbOiWfG6psDbIvM7dltUYTu3de4cJIsH3qaE5kJybe+JkKTFltUtXlldzsfCCYxq1hdVKXKzaOQDTc6gObpFC5Iol8BL2PKpD+xTfokIoWS28TcVKS1Boul+01IlPNKP/GPrPnnHLIDo46bb3hfWfnZZpiTlpwx94Mg5XFgs8kKU5Zc4974TsRhwC0Rq9wuEbUTI5iHB1kGhFnjzyWsqslljKXHOoshJQXAfRMZL8tOOLc/ddcJzZync94n2FC7+rakjLzEAv1jmSBIMwC8WiMX9ArnDbytA2N8ecXhYsIkSTRuDw3amiywGA/a7+SKjukGmPsjUB5n6IFMfZOqDTH2QqQ8y9UGmPsjUB5n6IFMfZOqDTH2QqQ8y9UGmPsjUB5n6IFMfZOqDTH2QqR/2lcxYs7kvWZ0dNbztqpd4RaRdo+YWfy9aXtHfZy7KhJtEFyT9blzI/0volBv5fcPaoyd+//yeQGRGyYRBiNMNI+EMyZONNEWAELBGlyNhUjesVQE84ef3/F4rDOjjmQrsumFtXZZb8lPXimkzbDvA3KNnF14kaVmDmbG6FamoWNEud8j2QLAb0mES+7OE2xNpPRBhq+hcpEjqfo3aqBYPW3LD2mX5oFMbuQEzvVGDUF61ZBjGouZpS6oSjTd0Of1o/1lVuGX1g4bNOcYBpaDbopbAxh2UvhwCw0oaVtKnrKRYqp6jFefZEcw7r5+/oK5Wj9MUhQdXq0cl0LpaPV6XrZ90whnvu7uaN7y9Wj3Oyw5dvpYqAzYqVG+LhvOCVtKo7xtBIFjzteonHodu6b1Zif4OP9X5zILgj6pah+JtXkQnigIvo5gCiTY4s/W5Ua1poWVZidQJJN21Nkj09c1yej49G0H457vZfHI+mU+uzyaLu9PRAgJu9zTnYbANJ8ecLasuzhYAbUM/5jwVFQjANc0AuDrkb6uG18/62mCSM56LRxCKne6wWzq5UP+XrGMDpjwSbcFzkLuoHiOlGOuGrjEJpgCLggfkeLdmhM+RiNh5l89AD9wuAMS02+3/+J4NNay0YaV9kZXmrLKaNy3ravai3LExg4dzUTctSTC55SD68LPDdflK5PlWahs3ZRaA9YsxxRNmGCUxJ1u+jQSwAGdjv5lo3CIVqt6P3MuLzv4K6/ciWFSc6s5JpF78GfHl9uNb+AH9bdK3oovBYxGKpTA0mmVubufXpjy1okjnwest3LWikzrjNZ0xuQchOKacLeTQcBCRM7OBeMNpUQg7F36k+p/MUOgHE7b3J/rRB2MJDOt8WOd/h+vcvbPW26OWNQ8vXOGBrRGOzxIq8pQCJmIFIO0vbXskL3IKB6mK5a+fTHVGDIaYnov3r/AjPEoDt58XdH+OL0DGGbk4aE7yWBwjWLvYhL8DbGx5+ZvYQ6g2rCJeAvRHpzL8o+y4HoM5ia5ufv9E2jdRN3T+mQYKyp8qtab/UX3EeRiy/UPmJm4o63ZV5qL8eScZyn/KPI/SU8xuUJd/5mkbodwEGxwrmWBkFGe6r7YlD6HqiUMVqc3drupA/aR/LggD99uWHyHU4qovDcYwmp8+ms5Ilpia4aiqyzUKEp8v/plcnU7md5Pr+c3l5dXkenm3WI6Wt4vJAi6dEnk+vZ4u3k/Gd7P5zcV8sljQMj0h8FVCjP8oRUEM+MN0IFrcqXddGLB1Jr/JhXv1RoGUMgGqtyKeEamrsy6gfJ8RiUrRbN+kyaeDCglARbWf8SKzeT8sWt+00eIFe+A8uHpXBRzzJq0FMXhS8PPOWPBIQDjeDpp8AUl/Tb8xFu/qAFqtSYJa960PdX+PdXJtVoJKYG2f8thkYf6QHfCUKv3VT/EPMqGtYjC9neCwAGG69zp2OU7ahg05bMhhQ/7tNqSzGfNyx/J294JEW/IFCJqn8q2A0k4Cx1rzHgGRIVWom0cwJtOcbsi6yFITVheiWM87Y7gt4dSsWkKcFahgc/4ku+ODTOpHi1gKnc3JfiP9IotwpzPsaONiZIseEFo7LCAapueXND3O1LSwX0GCx+tHJT75Way6DLivK3OJ03ueZwTpJEVSwew1TjucxsgbKRYKqjQmALgurARhLp2YJc2tQtpRef3WV1AKyHu6b6+oZIAxzxmv4aJK6+h09HkN23uvHybu1zFxrlFXWXzCXP0c/+2ob3Wfq/Mer2RlA6L6f8a2FRProgmciXvKBQ7FveV8p2K/iOdRrCwi/VJLtm5Od+cib70sEs97pcf/ef8rcXfo2Dsv6NELevKSHjxvFJ/b0ef28tldNAUPrYCIb7gsdFGynDoEh5UEPsORdly3YVD07q54W0uF8Ff2JZac0GgbZBx6gWet/4lxaNSHxC8UdSPxC3meJD5a0kll8b+/Jli0V2UmVuJQyaiHSrDAQr+ceBG62L6EW/EznYPLlOXowGUOa7+7al36PrW9xbw7/979EcV/hqxKoXur9HOML9O4O2OXt0LvTVTu6us1z8DyhWdyxxz2C9tP1PqKPD8lkrPYtW5sDeyTeWjsL73WqadCfFjiuIijw54pvO8/kR3Hg9iuPFhAn5B7CzaGaYt85Tpcf3GoJc4/RefLMGuR6vZfYQfObeDcBs5t4NwGzm3g3AbObeDcBs7tF8q5OVzbWqzaoxTl4l83YKLz8N7s/tF6XfM1jZVoASRcogX+QTgRMwhG7oKmDy7/7X11kbKcObuJbjgSf7GX6WxEwZtmkW54ZjQnfTnBhAm7h/vIiVnmgMKQM2ew1ot2VuYi3ZGcyhdi1UJQvyZMwGxQYSZmggrjymlkJFmkRkX4D4v66oHmFqglDSHPik4HInLRtKhnCpamg6WrJIKw4e5qzhozHqcsB9m8y/PEy3gx6nrKHIp9Jx30ozMV4D41yfUnBKf7GsyHMow2CzjIkBwv4DIT5VlZ1pkoWMutWig6nA7cqURB3acoY6qRHq+pwXIhR+AYBw9oMZkWjYzykGbLj6rKDSSzrUhYElMsZDFdFN0NF3XZVac7DPblbIZP5ayKNO8yfgWhpYo1VuvSt2lxeJP1lHFmsLeMbz5pvv10h0Gm0lYpAAOfiT0l91Q62TKR76tLFXCqALaaf8kwZ8Cd5qJYd/o22hPqjDctzwLiGYCtF0oU5Z3zQRlnZfVhgzNfFpRgEo0uAO990WkUiwct68Budllb1umF8d2AKtmXXxRSrS4rXreGz7DPcsIO3yPiTIOPcu4NUHEw+T6UNoS40y594BQQlHCGnjo4RoNs0cKSqwv6FDJ7krw6unwJig9DgHNDWhWZRuFu9eJmeViv4gDrV/1J8bwgZlZOynzdGFpm8RHK4yJCB/xfWvAtN0QWUsv3ZVfPeC1KE7eqrGFYM9HuP1u/YOisroK7G88uGVBrvdHB0Yz2FIcmJ6O9rMV6zes+3uA8L5/I3H16KKjfBSvPJ6JxqNpChCrvI76EjgeA5lmhp1LncmQu9YSfy1wWWl7kyVO+jwUI8bjZ9YWfNty4pEZFA3FoxEtTJgyCgEEQMAgCBkHAIAgYBAGDIGAQBAyCgEEQMAgCBkHAIAgYBAGDIODvVxDgCAEa0fKjLQYdebYQ4IIXEDKE31bAF9zWhGRFUMTfVuKU++qmbEtTjKApbL/96a+o7274GZFujlKZsOFIHvXP/4Dx5Hx0e7m8uxr9593t7PJmNL47/WGJTvBzkZaN7IKO901BymKWgLSTd01A8rToC5zza+m5Fza8ZS8TcSky4t4bCHGZiYpDqINnWBqXRYaRJln+fS28GtEeFO44Ld/6NqwaHrEyBTC1f1agsPG5jsToVz7viU8JuLCbgdQKc3oFAhzdY/fJNGXB/ks2RNZYNK0o0taLgMfzTFqQUYZA3QW9+qcFRKTUjXv3PoqKRI9zB1DP8aJlDn9MJiawqIvPmYwvFwkRpXruCtQgOrAH0OUcDpU98uhnSl40klAi/HKm17npOFnYrKp4kS3LUV2znbJ2O2ci72qTecEdUQ2dMZWfhAIl++lD6Ud4pncEiocvBYCtnF1sAu7qEMsCFwoCaLcCwJyGMxWNHV7yRkW/wRjgkS5IgFquUhBh3WP9Cm0YLlKlC5i7MVYBpT9HPdXlVk9FzaucpfF3G+a0ItkF2pGGm4HqnKE+7O8x0NGBjg50dKCjAx19CR11aOi90gsetWWZf03Fq47iAGFlnR0X4OiWG2UZAJelLuK/6mO9l/epeyXADWUxksk79gLdLvg4hwz3ewZKmUO0yhjaJ+5WUgVkJnjdR8f9xHpb99Hu63IBaQFCoHGe1eXKyZusEXO+Fm5W+a+mot5uyyI63zHtdf/M7JuVl2gpv7K7ExM5z9y+U4w723u1jdFRceCeI5RJVCPz2ve931vMq84V0rpcwadp9C4xMJMKMBMEOCWRczwNWE9MHar6ckdUPymCIf2XXLWYLhLVx2qkp4/V4AVvvcGLvx5VwZqPCXWrLooyLr2aPRCLxQcugnViCQZqPcphRnm7Z6mV9hDLfYTS4txlFx1CH93TikYGbCX5GV+OLirkWfcFebpZrTDuMtFjBV8rGbveUzqGDl8HODA40X3eV2S/01+wrvvgfs7XvbTkWQqoZ+iJILRkj67okC7JX08v0evUnLdu2P9P1LPcFmwPcxPBhkk+PYYgcmHxSkScKYMS/c0o9mJPM6rEnmZMif5mJLOypxVZYE8jukB/G5rx2VOJLRJW4/AuseyvLj6swN1Re3jCXn6Quby7hLgsuc2IRyD3AYtrVFoEsOZ00+f01NV3NApQWerqgFIZoE975C0qpC9dbFEGcLWKAric+ABM2NwunB8DJd14kTXtcLEbLnbDxW642A0Xu+FiN1zshovdcLEbLnbDxW642A0Xu1/XxS6weDhKSeqqr3etO2Mty8v1LO/Wwt0uPtK/uXlI7+J2tm166tSIoD6L8OpC+wUzOvFqY2X8FuJl/MZqtpLZwnoa8vBBIwHea4BySfEmwhJ+I7ESXjPKiD3egoP0K/eQXr3qTJvxegvuUT4v01PCq+S2zsVfeBbvnIP0K/eQ/eKCPC+fpEqfdMTFwUyFyKpyOxQNBouq/XGZdlu7mQC0EH/hc8u5SlhbG45gBNbzB4ULF9JggiSzm7E1P90tClY1G0zL6934n/vGkhesaCEZY2ja/sx6fFlE+MozehfkK0+7nLV6dO3zjLXgckGFARH5AtChmMxhh9doF7P1PZV1n84owfVwTiZ3KXbIYo8yE675DB+s/zeuY7UspE46H3SzihUmnmQuDP/QN/BQHlUVGXw9mRHZSF/B0EvbndDIQPeVigWRjZU61OTBeg5XsW8kekuGlU6LjH+MVKHg4QtXYg1m/NnzerK3tCPCcrocg+mosUTK5eLxStWLnjyKtA3wAQkF5/RWbLn7pNg0f4Fq9BXDnzGMKHyMdDvv5U6i+IjfevQMD3Dhi4fWfm+pSEMH136sWOTg7C92sNHnfujBig5XEV/nB0pGKt3HpMWLxBrcy6rJMgd4sf5CYVX9TFcUH1bQzxhF8W4FYB164x1QY17VnN4hxxwsJCnAYXFeEjR77wzFkTMmakrm9lQX0pwoMzeuyyqkzgRKx0g7tX2hcBFFtzWGp/j8KOqygMH1uIkYxrISRA3xU8dyd0KjGoWK1yLWjEG4dSh1g3eOKFNiYuJNfoaskwS7DSJMTl8ACLlRSQnhuPrAcpGxKF4OMwE0imG0IbgdouKnXdtD3yJYT5lxteu7BIXI/a9K7ME1Dvlh+1vsbe9Tg2DYBIy4WcjPqIIDMdEA94ghawafL8VWmDAdAPhjV7YsgEaF9TKPrbe8LvmapbuzMtcL+VI8cHdpg+Jn9MhEjplSoXoeaobCAn7cDO+gCrRO+65DUbzfgGo5qLivy9Geohv0Bctzo52Ia3wkdykTJczL3Ks+hg50Pp5TBz0OnW+47sCtldyPb+4hETtZGnDbvBTFg/sUOUIOapYc2IffaqjyEwgSzYeIkGHrL+SoncJSh2rxKvD3PQFQgkdJqfztX277aKuEO3WhENOL8UFglgfwoY72w0c2z8LiqUW7J8t17aasxV8MdYrU5ZEACbx5KrT2UwLQi9f/giB0Sa+8zFvdUg12QAzWX8jTlmEcJfcJhcREm6ZCObgLVina9qyznhIRbZ1Hj0DCHmXTn1N8rzJwLtLNmXTrtoClMQNZCAhX4c2pBySCjxjGv10uRLHOORyqkYnFCETGmW2Rd1ptp77GH3NSNqLlC7ZtCD94woevLDokkfSTIFsDivDoBpZCxkterNsNIbDqdefBMb1ZOr8sqxWDkU4szfUeZFQu6aUQ/Z+8ah3G9l2he0vFcnQcIsmxYgfr6auib8v3lAgr2V/BgZf7FlsfNtLCIaok40rIH3CfvCnyncNW90vvP4iMq71+p73f4PdpWeacqdfvxmbV4s8ewRDiQqmQBAcioTvJW6iHG73qWVzrIzHRsUwj0r8esOZbUivtgwgtEWFGD1hXkPUKZQCpb6vWk9KpeO1dJyTIBeQRvlaBPWquoLZMFWWZqh5WyKhqo2Nbxw4Qx7HxINj1hXSr7/p3yItsbAd17KCOHdSxgzp2UMcO6thBHTuoYwd17KCOHdSxgzp2UMcO6thBHTuoYwd17KCOHdSxgzp2UMcO6thBHTuoYwd17KCOHdSxgzp2UMd+DnWso4rlIAQ42kKKH6TwX0sTKz2ez9i2YmIdjRhkcY7SSyIVEzNqW5ZuiE6qa8utdGtWjvxl7RzAPUqoiJJFNu4+gTbLMkYaGr0damT0gmiQomlrcd/1FpD5FommRMNh1mBQH4nsJVrDTS0M06xhM9Y1feVNaqY42mTpclJqWSyQob53tX93H7plLcSPTps+OPqZC8Ps6gJLWPlFZAhykT6YAEdV2XCrp1L+6vLhkdctWTnl1Z+3uZdStaeMo+ooqx3kSNIJtJalzF7l1BMv4lbTFa3+tEhmV4IKFS22h8ClRnfX/oJhlXsq2fcaVKs/M/Kqi46/Tkeqpwq3SFhNREN3oNY9NfZkuiVKIMsljnkKVFY/2AO/cTU2kbH1UY5Y2xIMDwARjrwN9JKAWxF60o/BGlBX69VAe+MM/WcTKjet2OLylYQYzQ/o4MULOFJvVeJc5C2veyugaOf18PC44K1uzpdRWrgnEN1zUIV17CnqVatXzRWrKlGs/aoCdM/rvtg4uk4duF+RorfBCwbuvaC2COILEJUEsumwgFfFJbvnefCehnqFZ5AvYFNCGK8/8F0oW/bR3uth3DVM4BhLGRsivVdvG7ha7O1OtAitBjI6npadYU3et9v85wnDJXonu64sjdzMuvESjiC+aPnaxEmDidA/i0wUa5B2+jQLpLvmhAvkwfFj0cP4wmXDsoT1WVRQIUX5NdpOB69RVBD2zt4DL8vyoav27daeEo4omlX75NxlwdV19KbixSEpspUYdw1XnJrfpwDnioGBqdTyVrNWHe47hIOWsA/nX5BnOROFld/Mav4o+FOUNgU4N2wdIl3JsWR7owTQw7kN+TinITf9qHoUxdpuwzlPyyIVKNYLQn+FSFfaKJlt+uRs8TlvYvGzKNiTXmJ+m2u03yp43XhSYR/t1xqgfdFv/shHaduxHHO3RGhKf6H9YlbeNXFeysM4Ae70bYRmCVIDHUsKbFF+4t4lb1qZRMpL+GsRsVeC7MEAjNYRyxXspTQmoOh1cFGuWnpALLr7Jq3FvYz2Zemx235vIdofe/1Sz2XLcp+um0B50WmKYB0BnUZnbvQ2yUtExKhR9sNHhbLGqPyx92CP4sMKlqKNBrBTcPeFxr1l7mUNn1E6rJzEN4xU5mD7XzYtTLM9lTilaGVKwM6BSQFtpzusEWzsZUBF35MI5xVei9UuknVbIuQMhim7I1j6spH3SmmokWoSydEa05+v7TVAPrkliGhi7bGKkI4rxmUpmaX6ZzkVBXD2XuWe2QCRxx/8kgeS/UV6VptTQj54xF0Co8QaUV3D9X9SaaMIGonwZz6+C7fTq7evHv3VQGBKb/5op/elfiiD8HMQfg7Cz0H4OQg/B+HnIPwchJ+D8HMQfg7Cz0H4OQg/B+HnIPwchJ+D8HMQfg7Cz0H4+fcg/HQEn0zdaY9QZAmf9LVEn6rhM9luFOglcPOwUQrvlYmkaYuWoAm/ni0cpT1/kZTh87vYxq/j3pcGV+oA/zmcJ4u0Rpejva3vKeV68kVY+kMOcH6SuL0d6SnxrLxwYf61vU0t9o74OsQC4esbJ53VKQJvojVpihDXfwxkYCADAxn4RyMDDgn46srP524wFWlEd2/J1gfQsTglDjoS7ITgP/z2QP0ffnugBSjwy0t4fM5Sfl+WDzPxUYsgpXhfUYKyXOd8pFMhq8eC5Tt7f/WAKi0feGRS/JKtr1jB1m7NFhq8BmztZHuv8yur7f6zkxXTKQmlng42kGB6WFfgaFEhZMZqtqUu51HiFVCNJVtHFehLto7qzpdsHT34luJh6UyxvI32bo8Ymn7sDwz84a44uN4yc7vzhiCL7AB1C3PGEe83fnsvNdUY6NRApwY6NdCpXxidcq9TRhz5wovU1KdFL6Na9PdZWazEuquDAK6xK1hZQJVkNUjgrC4fRQY3sLJltBeAjAIXvIXxaijsFtbVottumWbIJdzGVwi656HwT9A7W4j0IpMxMVhOYFWFYUx55oxSPLythVKbsVHT8NYGsqUzoh+dbQ3yaGWjZ5IWO4Z5/rMzW3uRtLO2RGxPWnR0a1q0/FJ/BRi0f/82CG+yDTx+JTfo+Lz3oYO5t3srcqv3kM+40INqSq6LEI4XJ1Ln96LdYCgTl0zvLxoEBd5X1I8xLGeOFA5qi5SIV0LH4mw56hVnZDayDN0vgFgUoqp464XfdUsp4ORjBWJwURYXddlV1vKPLDu3XYoK7AUp6pDBnzZcm2YHTf5o0X3V7q0oGm4X5vMF3TpQ/mADsQjEbonDjcaamdVcFE0LwdSyva3FC0Ya7SsYtp2d7kZVNc3C86PPCDEmB5IYIg0iAFN+U1Lq7Vo08pzt6BL3N1yEye77LmXUSMMQkYCse6vcO1cqjOrhudpXMBaY9RlzJUsuWpY/v969pV1Lzy0vaFjTl8ZhNee0DJPqmqJIokvKdPLwp0SirGUgwOBDDpV1zCXRgD3nTeMGmrNwPyibIx2uBbXut8/NF7+LTT62oIrMZIjR8DImf6OJ0oK7YVMRA1F3fPZLV9O1HUbE4SimlGsVxataMl1ABEuu2dOqa5X9FyWOno3mc17x5N/Pe8W1VpTvPGO/7S8a7clztoWS2iOXo5jwmFTfxfsVrNc1X8MSQPqK3J9n8BopEjQTK9Jr5avuCOmGb1m/ga9bqrey/gr2vvQomkg83LDEvup1Ca+Zm/rwybuv2OfQu7R8627hK16vOT2/EHDzyOtaZM5qAz503hUQef4Dr4MxeNF7B9U30EkMQyiDVhEyFMPM2C4vGf1QFZ71A89L+XF9PPL+grSf12zLm4qlXCULUNBSm6vCL7VibjKOpNsl5xrqE3NK1uRdy/bBnj43XVt17ciNzariYc5Eypqm9MKUSmAQzzNnJipoQ2OERgkLjLLtAy1D779aENB3E1UH676F31ck0LGR+XF2qY+MKPD6ZtbH9tzj+ovtbavv/oblJC9J714I9oYh0kBYIqg7PqPNeVn7uXwOFw87cKD4c3vz7Ir9KkuryXUETXM0etqK1nschUFiqVa2fhQpx3UMFMoavCJcRq01sPYDqwXwLg2tFIiS4rIsQLFXFgBOCAEQBYnZqNEMRYhRjxbh8aoSVEMOk48QkJLl+c5i5rxgW1oUzQ9XvK4p8LbI/I7dFlXYzm2dOyTQC/qau2O9aCG1k0uaJGz51Af2aZZE+FDD5BFKtKzF2kjs1UMfVVJoV0ylgOGlUiGi0qk4zhdNSZbaF/L50IgVbB89VJFVXUqwBxULy7qP3qrAq4f52H0FY6Fcn8HD3lbrmmXcSKLA5VDe5jB++1g0sAGzKHJSEJw2ebUNne6mbkzdeJGo4axfJGZ12zNIIfpAC9HaA7kqz91NxHNnn9zvlSiqAoGQECx2HbGaMeHdC3LlUjY6bLBC08NSLVMqvlqMviYCCtvL9sgr0KzmOdc8UnBPTcHVSkHDm5A2e/ZeDy4SEt5zLbB2ySHiJ48TiYCcpfDTnuP3AFoe+8ZC2elG10Omuj3EgFgwHwDCPnypkcCggBsUcIMCblDADQq4QQE3KOAGBdyggBsUcIMCblDADQq4QQE3KOAGBdyggBsUcIMCblDADQq4QQE3KOAGBdyggBsUcIMC7tMVcI7y7amsH1Z5+fRC1ZuMmwQhIokKxotsHolQXmf2l2U34Km5FK7k83vVsYhQ1KJC0Vr0NR/l3USj7zhwP5ymxoQeoAYTeH8SjBuEcg2h6ML86jRkxoYZMPwkVxB4JGPnB9KId8dHubH62q6KjoiHcV6iPI881aJV+Chah4a6T+pTU2fiDQkjgLWdL+Umaj7QbC5S4EUa6mGTDJtk2CR7TpF7kUOovqOWffxqwajiFgnI6mm52yersmU1k498W7W6slCLHS0VqJx7SvlqZ7lrr1jRsXzJPiqGK6I6j5cL9eZ95fyG3Z45NgBd/uBX4OOV7OBwf/oL+h3aU9JpWjP2h6app1zQw95yjrI1oNfRcY4Q5MhIPiNVwxdS0vIDXe4r8qkRSL5K/DQ5cU6YYQlCo4pp5pKFmLbugrd7hyWK/yKKCBkvZN+m6inhRhVx0XFo1BzKLxQ1ivILebZPPjpq6RR8QminFC9CyUFUabJPorx/aPuK7A3p7R7vipa4S04OgLvwIpIjt0CEN/ALhFKq+MzHcZEG9izy+74jTUtX4ueOwvbQWMO8RPqdRUmRZGYi0Dy2LfR1PYboIkNqwJEGXnRzGBijgTEaGKOBMRoYo4ExGhijgTH6R2WMHKaoKO2Of6FIFRJYjHcF24oU7Sh9oWqIC8+lDSsKnjdOmicNtIQprIlCblbRZIKE4qZ5l4EKR6bRaEz+q7Deq/JeJUyyVl02E9Y1GSwC2aG5t7NCHbhjqoUIZxAkKPK6+yZdhzbZUSwBEnkPp3d3MIz9sAr+AVeBswIaXr5o3oNJ/APfPZVaXQJpnsAo0Q6/1Ro4nQSeYsHLIIBriI59ooOOpAvbU7OLgoqgr2T5uOVirbuoZ1QR6yEk20kxleGevvqFor0JC7laklLaJZtHFbBV6kmI1cYi70iGORnAtQ7G2wJDgN+Tl17Uh7U4rMW/0Vp01mFabqWzyrMX4+nlzcXd2c3V1eR6ubgbzWZ30/Grt68u5je3s0UE8TOlS1l2Jrs45ywNzLZiaDoNcZ14kW7K2o75qBCO329VmR8Y0ZuUJBDwnHHXn69rt89oF+e4yWaiJNV27aasT1m25k0IscN2ytKHrC4r+7Suy67I/OeLmgED0Prw6daEJD8FzqPeL5fLy/Thp65sCVk5zcu1HnCtFT4tywcnY+dpWZsro/x9VuZG6CEh34us3TS+F6yqOpAcOdgeJ1uD9cVYMqkyXSOhaCpSJmgmWsZv7L3Ier+C4ILKHZxfKUSZr7URl2LZgtpjhYJm4oXC9h51Z0530lcs0lxQJtJapIzfmM4P2zNoLjpowkd7taOsBAQ0ZHV2bUslQvJ50e5y3vTayFSuFAmMY8Inf0MC3KmX5zk+a+6fpw/35Ue3e+DJjTuPgvKcVY24z7lfNqd0zDwGHSHbT42U8yCpTQQkpWUtlSAqPHTTbAMPQ284DsyxW4+iXMGRLhKTiymcY8zvwqLl34ss40UEFC0t7f8joHhptbm8F6zvAoVEa/DcCnxo9B1P1ueRKNcz2yNfxNrL7J+yq1Nu5qbbPzMganMAt8U2HDINjFYRlUUqXEQE6WCcoAky+bAjdFZry13eBCT/OosbPlg1EWZy0xgvAIKDCT3lY5TNwUR0FFF69jVVE2dd05Zbkx1kzNOShj+xzx4PJPeePTW4+5ZETkHaGsHExmPP4T7mjUyaKn+3zoUncE4X6CNHRC0WQIn0uEw7XNqWUL9Iv+Lwi19C3VK0NStS7jGtGjxZrXhKNTOkM5F0OkJ/I/waO/AFUgL/2Zvu87Joz9lW5Dvyclm0C/EXUt3F9Nz8IFAwOq93AcD1/nVgl2xXdlYFFFsvFOyZlCr4clNzlvk+xg6yp0aNdOp1eO33y6tL+0H6yRu095xlDsP8nov1RtfQwyT2MoifqumydwH8SV7Uj2fmqmFAdKcg0AEU0vdNb6E4VC7pHgoRL9xTSOtgIJNzsQ4KaWeFM5ZueBR4wdvTnaf9s7+8WcPLuCUKl2zHNbGUyxLYOzuKEhZ79rmzGIbMjsrhrH6RCtWTkzCqeJjJ3NVuOQKkEwbcpD65Tnfm8A+OmXi5wMw6LBLoSWNFfDtuVBLPyiZ+EEdLUEYACsBcXZcZHztqXCL9vizLyqOgAKLUE6Tm1k+fVa7UBtjA2DZ14K6ffSaM039BHf4Ld98qQIT17nXVJ/EEDt0UD94SD98Qr03OMz3EpI8AIrvkhsOBqH5X9qvlb3qASwgl8DcgJ/Bvb7PxuTsRM7NR4JcB1mxds2pDBaI1N3yaAvF6KxrCI8xytrtn6YMzYrO8W4sC2UtRUAYigkCpxn6sN16zUgA1owtvVua5/UXaU090jBBGRtE++1QmhrG/nB7ludNELVLntNpzI993G5dWALEt7WBC/X+ct+4xKpjrnHHSaXyf7LCnhCs1rnIhXTlCxM7efvbcm3qMFObi/t6VOsxFunHuzgsZsUfxqVHR8YZVhMaZR1rt4oG3KdkHi7xsvSeyfhZbVrcofnBPMwsnMNfxvBS56aV8IEVbzUk4XcPfVFq4BM9ht2UEkUf+sXWfPIoDIPq46bb3hb0SLsvUvn47n5of2vAD76qxte1hQlMPh7Y4oIhhx556fB6oIdz/vhKGASKbWYV84Vn/1csWUbVNsx5ElBn7IDJekp92dPERtSUdKV62xLGfBeJ7ME/xZcz3voxXwSICWYUhzLKCxI41gwqklArjkjOwjWEtX5e1kIYyRID1sSUQ+VOdnNKJWIKIoMAY2hCJuoH5zz6/Y4xx7POat7EHeWN59fbVxhkRsM0hDTcKFHJnChEwXK/eviK7AZ7i41v5I/gTpeigw2KantUxcgz2P4XbUudttieRrXn7YgXsoPgaFF+D4mtQfA2Kr0HxNSi+BsXXoPgaFF+D4mtQfA2Kr0HxNSi+BsXXoPgaFF+D4mtQfA2Kr0HxNSi+BsXXoPgaFF+/OsXXf731dFt/fcUM83fy11dbFIWAdutP0I+1aFrgPBZdvWIpV3AQLkj3W1FzozMTJf5rqu2sLrMulTqy90rFdlbW5KIOGjhWZHUpMngHQovnfMwrfOUkLWt+VMsUJUfMeamqxSNLd/CSZORllo+T/2k/4yS5LNtW8IQVWTIXjzypIX5AnZRFknFIH4CYtMwhA1JSlO1GFOvvEpb8KGf6x+R2fpmIJlnBecGzJBcP8M4uKdsNr5Ob5ShhkGHyWA5owXnWXOOYoIDu1Ulbdxy+sKruBJxzzsDCmnzVN7o4inZs3r564veveod8z2hU1RE0fZLAqm+Sssh3SbsRTcKq6psmKZ+K5B46m/wGv2ereOfk9aOkdW8Vuui297yGpyLLeSKyt0nNcw7hTbO3ScPrR56UGPD/TbKqy20iiqOqLlPeNIkczib5P//7/02KUg++ULdxXjdvAdw1vE6g7bd6LvTc8Cwp6wSkOc1WtC3PjpNrKM/WPGnaGkq+S2o5JtlRzVlTFsloNoViLU9Em2Q8F/e4G/NdkpW8Sa5vlgmocBueTMfno3ej6/H8Zjq+m47fwcbN390sjtQQnCQsA+kETn3Q+WTDa548lV2eJZI2JSxZiWLN66oWBezlI1ZkR23NUlAKJmqyklVZtlhCzkddPsmeFWWbpOUjDHZTJu2Gtck9z8ti3SSiSFjS8IrBlyRmA++SJ9FuEtHK+cx4mjN5IPWuzBXLG700G5lMo/lZ+77o8nxvQ6DfvatBSJp5+yAFKV2OZwn8WMj8k5Jo2wsJOLN2jYTaIkCKF3xNSbZCwmPFOmQkaslt2Mqkj2y3BWTTMmRa8b+tuZEMGvwjwO6+SWtxzy/5I3b5ibXp5lqmBcTfC1Wbeiirz7TFFVXFRb/ANQ91/PXVA9+9Onl1vbgSaV1Wm7LgGMd+zKGf+nrZdOs1b0ANc/JqjlOQ4HzIdbMruzrZmvePX/3Xn97uJd/wKlLhLUu/crdQApDbYUnL7TGrqpwfNzztatHujuUOPcaajgTkDFCE2D1rKnLVxWMDMccWfDyfnN3Mx3ej2/H05tChQ1b3STL6gEMkP4nXybsERR36+TgZycYS3C4JbSd5ncEdqS675m2ijr43x4l8FUY3YUBtaiCDRSKKFigEB2KeNKzI7suPyeuVyHkCK7UFMvHmO0NOc84eeYMvKDLWFZDF0FbBi6xJxOEDjXzu3b29Vn8WxuErrKXkaQNjxPDMOcKNz7OkkdscTnxgtR7VkoPjcwaEBTp3O7USAmCg7ezjChl2jbtr3sZKnN/MJ2AbdT2+W0zmH6Znk+eWu7uans1vZu9vrntemd0slnfXN8vp+fRstJzeXC+Aoq7KmsspU3mjIFgO9t8OFJSzB+H//OsryMz06uSVKI+1ddgx8KPHZGuf+/W+6mnr1Qlt6b+eT0vI5jqRvFtsxTbJlu0SuF+JotOL277Js+8ScbOAV9VWx+ViCyTA8SAzrAkTFmV0x9jvStQwyfXGkgq4pAZuNwmNpHSIhtyzOi0zftek0u7qy9KOM7blNTuwm24bniVtmUCXkj/OE+hfg+OiOtscy8l70YY4G11N5iNch5xB8lRnfekXNqzOnljNj1PsqWJagKHVPNSh4Wz4737ncVasazeX5VoUHwTDiFAz1jQqOAzF3bQVhUDyGZ060MKl+BMerrj6MVdzZB4b3npNGLYNHlToOv36B15DIChsHEmU4I0NjEqAAUDKPgjACCk04AIzN+onlXJBP8p+wG7tCm338Vg+8M/Lq+05DE7lbL3g+ntv3yCkw1yQQMakqdpfX7WS5lwvZrLomV8MEnOhKWouCrBNwVX09pW+o6glB8KKGq5I2J/+2may1KiqztV4MriVQGef0RdcmMoq9cv36E9vX8Edc8FWvN3hYCkJFtCJGa8bKJoIKZXOVHWSNtTJdIy3Cln5q5NXymg32bKCrXH+X8EnP69G/G64WqoP318trkznnJAr4iQBUTVwd6JQ/BuQeDgmvmkSjm28BhJWqX0JV+my4EewqpDCvUksE/lNk8iliacDL7K3cJqkm6TmbVcXjWKZEpEdJ9IcA+6tloEExpQ3ybqUdcLVVdaTtGWJ9395OZVilFVXoyAFBQ6wThrSD7jJ6v2abMo8S14DyXybVJuyLZu3Sa4smP/P//7/3hw8bES55W0t0sankI9M5CBPlwLKlai3X+nCds5SPh0/80TqClA02GGGkxcqSKbjg9e1U/vtLz67bheTu9PpzdVkOZ+ewbfuJVFuQ/0cji14or8iaVq2a4hoTsmKDIE7wkXCi7be4bWJZwfnHFYmr+/gpPFmXV75P7vs7ZdOjb847YsQKTkJRzAJJwlLVFVwx7LCvbZMAA+7HTp0nIyyLJHkUZ0LybsEotglYqUY2HaTVIpDsbQJyIy+yYJuEcnJ9qAMLGU5LzJW+2IpZDq0pklqF/TTmrfkZ0RIhboDVa9+xjdwEGve8KKdYNZp+/xB8CfkYWLiKhUDFxv9OgTKdP97IOo3Rb4bpSDOPUCyYO44finMK15H9QAf4+kY1H/e5fmzql5syiecZbnm3MpVoz1tfJ6a9xNa3dgzL/lf7Pufd+Gv1H5H9UAtVSbHqVmyn3r5H43vzkaXk+vxaB6/on8/ny4ntsyBMyWlY9p/ouhiJwnukD+INnkNV95v/+03kic5wsvzu2TV5XnCcLDfJO8SPQf6thOK5sj3JL9J3M7HhHVHavPy7M2x7EyDZxs52jyhm9ZrHKBW6lRLWZ4HTEzRSMKhuBnUCeyVn7fy+gP2GF1lyRWaBJSrlaJCKRePfCHWBcvx+c/SICdGnhreXnXSzr/h7VwUa2D85NOi4uwBq2ywLiUulw9aXq6flNBdAbW4XZHOX5gofcnyByByFS+rnMcljVmH+ikG+zR/DgnJm88tJPzEbv7tRO0BSdASuCOkDakZpL0EIW9Okm9PvgXFZy5vO1LuBaq15Ht+P1+eHSfLDafD0LQ1Z1vgTirO66O2PIL/SHOF1BlKuZzUSHZVXjL4fb/D3UwUcsC+ihZe4gVcsjKsA075JBM1T1tQw8prl1QmV6xuRSoqVrTJ6/HycnG0mC9nb45fvdXfIncIzNLrxXiW8I8pmlO9gUagntFs9k2T1NJ8Rsh+oCrV69s3UhHrdRhuWKB7BJ03KB7TB97CN/Iiq8Ag7zj5fsNaDmOnCRfkqYfLGfQGB1U0yRPc+YCWaS1nJpo0L5uu5sm2a5Rm8zt8J2XyfauP+KbBW12Og4WGEmkynek7MojfzGgslrfXkqiLIlm0cBx+e5zg/gFJaAEq/YZt+VHBW8iailWWRaIX3SNPrkdLhJ6PppeAanZbeS15J3tWQwmwB1jezq9B28125hNX4iMHTYleGk0HyY449LrmqGKvy269wW/7UaQchMG8bn5MUpr0Pmnysj1M8VEg6OtMKxAlAvMo0gdiXl7VoB7m2loaRJl/nH81jvEFQtaWPXB1l09E0YiM64XlsnAzKHIp7mtW755ZNQyJrhptEZDa5bIOJcJ9Dn/2ub7mRcRUT/cn0dHPJ2veT1zhtRMjy8Epat6hdVuTMHq1w1v7zfXlD3B1U4s2S7agDoVtYygoXAGlFUn9He6hpCyOFL+kXtO1NlqfeXDj5KK6L1lgb7Bhjd4eG9YsJTcC5jHqJzKMugQ+IOJLm+qY7p4kYD2HxO0tGQYpEfEMY945VjHA8ko7n7YW67Wi1c2uafkWBIAtqIVA25K8/vZff/PmO8PtEuMgqT1alWkHS/v1t//8mzfPNbc5eNGWDolNaAcVYVNhE/cym6xON1+LqKlOHyAE56KQZzzLMs1pWdqjv/wwA6iH6Jk06vN37lOvjuqQvi/Lh591eby5Xo7OlouDF0M6UHs2lSp2gofC6zeStdNN4j3sddm1R+XKWKvdLLAsr998l8iV9vqNug7q4VY3yPhtUX1AjyXHGF2z0laOvx9yX1X/+nvxMZlPFsuDgm2w9biT3fV2ldo/yB4gx1nWu/OynmDYks+0d8wCfcaigZ42x1J9zSXxOgayc4QU1i6Z/rmEGo7kt55IPTieI3jMKAZITUzy+naqeaIZvpC8Sxaj8zdIRCteH6GNzLpmRatsDx3iRhZlgu9nCXYfjW/SsgJGL2Z7c5ACYi3eROVSN0kOIGn3K+/B5kD6rOTOHWc5aDwbVaLxxcJGzjzShWbTM4UGH9il2PKmZdtKfkKjtve/nP7+t8ffSplzZBqbExi2oyYtKzp7ILWVE+EqA15bTQBwze/8KXsjL3JOf2InFOx+xbRkyT1PwTwQGmvfwSQoQTJYQ4BlZzZqwepBzbzL1EmaKfAkVdXLL5ZnpSYLdh3hwlOfq+XTbM0PLph1mZWtv2BKls2YOh3RBBfPxCL7aurrC+zVC7TXa/NC//bGMic4wmuQ9fNiLQoOpLNJJtfL6Xxy+UPcdttwhFpr5JsWs4Llu1ak8knfCPkaVQvlSlvO4iqqubpQ1xxsXiJKKNDnwNU4tsDaUi8weWE2C0a0Dc9XSc0xalTC7suuxe+s4Fr5uoHhegs6DeyUKIs3IBh85Hnj3CWVbhRsAVm9S1oORBd0YuoealY3foC8/sMvuDnjAKOVd8XSh+ZEDrNyy5Av5+IRlg7w8AwFDjx7t5hPjypRFDxLjv8iKmMNz1p9rEmZNGiDeCbFS7O6BGGh9s06hiV7VysPijto/rXas0QEMZ+c3y4mCxhDrAxsi1j6gDXCaLFkC0a1MM/Nhv329/+aLObTJBPA5sDCAOHELmH1FmW/79QmfPfE798oU2rRwGfCmLAi6YpHsD8BWq7HIJVp144T2F5NkuOgFjjwZ6Oz9xMluynrHWz7o6x8KuDLQH/8FgQymGNNnuyoJgcZaFe9kdNgXJPsXPwmGVVVsgBdVfLb498f//bETo+x6WKiSC7GC2TttDoePgQ8nqoaYiSgGh+GEwQRG1Eh6UTOHyb4m/tdUoEwFzbFN2h2jqI+KXjhylc8WQpeH/0++Y9FApuD13owktf/cvwvxx/fvMVFUYDRfC5SAQIsODcqaL+SdAJWn5CnJhreo4ip3FZgNSZvLQXYpIqiPUmQhMBSXq1EKlhuaKa6pidrBpYEpzfL98nREQSXOMLFAFNydFSxdpPc8w3wtZloYALuAHZX6gxxasZ5cl+WLXQQ1qMUQcEQUXp+L/cS1AyjD8ZfeBMajcewFkV7nExXiPonqOyfcKHh8bHlScHhWIT3Rau8ABRdAGEqhgzRlAwdKezkq2Yb8Rd+koDmF4YIp0QWZ1nWJP/9b79Nrk7xelzg9Q5oifLBeP3fv//d8b8BWlX1m+S/v/3X438HyOJJrFoc4+NVzbYc5vQNfuJ///a38iVw7U30Ek7eJf/9r/9+/DtAiKJpIcYEysv0tLxm9fZff3f0+O8MB+e7ZHQx01rW4wYsFGCmUUyXwdDr92A0t1sGBPCNWqKiScqqPRIojMMPguUpGpCb6UO5XKH5CEjfirI4Kiu5ZpH6qa8F8UEhZaAHbQE2EK4q9TnknO3w5Pypg5yIr96+eoS199lYrRddfj5MT+ej5eTQd3CWB9YMz9L6/KTi3kTv0+yRf1/WD2Dh93Uu1e/xOxYbVh+2cGaZvKY2La+at8mGs7pNYJreJrzg9Vru3CfZfyXwg9TzPJGtoEUnaE6xFrTshvuII2SUJaVZ4CElLHuUZMO0uCs7JHNgIACN0cYP3akzLiMX1Mdyah9EayZ7DwMmK3+5PY9sRN60R2fL6QdUZt7Mp5PF3ent/Hoyjitt6Xvj6WI5uu4z2qYlJ/85mZ9NF88o+X4ymi/vcAMcLLtYTmaLvcWklvYTvk+++KwPlEXNF/7p7Su1skS//bh6VU4eCbUwZ9JKh4/U4nylw4taYyCBHIo0c5UNaP9eO9MfdQvw6TfXd4v3N9/fzSbzq+liAbbwMMDTm+vRJZAZNM481EkwSbEdxZ1B+tiyes1bA/h8H2uHm0ityRwslrBcPkwn9PPubhejC5i05wzVsSx0LDHH8ar+5Lg3hy/ra/Lx+8nocvmeDjUO8J8k2RVaFLU9XpflOufHuh5WVY0aKAxYckDmtbG7/jNYnSkaYq3OlJXZ38QI+Fy0hWv/+6V6s9cITp0YcKCsTI+IJZzCKxM5YgwH6lCnIc8O+FDF6vufVXMoUpEL40SdOdr6BQxcVLtnSiP6WrFlb47VKXXRCbj1FTz5/fG3x/+CHbzARYr84TeNX0NV5iLdJfdluwHpyD06iwBvJvsgFT4gNmHZI69bgbiyThqeo+5atG+lRwVUYDllrS5W1aPpMBAneUmhdYOcDJho0ktdD1xave4SX1jo1VZf5/C1s7JoSlR21Pry2Evv/4kKc4yNz3fAlqMRD3RY3r3aDW84Kd2YC6w0CJB2NBw/Ajh6iEMgZcdJxgvBQLttJ7LAy4YWGzxtOFoLwCBoWecTgzpXoK7BS8+PEQbwx0TaCDXJjwWEN2kBX/DsR/x2qf1B/QB2gUuFUNKIbZXvjH1lUcKFssqlHh4u77abhMOxs9E6RchNX11PYW1Px9gFItRZ8qY9zyH8m7wxNQeZe7EVd0BKQ7/imwojm6ZdXUv1+KZsdNDtEnBfWqkHfTuCvp0k0B6MsrT30Nwcrp5H0IYSf/kn0aab5DUsUl6/ge0D9Zy8e5dsWJGVq5UWdGlNjNwa5iT4znHIR5mHtNxgD7yQHDKQWTA6YdvmoBBSsMq/clTVqcBLvbSbV67UDp8L0u5CNJslaChN7ApYnGz3xPL8DC0hFEjzufh0W8g3eUbeVdbH6UbKO/XP87JGNyKbkr6WgYW+mjB0Opq9RBQKg7l/PT/wXUxtnYkG9vQXX7K6+ZNEtah2clkcNWnNeZHoErgKUVqiddRPosjKp3eoPYYFrygvSAzAiZlJE6MHvmvaunzgUh5rFN/4BLrvkwTpRQFis/JermU0uwFaB7xE9laKaMA7Hzs3vZok91yKBlGSe30ghMR3EbXPp+i0QWJ6xwwL7MwYx0hj2phRWnB/3mXp+CZfLxZdhefEpXjU7DUyn4cvlOSN3cuvlRG323733Nn85upmORmHfrr7tg2M85Eewr3bBy3I7oAggofUflkJujBIoiP/jjBYTtXVaPyhhSY/dbyDfiG7LB9AjKkfJgX+o5q7rmr451Kz7l9/Oo+D+53WuVcb2FIIGtlCSCRzLsaFRtD3shhlmfl9lnNWm6dLrbqEh2utvFxj0Dg1EPJRLcwe+dMvJoiGTorx/YYX0+K24Yetv5RtmXrRyJoKzup7YJ0gDt9hsw+TjeN5Zh+6+Ofr3tuvNQifal5i1/kn2ZaMzs4mi8Xd+fR6cnd5I2lOnEapkmc3o/mClH2uSV1eEkbEM6o7QOHoGug/nnWxk4QuHLgZFEeiOALh+btEg6/QUaTGgxqcPptNqW1XX9v9LxUDNtyCDiVQdo2yiEarY9yNb3yjl9jIgmIrOoyHwpvIe5TU0nT1I1jpWrqF10e44y0msxHICunt7iT5UY8MCZrw4/EzDgvvnS8cieALbq/IJh7lT2zXjIrsuc2piCLYYl12rQ4nYfTYjb5C2xF7bpwUZ4U/hxq+jYJJHNeBXP5CyeW+sqejsz+ouC77y/+MQDH7K+4JE/Pz6Xt/pBm79g/HmdFlj/XaekmgGdPQp543nypPnkklLtm8f1NRLukHkbOqTiZkGl8oa42cGCdaINgko8vvRz8s0EG5rMVf5AZH1x8tG0QtvjmrfgzC8PwGbtT6iI1E3Xnduyje4tX4/9ZVv9UBekCBrq7ykDApKYt1CWcpjdZjXIJuFkdbVmTSqtL47qAfEgzPHAcjadK6a0FGwxv6AYakbTh7FPnuRMWiILdsPNthzSvrkCIFExZpzrliEFY7UftQ8gJKCoAGW3Y0pOfPa368Pk6+qcmRtYEQnfLEkkpjKbEQaGjyjbLEYckaNMciTb4RW3AjV4X5xwq0NUXKvzlOJh8rECAzJa9FMQZI7p5Eg9ZU3nJ3jK9CFwht18CsAxluB2mPVG9ZDk5DVjzxrtkVKZj0T1fQXfHIpZz5gXNYRjVaCMGQoicZsZTE2+9Rdp9I9wEp99NuFm/eJpAsTw29v83f2c2kAi2AZBZnAU/+Au3kJNdzJP2YEmNvc4jRQlPdu0qFk/dFW8oKRd1KaWBax1+1kHdEHdaxEikslGkxkz8AJG06lEc9eFbLFSBhj6JU91ptNikv7GPbfsP5g/q3LAPH1j+qez74uMouNQ9CeazKK7MOG6k9V81duit82JeTBH16lDqZk+HFAqCfE9JtMp6O7maXox+AL3jJeb3vcNua7+i/SblL8oQQsncQbUVLO3UBGRRNxXZUIUF1aEf9iPo9S6U0zXYobaNmGi2FsQ9HOcZPA9qHxMIJjnEPMWdXrMsPOgpuy4ggKDQOGuWtaDtMWLHmrcq8s99bnFdnSlAGSgx4fi9AyL5b8LarfulSnavyGcw/fiAxNJLRRJBE85w/yqnTXtJFjxnR57sLKMecLURtgtMUL7/R5vcLluS3L3iBecz+9PJ7wHL6Ybr84Q4ctC+upy8ShTTY6jEMJ8pZTWwTyjS/Pfj+PashXNAnvq3G8OXiGLWbPhNz/Cuxb/h5ZghyyKRgSi685PXZ1Yxncv6S3yRnV0B98OmNE3BSrlAtrnq9/GE2QUOvu7Ob2+vlZJ68SxA2m08Wi9v5RD9fjS6uJ8vp2d35dHI5fnOsKlIq7ZcF3nj7KrbcUWWv3RjAYci1i/32n3+DHyLNldHTFS2vWw5OIrjqkbc2q1g5LsidDewc8rawr0GEp2wEpBYe1flGJY+NS/4547ByuWmpSVrgeGuGquV2w6SE5mkD1g3yGDPWBoqWOOb+9ztHmCi5ZDuLJ9rKQVp6/IgE/PVfE7nFTpJvVKXfJP/15kfZw9Hl4sb4B5PbDoaiw2huyFdaUiO13LIera4GL/xHbq2G8XNFAWYf2xJjCWy3JfjrSAa8aGFY8Pd9t4YPvi7JuKOluzGNh7FYiG2XsxYC4tWyRj2rXCGa40QGqSSHgKZ9CRqCsDzRJAfn+Ud64L5+c8z0ev8RMwnAHldh3HXjapbNs7zbtODUgHcT690inUZw+aozPAGjd1y5quMZE6gW5VXSli3LpZzXnOAyTgNDX2ClrH0Dw6jcQUGXKy2zsYbF8mY+0XcILOB6s5yES13eTyCUBjYP05UqG3y8jUL4f9gp0gjIGM9wFVZQOmcogyLpbyDA1L0TasGooDTSGEVudRn3CEexKJM/l/cwmywHPxAwPkfPfAhlmxVoU1LLNSa9T9BSAJqV1kTfNEQUPZpN32JYDmmMzvXQxI4JuLp3YJJvbech9qH5bHi9RjeVlVqub459UyW1I02aAnlTVfXLjsICq/UGbvWW+FGaKP1ILGzeIj1CBzTlLaB2EWQZQMcCaTyiDZru+a4Eahyhf9rlBFpyBkfK/2HxueDXPWP05oRalml5RqMuxI23lrTDFCwTuag6WNLJt/+cZOAceHOdLN9PkvEELhFvzeJSLTAZnO47s2CVVzxEGkGrNrk6keIyLSTQBjqZDmOp4wwkittNUJXfJMqtayVq1FPcG/YueW3hSK7fGDcUCcxkCBEM9sLAzwiizlgDsej4SMut5MfGst0nyf/C+2QlzWb/16sf5ZHO8hxvMTq0DNB3OZzaQVIe73DiHzXypo8r4r7EghCiJBHtCyLG2zP0cNR45XcXxmJUN2d9Pf7iFi6qIyeBWR35ToHhENAPR4UVfABno3IlLadeP4mVeJfyPO9yVr/D1wvevkmqvLP1yT2K5F8aoCDlV6P/iOIwEPnpbU0MaQy1lREd0o02nduWBUQNNBPAcnhzJ90kQV6DvoyrFXZdBnvAiyZxiUR32sViOkZ7m+lMGuHIkDdvnpF85ZBJTFncya+4Y+LQbbRAavcZ42sctte6KcbYu9H0gHyAfscJsMS8Btlgr0fqa2lSew5Xf8kqgOwlh+CVKgwmGjTiITKavjHpcODKH2w0TTjk8aTnxLqXOjJGubuzsqzVYd2InBcgGVxhQCRKE9K87Dy7VeLSx5uU5cjKtqUXnSDPt7rxRtm7qkw0IIrVyWeC7DZEYWyXt5p4JJlXlwmYh17wYjRN3iUXfCsKkVyzokS7yNEUJu2NPB4h5BTP0DxMap/x/COW9dv8QbQna14wcfRPPybygpdkvILUT0WKnpBH9+yBG8dO6VNmj06dS1Qat2UZtNVh3ih9xbS3Rpn7B48DYGYxTtYBIgiHzF1X5722ql/FLBUaOerq/AT5AHnLUxJ6GUXGqivQBgocLI+adMO3cKg0LQze5QLWu5Jq/VH6OSywSJO8Bhvb4wqKvgFjALUAWPJ/KYeI/wdiWIoVsET3GNoYRlsNgjLt47jMoGN4Y2LFN5AICRYrg5wG6JD5WhSPrBZwMfr292+Ok1OwKsdbHxjKHkk1zDNIVpWtvAkRzYiEhv4qk1JlK7S5BIEjmDmYsAiSN4fIbEjKq7psJWHWHtXSrJxlPtHwphYIOWH6iK/6q7eydZUFK3k/uh4vJIN1c3Z7NbleJsubZHR9s3w/mUOkOeIqD/721nb5EYPYylsWKA7qrTRKhxF8/eZHw0IViXJSAtebRDrUmKMW8q5J29IM7T5N2Ln/v7mraW7cRqJ/BaWTXCNamc3WZqOpHCaOU+uDx15L3lROFiTCEmsokgWAtuSq/Petfo0mqQ+Lmli25yRKIkEABIFG9+v36A8YVsxhV82arGeG9Q/WKi6obfFQqWmqkwXOlGHbL+J7MnDRFI+U6wnlpCPBHW4EsDxwHAaTszwTWHEJs6lLWIiN7h63HEiVBvvdY279XC00bfV7VUvH1/E9JVmN1dnV5fXVF+rprlCu06xDvhgCkFc0fxPjPbKzc2ILax3YoObaJlyiLMbnSZcoIXQkpGtv5KVt8rx9juNDpTooGzPwrgndcE309jIauf1lHwY9eY1WvQAWwmVGoaxDSHf4CqZPqhVkNiiTrv8TWHa6a9tKGJYoQO6oArIaYionAZZGk31zwIWlvbXzGgwUp2r/E5b1LM+rSCzWfuIFeSLnRqpJWitbUVMa5VBiTbD6uhejy2H08w//+vePTPJCVMLNdsGiePhYmzvcciYsUh9CoAj7eDxfauXGNjzP1McfP/T/8fOHNjOCApyg57jj2O5manvJUqOUBWm+H6J7JgrMLTMFfieph4jnBY3ed3XOc+9gaXiQDmpCV3gq/6a0Q7SNGYzWC/sfrR7IywNww1b6ct/u9d8cioMAN3BqsvJhvrgdnt/QkuWM6mqmVwvvR68JiXjIQ7SURUm0Ih40JoukxK3Ke2lNxLdkm2hUC55MLWhOiFBk059G7L3ae17bBe5CBoXw0MoWBkS7QKCAtCkQx9SejsAWI45R3ln71aka2WSxjq1gwiCWSMk5hYVZCGjnPvUlYB+huwZre7JgA5Oei+ySa6IsonkB1UiF5kBf9pngmLAb1J5mOIB6Lmpae1sPbRxmi3HDV8Z7o5qeSzQFYdIlXt2c//f24uZ8qMYYYmNq5MQ0SIiC6IvQJRgLE4nmueRq2FMLPaWPantA5p6ZhGxGp8b1rux0s8KnVXUxUAIlijjSQn1O1UUwxGw9mfWEAIiyGxMBU3OdEd7YvNVYTM6M/NrBGcysYCGWr7rwGPYZTQIysRO28ahXx6pbvwmhG8RtA9ploRfEM9++/e7nNTw/u725GP1ZdTDxBYK+mwfQ5cWX0RA8R7gAI71LloDrP/yz78qJhH77jEHg02hTeBK2E+R0IiG5Fb1yKdEQ6SzPVguChZOGN2IX4sbf/Ef5nHINyQM/IYptxM0kyMDjKhA8T9MEEuv0HmvPXgxQxEDgUrbugDnd86vY9HOzrVxx9tAbI/NOznsm7g4UK72eOFdCFa/Cl1EFEbYIe036DWs69SxWbiXBSXKm0LtutK/5a3mS0kRJ423psA0oM+29TSalrymm2g320s136uN+TlOKz9U6udU3Ssn5TWJ5DNn4VcezAPBgZ9eInsZetZJmCUB5BO6u5zhjaBotUyO1cHLTo+4WNu1cXbjIZA+JzTPwXQ86gUAlaG8dAIOid9SbqAnJaQNFXdMzWbP3DyF0aanrEXLsWhAMhVT7CJYbj6I1kaJ3sZG4HtWuO6gSNQyb3Sd8q0lTOqgV0WeYyLqh4IvfTtbxWZy9jndnBTcBLuL9Bvkvf0+soUTEXnWkdOrysGLVVkfoKHKccTTLLL3Vu3JSW7GWAd54R3OOzTddjaxtW6uFwMEVSEiZmfXVPV2hglGo4AA+RdfUpcfaQBngcPOF8wO5E/KB5dpqHelxtDyjuTG6t8aoeYjaiYQB47ArYSi2RzMpXCWMX04pVfnLs6n1W0r0l7fDEbsc4f0ZqHEokLfEY8R8ikIAs10EiAjUMSlnTHBwUqkKsCC9A0kGgwLmSVHw6kEp9la4z8IKlRpiXoBcq3WqYI/2wpn0QdY/8oCZqokQ4Mth/4AEb428wvjg1qfNMGj0eTqkjSkT2RnbzhUA/4O5C/ym+8M/tMA2k2aPyHO7v47EO7a/anzKG1SFtXHu4kRLusCWuA98FNjIbyj8vPZruqNyA+XMjLcgtckXzkNmGG9BxNCqZDGCQoouClhdcc7hdWUym6dpT8KTRHhvOT2AacpP1QUxjtAdcX/H8CIO3JKFJXMYx/KzvBFkCjyKjPtpH7iFMdN524Cd5rMseTJXzBeIhjdA38iVFHkjfKnkjcI3nIf5A6HuI7pnjqZqJE5IkV3AhpV35ljrkqkPAs9N/+oQ3XfDHXRYsh0LZxDjMsNuUULg1TZL34pt5VseWy3p+2r++4kwHcdu3OVcew91S9Tj1Vxg/OwGqmrtRjaQK5FBzfomEYhnh6MRrEVbDxkABMsU+TyRoAB4cWS6pKr0Bhc6EnXaDEKefV6U2JyVabp3+oTIyB0H8txWfk/G2TLW3Fvj5sN5bv20fDNFt2FikwNfSFtm4p3DcgOLk64nBQGpdgj/7Fk50RtR6I2B2l2FADISQdtK3bQoFPeYC4FRGHNUQtuD9tp9dTuoQJiJZioy6s97AZrm2DM6f2eB6jR+o4d3Q4AQioS+TCfTSjHrE3dV+hHLfJHqaFWm+LYI7INdS9yQ7quEOltXyaqBLWgnDJ0BwB+/1CqaVW1U96AnEVy7JLzZU3t6Fz78jz81wEG/KC3ib7UyRA173QosPgNQbH1DCKCyzWaWrq4ejOXkQTjU6q+Sr/Xq5jaqNsCKkOalbbrgieov8+yKgJm9MIu8StA0iI5QdyXebJNy3V5sUXG9FTtWuQUATA3bw5mefp2Qrutznfo3O7FMBg2mMtyuLzdTIS207gkZWqT5sx62Xt/1r8tsndWSCTRWBWUEsy3ANqDAsCXb8Mgb9HbYxqOZUKteSEXyfC+F8gey5JjFxMS0BP1hJgRHIc+CC24Fxi4qbSeJR6xb1BKI95oQMwhka/UrnUdDRdDSNfjlE4dcSp9LDKodkvWYLO90kbyq0UL3mGo3T7bUk9bhX8A5mHiUX+vV4ugK3AdwCx4j9s5VD+SX72mL/56Qky7ZKTUfavk3E9Dk6kBqmkaPuU2RbbUwBJPrkjoZGRh9dgP2C5sQ5UBUpDpz8MM5433KDgsKPocS10VY+GmqMHI+UQA5VjFBxVKWiMI8nTxxMYwKvtYkPy0Af82k9RxAJqhiuuYjaVvEMG7n2m/jum4MJxwNt1D18s96Knr162svblLlQZ3CY8O90dFn8H+yXjbogzefN4f5AQNgVJ7ja0BdJZ71OvzvPlERdaCc5yIDjM+CFDtm2PvxijA1PN/7uVkJArOG/x00VRWp9hRdPWy++pZe3T+JkayiQ9+HehMFjF5REBzSKxnz+92nZhmxeg2zqjtPmPD6l15nRiyvHVeAhIMqlyazLEq8WTjKr6VvojGrY+SMD6oj6oOYhCn4s3+fpOmlXv6BH0m2glKvOgM5IIfNMpJLFvWJqObM5o9UkpxL5pDtDPiT3601PsPOoPFlx/+RFLDjrPsckTm/KvKZ1cV8Vf0DDU60mv43S/8Zx73OhLAqNrI6TkqHatnM2Bv+Kn/T3fiAfllGbq5jtIoPqrvk1N3gzpejXkc7Yh6JYLBRz+MraPPFd8gDjZTanfF9guybvs29MNo8RWR0LzuDztMFDiA857lWaWmhdCIS0fRUkjhmiozcJdX4SKZfkaNhkzjyZkEDnKIuabnIuNk46odPipGXC/l2HkDanb/++j+c/0aEd98JAA=="
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
45
|
});
|
|
@@ -13377,7 +13377,11 @@ var init_validator = __esm({
|
|
|
13377
13377
|
label: { type: "string" },
|
|
13378
13378
|
accessibilityLabel: { type: "string" },
|
|
13379
13379
|
onTap: { $ref: "#/$defs/action" },
|
|
13380
|
-
badge: { $ref: "#/$defs/navBadge" }
|
|
13380
|
+
badge: { $ref: "#/$defs/navBadge" },
|
|
13381
|
+
// RFC 0010 slot bindings (core.proto TopBarAction 7–9): they bind the app's nav worker.
|
|
13382
|
+
hiddenPath: { type: "string" },
|
|
13383
|
+
labelPath: { type: "string" },
|
|
13384
|
+
iconPath: { type: "string" }
|
|
13381
13385
|
}
|
|
13382
13386
|
},
|
|
13383
13387
|
navBadge: {
|
|
@@ -14832,7 +14836,6 @@ function webViewOriginAllowed(url, origins) {
|
|
|
14832
14836
|
}
|
|
14833
14837
|
var init_webview_origin = __esm({
|
|
14834
14838
|
"../../core/ts/src/webview-origin.ts"() {
|
|
14835
|
-
"use strict";
|
|
14836
14839
|
init_define_HHP_CATALOG();
|
|
14837
14840
|
}
|
|
14838
14841
|
});
|
|
@@ -16646,6 +16649,7 @@ function collectServiceBindings(descriptor) {
|
|
|
16646
16649
|
const ownCollapse = node.collapseWhenEmpty === true;
|
|
16647
16650
|
for (const [k2, v2] of Object.entries(node)) {
|
|
16648
16651
|
if (at2 === "" && k2 === "input" && v2 !== null && typeof v2 === "object") continue;
|
|
16652
|
+
if (/^topBar\.actions\[\d+\]$/.test(at2) && (k2 === "hiddenPath" || k2 === "labelPath" || k2 === "iconPath")) continue;
|
|
16649
16653
|
visit(v2, at2 ? `${at2}.${k2}` : k2, ownCollapse && typeof v2 === "string");
|
|
16650
16654
|
}
|
|
16651
16655
|
}
|
|
@@ -18687,6 +18691,7 @@ var init_validate_descriptor_core = __esm({
|
|
|
18687
18691
|
events: "array",
|
|
18688
18692
|
eventsPath: "string",
|
|
18689
18693
|
onSelectEvent: "any",
|
|
18694
|
+
onVisibleDateChange: "any",
|
|
18690
18695
|
scrollToDate: "string",
|
|
18691
18696
|
scrollToDatePath: "string",
|
|
18692
18697
|
stickyHeaders: "boolean"
|
|
@@ -18964,9 +18969,11 @@ var init_validate_descriptor_core = __esm({
|
|
|
18964
18969
|
items: "array",
|
|
18965
18970
|
itemsPath: "string",
|
|
18966
18971
|
onPullToRefresh: "any",
|
|
18972
|
+
onTopItemChange: "any",
|
|
18967
18973
|
pagination: "any",
|
|
18968
18974
|
reverseLayout: "boolean",
|
|
18969
18975
|
rowSwipeActions: "any",
|
|
18976
|
+
scrollToItemPath: "string",
|
|
18970
18977
|
spacing: "number",
|
|
18971
18978
|
staggerMs: "number",
|
|
18972
18979
|
stickyHeader: "any"
|
|
@@ -19517,7 +19524,7 @@ var init_validate_descriptor_core = __esm({
|
|
|
19517
19524
|
transcriptScroll: "TranscriptScroll"
|
|
19518
19525
|
};
|
|
19519
19526
|
NATIVE_NESTED_PROPS = {
|
|
19520
|
-
Agenda: { events: "list:CalendarEvent", onSelectEvent: "Action" },
|
|
19527
|
+
Agenda: { events: "list:CalendarEvent", onSelectEvent: "Action", onVisibleDateChange: "Action" },
|
|
19521
19528
|
AlertDialog: { confirmAction: "Action", cancelAction: "Action" },
|
|
19522
19529
|
AvatarStrip: { onTap: "Action" },
|
|
19523
19530
|
Banner: { action: "Action" },
|
|
@@ -19536,7 +19543,7 @@ var init_validate_descriptor_core = __esm({
|
|
|
19536
19543
|
Form: { onSubmit: "Action" },
|
|
19537
19544
|
FragmentSlot: { cases: "list:FragmentSlotCase" },
|
|
19538
19545
|
Grid: { onPullToRefresh: "Action", pagination: "Pagination" },
|
|
19539
|
-
LazyList: { onPullToRefresh: "Action", pagination: "Pagination", rowSwipeActions: "SwipeActionSet" },
|
|
19546
|
+
LazyList: { onPullToRefresh: "Action", onTopItemChange: "Action", pagination: "Pagination", rowSwipeActions: "SwipeActionSet" },
|
|
19540
19547
|
ListItem: { onTap: "Action" },
|
|
19541
19548
|
Map: {
|
|
19542
19549
|
markers: "list:MapMarker",
|
|
@@ -22215,7 +22222,7 @@ var init_player_host_manifest = __esm({
|
|
|
22215
22222
|
"../../apps/himi-player/player-host-manifest.ts"() {
|
|
22216
22223
|
init_define_HHP_CATALOG();
|
|
22217
22224
|
PLAYER_HOST_MANIFEST = {
|
|
22218
|
-
"version": "1.
|
|
22225
|
+
"version": "1.8.0",
|
|
22219
22226
|
"capabilities": [
|
|
22220
22227
|
"animation",
|
|
22221
22228
|
"app_info",
|
|
@@ -36431,7 +36438,7 @@ function sameJson(a2, b2) {
|
|
|
36431
36438
|
}
|
|
36432
36439
|
return true;
|
|
36433
36440
|
}
|
|
36434
|
-
var resolveScalarStatic, Bound, BOUND_LIST_WINDOW_START, BOUND_LIST_WINDOW_STEP, BoundListWindowContext, WindowGrowth, PageCycle, PageCycleContext, cursorString, BoundList, readsService, BoundRow;
|
|
36441
|
+
var resolveScalarStatic, Bound, BOUND_LIST_WINDOW_START, BOUND_LIST_WINDOW_STEP, BoundListWindowContext, RevealRowContext, WindowGrowth, PageCycle, PageCycleContext, cursorString, BoundList, ROW_SHELL_STYLE, readsService, BoundRow;
|
|
36435
36442
|
var init_bindings2 = __esm({
|
|
36436
36443
|
"../../core/web-renderer/src/bindings.tsx"() {
|
|
36437
36444
|
"use strict";
|
|
@@ -36456,6 +36463,7 @@ var init_bindings2 = __esm({
|
|
|
36456
36463
|
BOUND_LIST_WINDOW_START = 30;
|
|
36457
36464
|
BOUND_LIST_WINDOW_STEP = 30;
|
|
36458
36465
|
BoundListWindowContext = React4.createContext(true);
|
|
36466
|
+
RevealRowContext = React4.createContext(void 0);
|
|
36459
36467
|
WindowGrowth = ({ onNear, style }) => {
|
|
36460
36468
|
const ref = React4.useRef(null);
|
|
36461
36469
|
React4.useEffect(() => {
|
|
@@ -36530,7 +36538,7 @@ var init_bindings2 = __esm({
|
|
|
36530
36538
|
};
|
|
36531
36539
|
PageCycleContext = React4.createContext(null);
|
|
36532
36540
|
cursorString = (v2) => typeof v2 === "string" ? v2 : "";
|
|
36533
|
-
BoundList = ({ ctx, itemsPath, template, renderRow, windowed = false, wrapRows, footer, rowSize = 1, markerStyle, pageCursor }) => {
|
|
36541
|
+
BoundList = ({ ctx, itemsPath, template, renderRow, windowed = false, wrapRows, footer, rowSize = 1, markerStyle, pageCursor, tagRows = false }) => {
|
|
36534
36542
|
const local = itemsPath.startsWith("$item.");
|
|
36535
36543
|
const bound2 = useBoundValue(ctx, local ? "" : itemsPath);
|
|
36536
36544
|
const arr2 = local ? ctx.itemScope?.[itemsPath.slice("$item.".length)] : bound2;
|
|
@@ -36541,16 +36549,26 @@ var init_bindings2 = __esm({
|
|
|
36541
36549
|
useEveryRowForFindAndPrint(on4, () => setSize(Number.POSITIVE_INFINITY));
|
|
36542
36550
|
const pages2 = usePageCycle(ctx, pageCursor);
|
|
36543
36551
|
const per = Math.max(1, Math.floor(rowSize));
|
|
36544
|
-
const
|
|
36552
|
+
const revealId = React4.useContext(RevealRowContext);
|
|
36553
|
+
const revealAt = on4 && tagRows && revealId ? items.findIndex((item) => item?.id === revealId) : -1;
|
|
36554
|
+
React4.useEffect(() => {
|
|
36555
|
+
if (revealAt >= 0) setSize((n2) => Math.max(n2, revealAt + 1));
|
|
36556
|
+
}, [revealAt]);
|
|
36557
|
+
const count2 = on4 ? Math.min(Math.max(Math.ceil(size / per) * per, revealAt + 1), items.length) : items.length;
|
|
36545
36558
|
const rows = items.slice(0, count2).map((item, i2) => {
|
|
36546
|
-
const
|
|
36547
|
-
|
|
36559
|
+
const id = item?.id;
|
|
36560
|
+
const key3 = String(id ?? i2);
|
|
36561
|
+
if (tagRows && typeof id === "string" && id) {
|
|
36562
|
+
return /* @__PURE__ */ jsx3("div", { "data-himalaya-row-id": id, style: ROW_SHELL_STYLE, children: /* @__PURE__ */ jsx3(BoundRow, { ctx, template, item, index: i2, renderRow }) }, key3);
|
|
36563
|
+
}
|
|
36564
|
+
return /* @__PURE__ */ jsx3(BoundRow, { ctx, template, item, index: i2, renderRow }, key3);
|
|
36548
36565
|
});
|
|
36549
36566
|
return /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
36550
36567
|
wrapRows ? wrapRows(rows) : rows,
|
|
36551
36568
|
count2 < items.length ? /* @__PURE__ */ jsx3(WindowGrowth, { style: markerStyle, onNear: () => setSize((n2) => Math.max(n2, count2) + BOUND_LIST_WINDOW_STEP) }, count2) : footer && pageCursor !== void 0 ? /* @__PURE__ */ jsx3(PageCycleContext.Provider, { value: pages2, children: footer }) : footer ?? null
|
|
36552
36569
|
] });
|
|
36553
36570
|
};
|
|
36571
|
+
ROW_SHELL_STYLE = { display: "contents" };
|
|
36554
36572
|
readsService = /* @__PURE__ */ new WeakMap();
|
|
36555
36573
|
BoundRow = React4.memo(
|
|
36556
36574
|
({ ctx, template, item, index, renderRow }) => {
|
|
@@ -36562,6 +36580,238 @@ var init_bindings2 = __esm({
|
|
|
36562
36580
|
}
|
|
36563
36581
|
});
|
|
36564
36582
|
|
|
36583
|
+
// ../../core/web-renderer/src/scrollAnchors.ts
|
|
36584
|
+
import React5 from "react";
|
|
36585
|
+
function topAnchorId(anchors, tolerance = TOP_ANCHOR_TOLERANCE_PX) {
|
|
36586
|
+
let picked = anchors[0]?.id ?? null;
|
|
36587
|
+
for (const a2 of anchors) if (a2.top <= tolerance) picked = a2.id;
|
|
36588
|
+
return picked;
|
|
36589
|
+
}
|
|
36590
|
+
function anchorRowId(value2) {
|
|
36591
|
+
if (typeof value2 !== "string") return null;
|
|
36592
|
+
return value2.split("|", 1)[0] || null;
|
|
36593
|
+
}
|
|
36594
|
+
function boxOf(el2) {
|
|
36595
|
+
const view = el2.ownerDocument.defaultView;
|
|
36596
|
+
let node = el2;
|
|
36597
|
+
while (node && view?.getComputedStyle(node).display === "contents") node = node.firstElementChild;
|
|
36598
|
+
return node && view?.getComputedStyle(node).display === "none" ? null : node;
|
|
36599
|
+
}
|
|
36600
|
+
function screenScale(el2, axis) {
|
|
36601
|
+
const r3 = el2.getBoundingClientRect();
|
|
36602
|
+
const drawn = axis === "y" ? r3.height : r3.width;
|
|
36603
|
+
const laidOut = axis === "y" ? el2.offsetHeight : el2.offsetWidth;
|
|
36604
|
+
return drawn > 0 && laidOut > 0 ? drawn / laidOut : 1;
|
|
36605
|
+
}
|
|
36606
|
+
function scrollChain(el2) {
|
|
36607
|
+
const doc = el2.ownerDocument;
|
|
36608
|
+
const view = doc.defaultView;
|
|
36609
|
+
const page = doc.scrollingElement;
|
|
36610
|
+
const chain = [];
|
|
36611
|
+
for (let node = el2.parentElement; node && view; node = node.parentElement) {
|
|
36612
|
+
if (node === page) break;
|
|
36613
|
+
if (/(auto|scroll|overlay)/.test(view.getComputedStyle(node).overflowY) && node.scrollHeight > node.clientHeight) chain.push(node);
|
|
36614
|
+
}
|
|
36615
|
+
if (page && page.scrollHeight > page.clientHeight) chain.push(page);
|
|
36616
|
+
return chain;
|
|
36617
|
+
}
|
|
36618
|
+
function visibleArea(el2) {
|
|
36619
|
+
const doc = el2.ownerDocument;
|
|
36620
|
+
const view = doc.defaultView;
|
|
36621
|
+
const chain = scrollChain(el2);
|
|
36622
|
+
const scale = chain[0] ? screenScale(chain[0], "y") : 1;
|
|
36623
|
+
const boxes = chain.filter((s2) => s2 !== doc.scrollingElement);
|
|
36624
|
+
const outer = boxes[boxes.length - 1] ?? null;
|
|
36625
|
+
let top = 0;
|
|
36626
|
+
let edge = 0;
|
|
36627
|
+
for (const s2 of boxes) {
|
|
36628
|
+
top = s2.getBoundingClientRect().top + s2.clientTop * screenScale(s2, "y");
|
|
36629
|
+
edge = Math.max(edge, top);
|
|
36630
|
+
}
|
|
36631
|
+
for (let node = el2; node && node !== outer; node = node.parentElement) {
|
|
36632
|
+
for (let sib = node.previousElementSibling; sib; sib = sib.previousElementSibling) {
|
|
36633
|
+
const style = view?.getComputedStyle(sib);
|
|
36634
|
+
if (style?.position !== "sticky" || style.top === "auto") continue;
|
|
36635
|
+
const r3 = sib.getBoundingClientRect();
|
|
36636
|
+
if (r3.height > 0 && r3.top <= edge + TOP_ANCHOR_TOLERANCE_PX * scale) edge = Math.max(edge, r3.bottom);
|
|
36637
|
+
}
|
|
36638
|
+
}
|
|
36639
|
+
return { chain, top, edge, scale };
|
|
36640
|
+
}
|
|
36641
|
+
function coveredTopInset(el2) {
|
|
36642
|
+
const { top, edge, scale } = visibleArea(el2);
|
|
36643
|
+
return Math.max(0, (edge - top) / scale);
|
|
36644
|
+
}
|
|
36645
|
+
function reachesVisibleTop(el2) {
|
|
36646
|
+
const box = boxOf(el2);
|
|
36647
|
+
if (!box) return false;
|
|
36648
|
+
const { edge, scale } = visibleArea(box);
|
|
36649
|
+
return (box.getBoundingClientRect().top - edge) / scale <= TOP_ANCHOR_TOLERANCE_PX;
|
|
36650
|
+
}
|
|
36651
|
+
function readTopAnchor(anchors) {
|
|
36652
|
+
const boxed = [];
|
|
36653
|
+
for (const a2 of anchors) {
|
|
36654
|
+
const box = boxOf(a2.el);
|
|
36655
|
+
if (box) boxed.push({ id: a2.id, box });
|
|
36656
|
+
}
|
|
36657
|
+
if (!boxed.length) return null;
|
|
36658
|
+
const { edge, scale } = visibleArea(boxed[0].box);
|
|
36659
|
+
return topAnchorId(boxed.map((b2) => ({ id: b2.id, top: (b2.box.getBoundingClientRect().top - edge) / scale })));
|
|
36660
|
+
}
|
|
36661
|
+
function scrollAnchorToTop(el2, instant) {
|
|
36662
|
+
const box = boxOf(el2);
|
|
36663
|
+
if (!box) return 0;
|
|
36664
|
+
const { chain, edge } = visibleArea(box);
|
|
36665
|
+
let rest = box.getBoundingClientRect().top - edge;
|
|
36666
|
+
const moves = [];
|
|
36667
|
+
for (const target of chain) {
|
|
36668
|
+
const scale = screenScale(target, "y");
|
|
36669
|
+
const from = target.scrollTop;
|
|
36670
|
+
const max = target.scrollHeight - target.clientHeight;
|
|
36671
|
+
const to2 = max <= SCROLL_SLACK_PX ? 0 : Math.max(0, Math.min(from + rest / scale, max));
|
|
36672
|
+
moves.push({ target, axis: "top", from, to: to2 });
|
|
36673
|
+
rest -= (to2 - from) * scale;
|
|
36674
|
+
}
|
|
36675
|
+
return easeScroll(moves, instant);
|
|
36676
|
+
}
|
|
36677
|
+
function revealInRow(el2, row2, instant) {
|
|
36678
|
+
const scale = screenScale(row2, "x");
|
|
36679
|
+
const left = row2.getBoundingClientRect().left + row2.clientLeft * scale;
|
|
36680
|
+
const right = left + row2.clientWidth * scale;
|
|
36681
|
+
const r3 = el2.getBoundingClientRect();
|
|
36682
|
+
const delta = r3.left < left ? r3.left - left : r3.right > right ? r3.right - right : 0;
|
|
36683
|
+
return easeScroll([{ target: row2, axis: "left", from: row2.scrollLeft, to: row2.scrollLeft + delta / scale }], instant);
|
|
36684
|
+
}
|
|
36685
|
+
function easeScroll(all, instant) {
|
|
36686
|
+
for (const m2 of all) tweens.get(m2.target)?.();
|
|
36687
|
+
const moves = all.filter((m2) => Math.abs(m2.to - m2.from) >= 1);
|
|
36688
|
+
const view = moves[0]?.target.ownerDocument.defaultView;
|
|
36689
|
+
if (!view) return 0;
|
|
36690
|
+
const set = (m2, v2) => {
|
|
36691
|
+
if (typeof m2.target.scrollTo === "function") m2.target.scrollTo(m2.axis === "top" ? { top: v2, behavior: "instant" } : { left: v2, behavior: "instant" });
|
|
36692
|
+
else if (m2.axis === "top") m2.target.scrollTop = v2;
|
|
36693
|
+
else m2.target.scrollLeft = v2;
|
|
36694
|
+
};
|
|
36695
|
+
if (instant || typeof view.requestAnimationFrame !== "function") {
|
|
36696
|
+
for (const m2 of moves) set(m2, m2.to);
|
|
36697
|
+
return 0;
|
|
36698
|
+
}
|
|
36699
|
+
let start = -1;
|
|
36700
|
+
let frame = 0;
|
|
36701
|
+
const stop = () => {
|
|
36702
|
+
view.cancelAnimationFrame(frame);
|
|
36703
|
+
for (const m2 of moves) tweens.delete(m2.target);
|
|
36704
|
+
for (const type of INTERRUPTS) view.removeEventListener(type, stop, true);
|
|
36705
|
+
};
|
|
36706
|
+
const step = (now) => {
|
|
36707
|
+
if (start < 0) start = now;
|
|
36708
|
+
const t2 = Math.min(1, (now - start) / ANCHOR_JUMP_MS);
|
|
36709
|
+
const eased = t2 < 0.5 ? 4 * t2 * t2 * t2 : 1 - Math.pow(-2 * t2 + 2, 3) / 2;
|
|
36710
|
+
for (const m2 of moves) set(m2, m2.from + (m2.to - m2.from) * eased);
|
|
36711
|
+
if (t2 < 1) frame = view.requestAnimationFrame(step);
|
|
36712
|
+
else stop();
|
|
36713
|
+
};
|
|
36714
|
+
for (const type of INTERRUPTS) view.addEventListener(type, stop, { capture: true, passive: true });
|
|
36715
|
+
for (const m2 of moves) tweens.set(m2.target, stop);
|
|
36716
|
+
frame = view.requestAnimationFrame(step);
|
|
36717
|
+
return ANCHOR_JUMP_MS;
|
|
36718
|
+
}
|
|
36719
|
+
function useTopAnchorReport(root, anchors, report3, content) {
|
|
36720
|
+
const live3 = React5.useRef({ anchors, report: report3 });
|
|
36721
|
+
live3.current = { anchors, report: report3 };
|
|
36722
|
+
const tracker = React5.useRef(null);
|
|
36723
|
+
if (!tracker.current) {
|
|
36724
|
+
tracker.current = new TopAnchorTracker(
|
|
36725
|
+
() => readTopAnchor(live3.current.anchors?.() ?? []),
|
|
36726
|
+
(id) => live3.current.report(id)
|
|
36727
|
+
);
|
|
36728
|
+
}
|
|
36729
|
+
const t2 = tracker.current;
|
|
36730
|
+
const on4 = anchors != null;
|
|
36731
|
+
React5.useEffect(() => {
|
|
36732
|
+
if (on4) t2.baseline();
|
|
36733
|
+
}, [on4, content, t2]);
|
|
36734
|
+
React5.useEffect(() => {
|
|
36735
|
+
if (!on4 || typeof document === "undefined") return;
|
|
36736
|
+
const onScroll = (e2) => {
|
|
36737
|
+
const el2 = root.current;
|
|
36738
|
+
const scrolledNode = e2.target;
|
|
36739
|
+
if (el2 && scrolledNode && typeof scrolledNode.contains === "function" && scrolledNode.contains(el2)) t2.scrolled();
|
|
36740
|
+
};
|
|
36741
|
+
document.addEventListener("scroll", onScroll, { capture: true, passive: true });
|
|
36742
|
+
return () => {
|
|
36743
|
+
document.removeEventListener("scroll", onScroll, { capture: true });
|
|
36744
|
+
t2.dispose();
|
|
36745
|
+
};
|
|
36746
|
+
}, [on4, t2, root]);
|
|
36747
|
+
return React5.useCallback((ms2) => {
|
|
36748
|
+
if (live3.current.anchors) t2.jump(ms2);
|
|
36749
|
+
}, [t2]);
|
|
36750
|
+
}
|
|
36751
|
+
var TOP_ANCHOR_TOLERANCE_PX, TOP_ANCHOR_SETTLE_MS, TOP_ANCHOR_JUMP_GRACE_MS, ANCHOR_JUMP_MS, SCROLL_SLACK_PX, tweens, INTERRUPTS, TopAnchorTracker;
|
|
36752
|
+
var init_scrollAnchors = __esm({
|
|
36753
|
+
"../../core/web-renderer/src/scrollAnchors.ts"() {
|
|
36754
|
+
init_define_HHP_CATALOG();
|
|
36755
|
+
TOP_ANCHOR_TOLERANCE_PX = 8;
|
|
36756
|
+
TOP_ANCHOR_SETTLE_MS = 150;
|
|
36757
|
+
TOP_ANCHOR_JUMP_GRACE_MS = 150;
|
|
36758
|
+
ANCHOR_JUMP_MS = 250;
|
|
36759
|
+
SCROLL_SLACK_PX = 16;
|
|
36760
|
+
tweens = /* @__PURE__ */ new WeakMap();
|
|
36761
|
+
INTERRUPTS = ["wheel", "touchstart", "pointerdown", "keydown"];
|
|
36762
|
+
TopAnchorTracker = class {
|
|
36763
|
+
constructor(read, report3) {
|
|
36764
|
+
this.read = read;
|
|
36765
|
+
this.report = report3;
|
|
36766
|
+
}
|
|
36767
|
+
last = null;
|
|
36768
|
+
timer;
|
|
36769
|
+
quietUntil = 0;
|
|
36770
|
+
jumped = false;
|
|
36771
|
+
/** The content changed: take where the reader now is as known, unless a scroll is still settling. */
|
|
36772
|
+
baseline() {
|
|
36773
|
+
if (this.timer === void 0) this.last = this.read();
|
|
36774
|
+
}
|
|
36775
|
+
/** The reader's scroller moved. */
|
|
36776
|
+
scrolled() {
|
|
36777
|
+
this.arm(TOP_ANCHOR_SETTLE_MS);
|
|
36778
|
+
}
|
|
36779
|
+
/** A programmatic jump starts, running [ms]. */
|
|
36780
|
+
jump(ms2) {
|
|
36781
|
+
this.jumped = true;
|
|
36782
|
+
this.quietUntil = Date.now() + ms2 + TOP_ANCHOR_JUMP_GRACE_MS;
|
|
36783
|
+
this.arm(ms2 + TOP_ANCHOR_JUMP_GRACE_MS);
|
|
36784
|
+
}
|
|
36785
|
+
dispose() {
|
|
36786
|
+
clearTimeout(this.timer);
|
|
36787
|
+
this.timer = void 0;
|
|
36788
|
+
}
|
|
36789
|
+
arm(ms2) {
|
|
36790
|
+
clearTimeout(this.timer);
|
|
36791
|
+
this.timer = setTimeout(() => this.settle(), ms2);
|
|
36792
|
+
}
|
|
36793
|
+
settle() {
|
|
36794
|
+
this.timer = void 0;
|
|
36795
|
+
const wait = this.quietUntil - Date.now();
|
|
36796
|
+
if (wait > 0) {
|
|
36797
|
+
this.arm(wait);
|
|
36798
|
+
return;
|
|
36799
|
+
}
|
|
36800
|
+
const value2 = this.read();
|
|
36801
|
+
if (this.jumped) {
|
|
36802
|
+
this.jumped = false;
|
|
36803
|
+
this.last = value2;
|
|
36804
|
+
return;
|
|
36805
|
+
}
|
|
36806
|
+
if (value2 != null && value2 !== this.last) {
|
|
36807
|
+
this.last = value2;
|
|
36808
|
+
this.report(value2);
|
|
36809
|
+
}
|
|
36810
|
+
}
|
|
36811
|
+
};
|
|
36812
|
+
}
|
|
36813
|
+
});
|
|
36814
|
+
|
|
36565
36815
|
// ../../core/web-renderer/src/snackbarTiming.ts
|
|
36566
36816
|
function snackbarAutoHideMs(durationMs) {
|
|
36567
36817
|
const ms2 = typeof durationMs === "number" && Number.isFinite(durationMs) ? durationMs : SNACKBAR_DEFAULT_DURATION_MS;
|
|
@@ -36583,7 +36833,7 @@ var init_snackbarTiming = __esm({
|
|
|
36583
36833
|
});
|
|
36584
36834
|
|
|
36585
36835
|
// ../../core/web-renderer/src/formBag.ts
|
|
36586
|
-
import
|
|
36836
|
+
import React6 from "react";
|
|
36587
36837
|
function hasContributed(bag, fieldId) {
|
|
36588
36838
|
return Object.prototype.hasOwnProperty.call(bag.values, fieldId);
|
|
36589
36839
|
}
|
|
@@ -36700,7 +36950,7 @@ var init_formBag = __esm({
|
|
|
36700
36950
|
init_validation();
|
|
36701
36951
|
validity = /* @__PURE__ */ new WeakMap();
|
|
36702
36952
|
formValidityProbe = { validations: 0 };
|
|
36703
|
-
FormValuesContext =
|
|
36953
|
+
FormValuesContext = React6.createContext(null);
|
|
36704
36954
|
}
|
|
36705
36955
|
});
|
|
36706
36956
|
|
|
@@ -36921,7 +37171,7 @@ var init_actionParams = __esm({
|
|
|
36921
37171
|
});
|
|
36922
37172
|
|
|
36923
37173
|
// ../../core/web-renderer/src/workerTapBusy.ts
|
|
36924
|
-
import
|
|
37174
|
+
import React7, { useEffect as useEffect3, useRef, useState as useState3 } from "react";
|
|
36925
37175
|
function tracksWorkerTap(action) {
|
|
36926
37176
|
if (!action || typeof action !== "object") return false;
|
|
36927
37177
|
const a2 = action;
|
|
@@ -36954,7 +37204,7 @@ function WorkerTapGate({ gate, action, children, ...forwarded }) {
|
|
|
36954
37204
|
const next = { ...forwarded };
|
|
36955
37205
|
if (forwarded.style || busy) next.style = { ...own6 ?? {}, ...forwarded.style ?? {}, ...busy ? { opacity: 0.5 } : {} };
|
|
36956
37206
|
if (busy) next["aria-disabled"] = "true";
|
|
36957
|
-
return
|
|
37207
|
+
return React7.cloneElement(children, next);
|
|
36958
37208
|
}
|
|
36959
37209
|
var WORKER_TAP_DELAY_MS, WORKER_TAP_CAP_MS, listeners, WorkerTap;
|
|
36960
37210
|
var init_workerTapBusy = __esm({
|
|
@@ -37303,10 +37553,10 @@ var init_pickerField = __esm({
|
|
|
37303
37553
|
});
|
|
37304
37554
|
|
|
37305
37555
|
// ../../core/web-renderer/src/symbolEffects.ts
|
|
37306
|
-
import
|
|
37556
|
+
import React8 from "react";
|
|
37307
37557
|
function useSymbolEffect(effect, reduceMotion) {
|
|
37308
|
-
const [, changed] =
|
|
37309
|
-
|
|
37558
|
+
const [, changed] = React8.useReducer((value2) => value2 + 1, 0);
|
|
37559
|
+
React8.useEffect(() => {
|
|
37310
37560
|
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
|
|
37311
37561
|
const query = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
37312
37562
|
const listener = () => changed();
|
|
@@ -37314,7 +37564,7 @@ function useSymbolEffect(effect, reduceMotion) {
|
|
|
37314
37564
|
return () => query.removeEventListener("change", listener);
|
|
37315
37565
|
}, []);
|
|
37316
37566
|
const supported = !reduceMotion() && (effect === "bounce" || effect === "pulse") ? effect : void 0;
|
|
37317
|
-
|
|
37567
|
+
React8.useEffect(() => {
|
|
37318
37568
|
if (!supported || typeof document === "undefined" || document.getElementById("himalaya-symbol-effects")) return;
|
|
37319
37569
|
const style = document.createElement("style");
|
|
37320
37570
|
style.id = "himalaya-symbol-effects";
|
|
@@ -38000,7 +38250,7 @@ var init_host_toolbar = __esm({
|
|
|
38000
38250
|
});
|
|
38001
38251
|
|
|
38002
38252
|
// ../../core/web-renderer/src/richContentEditor.tsx
|
|
38003
|
-
import
|
|
38253
|
+
import React9 from "react";
|
|
38004
38254
|
import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
38005
38255
|
function effectiveTools(tools, uploadService) {
|
|
38006
38256
|
return ricosEffectiveTools(tools, typeof uploadService === "string" && uploadService !== "");
|
|
@@ -38015,32 +38265,32 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
|
|
|
38015
38265
|
const id = String(nodeId ?? dom["data-component-id"] ?? "rich_content_editor");
|
|
38016
38266
|
const C2 = ctx.color;
|
|
38017
38267
|
const name = typeof props.name === "string" && props.name ? props.name : void 0;
|
|
38018
|
-
const bag =
|
|
38268
|
+
const bag = React9.useContext(FormValuesContext);
|
|
38019
38269
|
const live3 = !!ctx.onAction;
|
|
38020
38270
|
const toolsKey = JSON.stringify(props.tools ?? null);
|
|
38021
|
-
const tools =
|
|
38271
|
+
const tools = React9.useMemo(() => effectiveTools(props.tools, props.uploadService), [toolsKey, props.uploadService]);
|
|
38022
38272
|
const seedMode = typeof props.documentJson === "string" ? "literal" : typeof props.documentPath === "string" && props.documentPath ? "binding" : "none";
|
|
38023
38273
|
const boundSeed = useBoundValue(ctx, seedMode === "binding" ? props.documentPath : "");
|
|
38024
38274
|
const fill = props.fillAvailable === true;
|
|
38025
38275
|
const minHeight = typeof props.minHeight === "number" && props.minHeight >= 0 ? props.minHeight : 240;
|
|
38026
38276
|
const placeholder3 = typeof props.placeholder === "string" ? props.placeholder : "";
|
|
38027
|
-
const onChangeRef =
|
|
38277
|
+
const onChangeRef = React9.useRef(props.onChange);
|
|
38028
38278
|
onChangeRef.current = props.onChange;
|
|
38029
|
-
const bagRef =
|
|
38279
|
+
const bagRef = React9.useRef(bag);
|
|
38030
38280
|
bagRef.current = bag;
|
|
38031
|
-
const nameRef =
|
|
38281
|
+
const nameRef = React9.useRef(name);
|
|
38032
38282
|
nameRef.current = name;
|
|
38033
|
-
const [status, setStatus] =
|
|
38034
|
-
const [toolbar, setToolbar] =
|
|
38035
|
-
const [focused, setFocused] =
|
|
38036
|
-
const [src, setSrc] =
|
|
38037
|
-
const [link, setLink] =
|
|
38038
|
-
const [uploadError, setUploadError] =
|
|
38039
|
-
const [, repaint] =
|
|
38040
|
-
const iframeRef =
|
|
38041
|
-
const fileRef =
|
|
38042
|
-
const sessionRef =
|
|
38043
|
-
|
|
38283
|
+
const [status, setStatus] = React9.useState("loading");
|
|
38284
|
+
const [toolbar, setToolbar] = React9.useState(EMPTY_TOOLBAR);
|
|
38285
|
+
const [focused, setFocused] = React9.useState(false);
|
|
38286
|
+
const [src, setSrc] = React9.useState(null);
|
|
38287
|
+
const [link, setLink] = React9.useState(null);
|
|
38288
|
+
const [uploadError, setUploadError] = React9.useState(false);
|
|
38289
|
+
const [, repaint] = React9.useReducer((n2) => n2 + 1, 0);
|
|
38290
|
+
const iframeRef = React9.useRef(null);
|
|
38291
|
+
const fileRef = React9.useRef(null);
|
|
38292
|
+
const sessionRef = React9.useRef(null);
|
|
38293
|
+
React9.useEffect(() => {
|
|
38044
38294
|
if (!bag || !name) return;
|
|
38045
38295
|
bag.register(name, void 0);
|
|
38046
38296
|
const current = sessionRef.current?.currentContent();
|
|
@@ -38056,12 +38306,12 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
|
|
|
38056
38306
|
if (!act || !ctx.onAction) return;
|
|
38057
38307
|
ctx.onAction({ ...act, args: { ...act.args ?? {}, dirty: "true" } });
|
|
38058
38308
|
};
|
|
38059
|
-
const fireOnChangeRef =
|
|
38309
|
+
const fireOnChangeRef = React9.useRef(fireOnChange);
|
|
38060
38310
|
fireOnChangeRef.current = fireOnChange;
|
|
38061
|
-
|
|
38311
|
+
React9.useEffect(() => {
|
|
38062
38312
|
if (live3) setSrc(new URL(ENGINE_PAGE_PATH, document.baseURI).toString());
|
|
38063
38313
|
}, [live3]);
|
|
38064
|
-
|
|
38314
|
+
React9.useEffect(() => {
|
|
38065
38315
|
const frame = iframeRef.current;
|
|
38066
38316
|
if (!live3 || !src || !frame) return;
|
|
38067
38317
|
const t2 = ricosEditorWebTimings;
|
|
@@ -38109,13 +38359,13 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
|
|
|
38109
38359
|
sessionRef.current = null;
|
|
38110
38360
|
};
|
|
38111
38361
|
}, [live3, src]);
|
|
38112
|
-
|
|
38362
|
+
React9.useEffect(() => {
|
|
38113
38363
|
sessionRef.current?.updateLocale(ctx.localeTag ?? "en", ctx.isRTL ?? document.documentElement.dir === "rtl");
|
|
38114
38364
|
}, [ctx.localeTag, ctx.isRTL]);
|
|
38115
|
-
|
|
38365
|
+
React9.useEffect(() => {
|
|
38116
38366
|
sessionRef.current?.setSeed(seedMode === "literal" ? props.documentJson : seedMode === "binding" ? boundSeed : "");
|
|
38117
38367
|
}, [seedMode, props.documentJson, boundSeed, src]);
|
|
38118
|
-
|
|
38368
|
+
React9.useEffect(() => {
|
|
38119
38369
|
const vv = typeof window !== "undefined" ? window.visualViewport : null;
|
|
38120
38370
|
if (!vv || !focused) return;
|
|
38121
38371
|
vv.addEventListener("resize", repaint);
|
|
@@ -38625,21 +38875,21 @@ var init_radioGroups = __esm({
|
|
|
38625
38875
|
});
|
|
38626
38876
|
|
|
38627
38877
|
// ../../core/web-renderer/src/a11y/radioGroupScope.tsx
|
|
38628
|
-
import
|
|
38878
|
+
import React10 from "react";
|
|
38629
38879
|
var scope, RadioGroupScope, useRadioGroups;
|
|
38630
38880
|
var init_radioGroupScope = __esm({
|
|
38631
38881
|
"../../core/web-renderer/src/a11y/radioGroupScope.tsx"() {
|
|
38632
38882
|
"use strict";
|
|
38633
38883
|
init_define_HHP_CATALOG();
|
|
38634
38884
|
init_radioGroups();
|
|
38635
|
-
scope =
|
|
38885
|
+
scope = React10.createContext(radioGroups);
|
|
38636
38886
|
RadioGroupScope = scope.Provider;
|
|
38637
|
-
useRadioGroups = () =>
|
|
38887
|
+
useRadioGroups = () => React10.useContext(scope);
|
|
38638
38888
|
}
|
|
38639
38889
|
});
|
|
38640
38890
|
|
|
38641
38891
|
// ../../core/web-renderer/src/a11y/controls.tsx
|
|
38642
|
-
import
|
|
38892
|
+
import React11 from "react";
|
|
38643
38893
|
import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
38644
38894
|
function labelText(label3, ctx) {
|
|
38645
38895
|
if (typeof label3 === "string" && isBinding(label3)) {
|
|
@@ -38684,32 +38934,32 @@ var init_controls = __esm({
|
|
|
38684
38934
|
A11ySwitch = ({ props, ctx, wrap }) => {
|
|
38685
38935
|
const C2 = ctx.color;
|
|
38686
38936
|
const bound2 = useResolvedScalar(props.valuePath, ctx);
|
|
38687
|
-
const bag =
|
|
38937
|
+
const bag = React11.useContext(FormValuesContext);
|
|
38688
38938
|
const fieldId = props.__formFieldId;
|
|
38689
38939
|
const inForm = Boolean(bag && fieldId);
|
|
38690
38940
|
const standaloneService = fieldId == null && ctx.provider != null && typeof props.valuePath === "string" && props.valuePath.startsWith("$service:");
|
|
38691
38941
|
const resolved2 = ctx.empty ? false : standaloneService ? serviceToggleBool(bound2) ?? encodeToggleFieldValue(props.value) === "true" : props.valuePath != null ? encodeToggleFieldValue(bound2) === "true" : encodeToggleFieldValue(props.value, props.on === true) === "true";
|
|
38692
|
-
const [formOn, setFormOn] =
|
|
38693
|
-
const touchedField =
|
|
38694
|
-
|
|
38942
|
+
const [formOn, setFormOn] = React11.useState(null);
|
|
38943
|
+
const touchedField = React11.useRef(void 0);
|
|
38944
|
+
React11.useEffect(() => {
|
|
38695
38945
|
if (bag && fieldId && touchedField.current === fieldId) bag.set(fieldId, encodeToggleFieldValue(resolved2));
|
|
38696
38946
|
setFormOn(null);
|
|
38697
38947
|
}, [resolved2]);
|
|
38698
38948
|
const toggleServiceBound = typeof props.valuePath === "string" && props.valuePath.startsWith("$service:");
|
|
38699
38949
|
const toggleReady = !toggleServiceBound || bound2 !== void 0;
|
|
38700
|
-
|
|
38950
|
+
React11.useEffect(() => {
|
|
38701
38951
|
if (!bag || !fieldId) return;
|
|
38702
38952
|
if (!toggleReady && !hasContributed(bag, fieldId)) return;
|
|
38703
38953
|
bag.set(fieldId, encodeToggleFieldValue(resolved2));
|
|
38704
38954
|
}, [toggleReady, resolved2, fieldId, bag]);
|
|
38705
|
-
const [tapped, setTapped] =
|
|
38706
|
-
|
|
38955
|
+
const [tapped, setTapped] = React11.useState(null);
|
|
38956
|
+
React11.useEffect(() => {
|
|
38707
38957
|
setTapped(null);
|
|
38708
38958
|
}, [bound2, props.valuePath, ctx.provider]);
|
|
38709
38959
|
const live3 = standaloneService && tapped && tapped.path === props.valuePath && Object.is(tapped.over, bound2) && tapped.provider === ctx.provider ? tapped.on : null;
|
|
38710
38960
|
const on4 = inForm && touchedField.current === fieldId && formOn !== null ? formOn : live3 ?? resolved2;
|
|
38711
38961
|
const ruleKey = props.validation ? JSON.stringify(props.validation) : "";
|
|
38712
|
-
|
|
38962
|
+
React11.useEffect(() => {
|
|
38713
38963
|
if (!bag || !fieldId) return;
|
|
38714
38964
|
bag.register(fieldId, props.validation);
|
|
38715
38965
|
return () => bag.unregister(fieldId);
|
|
@@ -38770,15 +39020,15 @@ var init_controls = __esm({
|
|
|
38770
39020
|
const tint = C2(props.tint ?? "accentPrimary", "#116DFF");
|
|
38771
39021
|
const step = typeof props.step === "number" && props.step > 0 ? props.step : (max - min) / 100 || 0.01;
|
|
38772
39022
|
const range = props.range === true && typeof props.upperValue === "number";
|
|
38773
|
-
const [val, setVal] =
|
|
38774
|
-
const latestValue =
|
|
38775
|
-
const dragging =
|
|
38776
|
-
|
|
39023
|
+
const [val, setVal] = React11.useState(bound2);
|
|
39024
|
+
const latestValue = React11.useRef(bound2);
|
|
39025
|
+
const dragging = React11.useRef(false);
|
|
39026
|
+
React11.useEffect(() => {
|
|
38777
39027
|
if (dragging.current) return;
|
|
38778
39028
|
latestValue.current = bound2;
|
|
38779
39029
|
setVal(bound2);
|
|
38780
39030
|
}, [bound2]);
|
|
38781
|
-
const lastEmit =
|
|
39031
|
+
const lastEmit = React11.useRef(void 0);
|
|
38782
39032
|
const canFire = !!(ctx.onAction && props.onChange && !props.disabled);
|
|
38783
39033
|
const commit = (nv) => {
|
|
38784
39034
|
latestValue.current = nv;
|
|
@@ -38788,8 +39038,8 @@ var init_controls = __esm({
|
|
|
38788
39038
|
ctx.onAction({ ...act, args: { ...act.args ?? {}, value: nv } });
|
|
38789
39039
|
};
|
|
38790
39040
|
const clampPct = (n2) => max > min ? Math.max(0, Math.min(1, (n2 - min) / (max - min))) : 0;
|
|
38791
|
-
const [pair, setPair] =
|
|
38792
|
-
|
|
39041
|
+
const [pair, setPair] = React11.useState(() => [Math.min(bound2, props.upperValue ?? bound2), Math.max(bound2, props.upperValue ?? bound2)]);
|
|
39042
|
+
React11.useEffect(() => {
|
|
38793
39043
|
if (range) setPair([Math.min(bound2, props.upperValue), Math.max(bound2, props.upperValue)]);
|
|
38794
39044
|
}, [range, bound2, props.upperValue]);
|
|
38795
39045
|
if (range) {
|
|
@@ -38947,25 +39197,25 @@ var init_controls = __esm({
|
|
|
38947
39197
|
const boundValue = useResolvedScalar(props.valuePath, ctx);
|
|
38948
39198
|
const raw = props.valuePath != null ? boundValue : props.value;
|
|
38949
39199
|
const groupId = isRadio && typeof props.groupId === "string" && props.groupId !== "" ? props.groupId : void 0;
|
|
38950
|
-
const [local, setLocal] =
|
|
38951
|
-
|
|
39200
|
+
const [local, setLocal] = React11.useState(void 0);
|
|
39201
|
+
React11.useEffect(() => {
|
|
38952
39202
|
setLocal(void 0);
|
|
38953
39203
|
}, [raw, radioGroups2, groupId]);
|
|
38954
39204
|
const localValue2 = local?.registry === radioGroups2 && local.groupId === groupId ? local.value : void 0;
|
|
38955
39205
|
const on4 = ctx.empty ? false : localValue2 ?? raw === true;
|
|
38956
|
-
const member =
|
|
38957
|
-
const owner =
|
|
39206
|
+
const member = React11.useMemo(() => radioGroups2.newMember(), [radioGroups2]);
|
|
39207
|
+
const owner = React11.useSyncExternalStore(
|
|
38958
39208
|
radioGroups2.subscribe,
|
|
38959
39209
|
() => groupId ? radioGroups2.owner(groupId) : void 0,
|
|
38960
39210
|
() => void 0
|
|
38961
39211
|
);
|
|
38962
|
-
|
|
39212
|
+
React11.useEffect(() => {
|
|
38963
39213
|
if (!groupId) return;
|
|
38964
39214
|
radioGroups2.join(groupId);
|
|
38965
39215
|
return () => radioGroups2.leave(groupId, member);
|
|
38966
39216
|
}, [radioGroups2, groupId, member]);
|
|
38967
|
-
const seenRaw =
|
|
38968
|
-
|
|
39217
|
+
const seenRaw = React11.useRef(null);
|
|
39218
|
+
React11.useEffect(() => {
|
|
38969
39219
|
const prev = seenRaw.current;
|
|
38970
39220
|
seenRaw.current = { raw, groupId, registry: radioGroups2 };
|
|
38971
39221
|
if (!groupId) return;
|
|
@@ -38975,7 +39225,7 @@ var init_controls = __esm({
|
|
|
38975
39225
|
radioGroups2.adopt(groupId, member, raw === true);
|
|
38976
39226
|
}
|
|
38977
39227
|
}, [radioGroups2, raw, groupId, member]);
|
|
38978
|
-
|
|
39228
|
+
React11.useEffect(() => {
|
|
38979
39229
|
if (groupId && radioGroups2.deselects(radioGroups2.owner(groupId), member)) setLocal({ value: false, registry: radioGroups2, groupId });
|
|
38980
39230
|
}, [radioGroups2, owner, member, groupId]);
|
|
38981
39231
|
const accent = C2("accentPrimary", "#116DFF");
|
|
@@ -39047,8 +39297,8 @@ var init_controls = __esm({
|
|
|
39047
39297
|
const selectedId = useResolvedId(props.selectedId, ctx);
|
|
39048
39298
|
const tabs = Array.isArray(boundTabs) && boundTabs.length ? boundTabs : Array.isArray(props.tabs) ? props.tabs : [];
|
|
39049
39299
|
const pages2 = props.style === "swipe" ? props.swipePages : void 0;
|
|
39050
|
-
const [local, setLocal] =
|
|
39051
|
-
|
|
39300
|
+
const [local, setLocal] = React11.useState(void 0);
|
|
39301
|
+
React11.useEffect(() => {
|
|
39052
39302
|
setLocal(void 0);
|
|
39053
39303
|
}, [selectedId]);
|
|
39054
39304
|
const current = local != null && tabs.some((t2) => t2.id === local) ? local : selectedId;
|
|
@@ -39068,15 +39318,15 @@ var init_controls = __esm({
|
|
|
39068
39318
|
e2.preventDefault();
|
|
39069
39319
|
if (ni2 !== selIdx) select2(ni2);
|
|
39070
39320
|
};
|
|
39071
|
-
const pagerRef =
|
|
39072
|
-
const settle2 =
|
|
39073
|
-
|
|
39321
|
+
const pagerRef = React11.useRef(null);
|
|
39322
|
+
const settle2 = React11.useRef(void 0);
|
|
39323
|
+
React11.useEffect(() => {
|
|
39074
39324
|
const el2 = pagerRef.current;
|
|
39075
39325
|
if (!el2 || !el2.clientWidth) return;
|
|
39076
39326
|
const x2 = selIdx * el2.clientWidth;
|
|
39077
39327
|
if (Math.abs(el2.scrollLeft - x2) > 1) el2.scrollTo?.({ left: x2, behavior: "smooth" });
|
|
39078
39328
|
}, [selIdx, pages2]);
|
|
39079
|
-
|
|
39329
|
+
React11.useEffect(() => () => clearTimeout(settle2.current), []);
|
|
39080
39330
|
const onPagerScroll = () => {
|
|
39081
39331
|
clearTimeout(settle2.current);
|
|
39082
39332
|
settle2.current = setTimeout(() => {
|
|
@@ -39187,7 +39437,7 @@ var init_controls = __esm({
|
|
|
39187
39437
|
const expanded = useResolvedScalar(props.expandedPath ?? props.expanded, ctx);
|
|
39188
39438
|
const open = expanded === true;
|
|
39189
39439
|
const fire = ctx.onAction && props.onToggle ? () => ctx.onAction(resolveRowAction(props.onToggle, ctx)) : void 0;
|
|
39190
|
-
const regionId =
|
|
39440
|
+
const regionId = React11.useMemo(() => `himi-disclosure-${++disclosureSeq}`, []);
|
|
39191
39441
|
return /* @__PURE__ */ jsxs5("div", { style: { width: "100%", ...wrap }, children: [
|
|
39192
39442
|
/* @__PURE__ */ jsxs5(
|
|
39193
39443
|
"button",
|
|
@@ -39206,7 +39456,7 @@ var init_controls = __esm({
|
|
|
39206
39456
|
]
|
|
39207
39457
|
}
|
|
39208
39458
|
),
|
|
39209
|
-
/* @__PURE__ */ jsx7("div", { id: regionId, role: "region", hidden: !open, style: open ? { padding: "2px 2px 8px 24px" } : void 0, children: open && (Array.isArray(props.content) ? props.content.map((c2, i2) => /* @__PURE__ */ jsx7(
|
|
39459
|
+
/* @__PURE__ */ jsx7("div", { id: regionId, role: "region", hidden: !open, style: open ? { padding: "2px 2px 8px 24px" } : void 0, children: open && (Array.isArray(props.content) ? props.content.map((c2, i2) => /* @__PURE__ */ jsx7(React11.Fragment, { children: renderChild(c2) }, c2?.id ?? i2)) : renderChild(props.content)) })
|
|
39210
39460
|
] });
|
|
39211
39461
|
};
|
|
39212
39462
|
}
|
|
@@ -39501,7 +39751,7 @@ var init_listGestures = __esm({
|
|
|
39501
39751
|
init_tokens2();
|
|
39502
39752
|
PULL_THRESHOLD = 56;
|
|
39503
39753
|
SWIPE_OPEN = 76;
|
|
39504
|
-
PullToRefreshList = ({ onRefresh, accent, fg, surface, label: label3 = "Pull to refresh", fontFamily = '"Wix Madefor Text", system-ui', style, children }) => {
|
|
39754
|
+
PullToRefreshList = ({ onRefresh, accent, fg, surface, label: label3 = "Pull to refresh", fontFamily = '"Wix Madefor Text", system-ui', style, children, ...extras }) => {
|
|
39505
39755
|
const [pull, setPull] = useState4(0);
|
|
39506
39756
|
const [busy, setBusy] = useState4(false);
|
|
39507
39757
|
const startY = useRef2(null);
|
|
@@ -39529,6 +39779,7 @@ var init_listGestures = __esm({
|
|
|
39529
39779
|
return /* @__PURE__ */ jsxs6(
|
|
39530
39780
|
"div",
|
|
39531
39781
|
{
|
|
39782
|
+
...extras,
|
|
39532
39783
|
"data-himalaya-pull-host": true,
|
|
39533
39784
|
onTouchStart,
|
|
39534
39785
|
onTouchMove,
|
|
@@ -40345,7 +40596,7 @@ var init_rich_text_field = __esm({
|
|
|
40345
40596
|
});
|
|
40346
40597
|
|
|
40347
40598
|
// ../../core/web-renderer/src/richContent.tsx
|
|
40348
|
-
import
|
|
40599
|
+
import React13 from "react";
|
|
40349
40600
|
import { Fragment as Fragment3, jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
40350
40601
|
function richContentFollow(ctx, onLink) {
|
|
40351
40602
|
return (url) => {
|
|
@@ -40450,7 +40701,7 @@ function Block({ b: b2, env, depth }) {
|
|
|
40450
40701
|
minHeight: b2.spans.length ? void 0 : "1.5em"
|
|
40451
40702
|
}, children: /* @__PURE__ */ jsx9(Spans, { spans: b2.spans, env }) });
|
|
40452
40703
|
case "heading":
|
|
40453
|
-
return
|
|
40704
|
+
return React13.createElement(
|
|
40454
40705
|
`h${b2.level}`,
|
|
40455
40706
|
{ ...tid(env, b2.id, b2.kind), style: textStyle(ctx, RICH_CONTENT_HEADING_TOKENS[b2.level - 1], text13) },
|
|
40456
40707
|
/* @__PURE__ */ jsx9(Spans, { spans: b2.spans, env })
|
|
@@ -41022,12 +41273,12 @@ var webviewBridgeHost_exports = {};
|
|
|
41022
41273
|
__export(webviewBridgeHost_exports, {
|
|
41023
41274
|
default: () => WebViewBridgeHost
|
|
41024
41275
|
});
|
|
41025
|
-
import
|
|
41276
|
+
import React14 from "react";
|
|
41026
41277
|
function WebViewBridgeHost(p2) {
|
|
41027
41278
|
const { channel: channel3, props, ctx } = p2;
|
|
41028
41279
|
const explicit2 = useResolvedScalar(props.instanceId, ctx);
|
|
41029
41280
|
const explicitId = typeof explicit2 === "string" || typeof explicit2 === "number" ? String(explicit2) : "";
|
|
41030
|
-
const pageActive =
|
|
41281
|
+
const pageActive = React14.useContext(PageActiveContext);
|
|
41031
41282
|
const active = useResolvedScalar(bound(props.activePath), ctx) !== false && pageActive;
|
|
41032
41283
|
const muted = useResolvedScalar(bound(props.mutedPath), ctx) === true;
|
|
41033
41284
|
const cfg = props.config && typeof props.config === "object" ? props.config : {};
|
|
@@ -41036,10 +41287,10 @@ function WebViewBridgeHost(p2) {
|
|
|
41036
41287
|
const screenArgs = JSON.stringify(ctx.screenArgs ?? null);
|
|
41037
41288
|
const source = p2.htmlStr != null ? "\0html" : p2.urlStr ?? "";
|
|
41038
41289
|
const origins = p2.allowedOrigins.join("\n");
|
|
41039
|
-
const sessionRef =
|
|
41040
|
-
const live3 =
|
|
41290
|
+
const sessionRef = React14.useRef(null);
|
|
41291
|
+
const live3 = React14.useRef({ active, muted });
|
|
41041
41292
|
live3.current = { active, muted };
|
|
41042
|
-
|
|
41293
|
+
React14.useEffect(() => {
|
|
41043
41294
|
if (typeof window === "undefined") return;
|
|
41044
41295
|
if (p2.urlStr == null && p2.htmlStr == null) return;
|
|
41045
41296
|
let instanceId;
|
|
@@ -41078,13 +41329,13 @@ function WebViewBridgeHost(p2) {
|
|
|
41078
41329
|
p2.load.onLoad = void 0;
|
|
41079
41330
|
};
|
|
41080
41331
|
}, [channel3, ctx.screenId, screenArgs, p2.nodeId, explicitId, source, origins, security, consoleForwarding]);
|
|
41081
|
-
|
|
41332
|
+
React14.useEffect(() => {
|
|
41082
41333
|
sessionRef.current?.setActive(active);
|
|
41083
41334
|
}, [active]);
|
|
41084
|
-
|
|
41335
|
+
React14.useEffect(() => {
|
|
41085
41336
|
sessionRef.current?.setMuted(muted);
|
|
41086
41337
|
}, [muted]);
|
|
41087
|
-
const first =
|
|
41338
|
+
const first = React14.useRef(true);
|
|
41088
41339
|
useLayoutEffectInBrowser(() => {
|
|
41089
41340
|
if (first.current) {
|
|
41090
41341
|
first.current = false;
|
|
@@ -41104,7 +41355,7 @@ var init_webviewBridgeHost = __esm({
|
|
|
41104
41355
|
init_helpers();
|
|
41105
41356
|
init_liveWindow();
|
|
41106
41357
|
init_webviewBridge();
|
|
41107
|
-
useLayoutEffectInBrowser = typeof globalThis.document === "undefined" ?
|
|
41358
|
+
useLayoutEffectInBrowser = typeof globalThis.document === "undefined" ? React14.useEffect : React14.useLayoutEffect;
|
|
41108
41359
|
bound = (v2) => typeof v2 === "string" && isBinding(v2) ? v2 : void 0;
|
|
41109
41360
|
}
|
|
41110
41361
|
});
|
|
@@ -121720,7 +121971,7 @@ __export(pdfDocument_exports, {
|
|
|
121720
121971
|
PdfDocument: () => PdfDocument,
|
|
121721
121972
|
destroyPdfDocumentLoad: () => destroyPdfDocumentLoad
|
|
121722
121973
|
});
|
|
121723
|
-
import
|
|
121974
|
+
import React15 from "react";
|
|
121724
121975
|
import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
121725
121976
|
async function loadPdfDocument(src, ownerDocument) {
|
|
121726
121977
|
const [pdfjs, pdfWorkerAsset] = await Promise.all([
|
|
@@ -121739,18 +121990,18 @@ async function destroyPdfDocumentLoad(loading) {
|
|
|
121739
121990
|
}
|
|
121740
121991
|
}
|
|
121741
121992
|
function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, style, onPageCount, onFallback, loadDocument = loadPdfDocument }) {
|
|
121742
|
-
const [pages2, setPages] =
|
|
121743
|
-
const [failedRequest, setFailedRequest] =
|
|
121993
|
+
const [pages2, setPages] = React15.useState(0);
|
|
121994
|
+
const [failedRequest, setFailedRequest] = React15.useState(null);
|
|
121744
121995
|
const request = JSON.stringify([src, zoomPercent]);
|
|
121745
121996
|
const failed3 = failedRequest === request;
|
|
121746
|
-
const containerRef =
|
|
121747
|
-
const frameRef =
|
|
121748
|
-
const startPageRef =
|
|
121997
|
+
const containerRef = React15.useRef(null);
|
|
121998
|
+
const frameRef = React15.useRef(null);
|
|
121999
|
+
const startPageRef = React15.useRef(startPage);
|
|
121749
122000
|
startPageRef.current = startPage;
|
|
121750
|
-
|
|
122001
|
+
React15.useEffect(() => {
|
|
121751
122002
|
if (failed3) onFallback?.();
|
|
121752
122003
|
}, [failed3, onFallback]);
|
|
121753
|
-
|
|
122004
|
+
React15.useEffect(() => {
|
|
121754
122005
|
const frame2 = frameRef.current;
|
|
121755
122006
|
const page = Math.min(pages2, Math.max(1, Math.floor(startPage ?? 1) || 1));
|
|
121756
122007
|
const canvas = pages2 ? containerRef.current?.querySelector(`[data-pdf-page="${page}"]`) : null;
|
|
@@ -121759,7 +122010,7 @@ function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, st
|
|
|
121759
122010
|
const scale = frame2.offsetHeight > 0 && box.height > 0 ? box.height / frame2.offsetHeight : 1;
|
|
121760
122011
|
frame2.scrollTop += (canvas.getBoundingClientRect().top - box.top) / scale;
|
|
121761
122012
|
}, [startPage, pages2]);
|
|
121762
|
-
|
|
122013
|
+
React15.useEffect(() => {
|
|
121763
122014
|
let live3 = true;
|
|
121764
122015
|
let loading;
|
|
121765
122016
|
const container = containerRef.current;
|
|
@@ -121822,7 +122073,7 @@ var init_pdfDocument = __esm({
|
|
|
121822
122073
|
});
|
|
121823
122074
|
|
|
121824
122075
|
// ../../core/web-renderer/src/renderNode.tsx
|
|
121825
|
-
import
|
|
122076
|
+
import React16 from "react";
|
|
121826
122077
|
import { createPortal } from "react-dom";
|
|
121827
122078
|
import { Fragment as Fragment4, jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
121828
122079
|
function boundTokenName(path2, fallback, ctx) {
|
|
@@ -121934,8 +122185,8 @@ function isNumericLike(s2) {
|
|
|
121934
122185
|
return NUMERIC_TEXT.test(s2.trim());
|
|
121935
122186
|
}
|
|
121936
122187
|
function useValueSwap(value2, enabled2) {
|
|
121937
|
-
const prev =
|
|
121938
|
-
const gen =
|
|
122188
|
+
const prev = React16.useRef(value2);
|
|
122189
|
+
const gen = React16.useRef(0);
|
|
121939
122190
|
if (prev.current !== value2) {
|
|
121940
122191
|
if (enabled2 && prev.current !== void 0 && value2 !== void 0) gen.current += 1;
|
|
121941
122192
|
prev.current = value2;
|
|
@@ -122003,9 +122254,9 @@ function revealOnFocusStyle(C2) {
|
|
|
122003
122254
|
};
|
|
122004
122255
|
}
|
|
122005
122256
|
function FormFieldLabelIdScope({ render, fieldKey, ...extras }) {
|
|
122006
|
-
const id =
|
|
122257
|
+
const id = React16.useId().replace(/[^A-Za-z0-9_-]/g, "");
|
|
122007
122258
|
const el2 = render(`${fieldKey ? `${fieldKey}-` : ""}auto-${id}`);
|
|
122008
|
-
return Object.keys(extras).length ?
|
|
122259
|
+
return Object.keys(extras).length ? React16.cloneElement(el2, extras) : el2;
|
|
122009
122260
|
}
|
|
122010
122261
|
function formFieldA11y(props) {
|
|
122011
122262
|
const labelledBy = props.__labelledBy;
|
|
@@ -122034,9 +122285,10 @@ function ensureListAnimateRuntime() {
|
|
|
122034
122285
|
listAnimateRuntimeInstalled = true;
|
|
122035
122286
|
const prevRects = /* @__PURE__ */ new WeakMap();
|
|
122036
122287
|
const rowKey = (c2) => c2.dataset?.componentId ?? c2.querySelector("[data-component-id]")?.dataset?.componentId;
|
|
122288
|
+
const rowBoxes = (host) => Array.from(host.children, (c2) => c2.hasAttribute("data-himalaya-row-id") ? c2.firstElementChild : c2).filter((c2) => c2 != null);
|
|
122037
122289
|
const snapshot4 = (host) => {
|
|
122038
122290
|
const m2 = /* @__PURE__ */ new Map();
|
|
122039
|
-
|
|
122291
|
+
rowBoxes(host).forEach((c2) => {
|
|
122040
122292
|
const id = rowKey(c2);
|
|
122041
122293
|
if (id) m2.set(id, c2.getBoundingClientRect());
|
|
122042
122294
|
});
|
|
@@ -122050,11 +122302,12 @@ function ensureListAnimateRuntime() {
|
|
|
122050
122302
|
return;
|
|
122051
122303
|
}
|
|
122052
122304
|
const next = /* @__PURE__ */ new Map();
|
|
122053
|
-
|
|
122305
|
+
const boxes = rowBoxes(host);
|
|
122306
|
+
boxes.forEach((c2) => {
|
|
122054
122307
|
const id = rowKey(c2);
|
|
122055
122308
|
if (id) next.set(id, c2.getBoundingClientRect());
|
|
122056
122309
|
});
|
|
122057
|
-
|
|
122310
|
+
boxes.forEach((c2) => {
|
|
122058
122311
|
const el2 = c2;
|
|
122059
122312
|
const id = rowKey(c2);
|
|
122060
122313
|
if (!id) return;
|
|
@@ -122740,9 +122993,9 @@ function sectionSlot(raw) {
|
|
|
122740
122993
|
}
|
|
122741
122994
|
}
|
|
122742
122995
|
function useLoadingTiming(target, graceMs, floorMs) {
|
|
122743
|
-
const [shown2, setShown] =
|
|
122744
|
-
const loadingSince =
|
|
122745
|
-
|
|
122996
|
+
const [shown2, setShown] = React16.useState(() => target === "loading" && graceMs > 0 ? "pending" : target);
|
|
122997
|
+
const loadingSince = React16.useRef(shown2 === "loading" ? Date.now() : null);
|
|
122998
|
+
React16.useEffect(() => {
|
|
122746
122999
|
if (target === shown2) return void 0;
|
|
122747
123000
|
if (target === "loading") {
|
|
122748
123001
|
if (graceMs <= 0) {
|
|
@@ -122781,8 +123034,8 @@ function autoGrowBox(contentHeight, lineHeight, verticalPadding, maxLines) {
|
|
|
122781
123034
|
function PreviewMenuOverlay({ label: label3, dialogRef, preview, ctx, onClose, anchorHost, children }) {
|
|
122782
123035
|
const host = anchorHost?.closest(`[${MODAL_SCOPE_ATTR}]`) ?? (typeof document !== "undefined" ? document.body : null);
|
|
122783
123036
|
const reduce = ctx.reduceMotion();
|
|
122784
|
-
const [shown2, setShown] =
|
|
122785
|
-
|
|
123037
|
+
const [shown2, setShown] = React16.useState(reduce);
|
|
123038
|
+
React16.useEffect(() => {
|
|
122786
123039
|
if (reduce || typeof requestAnimationFrame !== "function") {
|
|
122787
123040
|
setShown(true);
|
|
122788
123041
|
return;
|
|
@@ -122791,7 +123044,7 @@ function PreviewMenuOverlay({ label: label3, dialogRef, preview, ctx, onClose, a
|
|
|
122791
123044
|
return () => cancelAnimationFrame(raf);
|
|
122792
123045
|
}, [reduce]);
|
|
122793
123046
|
const inScope = host != null && host !== host.ownerDocument.body;
|
|
122794
|
-
const previewCtx =
|
|
123047
|
+
const previewCtx = React16.useMemo(() => ctx.onAction ? { ...ctx, onAction: (a2) => {
|
|
122795
123048
|
onClose();
|
|
122796
123049
|
ctx.onAction(a2);
|
|
122797
123050
|
} } : ctx, [ctx, onClose]);
|
|
@@ -122858,7 +123111,7 @@ function youtubeId(item) {
|
|
|
122858
123111
|
}
|
|
122859
123112
|
}
|
|
122860
123113
|
function useResolvedMediaItems(items, ctx) {
|
|
122861
|
-
const paths2 =
|
|
123114
|
+
const paths2 = React16.useMemo(() => {
|
|
122862
123115
|
const set = /* @__PURE__ */ new Set();
|
|
122863
123116
|
for (const it2 of items) {
|
|
122864
123117
|
if (!it2 || typeof it2 !== "object") continue;
|
|
@@ -122870,17 +123123,17 @@ function useResolvedMediaItems(items, ctx) {
|
|
|
122870
123123
|
return [...set];
|
|
122871
123124
|
}, [items]);
|
|
122872
123125
|
const key3 = paths2.join("\0");
|
|
122873
|
-
const [values, setValues] =
|
|
123126
|
+
const [values, setValues] = React16.useState(() => {
|
|
122874
123127
|
const seed2 = {};
|
|
122875
123128
|
if (ctx.provider) for (const p2 of paths2) seed2[p2] = ctx.provider.value(p2);
|
|
122876
123129
|
return seed2;
|
|
122877
123130
|
});
|
|
122878
|
-
|
|
123131
|
+
React16.useEffect(() => {
|
|
122879
123132
|
if (!ctx.provider || paths2.length === 0) return;
|
|
122880
123133
|
const unsubs = paths2.map((p2) => ctx.provider.subscribe(p2, (v2) => setValues((prev) => prev[p2] === v2 ? prev : { ...prev, [p2]: v2 })));
|
|
122881
123134
|
return () => unsubs.forEach((u2) => u2());
|
|
122882
123135
|
}, [ctx.provider, key3]);
|
|
122883
|
-
return
|
|
123136
|
+
return React16.useMemo(() => items.map((it2) => {
|
|
122884
123137
|
if (!it2 || typeof it2 !== "object") return it2;
|
|
122885
123138
|
let out2 = null;
|
|
122886
123139
|
for (const f2 of MEDIA_ITEM_BINDABLE) {
|
|
@@ -122923,8 +123176,8 @@ function reloadKeyOf(v2) {
|
|
|
122923
123176
|
return String(v2);
|
|
122924
123177
|
}
|
|
122925
123178
|
function cloneWithKids(el2, props, kids3) {
|
|
122926
|
-
if (kids3 === el2.props.children) return
|
|
122927
|
-
return
|
|
123179
|
+
if (kids3 === el2.props.children) return React16.cloneElement(el2, props);
|
|
123180
|
+
return React16.cloneElement(el2, props, ...Array.isArray(kids3) ? kids3 : [kids3]);
|
|
122928
123181
|
}
|
|
122929
123182
|
function editA11yParts(node, edit) {
|
|
122930
123183
|
if (Array.isArray(node)) {
|
|
@@ -122936,7 +123189,7 @@ function editA11yParts(node, edit) {
|
|
|
122936
123189
|
});
|
|
122937
123190
|
return changed ? out2 : node;
|
|
122938
123191
|
}
|
|
122939
|
-
if (!
|
|
123192
|
+
if (!React16.isValidElement(node) || typeof node.type !== "string") return node;
|
|
122940
123193
|
const own6 = node.props;
|
|
122941
123194
|
if (own6["data-component-id"] != null) return node;
|
|
122942
123195
|
const part4 = own6[A11Y_PART];
|
|
@@ -122980,8 +123233,8 @@ function isNativeInteractiveElement(el2) {
|
|
|
122980
123233
|
return typeof el2.type === "string" && (["button", "input", "select", "textarea"].includes(el2.type) || el2.type === "a" && typeof props.href === "string");
|
|
122981
123234
|
}
|
|
122982
123235
|
function hasInteractiveReactDescendant(el2) {
|
|
122983
|
-
return
|
|
122984
|
-
if (!
|
|
123236
|
+
return React16.Children.toArray(el2.props.children).some((child) => {
|
|
123237
|
+
if (!React16.isValidElement(child)) return false;
|
|
122985
123238
|
if (isNativeInteractiveElement(child)) return true;
|
|
122986
123239
|
const props = child.props;
|
|
122987
123240
|
if (typeof child.type === "string" && typeof props.role === "string" && INTERACTIVE_ROLES.has(props.role)) return true;
|
|
@@ -123058,8 +123311,8 @@ function trackActivatorName(activator) {
|
|
|
123058
123311
|
activatorNameObservers.set(activator, observer);
|
|
123059
123312
|
}
|
|
123060
123313
|
function TapActivator({ label: label3, state, tabIndex = 0, role = "button", hint, initialFocus }) {
|
|
123061
|
-
const ref =
|
|
123062
|
-
const hintId = `hm-tap-hint${
|
|
123314
|
+
const ref = React16.useRef(null);
|
|
123315
|
+
const hintId = `hm-tap-hint${React16.useId()}`;
|
|
123063
123316
|
useIsomorphicLayoutEffect(() => {
|
|
123064
123317
|
const el2 = ref.current;
|
|
123065
123318
|
if (!el2 || label3) return;
|
|
@@ -123098,9 +123351,9 @@ function TapActivator({ label: label3, state, tabIndex = 0, role = "button", hin
|
|
|
123098
123351
|
function withExtras(name, render) {
|
|
123099
123352
|
const Wrapped = ({ props, ctx, wrap, nodeId, gap, ...pass }) => {
|
|
123100
123353
|
const el2 = render({ props, ctx, wrap, nodeId, gap, nodeExtras: pass });
|
|
123101
|
-
if (!
|
|
123354
|
+
if (!React16.isValidElement(el2)) return /* @__PURE__ */ jsx11(Fragment4, { children: el2 });
|
|
123102
123355
|
if (el2.props[NODE_EXTRAS_TARGET] === "bottom-drawer-panel") {
|
|
123103
|
-
return
|
|
123356
|
+
return React16.cloneElement(el2, { [NODE_EXTRAS_TARGET]: void 0 });
|
|
123104
123357
|
}
|
|
123105
123358
|
const additive = addIntrinsicPadding(el2.props.style, wrap ?? {});
|
|
123106
123359
|
const inferredDecorative = el2.props[INFERRED_DECORATIVE] === true;
|
|
@@ -123120,7 +123373,7 @@ function withExtras(name, render) {
|
|
|
123120
123373
|
}, hasA11yParts ? editA11yParts(kids3, a11yPartEdit({}, false, () => {
|
|
123121
123374
|
})) : kids3));
|
|
123122
123375
|
}
|
|
123123
|
-
return withCircleClipBorder(additive ?
|
|
123376
|
+
return withCircleClipBorder(additive ? React16.cloneElement(el2, { style: additive }) : el2);
|
|
123124
123377
|
}
|
|
123125
123378
|
const prev = el2.props;
|
|
123126
123379
|
const next = { ...pass };
|
|
@@ -123221,7 +123474,7 @@ function withExtras(name, render) {
|
|
|
123221
123474
|
}
|
|
123222
123475
|
return withCircleClipBorder(cloneWithKids(el2, next, kids3));
|
|
123223
123476
|
}
|
|
123224
|
-
return withCircleClipBorder(
|
|
123477
|
+
return withCircleClipBorder(React16.cloneElement(el2, next));
|
|
123225
123478
|
};
|
|
123226
123479
|
Wrapped.displayName = name;
|
|
123227
123480
|
return Wrapped;
|
|
@@ -123329,7 +123582,7 @@ function overlayEdgeStyle(edge, gap) {
|
|
|
123329
123582
|
}
|
|
123330
123583
|
function useFlippedEdge(edge, open, bubbleRef, anchorRef, gap = TOOLTIP_GAP) {
|
|
123331
123584
|
const initial = { edge, x: 0, y: 0, maxWidth: Infinity };
|
|
123332
|
-
const [placed, setPlaced] =
|
|
123585
|
+
const [placed, setPlaced] = React16.useState(initial);
|
|
123333
123586
|
useIsomorphicLayoutEffect(() => {
|
|
123334
123587
|
if (!open) {
|
|
123335
123588
|
setPlaced((previous) => previous.edge === edge && previous.x === 0 && previous.y === 0 && previous.maxWidth === Infinity ? previous : initial);
|
|
@@ -124153,7 +124406,7 @@ function renderNodeInner(node, ctx) {
|
|
|
124153
124406
|
return /* @__PURE__ */ jsx11(ScrollIntoViewNode, { node: bare, ctx, path: node.modifiers.scrollIntoViewPath });
|
|
124154
124407
|
}
|
|
124155
124408
|
const el2 = renderInner(node, ctx);
|
|
124156
|
-
if (!
|
|
124409
|
+
if (!React16.isValidElement(el2)) return el2;
|
|
124157
124410
|
const extra = {};
|
|
124158
124411
|
const material = node?.modifiers?.material;
|
|
124159
124412
|
const materialName = typeof material === "string" ? material : material?.token ?? material?.name;
|
|
@@ -124338,9 +124591,9 @@ function renderNodeInner(node, ctx) {
|
|
|
124338
124591
|
const finalStyle = extra.style ?? el2.props.style;
|
|
124339
124592
|
if (!finalStyle?.position) extra.style = { ...finalStyle ?? {}, position: "relative" };
|
|
124340
124593
|
}
|
|
124341
|
-
let out2 = tapActivator ?
|
|
124342
|
-
if (
|
|
124343
|
-
if (busyGate &&
|
|
124594
|
+
let out2 = tapActivator ? React16.cloneElement(el2, extra, tapActivator, el2.props.children) : Object.keys(extra).length ? React16.cloneElement(el2, extra) : el2;
|
|
124595
|
+
if (React16.isValidElement(out2)) out2 = withCircleClipBorder(out2);
|
|
124596
|
+
if (busyGate && React16.isValidElement(out2)) out2 = /* @__PURE__ */ jsx11(WorkerTapGate, { gate: busyGate, action: tap, children: out2 });
|
|
124344
124597
|
if (a11yHint && !tapActivator) {
|
|
124345
124598
|
out2 = /* @__PURE__ */ jsx11(A11yHintDescription, { hint: a11yHint, idBase: componentId, children: out2 });
|
|
124346
124599
|
}
|
|
@@ -124353,10 +124606,10 @@ function renderNodeInner(node, ctx) {
|
|
|
124353
124606
|
return out2;
|
|
124354
124607
|
}
|
|
124355
124608
|
function NodeOnAppear({ action, ctx, children }) {
|
|
124356
|
-
const fired =
|
|
124357
|
-
const appearanceAction =
|
|
124609
|
+
const fired = React16.useRef(false);
|
|
124610
|
+
const appearanceAction = React16.useContext(AppearanceActionContext);
|
|
124358
124611
|
const onAction = appearanceAction === void 0 ? ctx.onAction : appearanceAction;
|
|
124359
|
-
|
|
124612
|
+
React16.useEffect(() => {
|
|
124360
124613
|
if (fired.current || ctx.staticRender || !onAction) return;
|
|
124361
124614
|
const resolved2 = resolveItemDeep2(action, ctx);
|
|
124362
124615
|
if (!resolved2?.actionId) return;
|
|
@@ -124569,22 +124822,26 @@ function renderInner(node, ctx) {
|
|
|
124569
124822
|
const boundStagger = ctx.reduceMotion() ? 0 : Number(props.staggerMs ?? props.stagger_ms ?? 0);
|
|
124570
124823
|
const boundAnimateItems = listAnimateItemsEnabled(ctx) && (props.animateItems ?? props.animate_items) === true && !props.horizontal;
|
|
124571
124824
|
if (boundAnimateItems) ensureListAnimateRuntime();
|
|
124825
|
+
const jumpPath = props.scrollToItemPath ?? props.scroll_to_item_path;
|
|
124826
|
+
const onTopItem = props.onTopItemChange ?? props.on_top_item_change;
|
|
124827
|
+
const anchored = !props.horizontal && !!(jumpPath || onTopItem);
|
|
124572
124828
|
const boundBody = /* @__PURE__ */ jsx11(
|
|
124573
124829
|
BoundList,
|
|
124574
124830
|
{
|
|
124575
124831
|
ctx,
|
|
124576
124832
|
itemsPath,
|
|
124577
124833
|
template: items[0],
|
|
124834
|
+
tagRows: anchored,
|
|
124578
124835
|
windowed: !props.horizontal,
|
|
124579
124836
|
wrapRows: boundAnimateItems ? (rows) => /* @__PURE__ */ jsx11("div", { "data-himalaya-animate-items": "1", style: { display: "contents" }, children: rows }) : void 0,
|
|
124580
124837
|
footer: boundPagination ? /* @__PURE__ */ jsx11(LoadMoreSentinel, { ctx, pagination: boundPagination }) : null,
|
|
124581
124838
|
pageCursor: boundPagination?.cursor,
|
|
124582
124839
|
renderRow: keptRowRenderer(ctx, props, () => (t2, ic) => {
|
|
124583
124840
|
let row2 = renderNode(t2, asItem(ic));
|
|
124584
|
-
if (boundStagger > 0 &&
|
|
124841
|
+
if (boundStagger > 0 && React16.isValidElement(row2) && (props.horizontal || Number(ic.itemScope?.__index ?? 0) < BOUND_LIST_WINDOW_START)) {
|
|
124585
124842
|
const i2 = Number(ic.itemScope?.__index ?? 0);
|
|
124586
124843
|
const prev = row2.props.style ?? {};
|
|
124587
|
-
row2 =
|
|
124844
|
+
row2 = React16.cloneElement(row2, { style: { ...prev, animationDelay: `${i2 * boundStagger}ms` } });
|
|
124588
124845
|
}
|
|
124589
124846
|
if (boundSwipe && ctx.onAction && !props.horizontal) {
|
|
124590
124847
|
const leading = resolveSwipeActions(boundSwipe.leading, ic);
|
|
@@ -124609,7 +124866,7 @@ function renderInner(node, ctx) {
|
|
|
124609
124866
|
})
|
|
124610
124867
|
}
|
|
124611
124868
|
);
|
|
124612
|
-
const withSentinel = boundBody;
|
|
124869
|
+
const withSentinel = anchored ? /* @__PURE__ */ jsx11(RowAnchors, { ctx, itemsPath, jumpPath, onTopItem, children: boundBody }) : boundBody;
|
|
124613
124870
|
if (boundRefresh && ctx.onAction && !props.horizontal) {
|
|
124614
124871
|
return /* @__PURE__ */ jsx11(
|
|
124615
124872
|
PullToRefreshList,
|
|
@@ -124639,7 +124896,7 @@ function renderInner(node, ctx) {
|
|
|
124639
124896
|
if (swipe && ctx.onAction && !props.horizontal) {
|
|
124640
124897
|
const leading = swipe.leading ?? [];
|
|
124641
124898
|
const trailing = swipe.trailing ?? [];
|
|
124642
|
-
const arr2 =
|
|
124899
|
+
const arr2 = React16.Children.toArray(rendered);
|
|
124643
124900
|
body = arr2.map((child, i2) => /* @__PURE__ */ jsx11(
|
|
124644
124901
|
SwipeRow,
|
|
124645
124902
|
{
|
|
@@ -125152,7 +125409,7 @@ function reportUnknownComponent(ctx, pkg, type) {
|
|
|
125152
125409
|
function unknownComponentShowsDeveloperLabel(ctx) {
|
|
125153
125410
|
return ctx.debugUnknownComponents ?? ctx.previewSurface != null;
|
|
125154
125411
|
}
|
|
125155
|
-
var AppearanceActionContext, rowValue, loadPdfFetch, WebViewBridgeHost2, useIsomorphicLayoutEffect, GridColumnsContext, GridBoundList, GRID_SPAN_ALL, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, valueSwapKeyframesInjected, NUMERIC_TEXT, shimmerKeyframesInjected, pressStylesInjected, REVEAL_ON_FOCUS_ATTR, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, AMBIENT_HOST_STYLE, AmbientMotionBox, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, LOTTIE_RUNTIME_ATTRIBUTES, lottieAnims, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asFinalTextL10n, asBoundText, useBoundString, asBoundCopy, useBoundCopy, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, MediaFieldNode, WorkerSubtreeNode, RichContentNode, resolveItemDeep2, resolveRowAction2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, withRootStyle, ReactiveDirectScalars, HiddenGate, ExitPresence, StatefulSectionNode, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MENU_ANCHOR_CONTROL, MenuNode, MENU_LONG_PRESS_MS, menuOpensOnLongPress, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfDocumentCanvas, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, NODE_EXTRAS_TARGET, SYNTHETIC_TAP_ROLE, SYNTHETIC_TABINDEX, INFERRED_DECORATIVE, SELF_RENDERED_LEAF, ROLE_WHEN_NAMED, AUTHORED_ROLE, PENDING_RANGE, RANGE_ROLES, NODE_A11Y_ATTRS, INTERACTIVE_ROLES, ALWAYS_INTERACTIVE_COMPONENT_TYPES, TAP_ACTIVATOR_ATTR, TAP_GROUP_ATTR, NESTED_CONTROL_SELECTOR, VISUALLY_HIDDEN, NAME_SKIP_SELECTOR, activatorNameObservers, ACTIVATOR_STATE_ATTRS, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, REVEAL_RELEASE_MS, REVEAL_FADE_MS, REVEAL_BUFFER, revealProgress, countWords, RevealText, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, EMPTY_STATE_SPACING, EmptyStateNode, ERROR_STATE_VARIANTS, ERROR_STATE_SPACING, ErrorStateNode, ButtonNode, OtpInputNode, ProgressBarNode, SnackbarNode, ACTIVITY_DEFAULT_NAME, ACTIVITY_RING_ARC, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, BOTTOM_DRAWER_HOST_STACK_EVENT, ModalBottomSheetNode, BottomDrawerNode, PRESENTED_OVERLAY_ATTR, TooltipNode, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, ShapeNode, LegendMarker, LegendNode, cellAlign, dataTableProbe, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, LiveWindowMeasured, LiveWindowPage, PagingNode, WheelPickerNode, ColorPickerNode, FilterChipsNode, TILE_PX, MAX_MERCATOR_LAT, DEFAULT_TILE_MAX_ZOOM, CIRCLE_SEGMENTS, METRES_PER_DEG_LAT, MARKER_HIT_RADIUS, SHAPE_HIT_RADIUS, MapNode, CAROUSEL_SETTLE_MS, scrollCarouselTo, CarouselNode, BannerNode, CollapsingHeaderNode, UnsupportedOnSurface, CALENDAR_DATE_ONLY_RE, CAL_DEFAULT_MAX_DOTS, CAL_AGENDA_INITIAL_DAYS, CAL_AGENDA_PAGE_DAYS, CAL_DEFAULT_SNAP_MINUTES, CAL_UNASSIGNED_LANE_ID, MonthCalendarNode, TimeGridNode, AgendaNode, ARIA_ROLE, initialFocusScheduled, PRESENTED_SCOPE, focusRoots, A11yHintDescription, rowRenderers, railRowFrame, renderRailRow, reportedUnknownComponents, UnknownComponentNode, WebRenderer, ScrollIntoViewNode;
|
|
125412
|
+
var AppearanceActionContext, rowValue, loadPdfFetch, WebViewBridgeHost2, useIsomorphicLayoutEffect, GridColumnsContext, GridBoundList, GRID_SPAN_ALL, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, valueSwapKeyframesInjected, NUMERIC_TEXT, shimmerKeyframesInjected, pressStylesInjected, REVEAL_ON_FOCUS_ATTR, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, AMBIENT_HOST_STYLE, AmbientMotionBox, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, LOTTIE_RUNTIME_ATTRIBUTES, lottieAnims, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asFinalTextL10n, asBoundText, useBoundString, asBoundCopy, useBoundCopy, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, MediaFieldNode, WorkerSubtreeNode, RichContentNode, resolveItemDeep2, resolveRowAction2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, withRootStyle, ReactiveDirectScalars, HiddenGate, ExitPresence, StatefulSectionNode, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MENU_ANCHOR_CONTROL, MenuNode, MENU_LONG_PRESS_MS, menuOpensOnLongPress, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfDocumentCanvas, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, NODE_EXTRAS_TARGET, SYNTHETIC_TAP_ROLE, SYNTHETIC_TABINDEX, INFERRED_DECORATIVE, SELF_RENDERED_LEAF, ROLE_WHEN_NAMED, AUTHORED_ROLE, PENDING_RANGE, RANGE_ROLES, NODE_A11Y_ATTRS, INTERACTIVE_ROLES, ALWAYS_INTERACTIVE_COMPONENT_TYPES, TAP_ACTIVATOR_ATTR, TAP_GROUP_ATTR, NESTED_CONTROL_SELECTOR, VISUALLY_HIDDEN, NAME_SKIP_SELECTOR, activatorNameObservers, ACTIVATOR_STATE_ATTRS, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, REVEAL_RELEASE_MS, REVEAL_FADE_MS, REVEAL_BUFFER, revealProgress, countWords, RevealText, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, EMPTY_STATE_SPACING, EmptyStateNode, ERROR_STATE_VARIANTS, ERROR_STATE_SPACING, ErrorStateNode, ButtonNode, OtpInputNode, ProgressBarNode, SnackbarNode, ACTIVITY_DEFAULT_NAME, ACTIVITY_RING_ARC, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, BOTTOM_DRAWER_HOST_STACK_EVENT, ModalBottomSheetNode, BottomDrawerNode, PRESENTED_OVERLAY_ATTR, TooltipNode, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, ShapeNode, LegendMarker, LegendNode, cellAlign, dataTableProbe, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, LiveWindowMeasured, LiveWindowPage, PagingNode, WheelPickerNode, ColorPickerNode, FilterChipsNode, TILE_PX, MAX_MERCATOR_LAT, DEFAULT_TILE_MAX_ZOOM, CIRCLE_SEGMENTS, METRES_PER_DEG_LAT, MARKER_HIT_RADIUS, SHAPE_HIT_RADIUS, MapNode, CAROUSEL_SETTLE_MS, scrollCarouselTo, CarouselNode, BannerNode, CollapsingHeaderNode, UnsupportedOnSurface, CALENDAR_DATE_ONLY_RE, CAL_DEFAULT_MAX_DOTS, CAL_AGENDA_INITIAL_DAYS, CAL_AGENDA_PAGE_DAYS, CAL_DEFAULT_SNAP_MINUTES, CAL_UNASSIGNED_LANE_ID, MonthCalendarNode, TimeGridNode, AgendaNode, ARIA_ROLE, initialFocusScheduled, PRESENTED_SCOPE, focusRoots, A11yHintDescription, rowRenderers, railRowFrame, renderRailRow, RowAnchors, reportedUnknownComponents, UnknownComponentNode, WebRenderer, ScrollIntoViewNode;
|
|
125156
125413
|
var init_renderNode = __esm({
|
|
125157
125414
|
"../../core/web-renderer/src/renderNode.tsx"() {
|
|
125158
125415
|
"use strict";
|
|
@@ -125168,6 +125425,7 @@ var init_renderNode = __esm({
|
|
|
125168
125425
|
init_helpers();
|
|
125169
125426
|
init_liveWindow();
|
|
125170
125427
|
init_bindings2();
|
|
125428
|
+
init_scrollAnchors();
|
|
125171
125429
|
init_snackbarTiming();
|
|
125172
125430
|
init_bindings();
|
|
125173
125431
|
init_tokens();
|
|
@@ -125204,21 +125462,21 @@ var init_renderNode = __esm({
|
|
|
125204
125462
|
init_rich_content();
|
|
125205
125463
|
init_rich_text_field();
|
|
125206
125464
|
init_richContent();
|
|
125207
|
-
AppearanceActionContext =
|
|
125465
|
+
AppearanceActionContext = React16.createContext(void 0);
|
|
125208
125466
|
rowValue = (v2, ctx) => typeof v2 === "string" && v2.startsWith("$item") ? resolveScalarStatic(v2, ctx) : v2;
|
|
125209
125467
|
loadPdfFetch = () => Promise.resolve().then(() => (init_pdfFetch(), pdfFetch_exports));
|
|
125210
|
-
WebViewBridgeHost2 =
|
|
125211
|
-
useIsomorphicLayoutEffect = typeof globalThis.document === "undefined" ?
|
|
125212
|
-
GridColumnsContext =
|
|
125468
|
+
WebViewBridgeHost2 = React16.lazy(() => Promise.resolve().then(() => (init_webviewBridgeHost(), webviewBridgeHost_exports)));
|
|
125469
|
+
useIsomorphicLayoutEffect = typeof globalThis.document === "undefined" ? React16.useEffect : React16.useLayoutEffect;
|
|
125470
|
+
GridColumnsContext = React16.createContext(1);
|
|
125213
125471
|
GridBoundList = (props) => {
|
|
125214
|
-
const columns =
|
|
125472
|
+
const columns = React16.useContext(GridColumnsContext);
|
|
125215
125473
|
return /* @__PURE__ */ jsx11(BoundList, { ...props, windowed: true, rowSize: columns, markerStyle: GRID_SPAN_ALL });
|
|
125216
125474
|
};
|
|
125217
125475
|
GRID_SPAN_ALL = { gridColumn: "1 / -1" };
|
|
125218
125476
|
ResponsiveGrid = ({ base, medium, expanded, initialCols, seedWidth, spacing, extra, children }) => {
|
|
125219
|
-
const [el2, setEl] =
|
|
125220
|
-
const [cols, setCols] =
|
|
125221
|
-
|
|
125477
|
+
const [el2, setEl] = React16.useState(null);
|
|
125478
|
+
const [cols, setCols] = React16.useState(initialCols);
|
|
125479
|
+
React16.useEffect(() => {
|
|
125222
125480
|
if (!el2) return;
|
|
125223
125481
|
const measure2 = () => {
|
|
125224
125482
|
const w2 = seededWidth(el2.clientWidth, seedWidth);
|
|
@@ -125244,9 +125502,9 @@ var init_renderNode = __esm({
|
|
|
125244
125502
|
SPLIT_EXPANDED_MIN_WIDTH = 840;
|
|
125245
125503
|
SPLIT_COLUMN_GAP = 16;
|
|
125246
125504
|
ResponsiveSplitView = ({ primary, detail, primaryMaxWidth, initialWide, seedWidth, extra }) => {
|
|
125247
|
-
const ref =
|
|
125248
|
-
const [wide, setWide] =
|
|
125249
|
-
|
|
125505
|
+
const ref = React16.useRef(null);
|
|
125506
|
+
const [wide, setWide] = React16.useState(initialWide);
|
|
125507
|
+
React16.useEffect(() => {
|
|
125250
125508
|
const el2 = ref.current;
|
|
125251
125509
|
if (!el2) return;
|
|
125252
125510
|
const measure2 = () => {
|
|
@@ -125292,9 +125550,9 @@ var init_renderNode = __esm({
|
|
|
125292
125550
|
revealRuntimeInjected = false;
|
|
125293
125551
|
AMBIENT_HOST_STYLE = { display: "contents" };
|
|
125294
125552
|
AmbientMotionBox = ({ spec, kind, children }) => {
|
|
125295
|
-
const ref =
|
|
125553
|
+
const ref = React16.useRef(null);
|
|
125296
125554
|
const { minGapMs, maxGapMs } = spec;
|
|
125297
|
-
|
|
125555
|
+
React16.useEffect(() => {
|
|
125298
125556
|
const el2 = ref.current?.firstElementChild;
|
|
125299
125557
|
if (!el2 || typeof el2.animate !== "function") return;
|
|
125300
125558
|
let timer;
|
|
@@ -125378,14 +125636,14 @@ var init_renderNode = __esm({
|
|
|
125378
125636
|
}
|
|
125379
125637
|
};
|
|
125380
125638
|
bodyFont = (ctx) => fontStack(ctx.font("body").family, ctx.idiom);
|
|
125381
|
-
kids2 = (arr2, ctx) => Array.isArray(arr2) ? arr2.map((n2, i2) => /* @__PURE__ */ jsx11(
|
|
125639
|
+
kids2 = (arr2, ctx) => Array.isArray(arr2) ? arr2.map((n2, i2) => /* @__PURE__ */ jsx11(React16.Fragment, { children: renderNode(n2, ctx) }, n2?.id ?? i2)) : null;
|
|
125382
125640
|
rowKidCtx = (n2, ctx) => wantsRowStretch(n2) ? { ...ctx, rowStretch: true } : normalize2(n2).type === "Divider" ? { ...ctx, rowDivider: true } : ctx;
|
|
125383
|
-
rowKids = (arr2, ctx) => Array.isArray(arr2) ? arr2.map((n2, i2) => /* @__PURE__ */ jsx11(
|
|
125641
|
+
rowKids = (arr2, ctx) => Array.isArray(arr2) ? arr2.map((n2, i2) => /* @__PURE__ */ jsx11(React16.Fragment, { children: renderNode(n2, rowKidCtx(n2, ctx)) }, n2?.id ?? i2)) : null;
|
|
125384
125642
|
staggeredKids = (arr2, ctx, staggerMs) => Array.isArray(arr2) ? arr2.map((n2, i2) => {
|
|
125385
125643
|
const el2 = renderNode(n2, ctx);
|
|
125386
|
-
if (!
|
|
125644
|
+
if (!React16.isValidElement(el2)) return /* @__PURE__ */ jsx11(React16.Fragment, { children: el2 }, n2?.id ?? i2);
|
|
125387
125645
|
const prev = el2.props.style ?? {};
|
|
125388
|
-
return
|
|
125646
|
+
return React16.cloneElement(el2, { key: n2?.id ?? i2, style: { ...prev, animationDelay: `${i2 * staggerMs}ms` } });
|
|
125389
125647
|
}) : null;
|
|
125390
125648
|
asTextL10n = (v2, ctx) => typeof v2 === "string" && v2.startsWith(TRANSLATION_PREFIX) ? asText2(resolveTranslation(v2, ctx.catalog)) : asText2(v2);
|
|
125391
125649
|
asFinalTextL10n = (v2, ctx) => typeof v2 === "string" ? v2.startsWith(TRANSLATION_PREFIX) ? asText2(resolveTranslation(v2, ctx.catalog)) : v2 : asText2(v2);
|
|
@@ -125403,13 +125661,13 @@ var init_renderNode = __esm({
|
|
|
125403
125661
|
const bound2 = Object.entries(params).filter(
|
|
125404
125662
|
([, v2]) => typeof v2 === "string" && v2.startsWith("$service:")
|
|
125405
125663
|
);
|
|
125406
|
-
const [live3, setLive] =
|
|
125664
|
+
const [live3, setLive] = React16.useState(() => {
|
|
125407
125665
|
const seed2 = {};
|
|
125408
125666
|
if (ctx.provider) for (const [k2, p2] of bound2) seed2[k2] = ctx.provider.value(servicePath(p2));
|
|
125409
125667
|
return seed2;
|
|
125410
125668
|
});
|
|
125411
125669
|
const subKey = bound2.map(([k2, p2]) => `${k2}=${p2}`).join("|");
|
|
125412
|
-
|
|
125670
|
+
React16.useEffect(() => {
|
|
125413
125671
|
const provider = ctx.provider;
|
|
125414
125672
|
if (!provider) return;
|
|
125415
125673
|
const unsubs = bound2.map(
|
|
@@ -125451,11 +125709,11 @@ var init_renderNode = __esm({
|
|
|
125451
125709
|
fragmentSlotContent = ({ props, ctx, discriminator, slotId, extra }) => {
|
|
125452
125710
|
const selected = selectFragmentCase(props, discriminator);
|
|
125453
125711
|
const selectedId = typeof selected?.id === "string" ? selected.id : "";
|
|
125454
|
-
const previousId =
|
|
125455
|
-
const reportedUnknown =
|
|
125456
|
-
const reportedInvalid =
|
|
125457
|
-
const [announcement, setAnnouncement] =
|
|
125458
|
-
|
|
125712
|
+
const previousId = React16.useRef(selectedId);
|
|
125713
|
+
const reportedUnknown = React16.useRef(/* @__PURE__ */ new Set());
|
|
125714
|
+
const reportedInvalid = React16.useRef(/* @__PURE__ */ new Set());
|
|
125715
|
+
const [announcement, setAnnouncement] = React16.useState("");
|
|
125716
|
+
React16.useEffect(() => {
|
|
125459
125717
|
if (typeof discriminator === "string") {
|
|
125460
125718
|
if (discriminator && !props.cases?.some((candidate) => candidate.id === discriminator) && !reportedUnknown.current.has(discriminator)) {
|
|
125461
125719
|
reportedUnknown.current.add(discriminator);
|
|
@@ -125469,7 +125727,7 @@ var init_renderNode = __esm({
|
|
|
125469
125727
|
}
|
|
125470
125728
|
}
|
|
125471
125729
|
}, [ctx, discriminator, props.cases, slotId]);
|
|
125472
|
-
|
|
125730
|
+
React16.useEffect(() => {
|
|
125473
125731
|
if (previousId.current !== selectedId) {
|
|
125474
125732
|
const next = selected?.accessibilityAnnouncement ?? selected?.accessibility_announcement;
|
|
125475
125733
|
setAnnouncement(typeof next === "string" ? next : "");
|
|
@@ -125483,7 +125741,7 @@ var init_renderNode = __esm({
|
|
|
125483
125741
|
// and the right edge clips (branded-lite's home is a FragmentSlot → 32px cut in
|
|
125484
125742
|
// the phone preview). Included before ...extra so a modifier can still override.
|
|
125485
125743
|
/* @__PURE__ */ jsxs9("div", { "data-fragment-slot": slotId ?? "", "data-fragment-case": selectedId, style: { width: "100%", boxSizing: "border-box", ...extra }, children: [
|
|
125486
|
-
selected?.content ? /* @__PURE__ */ jsx11(
|
|
125744
|
+
selected?.content ? /* @__PURE__ */ jsx11(React16.Fragment, { children: renderNode(selected.content, ctx) }, selectedId) : null,
|
|
125487
125745
|
/* @__PURE__ */ jsx11("span", { "aria-live": "polite", style: { position: "absolute", width: 1, height: 1, padding: 0, margin: -1, overflow: "hidden", clip: "rect(0, 0, 0, 0)", whiteSpace: "nowrap", border: 0 }, children: announcement })
|
|
125488
125746
|
] })
|
|
125489
125747
|
);
|
|
@@ -125504,11 +125762,11 @@ var init_renderNode = __esm({
|
|
|
125504
125762
|
const fallbackPathStr = mediaFieldServicePath(props.fallbackTextPath);
|
|
125505
125763
|
const fallbackBound = useBoundValue(ctx, fallbackPathStr ? String(props.fallbackTextPath) : "");
|
|
125506
125764
|
const fallbackText = typeof fallbackBound === "string" ? fallbackBound : "";
|
|
125507
|
-
const [uploading, setUploading] =
|
|
125508
|
-
const [failed3, setFailed] =
|
|
125509
|
-
const fileRef =
|
|
125510
|
-
const previewRef =
|
|
125511
|
-
const [localPreview, setLocalPreview] =
|
|
125765
|
+
const [uploading, setUploading] = React16.useState(false);
|
|
125766
|
+
const [failed3, setFailed] = React16.useState(false);
|
|
125767
|
+
const fileRef = React16.useRef(null);
|
|
125768
|
+
const previewRef = React16.useRef(null);
|
|
125769
|
+
const [localPreview, setLocalPreview] = React16.useState("");
|
|
125512
125770
|
const uploadService = typeof props.uploadService === "string" ? props.uploadService : "";
|
|
125513
125771
|
const resolvedLabel = asText2(resolveScalarStatic(props.label, ctx));
|
|
125514
125772
|
const name = mediaFieldName(resolvedLabel);
|
|
@@ -125553,7 +125811,7 @@ var init_renderNode = __esm({
|
|
|
125553
125811
|
setUploading(false);
|
|
125554
125812
|
}
|
|
125555
125813
|
};
|
|
125556
|
-
|
|
125814
|
+
React16.useEffect(() => () => {
|
|
125557
125815
|
const previewUrl = previewRef.current;
|
|
125558
125816
|
if (previewUrl && typeof URL.revokeObjectURL === "function") URL.revokeObjectURL(previewUrl);
|
|
125559
125817
|
previewRef.current = null;
|
|
@@ -125625,7 +125883,7 @@ var init_renderNode = __esm({
|
|
|
125625
125883
|
const value2 = useBoundValue(ctx, typeof path2 === "string" ? path2 : "");
|
|
125626
125884
|
const policy = props.policy;
|
|
125627
125885
|
const catalog4 = ctx.provider && typeof ctx.provider.listActions === "function" ? ctx.provider : null;
|
|
125628
|
-
const validation =
|
|
125886
|
+
const validation = React16.useMemo(() => {
|
|
125629
125887
|
if (value2 === void 0 || value2 === null) return { ok: false, reason: "unresolved" };
|
|
125630
125888
|
if (typeof value2 !== "string") return { ok: false, reason: "value_type" };
|
|
125631
125889
|
if (!policy || typeof policy !== "object") return { ok: false, reason: "typed_decode" };
|
|
@@ -125635,8 +125893,8 @@ var init_renderNode = __esm({
|
|
|
125635
125893
|
return { ok: false, reason: "typed_decode" };
|
|
125636
125894
|
}
|
|
125637
125895
|
}, [catalog4, policy, slotId, value2]);
|
|
125638
|
-
const reported =
|
|
125639
|
-
|
|
125896
|
+
const reported = React16.useRef(/* @__PURE__ */ new Set());
|
|
125897
|
+
React16.useEffect(() => {
|
|
125640
125898
|
const key3 = validation.ok ? `ok:${validation.treeHash}` : `bad:${validation.treeHash ?? validation.reason}`;
|
|
125641
125899
|
if (reported.current.has(key3)) return;
|
|
125642
125900
|
reported.current.add(key3);
|
|
@@ -125665,10 +125923,10 @@ var init_renderNode = __esm({
|
|
|
125665
125923
|
const hasPath = typeof path2 === "string" && path2 !== "";
|
|
125666
125924
|
const bound2 = useResolvedScalar(hasPath ? path2 : void 0, ctx);
|
|
125667
125925
|
const raw = hasPath ? bound2 : props.documentJson ?? props.document_json;
|
|
125668
|
-
const result =
|
|
125926
|
+
const result = React16.useMemo(() => layoutRichContentValue(raw), [raw]);
|
|
125669
125927
|
const reason = result && "rejected" in result ? result.rejected : void 0;
|
|
125670
|
-
const reported =
|
|
125671
|
-
|
|
125928
|
+
const reported = React16.useRef(/* @__PURE__ */ new Set());
|
|
125929
|
+
React16.useEffect(() => {
|
|
125672
125930
|
if (!reason) return;
|
|
125673
125931
|
const key3 = typeof raw === "string" ? `${reason}:${raw.length}:${richContentDocumentHash(raw)}` : `${reason}:non-string`;
|
|
125674
125932
|
if (reported.current.has(key3)) return;
|
|
@@ -125762,17 +126020,17 @@ var init_renderNode = __esm({
|
|
|
125762
126020
|
};
|
|
125763
126021
|
withRootStyle = (content, style) => {
|
|
125764
126022
|
if (Array.isArray(content)) return content.map((child) => withRootStyle(child, style));
|
|
125765
|
-
if (!
|
|
125766
|
-
if (content.type ===
|
|
125767
|
-
return
|
|
126023
|
+
if (!React16.isValidElement(content)) return content;
|
|
126024
|
+
if (content.type === React16.Fragment) {
|
|
126025
|
+
return React16.cloneElement(content, {}, React16.Children.map(content.props.children, (child) => withRootStyle(child, style)));
|
|
125768
126026
|
}
|
|
125769
126027
|
const element = content;
|
|
125770
|
-
return
|
|
126028
|
+
return React16.cloneElement(element, { style: { ...element.props.style, ...style } });
|
|
125771
126029
|
};
|
|
125772
126030
|
ReactiveDirectScalars = ({ node, ctx, bindings, style }) => {
|
|
125773
|
-
const [, rerender] =
|
|
126031
|
+
const [, rerender] = React16.useState(0);
|
|
125774
126032
|
const bindingKey = bindings.join("|");
|
|
125775
|
-
|
|
126033
|
+
React16.useEffect(() => {
|
|
125776
126034
|
if (!ctx.provider) return;
|
|
125777
126035
|
const unsubs = bindings.map((binding2) => ctx.provider.subscribe(servicePath(binding2), () => rerender((n2) => n2 + 1)));
|
|
125778
126036
|
return () => unsubs.forEach((unsubscribe) => unsubscribe());
|
|
@@ -125785,14 +126043,14 @@ var init_renderNode = __esm({
|
|
|
125785
126043
|
return /* @__PURE__ */ jsx11(ExitPresence, { hidden: hiddenBool(v2), exit: exit ?? null, children });
|
|
125786
126044
|
};
|
|
125787
126045
|
ExitPresence = ({ hidden, exit, children }) => {
|
|
125788
|
-
const [prevHidden, setPrevHidden] =
|
|
125789
|
-
const [exiting, setExiting] =
|
|
126046
|
+
const [prevHidden, setPrevHidden] = React16.useState(hidden);
|
|
126047
|
+
const [exiting, setExiting] = React16.useState(false);
|
|
125790
126048
|
if (hidden !== prevHidden) {
|
|
125791
126049
|
setPrevHidden(hidden);
|
|
125792
126050
|
setExiting(hidden && exit != null);
|
|
125793
126051
|
}
|
|
125794
|
-
const ref =
|
|
125795
|
-
const exitRef =
|
|
126052
|
+
const ref = React16.useRef(null);
|
|
126053
|
+
const exitRef = React16.useRef(exit);
|
|
125796
126054
|
exitRef.current = exit;
|
|
125797
126055
|
useIsomorphicLayoutEffect(() => {
|
|
125798
126056
|
if (!exiting) return void 0;
|
|
@@ -125825,8 +126083,8 @@ var init_renderNode = __esm({
|
|
|
125825
126083
|
const target = raw == null || raw === "" || isBound && !ctx.provider ? legacy : sectionSlot(isBound ? bound2 : raw);
|
|
125826
126084
|
const { graceMs, floorMs } = loadingTiming(ctx.kit, props.loadingGraceMs ?? props.loading_grace_ms, props.loadingFloorMs ?? props.loading_floor_ms);
|
|
125827
126085
|
const shown2 = useLoadingTiming(target, graceMs, floorMs);
|
|
125828
|
-
const changed =
|
|
125829
|
-
const first =
|
|
126086
|
+
const changed = React16.useRef(false);
|
|
126087
|
+
const first = React16.useRef(shown2);
|
|
125830
126088
|
if (shown2 !== first.current) changed.current = true;
|
|
125831
126089
|
const renderCfg = (cfg) => cfg && typeof cfg === "object" ? /* @__PURE__ */ jsxs9("div", { style: { textAlign: "center", padding: "24px 12px", color: C2("textSecondary", "#9aa2ad") }, children: [
|
|
125832
126090
|
cfg.title && /* @__PURE__ */ jsx11("div", { style: { fontSize: pxToRem(15), fontWeight: 600, color: C2("textPrimary", "#111") }, children: asText2(cfg.title) }),
|
|
@@ -125858,8 +126116,8 @@ var init_renderNode = __esm({
|
|
|
125858
126116
|
}
|
|
125859
126117
|
const animate = motionDefaultsAnimate(ctx);
|
|
125860
126118
|
const fadeMs = motionDefaultsDuration(ctx.kit, 220);
|
|
125861
|
-
const lastShown =
|
|
125862
|
-
const [outgoing, setOutgoing] =
|
|
126119
|
+
const lastShown = React16.useRef(null);
|
|
126120
|
+
const [outgoing, setOutgoing] = React16.useState(null);
|
|
125863
126121
|
useIsomorphicLayoutEffect(() => {
|
|
125864
126122
|
const was = lastShown.current;
|
|
125865
126123
|
if (!animate || !was || was.slot === shown2 || was.node == null) return void 0;
|
|
@@ -125867,7 +126125,7 @@ var init_renderNode = __esm({
|
|
|
125867
126125
|
const t2 = setTimeout(() => setOutgoing(null), fadeMs);
|
|
125868
126126
|
return () => clearTimeout(t2);
|
|
125869
126127
|
}, [shown2]);
|
|
125870
|
-
|
|
126128
|
+
React16.useEffect(() => {
|
|
125871
126129
|
lastShown.current = { slot: shown2, node: content };
|
|
125872
126130
|
});
|
|
125873
126131
|
if (changed.current && animate) {
|
|
@@ -125903,7 +126161,7 @@ var init_renderNode = __esm({
|
|
|
125903
126161
|
const onChangeAction = resolveRowAction2(props.onChange ?? cfg.onChange, ctx);
|
|
125904
126162
|
const borderless = props.borderless === true || cfg.borderless === true;
|
|
125905
126163
|
const secure = props.secure === true || cfg.secure === true;
|
|
125906
|
-
const [valueVisible, setValueVisible] =
|
|
126164
|
+
const [valueVisible, setValueVisible] = React16.useState(false);
|
|
125907
126165
|
const visibilityToggle = secure && (props.visibilityToggle === true || cfg.visibilityToggle === true);
|
|
125908
126166
|
const visibilityLabel = ctx.catalog?.get(valueVisible ? "auth.gate.password.hide" : "auth.gate.password.show") ?? (valueVisible ? "Hide password" : "Show password");
|
|
125909
126167
|
const erroredProp = props.error === true || cfg.error === true;
|
|
@@ -125917,20 +126175,20 @@ var init_renderNode = __esm({
|
|
|
125917
126175
|
const boundRawText = typeof boundVal === "string" ? boundVal : typeof boundVal === "number" ? String(boundVal) : void 0;
|
|
125918
126176
|
const boundText = serializeRichText && boundRawText !== void 0 ? richTextHtmlToPlainText(boundRawText) : boundRawText;
|
|
125919
126177
|
const literalText = typeof valueBinding === "string" ? serializeRichText ? richTextHtmlToPlainText(valueBinding) : valueBinding : "";
|
|
125920
|
-
const [local, setLocal] =
|
|
126178
|
+
const [local, setLocal] = React16.useState(
|
|
125921
126179
|
isBound ? boundText ?? "" : literalText
|
|
125922
126180
|
);
|
|
125923
|
-
const [edited, setEdited] =
|
|
125924
|
-
const [pristineRichValue, setPristineRichValue] =
|
|
126181
|
+
const [edited, setEdited] = React16.useState(false);
|
|
126182
|
+
const [pristineRichValue, setPristineRichValue] = React16.useState(
|
|
125925
126183
|
serializeRichText ? isBound ? boundRawText : typeof valueBinding === "string" ? valueBinding : void 0 : void 0
|
|
125926
126184
|
);
|
|
125927
|
-
const focused =
|
|
125928
|
-
const [touched, setTouched] =
|
|
125929
|
-
const [isFocused, setIsFocused] =
|
|
125930
|
-
const pendingEdits =
|
|
125931
|
-
const previousBoundText =
|
|
125932
|
-
const previousBoundRawText =
|
|
125933
|
-
|
|
126185
|
+
const focused = React16.useRef(false);
|
|
126186
|
+
const [touched, setTouched] = React16.useState(false);
|
|
126187
|
+
const [isFocused, setIsFocused] = React16.useState(false);
|
|
126188
|
+
const pendingEdits = React16.useRef([]);
|
|
126189
|
+
const previousBoundText = React16.useRef(boundText);
|
|
126190
|
+
const previousBoundRawText = React16.useRef(boundRawText);
|
|
126191
|
+
React16.useEffect(() => {
|
|
125934
126192
|
if (!isBound || boundText === void 0) return;
|
|
125935
126193
|
const boundTextChanged = previousBoundText.current !== boundText;
|
|
125936
126194
|
const boundRawTextChanged = previousBoundRawText.current !== boundRawText;
|
|
@@ -125962,23 +126220,23 @@ var init_renderNode = __esm({
|
|
|
125962
126220
|
}
|
|
125963
126221
|
if (!focused.current && boundText !== local && changes.current?.pending == null) setLocal(boundText);
|
|
125964
126222
|
}, [boundText, serializeRichText ? boundRawText : void 0, isFocused, serializeRichText ? edited : false]);
|
|
125965
|
-
const formBag =
|
|
126223
|
+
const formBag = React16.useContext(FormValuesContext);
|
|
125966
126224
|
const fieldId = props.__formFieldId;
|
|
125967
|
-
const previousBinding =
|
|
126225
|
+
const previousBinding = React16.useRef(binding2);
|
|
125968
126226
|
const rule = props.validation ?? cfg.validation;
|
|
125969
126227
|
const { "aria-labelledby": labelledBy } = formFieldA11y(props);
|
|
125970
126228
|
const required3 = rule?.required === true || void 0;
|
|
125971
|
-
const ruleKey =
|
|
125972
|
-
|
|
126229
|
+
const ruleKey = React16.useMemo(() => rule ? JSON.stringify(rule) : "", [rule]);
|
|
126230
|
+
React16.useEffect(() => {
|
|
125973
126231
|
if (!formBag || !fieldId) return;
|
|
125974
126232
|
formBag.register(fieldId, rule);
|
|
125975
126233
|
return () => formBag.unregister(fieldId);
|
|
125976
126234
|
}, [fieldId, formBag, ruleKey]);
|
|
125977
126235
|
const formValue = serializeRichText && !edited && pristineRichValue !== void 0 ? pristineRichValue : serializeRichText ? richTextEditedHtml(pristineRichValue, pristineRichValue === void 0 ? "" : richTextHtmlToPlainText(pristineRichValue), local) : local;
|
|
125978
|
-
|
|
126236
|
+
React16.useEffect(() => {
|
|
125979
126237
|
if (formBag && fieldId) formBag.set(fieldId, formValue);
|
|
125980
126238
|
}, [formValue, fieldId, formBag, binding2]);
|
|
125981
|
-
|
|
126239
|
+
React16.useEffect(() => {
|
|
125982
126240
|
if (previousBinding.current === binding2) return;
|
|
125983
126241
|
previousBinding.current = binding2;
|
|
125984
126242
|
pendingEdits.current = [];
|
|
@@ -125997,7 +126255,7 @@ var init_renderNode = __esm({
|
|
|
125997
126255
|
const errorTextRaw = props.errorText ?? cfg.errorText;
|
|
125998
126256
|
const errorTextResolved = useBoundString(errorTextRaw, ctx);
|
|
125999
126257
|
const workerError = typeof boundError === "string" ? boundError : errorTextRaw == null ? void 0 : errorTextResolved;
|
|
126000
|
-
const validationCatalog =
|
|
126258
|
+
const validationCatalog = React16.useMemo(
|
|
126001
126259
|
() => ctx.catalog ? new Proxy({}, { get: (_t2, k2) => typeof k2 === "string" ? ctx.catalog.get(k2) : void 0 }) : void 0,
|
|
126002
126260
|
[ctx.catalog]
|
|
126003
126261
|
);
|
|
@@ -126012,7 +126270,7 @@ var init_renderNode = __esm({
|
|
|
126012
126270
|
const hasWorkerError = Boolean(workerError && workerError.trim());
|
|
126013
126271
|
const painted2 = rawMessage === null ? "" : translateOnly(rawMessage);
|
|
126014
126272
|
const message2 = !painted2.trim() || ruleMessagePending && !hasWorkerError ? null : painted2;
|
|
126015
|
-
const [feedbackShown, setFeedbackShown] =
|
|
126273
|
+
const [feedbackShown, setFeedbackShown] = React16.useState(false);
|
|
126016
126274
|
const revealed = message2 !== null && shouldRevealError({
|
|
126017
126275
|
rule,
|
|
126018
126276
|
feedbackShown,
|
|
@@ -126021,11 +126279,11 @@ var init_renderNode = __esm({
|
|
|
126021
126279
|
focused: isFocused,
|
|
126022
126280
|
submitAttempted: formBag?.submitAttempted ?? false
|
|
126023
126281
|
});
|
|
126024
|
-
|
|
126282
|
+
React16.useEffect(() => {
|
|
126025
126283
|
if (revealed) setFeedbackShown(true);
|
|
126026
126284
|
}, [revealed]);
|
|
126027
126285
|
const errored = erroredProp || revealed;
|
|
126028
|
-
const generatedId =
|
|
126286
|
+
const generatedId = React16.useId();
|
|
126029
126287
|
const errorId = revealed ? `${componentId ?? generatedId}__error` : void 0;
|
|
126030
126288
|
const emit = (v2) => {
|
|
126031
126289
|
if (onChangeAction && ctx.onAction) {
|
|
@@ -126038,23 +126296,23 @@ var init_renderNode = __esm({
|
|
|
126038
126296
|
}
|
|
126039
126297
|
};
|
|
126040
126298
|
const changeDebounceMs = typeof props.debounceMs === "number" ? props.debounceMs : typeof cfg.debounceMs === "number" ? cfg.debounceMs : 0;
|
|
126041
|
-
const changes =
|
|
126299
|
+
const changes = React16.useRef(null);
|
|
126042
126300
|
if (!changes.current) changes.current = new ChangeDebouncer();
|
|
126043
|
-
|
|
126301
|
+
React16.useEffect(() => () => changes.current?.drop(), []);
|
|
126044
126302
|
const emitNow = (v2) => {
|
|
126045
126303
|
changes.current?.drop();
|
|
126046
126304
|
emit(v2);
|
|
126047
126305
|
};
|
|
126048
|
-
const ownsPrivateDraft =
|
|
126049
|
-
|
|
126306
|
+
const ownsPrivateDraft = React16.useRef(false);
|
|
126307
|
+
React16.useEffect(() => {
|
|
126050
126308
|
if (visibilityToggle && !isBound) ownsPrivateDraft.current = true;
|
|
126051
126309
|
}, [visibilityToggle, isBound]);
|
|
126052
|
-
const clearSensitiveDraft =
|
|
126310
|
+
const clearSensitiveDraft = React16.useRef(() => {
|
|
126053
126311
|
});
|
|
126054
126312
|
clearSensitiveDraft.current = () => {
|
|
126055
126313
|
if (ownsPrivateDraft.current && !isBound) emitNow("");
|
|
126056
126314
|
};
|
|
126057
|
-
|
|
126315
|
+
React16.useEffect(() => () => clearSensitiveDraft.current(), []);
|
|
126058
126316
|
const onInput = (e2) => {
|
|
126059
126317
|
const v2 = e2.currentTarget.value;
|
|
126060
126318
|
setLocal(v2);
|
|
@@ -126086,7 +126344,7 @@ var init_renderNode = __esm({
|
|
|
126086
126344
|
const submitLabelRaw = props.submitLabel ?? cfg.submitLabel;
|
|
126087
126345
|
const onSubmitAction = props.onSubmit ?? cfg.onSubmit;
|
|
126088
126346
|
const enterKeyHint = !multilineBox && ENTER_KEY_HINTS.has(submitLabelRaw) ? submitLabelRaw : !multilineBox && onSubmitAction ? "done" : void 0;
|
|
126089
|
-
const inputRef =
|
|
126347
|
+
const inputRef = React16.useRef(null);
|
|
126090
126348
|
useIsomorphicLayoutEffect(() => {
|
|
126091
126349
|
const el2 = inputRef.current;
|
|
126092
126350
|
const view = el2?.ownerDocument?.defaultView;
|
|
@@ -126101,8 +126359,8 @@ var init_renderNode = __esm({
|
|
|
126101
126359
|
}, [local, multilineBox, maxLines]);
|
|
126102
126360
|
const focusBinding = (typeof props.focusPath === "string" ? props.focusPath : typeof cfg.focusPath === "string" ? cfg.focusPath : void 0) ?? "";
|
|
126103
126361
|
const focusTokenVal = useBoundValue(ctx, focusBinding);
|
|
126104
|
-
const lastFocusToken =
|
|
126105
|
-
|
|
126362
|
+
const lastFocusToken = React16.useRef(void 0);
|
|
126363
|
+
React16.useEffect(() => {
|
|
126106
126364
|
if (!focusBinding) return;
|
|
126107
126365
|
const next = typeof focusTokenVal === "string" ? focusTokenVal : typeof focusTokenVal === "number" ? String(focusTokenVal) : "";
|
|
126108
126366
|
if (!next || next === lastFocusToken.current) return;
|
|
@@ -126178,8 +126436,8 @@ var init_renderNode = __esm({
|
|
|
126178
126436
|
};
|
|
126179
126437
|
MENU_ANCHOR_CONTROL = 'a[href], button, input, select, textarea, [tabindex]:not([tabindex="-1"]), [role="button"], [role="link"]';
|
|
126180
126438
|
MenuNode = withExtras("MenuNode", ({ props, ctx, wrap }) => {
|
|
126181
|
-
const [open, setOpen] =
|
|
126182
|
-
const hostRef =
|
|
126439
|
+
const [open, setOpen] = React16.useState(false);
|
|
126440
|
+
const hostRef = React16.useRef(null);
|
|
126183
126441
|
const context = menuOpensOnLongPress(props.style);
|
|
126184
126442
|
const itemsPath = typeof props.itemsPath === "string" && props.itemsPath.startsWith("$service:") ? props.itemsPath : "";
|
|
126185
126443
|
const boundItems = useBoundValue(ctx, itemsPath);
|
|
@@ -126187,7 +126445,7 @@ var init_renderNode = __esm({
|
|
|
126187
126445
|
const previewMode = context && props.preview != null;
|
|
126188
126446
|
const items = sourceItems.map((it2) => ({ ...it2, label: typeof it2?.label === "string" && it2.label.startsWith("$item") ? resolveItemDeep2(it2.label, ctx) : it2?.label, disabled: it2?.disabled === true || !it2?.action }));
|
|
126189
126447
|
const C2 = ctx.color;
|
|
126190
|
-
|
|
126448
|
+
React16.useEffect(() => {
|
|
126191
126449
|
if (!open) return;
|
|
126192
126450
|
const onTop = () => menuRef.current != null && isWithinTopModal(menuRef.current);
|
|
126193
126451
|
const onDown = (e2) => {
|
|
@@ -126213,11 +126471,11 @@ var init_renderNode = __esm({
|
|
|
126213
126471
|
const flexGrow = typeof wrap?.flex === "string" ? parseFloat(wrap.flex) : typeof wrap?.flex === "number" ? wrap.flex : Number(wrap?.flexGrow ?? 0);
|
|
126214
126472
|
const fill = wrap?.width === "100%" || Number.isFinite(flexGrow) && flexGrow > 0;
|
|
126215
126473
|
const popupPlacement = fill ? { position: "absolute", top: "100%", left: 0, right: 0, zIndex: 20, marginTop: 4 } : { position: "absolute", top: "100%", right: 0, zIndex: 20, marginTop: 4 };
|
|
126216
|
-
const anchorRef =
|
|
126217
|
-
const menuRef =
|
|
126218
|
-
const dialogRef =
|
|
126219
|
-
const [popupAlignLeft, setPopupAlignLeft] =
|
|
126220
|
-
const [popupAbove, setPopupAbove] =
|
|
126474
|
+
const anchorRef = React16.useRef(null);
|
|
126475
|
+
const menuRef = React16.useRef(null);
|
|
126476
|
+
const dialogRef = React16.useRef(null);
|
|
126477
|
+
const [popupAlignLeft, setPopupAlignLeft] = React16.useState(false);
|
|
126478
|
+
const [popupAbove, setPopupAbove] = React16.useState(false);
|
|
126221
126479
|
useIsomorphicLayoutEffect(() => {
|
|
126222
126480
|
if (!open || !anchorRef.current || !menuRef.current) return;
|
|
126223
126481
|
const anchor = anchorRef.current.getBoundingClientRect();
|
|
@@ -126239,8 +126497,8 @@ var init_renderNode = __esm({
|
|
|
126239
126497
|
setPopupAlignLeft(anchor.right - popup.width < left);
|
|
126240
126498
|
setPopupAbove(anchor.bottom + popup.height + 4 > bottom && anchor.top - popup.height - 4 >= top);
|
|
126241
126499
|
});
|
|
126242
|
-
const [innerControl, setInnerControl] =
|
|
126243
|
-
const innerControlRef =
|
|
126500
|
+
const [innerControl, setInnerControl] = React16.useState(null);
|
|
126501
|
+
const innerControlRef = React16.useRef(null);
|
|
126244
126502
|
useIsomorphicLayoutEffect(() => {
|
|
126245
126503
|
const anchor = anchorRef.current;
|
|
126246
126504
|
const refresh = () => {
|
|
@@ -126256,7 +126514,7 @@ var init_renderNode = __esm({
|
|
|
126256
126514
|
observer.observe(anchor, { childList: true, subtree: true, attributes: true, attributeFilter: ["disabled", "tabindex", "href", "role"] });
|
|
126257
126515
|
return () => observer.disconnect();
|
|
126258
126516
|
});
|
|
126259
|
-
|
|
126517
|
+
React16.useEffect(() => {
|
|
126260
126518
|
if (!innerControl) return;
|
|
126261
126519
|
innerControl.setAttribute("aria-haspopup", "menu");
|
|
126262
126520
|
innerControl.setAttribute("aria-expanded", String(open));
|
|
@@ -126268,13 +126526,13 @@ var init_renderNode = __esm({
|
|
|
126268
126526
|
};
|
|
126269
126527
|
}, [innerControl, open]);
|
|
126270
126528
|
const itemsKey = items.map((it2, i2) => `${it2?.id ?? i2}:${it2?.disabled ? 0 : 1}`).join("|");
|
|
126271
|
-
|
|
126529
|
+
React16.useEffect(() => {
|
|
126272
126530
|
if (!open || !modal) return;
|
|
126273
126531
|
const menu = menuRef.current;
|
|
126274
126532
|
if (!menu || menu.contains(document.activeElement)) return;
|
|
126275
126533
|
(menu.querySelector('[role="menuitem"][tabindex="0"]') ?? menu).focus();
|
|
126276
126534
|
}, [open, modal, itemsKey]);
|
|
126277
|
-
|
|
126535
|
+
React16.useEffect(() => {
|
|
126278
126536
|
if (!open || !modal) return;
|
|
126279
126537
|
const layer = pushModalLayer(() => dialogRef.current);
|
|
126280
126538
|
return () => {
|
|
@@ -126296,11 +126554,11 @@ var init_renderNode = __esm({
|
|
|
126296
126554
|
e2.preventDefault();
|
|
126297
126555
|
items2[next].focus();
|
|
126298
126556
|
};
|
|
126299
|
-
const pressTimer =
|
|
126300
|
-
const longPressed =
|
|
126301
|
-
const touchOrigin =
|
|
126302
|
-
const suppressNextClick =
|
|
126303
|
-
const suppressTimer =
|
|
126557
|
+
const pressTimer = React16.useRef(null);
|
|
126558
|
+
const longPressed = React16.useRef(false);
|
|
126559
|
+
const touchOrigin = React16.useRef(null);
|
|
126560
|
+
const suppressNextClick = React16.useRef(false);
|
|
126561
|
+
const suppressTimer = React16.useRef(null);
|
|
126304
126562
|
const clearSuppress = () => {
|
|
126305
126563
|
suppressNextClick.current = false;
|
|
126306
126564
|
if (suppressTimer.current != null) {
|
|
@@ -126314,7 +126572,7 @@ var init_renderNode = __esm({
|
|
|
126314
126572
|
pressTimer.current = null;
|
|
126315
126573
|
}
|
|
126316
126574
|
};
|
|
126317
|
-
|
|
126575
|
+
React16.useEffect(() => () => {
|
|
126318
126576
|
cancelPress();
|
|
126319
126577
|
clearSuppress();
|
|
126320
126578
|
}, []);
|
|
@@ -126476,15 +126734,15 @@ var init_renderNode = __esm({
|
|
|
126476
126734
|
MENU_LONG_PRESS_MS = 500;
|
|
126477
126735
|
menuOpensOnLongPress = (style) => style === "context";
|
|
126478
126736
|
LoadMoreSentinel = ({ ctx, pagination, style }) => {
|
|
126479
|
-
const owned =
|
|
126737
|
+
const owned = React16.useContext(PageCycleContext);
|
|
126480
126738
|
const own6 = usePageCycle(ctx, owned ? void 0 : pagination?.cursor);
|
|
126481
126739
|
const pages2 = owned ?? own6;
|
|
126482
126740
|
const cycle = usePageCycleId(pages2);
|
|
126483
126741
|
const cursor = pages2.cursor;
|
|
126484
126742
|
const action = pagination.onLoadMore ?? pagination.on_load_more;
|
|
126485
126743
|
const workerTap = useWorkerTap(action);
|
|
126486
|
-
const ref =
|
|
126487
|
-
|
|
126744
|
+
const ref = React16.useRef(null);
|
|
126745
|
+
React16.useEffect(() => {
|
|
126488
126746
|
const el2 = ref.current;
|
|
126489
126747
|
if (!cursor || !ctx.onAction || !el2 || typeof IntersectionObserver === "undefined") return;
|
|
126490
126748
|
let live3 = true;
|
|
@@ -126521,11 +126779,11 @@ var init_renderNode = __esm({
|
|
|
126521
126779
|
] });
|
|
126522
126780
|
});
|
|
126523
126781
|
FormView = withExtras("FormView", ({ props, ctx, wrap }) => {
|
|
126524
|
-
const bagRef =
|
|
126782
|
+
const bagRef = React16.useRef(null);
|
|
126525
126783
|
if (!bagRef.current) bagRef.current = createFormBag();
|
|
126526
126784
|
const bag = bagRef.current;
|
|
126527
|
-
|
|
126528
|
-
|
|
126785
|
+
React16.useSyncExternalStore(
|
|
126786
|
+
React16.useCallback((cb) => bag.subscribe(cb), [bag]),
|
|
126529
126787
|
() => bag.version,
|
|
126530
126788
|
() => bag.version
|
|
126531
126789
|
);
|
|
@@ -126542,7 +126800,7 @@ var init_renderNode = __esm({
|
|
|
126542
126800
|
ctx.onAction?.({ ...action, args: merged });
|
|
126543
126801
|
}
|
|
126544
126802
|
};
|
|
126545
|
-
const submitNode =
|
|
126803
|
+
const submitNode = React16.useMemo(() => {
|
|
126546
126804
|
const node = props.submitButton;
|
|
126547
126805
|
if (!node || valid) return node;
|
|
126548
126806
|
if (node.body) return { ...node, body: { ...node.body, props: { ...node.body.props ?? {}, disabled: true } } };
|
|
@@ -126592,11 +126850,11 @@ var init_renderNode = __esm({
|
|
|
126592
126850
|
const startPositionPath = typeof props.startPositionSeconds === "string" && isBinding(props.startPositionSeconds) ? props.startPositionSeconds : "";
|
|
126593
126851
|
const boundStartPosition = useResolvedScalar(startPositionPath || void 0, ctx);
|
|
126594
126852
|
const initialStartPosition = startPositionPath && typeof boundStartPosition === "number" && Number.isFinite(boundStartPosition) ? Math.max(0, boundStartPosition) : Math.max(0, Number.isFinite(Number(props.startPositionSeconds)) ? Number(props.startPositionSeconds) : 0);
|
|
126595
|
-
const [index, setIndex] =
|
|
126853
|
+
const [index, setIndex] = React16.useState(initialIndex);
|
|
126596
126854
|
const queueReady = !itemsPath || Array.isArray(boundQueue);
|
|
126597
126855
|
const seatKey = `${itemsPath ?? ""}|${startIndex}`;
|
|
126598
|
-
const seated =
|
|
126599
|
-
|
|
126856
|
+
const seated = React16.useRef(null);
|
|
126857
|
+
React16.useEffect(() => {
|
|
126600
126858
|
const last = Math.max(0, resolvedItems.length - 1);
|
|
126601
126859
|
if (resolvedItems.length === 0) return;
|
|
126602
126860
|
if (queueReady && seated.current !== seatKey) {
|
|
@@ -126611,19 +126869,19 @@ var init_renderNode = __esm({
|
|
|
126611
126869
|
}
|
|
126612
126870
|
setIndex((i2) => Math.min(Math.max(0, i2), last));
|
|
126613
126871
|
}, [resolvedItems.length, startIndex, queueReady, seatKey]);
|
|
126614
|
-
const [status, setStatus] =
|
|
126615
|
-
const [position, setPosition] =
|
|
126616
|
-
const [duration2, setDuration] =
|
|
126617
|
-
const [buffered, setBuffered] =
|
|
126618
|
-
const [rate, setRateState] =
|
|
126619
|
-
const [fullscreen, setFullscreen] =
|
|
126620
|
-
const [error, setError] =
|
|
126621
|
-
const mediaRef =
|
|
126622
|
-
const hostRef =
|
|
126623
|
-
const autoplayConsumed =
|
|
126872
|
+
const [status, setStatus] = React16.useState("idle");
|
|
126873
|
+
const [position, setPosition] = React16.useState(initialStartPosition);
|
|
126874
|
+
const [duration2, setDuration] = React16.useState(0);
|
|
126875
|
+
const [buffered, setBuffered] = React16.useState(0);
|
|
126876
|
+
const [rate, setRateState] = React16.useState(1);
|
|
126877
|
+
const [fullscreen, setFullscreen] = React16.useState(false);
|
|
126878
|
+
const [error, setError] = React16.useState("");
|
|
126879
|
+
const mediaRef = React16.useRef(null);
|
|
126880
|
+
const hostRef = React16.useRef(null);
|
|
126881
|
+
const autoplayConsumed = React16.useRef(false);
|
|
126624
126882
|
const item = resolvedItems[index];
|
|
126625
126883
|
const mediaKey2 = `${index}:${item?.id ?? item?.url ?? ""}`;
|
|
126626
|
-
|
|
126884
|
+
React16.useEffect(() => {
|
|
126627
126885
|
const outgoing = mediaRef.current;
|
|
126628
126886
|
return () => {
|
|
126629
126887
|
try {
|
|
@@ -126637,7 +126895,7 @@ var init_renderNode = __esm({
|
|
|
126637
126895
|
const isYouTube = provider === "youtube";
|
|
126638
126896
|
const isUnsupportedProvider = provider !== "direct" && !isYouTube;
|
|
126639
126897
|
const isAudio = ["audio", "podcast", "radio"].includes(String(item?.kind ?? ""));
|
|
126640
|
-
const capabilities =
|
|
126898
|
+
const capabilities = React16.useMemo(() => ({
|
|
126641
126899
|
seek: !isUnsupportedProvider && item?.live !== true,
|
|
126642
126900
|
rate: !isUnsupportedProvider && item?.live !== true,
|
|
126643
126901
|
queue: !isUnsupportedProvider && items.length > 1,
|
|
@@ -126665,9 +126923,9 @@ var init_renderNode = __esm({
|
|
|
126665
126923
|
error,
|
|
126666
126924
|
capabilities
|
|
126667
126925
|
};
|
|
126668
|
-
const slotProvider =
|
|
126669
|
-
|
|
126670
|
-
|
|
126926
|
+
const slotProvider = React16.useMemo(() => new MediaSlotProvider(state), []);
|
|
126927
|
+
React16.useEffect(() => slotProvider.set(state));
|
|
126928
|
+
React16.useEffect(() => {
|
|
126671
126929
|
if (!startPositionPath || typeof boundStartPosition !== "number" || !Number.isFinite(boundStartPosition) || status !== "idle") return;
|
|
126672
126930
|
const next = Math.max(0, boundStartPosition);
|
|
126673
126931
|
setPosition(next);
|
|
@@ -126678,7 +126936,7 @@ var init_renderNode = __esm({
|
|
|
126678
126936
|
}
|
|
126679
126937
|
}
|
|
126680
126938
|
}, [startPositionPath, boundStartPosition, status]);
|
|
126681
|
-
const emit =
|
|
126939
|
+
const emit = React16.useCallback((action, extra = {}) => {
|
|
126682
126940
|
if (!action || !ctx.onAction) return;
|
|
126683
126941
|
const snapshot4 = {
|
|
126684
126942
|
sessionId,
|
|
@@ -126697,13 +126955,13 @@ var init_renderNode = __esm({
|
|
|
126697
126955
|
};
|
|
126698
126956
|
ctx.onAction({ ...action, args: { ...action.args ?? {}, ...snapshot4, ...extra }, params: { ...action.params ?? {}, sessionId, index: String(index), ...Object.fromEntries(Object.entries(extra).map(([k2, v2]) => [k2, String(v2)])) } });
|
|
126699
126957
|
}, [ctx.onAction, sessionId, status, index, position, duration2, item, buffered, rate, props.muted, fullscreen, error]);
|
|
126700
|
-
|
|
126958
|
+
React16.useEffect(() => {
|
|
126701
126959
|
if (!isUnsupportedProvider || status === "error") return;
|
|
126702
126960
|
setStatus("error");
|
|
126703
126961
|
setError("provider_unsupported");
|
|
126704
126962
|
emit(props.onError, { state: "error", status: "error", error: "provider_unsupported", code: "provider_unsupported" });
|
|
126705
126963
|
}, [isUnsupportedProvider, status, emit, props.onError]);
|
|
126706
|
-
const play =
|
|
126964
|
+
const play = React16.useCallback(async () => {
|
|
126707
126965
|
if (isYouTube) return;
|
|
126708
126966
|
if (isUnsupportedProvider) {
|
|
126709
126967
|
setStatus("error");
|
|
@@ -126725,17 +126983,17 @@ var init_renderNode = __esm({
|
|
|
126725
126983
|
emit(props.onError, { state: "blocked", status: "blocked", error: message2, code: "playback_blocked" });
|
|
126726
126984
|
}
|
|
126727
126985
|
}, [isYouTube, isUnsupportedProvider, emit, props.onError]);
|
|
126728
|
-
const pause =
|
|
126986
|
+
const pause = React16.useCallback(() => {
|
|
126729
126987
|
mediaRef.current?.pause();
|
|
126730
126988
|
setStatus("paused");
|
|
126731
126989
|
}, []);
|
|
126732
|
-
const seek =
|
|
126990
|
+
const seek = React16.useCallback((seconds) => {
|
|
126733
126991
|
const media = mediaRef.current;
|
|
126734
126992
|
if (!media || !Number.isFinite(seconds)) return;
|
|
126735
126993
|
media.currentTime = Math.max(0, Math.min(seconds, Number.isFinite(media.duration) ? media.duration : seconds));
|
|
126736
126994
|
setPosition(media.currentTime);
|
|
126737
126995
|
}, []);
|
|
126738
|
-
const select2 =
|
|
126996
|
+
const select2 = React16.useCallback((next) => {
|
|
126739
126997
|
if (resolvedItems.length === 0) return;
|
|
126740
126998
|
const normalized = (next % resolvedItems.length + resolvedItems.length) % resolvedItems.length;
|
|
126741
126999
|
const nextItem = resolvedItems[normalized];
|
|
@@ -126757,7 +127015,7 @@ var init_renderNode = __esm({
|
|
|
126757
127015
|
error: ""
|
|
126758
127016
|
});
|
|
126759
127017
|
}, [resolvedItems, emit, props.onItemChange]);
|
|
126760
|
-
const toggleFullscreen =
|
|
127018
|
+
const toggleFullscreen = React16.useCallback(async () => {
|
|
126761
127019
|
if (props.fullscreen === "disabled") return;
|
|
126762
127020
|
const host = hostRef.current;
|
|
126763
127021
|
try {
|
|
@@ -126767,7 +127025,7 @@ var init_renderNode = __esm({
|
|
|
126767
127025
|
setFullscreen((value2) => !value2);
|
|
126768
127026
|
}
|
|
126769
127027
|
}, [props.fullscreen]);
|
|
126770
|
-
|
|
127028
|
+
React16.useEffect(() => {
|
|
126771
127029
|
const listener = (event) => {
|
|
126772
127030
|
const detail = event.detail;
|
|
126773
127031
|
if (!detail || detail.sessionId !== sessionId) return;
|
|
@@ -126815,7 +127073,7 @@ var init_renderNode = __esm({
|
|
|
126815
127073
|
window.addEventListener("himalaya-media-command", listener);
|
|
126816
127074
|
return () => window.removeEventListener("himalaya-media-command", listener);
|
|
126817
127075
|
}, [sessionId, index, play, pause, seek, select2, toggleFullscreen]);
|
|
126818
|
-
|
|
127076
|
+
React16.useEffect(() => {
|
|
126819
127077
|
const listener = () => {
|
|
126820
127078
|
const value2 = document.fullscreenElement === hostRef.current;
|
|
126821
127079
|
setFullscreen(value2);
|
|
@@ -126824,14 +127082,14 @@ var init_renderNode = __esm({
|
|
|
126824
127082
|
document.addEventListener("fullscreenchange", listener);
|
|
126825
127083
|
return () => document.removeEventListener("fullscreenchange", listener);
|
|
126826
127084
|
}, [emit, props.onFullscreenChange]);
|
|
126827
|
-
|
|
127085
|
+
React16.useEffect(() => {
|
|
126828
127086
|
const media = mediaRef.current;
|
|
126829
127087
|
if (!media || isYouTube || isUnsupportedProvider) return;
|
|
126830
127088
|
media.muted = props.muted === true;
|
|
126831
127089
|
media.playbackRate = rate;
|
|
126832
127090
|
if (position > 0) media.currentTime = position;
|
|
126833
127091
|
}, [item?.url, isUnsupportedProvider]);
|
|
126834
|
-
|
|
127092
|
+
React16.useEffect(() => {
|
|
126835
127093
|
if (isYouTube || isUnsupportedProvider || props.autoplay === "never" || autoplayConsumed.current) return;
|
|
126836
127094
|
if (props.autoplay === "once") {
|
|
126837
127095
|
autoplayConsumed.current = true;
|
|
@@ -127033,15 +127291,15 @@ var init_renderNode = __esm({
|
|
|
127033
127291
|
}
|
|
127034
127292
|
);
|
|
127035
127293
|
});
|
|
127036
|
-
PdfDocumentCanvas =
|
|
127294
|
+
PdfDocumentCanvas = React16.lazy(() => Promise.resolve().then(() => (init_pdfDocument(), pdfDocument_exports)).then((module) => ({ default: module.PdfDocument })));
|
|
127037
127295
|
PdfViewNode = withExtras("PdfViewNode", ({ props, ctx, wrap }) => {
|
|
127038
127296
|
const boundUrl = useResolvedScalar(props.url != null && isBinding(props.url) ? props.url : void 0, ctx);
|
|
127039
127297
|
const url = props.url != null && isBinding(props.url) ? boundUrl : props.url;
|
|
127040
127298
|
const rawUrl = typeof url === "string" && !isBinding(url) ? url : "";
|
|
127041
127299
|
const plan = rawUrl ? pdfEmbedPlan(rawUrl, void 0, typeof document !== "undefined" ? document.baseURI : void 0) : null;
|
|
127042
127300
|
const retypeSrc = plan?.mode === "retype" ? plan.src : null;
|
|
127043
|
-
const [retyped, setRetyped] =
|
|
127044
|
-
|
|
127301
|
+
const [retyped, setRetyped] = React16.useState(null);
|
|
127302
|
+
React16.useEffect(() => {
|
|
127045
127303
|
if (!retypeSrc) return;
|
|
127046
127304
|
let live3 = true;
|
|
127047
127305
|
let made = null;
|
|
@@ -127063,11 +127321,11 @@ var init_renderNode = __esm({
|
|
|
127063
127321
|
}, [retypeSrc]);
|
|
127064
127322
|
const settled = retyped && retyped.from === retypeSrc ? retyped : null;
|
|
127065
127323
|
const wantsShare = props.allowShare === true;
|
|
127066
|
-
const [fellBackFrom, setFellBackFrom] =
|
|
127324
|
+
const [fellBackFrom, setFellBackFrom] = React16.useState(null);
|
|
127067
127325
|
const directFellBack = plan?.mode === "direct" && fellBackFrom === plan.src;
|
|
127068
127326
|
const directSrc = plan?.mode === "direct" && (wantsShare || props.showPageControls !== false && directFellBack) ? plan.src : null;
|
|
127069
|
-
const [direct, setDirect] =
|
|
127070
|
-
|
|
127327
|
+
const [direct, setDirect] = React16.useState(null);
|
|
127328
|
+
React16.useEffect(() => {
|
|
127071
127329
|
if (!directSrc) return;
|
|
127072
127330
|
let live3 = true;
|
|
127073
127331
|
let made = null;
|
|
@@ -127084,16 +127342,16 @@ var init_renderNode = __esm({
|
|
|
127084
127342
|
}, [directSrc, wantsShare]);
|
|
127085
127343
|
const directDoc = direct && direct.from === directSrc ? direct : null;
|
|
127086
127344
|
const fallbackPageCount = plan?.mode === "retype" ? settled?.pageCount ?? null : directDoc?.count ?? null;
|
|
127087
|
-
const [nav, setNav] =
|
|
127345
|
+
const [nav, setNav] = React16.useState({ from: rawUrl, page: null, zoom: null });
|
|
127088
127346
|
const view = nav.from === rawUrl ? nav : { from: rawUrl, page: null, zoom: null };
|
|
127089
127347
|
const src = plan?.mode === "direct" ? plan.src : settled?.url ?? null;
|
|
127090
|
-
const [canvasCount, setCanvasCount] =
|
|
127091
|
-
const onPageCount =
|
|
127348
|
+
const [canvasCount, setCanvasCount] = React16.useState(null);
|
|
127349
|
+
const onPageCount = React16.useCallback((count2) => {
|
|
127092
127350
|
if (!Number.isInteger(count2) || count2 < 1) return;
|
|
127093
127351
|
setCanvasCount((cur) => cur?.from === src && cur.count === count2 ? cur : { from: src, count: count2 });
|
|
127094
127352
|
}, [src]);
|
|
127095
127353
|
const pageCount = canvasCount?.from === src ? canvasCount.count : fallbackPageCount;
|
|
127096
|
-
const onFallback =
|
|
127354
|
+
const onFallback = React16.useCallback(() => setFellBackFrom(src), [src]);
|
|
127097
127355
|
const loading = plan?.mode === "retype" && !settled || directSrc != null && wantsShare && !directDoc && typeof window !== "undefined";
|
|
127098
127356
|
const loadSrc = plan?.mode === "direct" && wantsShare ? directDoc?.blobUrl ?? src : src;
|
|
127099
127357
|
const ph = typeof props.height === "number" && props.height > 0 ? props.height : void 0;
|
|
@@ -127143,7 +127401,7 @@ var init_renderNode = __esm({
|
|
|
127143
127401
|
const data = base + pdfOpenFragment(sourceHash, { page, zoom: zoomable ? view.zoom : null, fitWidth: !zoomable });
|
|
127144
127402
|
const label3 = typeof props.title === "string" && props.title ? props.title : "PDF document";
|
|
127145
127403
|
const documentStyle = showPageControls || zoomable || allowShare ? { display: "block", width: "100%", flex: "1 1 auto", minHeight: ph ? 0 : 280, border: "none" } : frame;
|
|
127146
|
-
const object12 = typeof window === "undefined" ? /* @__PURE__ */ jsx11("object", { "data-himalaya-pdf": "static-fallback", data, type: "application/pdf", "aria-label": label3, style: documentStyle }) : /* @__PURE__ */ jsx11(
|
|
127404
|
+
const object12 = typeof window === "undefined" ? /* @__PURE__ */ jsx11("object", { "data-himalaya-pdf": "static-fallback", data, type: "application/pdf", "aria-label": label3, style: documentStyle }) : /* @__PURE__ */ jsx11(React16.Suspense, { fallback: /* @__PURE__ */ jsx11("div", { "data-himalaya-pdf": "loading", role: "img", "aria-label": "loading document", "aria-busy": "true", style: documentStyle }), children: /* @__PURE__ */ jsx11(
|
|
127147
127405
|
PdfDocumentCanvas,
|
|
127148
127406
|
{
|
|
127149
127407
|
src: loadSrc ?? src,
|
|
@@ -127225,7 +127483,7 @@ var init_renderNode = __esm({
|
|
|
127225
127483
|
const ar2 = typeof props.aspectRatio === "number" && props.aspectRatio > 0 ? props.aspectRatio : void 0;
|
|
127226
127484
|
const frameStyle = { width: "100%", boxSizing: "border-box", border: "none", borderRadius: ctx.radius("md", 8), background: "#fff", ...scrollEnabled ? {} : { overflow: "hidden" }, ...fill ? { flex: "1 1 0", minHeight: 0 } : h2 ? { height: h2 } : ar2 ? { aspectRatio: String(ar2) } : { height: 200 } };
|
|
127227
127485
|
const reloadValue = reloadKeyOf(useResolvedScalar(props.reloadKeyPath != null && isBinding(props.reloadKeyPath) ? props.reloadKeyPath : void 0, ctx));
|
|
127228
|
-
const reloadState =
|
|
127486
|
+
const reloadState = React16.useRef({ base: null, epoch: 0 });
|
|
127229
127487
|
if (reloadValue !== null && reloadValue !== reloadState.current.base) {
|
|
127230
127488
|
if (reloadState.current.base !== null) reloadState.current.epoch++;
|
|
127231
127489
|
reloadState.current.base = reloadValue;
|
|
@@ -127233,11 +127491,11 @@ var init_renderNode = __esm({
|
|
|
127233
127491
|
const reloadKey = reloadState.current.epoch > 0 ? String(reloadState.current.epoch) : "";
|
|
127234
127492
|
const sourceKey = htmlStr ?? urlFrame?.src ?? null;
|
|
127235
127493
|
const frameKey = sourceKey == null ? null : reloadKey ? `${sourceKey}\0${reloadKey}` : sourceKey;
|
|
127236
|
-
const [loadedKey, setLoadedKey] =
|
|
127494
|
+
const [loadedKey, setLoadedKey] = React16.useState(null);
|
|
127237
127495
|
const loaded2 = loadedKey === frameKey;
|
|
127238
127496
|
const bridgeChannel = props.bridge === "worker" ? webViewChannelOf(ctx.provider) : null;
|
|
127239
|
-
const frameRef =
|
|
127240
|
-
const bridgeLoad =
|
|
127497
|
+
const frameRef = React16.useRef(null);
|
|
127498
|
+
const bridgeLoad = React16.useRef({ loaded: false });
|
|
127241
127499
|
if (bridgeLoad.current.key !== frameKey) {
|
|
127242
127500
|
bridgeLoad.current.key = frameKey;
|
|
127243
127501
|
bridgeLoad.current.loaded = false;
|
|
@@ -127261,7 +127519,7 @@ var init_renderNode = __esm({
|
|
|
127261
127519
|
return /* @__PURE__ */ jsxs9("div", { ...{ [ROLE_WHEN_NAMED]: "group" }, style: { width: "100%", position: "relative", ...fill ? { height: "100%", flex: "1 1 0", minHeight: 0, display: "flex", flexDirection: "column" } : {}, ...bandColor ? { background: bandColor, borderRadius: ctx.radius("md", 8), overflow: "hidden" } : {}, ...wrap }, children: [
|
|
127262
127520
|
bandColor ? /* @__PURE__ */ jsx11("div", { "data-testid": "webview-cover-band", style: { height: 8, background: bandColor } }) : null,
|
|
127263
127521
|
htmlStr ? /* @__PURE__ */ jsx11("iframe", { ...frameProps, srcDoc: htmlStr, sandbox: "allow-scripts" }, frameKey ?? void 0) : urlFrame ? /* @__PURE__ */ jsx11("iframe", { ...frameProps, src: urlFrame.src, sandbox: urlFrame.sandbox }, frameKey ?? void 0) : /* @__PURE__ */ jsx11("div", { style: { ...frameStyle, display: "grid", placeItems: "center", color: "#999", fontFamily: "ui-monospace, monospace", fontSize: pxToRem(11), border: "1px dashed #ccc" }, children: urlStr ? "WebView (url not allowed)" : "WebView (no url)" }),
|
|
127264
|
-
bridgeChannel ? /* @__PURE__ */ jsx11(
|
|
127522
|
+
bridgeChannel ? /* @__PURE__ */ jsx11(React16.Suspense, { fallback: null, children: /* @__PURE__ */ jsx11(
|
|
127265
127523
|
WebViewBridgeHost2,
|
|
127266
127524
|
{
|
|
127267
127525
|
channel: bridgeChannel,
|
|
@@ -127291,19 +127549,19 @@ var init_renderNode = __esm({
|
|
|
127291
127549
|
const onChange = props.onChange;
|
|
127292
127550
|
const boundSel = useResolvedScalar(isBinding(props.selectedId) ? props.selectedId : void 0, ctx);
|
|
127293
127551
|
const selectedId = isBinding(props.selectedId) ? boundSel : props.selectedId;
|
|
127294
|
-
const [sel, setSel] =
|
|
127295
|
-
|
|
127552
|
+
const [sel, setSel] = React16.useState(ctx.empty ? "" : String(selectedId ?? ""));
|
|
127553
|
+
React16.useEffect(() => {
|
|
127296
127554
|
if (!ctx.empty && selectedId != null) setSel(String(selectedId));
|
|
127297
127555
|
}, [selectedId, ctx.empty]);
|
|
127298
|
-
const pickerBag =
|
|
127556
|
+
const pickerBag = React16.useContext(FormValuesContext);
|
|
127299
127557
|
const pickerFieldId = props.__formFieldId;
|
|
127300
127558
|
const pickerRuleKey = props.validation ? JSON.stringify(props.validation) : "";
|
|
127301
|
-
|
|
127559
|
+
React16.useEffect(() => {
|
|
127302
127560
|
if (!pickerBag || !pickerFieldId) return;
|
|
127303
127561
|
pickerBag.register(pickerFieldId, props.validation);
|
|
127304
127562
|
return () => pickerBag.unregister(pickerFieldId);
|
|
127305
127563
|
}, [pickerFieldId, pickerBag, pickerRuleKey]);
|
|
127306
|
-
|
|
127564
|
+
React16.useEffect(() => {
|
|
127307
127565
|
if (pickerBag && pickerFieldId) pickerBag.set(pickerFieldId, sel);
|
|
127308
127566
|
}, [sel, pickerFieldId, pickerBag]);
|
|
127309
127567
|
const emitPick = (id) => {
|
|
@@ -127419,24 +127677,24 @@ var init_renderNode = __esm({
|
|
|
127419
127677
|
const s2 = seedUnix();
|
|
127420
127678
|
return s2 == null ? null : clampUnix(s2);
|
|
127421
127679
|
};
|
|
127422
|
-
const [val, setVal] =
|
|
127680
|
+
const [val, setVal] = React16.useState(ctx.empty ? "" : toInput(shownSeed()));
|
|
127423
127681
|
const dateServiceBound = typeof props.valuePath === "string" && props.valuePath.startsWith("$service:");
|
|
127424
127682
|
const bagSource = () => dateServiceBound ? boundRaw : boundRaw !== void 0 && boundRaw !== null && boundRaw !== "" ? boundRaw : props.valueUnix;
|
|
127425
|
-
const [dateBagVal, setDateBagVal] =
|
|
127426
|
-
|
|
127683
|
+
const [dateBagVal, setDateBagVal] = React16.useState(ctx.empty ? "" : clampDateFieldValue(encodeDateFieldValue(bagSource()), props.minUnix, props.maxUnix, props.mode));
|
|
127684
|
+
React16.useEffect(() => {
|
|
127427
127685
|
if (ctx.empty) return;
|
|
127428
127686
|
setVal(toInput(shownSeed()));
|
|
127429
127687
|
setDateBagVal(clampDateFieldValue(encodeDateFieldValue(bagSource()), props.minUnix, props.maxUnix, props.mode));
|
|
127430
127688
|
}, [boundRaw, props.valueUnix, props.valuePath, ctx.empty]);
|
|
127431
|
-
const dateBag =
|
|
127689
|
+
const dateBag = React16.useContext(FormValuesContext);
|
|
127432
127690
|
const dateFieldId = props.__formFieldId;
|
|
127433
127691
|
const dateRuleKey = props.validation ? JSON.stringify(props.validation) : "";
|
|
127434
|
-
|
|
127692
|
+
React16.useEffect(() => {
|
|
127435
127693
|
if (!dateBag || !dateFieldId) return;
|
|
127436
127694
|
dateBag.register(dateFieldId, props.validation);
|
|
127437
127695
|
return () => dateBag.unregister(dateFieldId);
|
|
127438
127696
|
}, [dateFieldId, dateBag, dateRuleKey]);
|
|
127439
|
-
|
|
127697
|
+
React16.useEffect(() => {
|
|
127440
127698
|
if (dateBag && dateFieldId) dateBag.set(dateFieldId, dateBagVal);
|
|
127441
127699
|
}, [dateBagVal, dateFieldId, dateBag]);
|
|
127442
127700
|
if (!ctx.onAction) {
|
|
@@ -127505,11 +127763,11 @@ var init_renderNode = __esm({
|
|
|
127505
127763
|
const valueBinding = isBinding(props.value) ? props.value : void 0;
|
|
127506
127764
|
const boundValue = useResolvedScalar(valueBinding, ctx);
|
|
127507
127765
|
const initialValue2 = ctx.empty ? "" : valueBinding ? boundValue == null ? "" : String(boundValue) : String(props.value ?? "");
|
|
127508
|
-
const [local, setLocal] =
|
|
127509
|
-
const changes =
|
|
127766
|
+
const [local, setLocal] = React16.useState(initialValue2);
|
|
127767
|
+
const changes = React16.useRef(null);
|
|
127510
127768
|
if (!changes.current) changes.current = new ChangeDebouncer();
|
|
127511
|
-
|
|
127512
|
-
|
|
127769
|
+
React16.useEffect(() => () => changes.current?.drop(), []);
|
|
127770
|
+
React16.useEffect(() => {
|
|
127513
127771
|
if (ctx.empty || !valueBinding) return;
|
|
127514
127772
|
const next = boundValue == null ? "" : String(boundValue);
|
|
127515
127773
|
if (next === "") changes.current?.drop();
|
|
@@ -127524,12 +127782,12 @@ var init_renderNode = __esm({
|
|
|
127524
127782
|
if (!onChange) return;
|
|
127525
127783
|
changes.current?.change(v2, debounceMs, (value2) => dispatch(onChange, value2));
|
|
127526
127784
|
};
|
|
127527
|
-
const inputRef =
|
|
127785
|
+
const inputRef = React16.useRef(null);
|
|
127528
127786
|
const focusBinding = typeof props.focusPath === "string" && props.focusPath.startsWith("$service:") && props.focusPath.length > "$service:".length ? props.focusPath : "";
|
|
127529
127787
|
const focusTokenVal = useBoundValue(ctx, focusBinding);
|
|
127530
|
-
const lastFocusToken =
|
|
127531
|
-
const lastFocusBinding =
|
|
127532
|
-
|
|
127788
|
+
const lastFocusToken = React16.useRef(void 0);
|
|
127789
|
+
const lastFocusBinding = React16.useRef(focusBinding);
|
|
127790
|
+
React16.useEffect(() => {
|
|
127533
127791
|
if (lastFocusBinding.current !== focusBinding) {
|
|
127534
127792
|
lastFocusBinding.current = focusBinding;
|
|
127535
127793
|
lastFocusToken.current = void 0;
|
|
@@ -127582,12 +127840,12 @@ var init_renderNode = __esm({
|
|
|
127582
127840
|
const boundValue = useResolvedScalar(props.valuePath, ctx);
|
|
127583
127841
|
const effectiveValue = props.valuePath != null ? boundValue : props.value;
|
|
127584
127842
|
const fallbackValue = effectiveValue ?? props.value ?? 0;
|
|
127585
|
-
const [value2, setValue] =
|
|
127843
|
+
const [value2, setValue] = React16.useState(() => {
|
|
127586
127844
|
const seed2 = Number(fallbackValue);
|
|
127587
127845
|
return Number.isFinite(seed2) ? Math.min(max, Math.max(min, seed2)) : 0;
|
|
127588
127846
|
});
|
|
127589
|
-
const previousFallbackValue =
|
|
127590
|
-
|
|
127847
|
+
const previousFallbackValue = React16.useRef(fallbackValue);
|
|
127848
|
+
React16.useEffect(() => {
|
|
127591
127849
|
const fallbackChanged = !Object.is(previousFallbackValue.current, fallbackValue);
|
|
127592
127850
|
previousFallbackValue.current = fallbackValue;
|
|
127593
127851
|
const next = Number(fallbackValue);
|
|
@@ -127596,25 +127854,25 @@ var init_renderNode = __esm({
|
|
|
127596
127854
|
return Math.min(max, Math.max(min, candidate));
|
|
127597
127855
|
});
|
|
127598
127856
|
}, [fallbackValue, min, max]);
|
|
127599
|
-
const stepperBag =
|
|
127857
|
+
const stepperBag = React16.useContext(FormValuesContext);
|
|
127600
127858
|
const stepperFieldId = props.__formFieldId;
|
|
127601
127859
|
const stepperRuleKey = props.validation ? JSON.stringify(props.validation) : "";
|
|
127602
|
-
|
|
127860
|
+
React16.useEffect(() => {
|
|
127603
127861
|
if (!stepperBag || !stepperFieldId) return;
|
|
127604
127862
|
stepperBag.register(stepperFieldId, props.validation);
|
|
127605
127863
|
return () => stepperBag.unregister(stepperFieldId);
|
|
127606
127864
|
}, [stepperFieldId, stepperBag, stepperRuleKey]);
|
|
127607
127865
|
const serviceBound = typeof props.valuePath === "string" && isBinding(props.valuePath) && props.valuePath.startsWith("$service:");
|
|
127608
|
-
const [bagValue, setBagValue] =
|
|
127609
|
-
|
|
127866
|
+
const [bagValue, setBagValue] = React16.useState(() => serviceBound ? boundValue != null ? encodeStepperFieldValue(boundValue, { min, max }) : "" : encodeStepperFieldValue(value2, { min, max }));
|
|
127867
|
+
React16.useEffect(() => {
|
|
127610
127868
|
if (!serviceBound || boundValue == null) return;
|
|
127611
127869
|
setBagValue(encodeStepperFieldValue(boundValue, { min, max }));
|
|
127612
127870
|
}, [boundValue, serviceBound, min, max]);
|
|
127613
|
-
|
|
127871
|
+
React16.useEffect(() => {
|
|
127614
127872
|
if (serviceBound) return;
|
|
127615
127873
|
setBagValue(encodeStepperFieldValue(value2, { min, max }));
|
|
127616
127874
|
}, [value2, serviceBound, min, max]);
|
|
127617
|
-
|
|
127875
|
+
React16.useEffect(() => {
|
|
127618
127876
|
if (stepperBag && stepperFieldId) stepperBag.set(stepperFieldId, bagValue);
|
|
127619
127877
|
}, [bagValue, stepperFieldId, stepperBag]);
|
|
127620
127878
|
const dispatch = (next) => {
|
|
@@ -127629,7 +127887,7 @@ var init_renderNode = __esm({
|
|
|
127629
127887
|
dispatch(next);
|
|
127630
127888
|
return next;
|
|
127631
127889
|
};
|
|
127632
|
-
const [pressed, setPressed] =
|
|
127890
|
+
const [pressed, setPressed] = React16.useState({ text: "", count: 0 });
|
|
127633
127891
|
const bump = (delta) => commit(value2 + delta);
|
|
127634
127892
|
const press = (delta) => {
|
|
127635
127893
|
const next = bump(delta);
|
|
@@ -127773,9 +128031,9 @@ var init_renderNode = __esm({
|
|
|
127773
128031
|
const items = Array.isArray(props.items) ? props.items : [];
|
|
127774
128032
|
const gridStagger = ctx.reduceMotion() ? 0 : Number(props.staggerMs ?? props.stagger_ms ?? 0);
|
|
127775
128033
|
const stagger = (el2, i2) => {
|
|
127776
|
-
if (!(gridStagger > 0) || !
|
|
128034
|
+
if (!(gridStagger > 0) || !React16.isValidElement(el2)) return el2;
|
|
127777
128035
|
const prev = el2.props.style ?? {};
|
|
127778
|
-
return
|
|
128036
|
+
return React16.cloneElement(el2, { style: { ...prev, animationDelay: `${i2 * gridStagger}ms` } });
|
|
127779
128037
|
};
|
|
127780
128038
|
const pagination = props.pagination;
|
|
127781
128039
|
const sentinel = pagination ? /* @__PURE__ */ jsx11(LoadMoreSentinel, { ctx, pagination, style: GRID_SPAN_ALL }) : null;
|
|
@@ -127857,13 +128115,13 @@ var init_renderNode = __esm({
|
|
|
127857
128115
|
revealProgress = /* @__PURE__ */ new Map();
|
|
127858
128116
|
countWords = (s2) => s2.split(/\s+/).filter((t2) => t2 !== "").length;
|
|
127859
128117
|
RevealText = ({ text: text13, reduce, markdownHtml }) => {
|
|
127860
|
-
const tokens2 =
|
|
127861
|
-
const total =
|
|
128118
|
+
const tokens2 = React16.useMemo(() => text13.split(/(\s+)/).filter((t2) => t2 !== ""), [text13]);
|
|
128119
|
+
const total = React16.useMemo(
|
|
127862
128120
|
() => markdownHtml != null ? revealHtml(markdownHtml, 0, void 0).total : countWords(text13),
|
|
127863
128121
|
[text13, markdownHtml]
|
|
127864
128122
|
);
|
|
127865
|
-
const [shown2, setShown] =
|
|
127866
|
-
const prevRef =
|
|
128123
|
+
const [shown2, setShown] = React16.useState(total);
|
|
128124
|
+
const prevRef = React16.useRef(null);
|
|
127867
128125
|
useIsomorphicLayoutEffect(() => {
|
|
127868
128126
|
const prev = prevRef.current;
|
|
127869
128127
|
prevRef.current = text13;
|
|
@@ -127986,8 +128244,8 @@ var init_renderNode = __esm({
|
|
|
127986
128244
|
const boundInitials = useResolvedScalar(props.initials != null && isBinding(props.initials) ? props.initials : void 0, ctx);
|
|
127987
128245
|
const boundAlt = useResolvedScalar(contentDescription, ctx);
|
|
127988
128246
|
const fadeIn = motionDefaultsAnimate(ctx);
|
|
127989
|
-
const [shownSrc, setShownSrc] =
|
|
127990
|
-
const imgRef =
|
|
128247
|
+
const [shownSrc, setShownSrc] = React16.useState(null);
|
|
128248
|
+
const imgRef = React16.useRef(null);
|
|
127991
128249
|
const hasSource = props.url != null || props.initials != null || props.asset != null || props.icon != null;
|
|
127992
128250
|
const banner = fillWidth === true || props.width == null && props.height == null && !props.initials;
|
|
127993
128251
|
const w2 = banner ? "100%" : props.width ?? 40;
|
|
@@ -128001,7 +128259,7 @@ var init_renderNode = __esm({
|
|
|
128001
128259
|
const ph = props.placeholder ? C2(props.placeholder, "#e6e6e6") : void 0;
|
|
128002
128260
|
const imgUrl = props.url != null && isBinding(props.url) ? boundUrl : props.url;
|
|
128003
128261
|
const imgInitials = props.initials != null && isBinding(props.initials) ? boundInitials : props.initials;
|
|
128004
|
-
const [failedSrc, setFailedSrc] =
|
|
128262
|
+
const [failedSrc, setFailedSrc] = React16.useState(null);
|
|
128005
128263
|
const resolvedSrc = useImageSource(
|
|
128006
128264
|
imgUrl && typeof imgUrl === "string" ? resolveAssetUrl(imgUrl, ctx.assetBaseUrl, ctx.assetPin) : null,
|
|
128007
128265
|
{ width: w2, height: boxHeight, mode: renditionMode(contentMode), ratio: effectiveAr || void 0 }
|
|
@@ -128039,7 +128297,7 @@ var init_renderNode = __esm({
|
|
|
128039
128297
|
if (imgInitials && typeof imgInitials === "string") {
|
|
128040
128298
|
const alt = asFinalTextL10n(boundAlt, ctx).trim();
|
|
128041
128299
|
const circle = avatarCircle(String(imgInitials), typeof w2 === "number" ? w2 : 40, C2, false, bodyFont(ctx));
|
|
128042
|
-
return
|
|
128300
|
+
return React16.cloneElement(circle, alt ? { role: "img", "aria-label": alt, [SELF_RENDERED_LEAF]: true } : { [ROLE_WHEN_NAMED]: "img", [SELF_RENDERED_LEAF]: true });
|
|
128043
128301
|
}
|
|
128044
128302
|
if (props.icon != null && props.url == null && props.asset == null && imgInitials == null) {
|
|
128045
128303
|
const side2 = typeof w2 === "number" ? w2 : 40;
|
|
@@ -128054,13 +128312,13 @@ var init_renderNode = __esm({
|
|
|
128054
128312
|
const reduce = ctx.reduceMotion();
|
|
128055
128313
|
const servicePlayPath = typeof props.playPath === "string" && props.playPath.startsWith("$service:") ? props.playPath : void 0;
|
|
128056
128314
|
const nonce = lottieNonce(useResolvedScalar(servicePlayPath, ctx));
|
|
128057
|
-
const [replay, setReplay] =
|
|
128058
|
-
const [gen, setGen] =
|
|
128059
|
-
|
|
128315
|
+
const [replay, setReplay] = React16.useState({ plays: 0 });
|
|
128316
|
+
const [gen, setGen] = React16.useState(0);
|
|
128317
|
+
React16.useEffect(() => {
|
|
128060
128318
|
setReplay((s2) => ({ plays: s2.plays }));
|
|
128061
128319
|
setGen((g2) => g2 + 1);
|
|
128062
128320
|
}, [servicePlayPath, ctx.provider, props.source]);
|
|
128063
|
-
|
|
128321
|
+
React16.useEffect(() => {
|
|
128064
128322
|
setReplay((s2) => lottieReplayStep(s2, nonce, reduce));
|
|
128065
128323
|
}, [nonce, servicePlayPath, ctx.provider, props.source]);
|
|
128066
128324
|
return /* @__PURE__ */ jsx11(
|
|
@@ -128122,7 +128380,7 @@ var init_renderNode = __esm({
|
|
|
128122
128380
|
const a11y = described ? { role: "img", "aria-label": String(contentDescription), [SELF_RENDERED_LEAF]: true } : { "aria-hidden": "true", [INFERRED_DECORATIVE]: true, [SELF_RENDERED_LEAF]: true, [ROLE_WHEN_NAMED]: "img" };
|
|
128123
128381
|
const glyph = iconSvg(iconName, { size, color: C2(resolveScalarStatic(props.tint, ctx) ?? "textPrimary", "#636b78") });
|
|
128124
128382
|
const swap = useIconSwap(iconName, ctx);
|
|
128125
|
-
const animatedGlyph = Object.keys(effectStyle).length || swap.key > 0 ?
|
|
128383
|
+
const animatedGlyph = Object.keys(effectStyle).length || swap.key > 0 ? React16.cloneElement(glyph, { style: { ...glyph.props.style, ...swap.style, ...effectStyle }, key: swap.key }) : glyph;
|
|
128126
128384
|
return /* @__PURE__ */ jsx11("span", { ...a11y, style: { display: "inline-grid", placeItems: "center", width: size + 6, height: size + 6, lineHeight: 1, flex: "none", ...wrap }, children: animatedGlyph });
|
|
128127
128385
|
});
|
|
128128
128386
|
EMPTY_STATE_SPACING = {
|
|
@@ -128364,12 +128622,12 @@ var init_renderNode = __esm({
|
|
|
128364
128622
|
const C2 = ctx.color;
|
|
128365
128623
|
const bound2 = useResolvedScalar(props.valuePath, ctx);
|
|
128366
128624
|
const boundText = props.valuePath != null ? typeof bound2 === "string" ? bound2 : typeof bound2 === "number" ? String(bound2) : "" : void 0;
|
|
128367
|
-
const [typed, setTyped] =
|
|
128368
|
-
|
|
128625
|
+
const [typed, setTyped] = React16.useState(void 0);
|
|
128626
|
+
React16.useEffect(() => {
|
|
128369
128627
|
setTyped(void 0);
|
|
128370
128628
|
}, [boundText, props.value, props.valuePath, typeof props.valuePath === "string" && props.valuePath.startsWith("$service:") ? ctx.provider : null]);
|
|
128371
128629
|
const otpPath = typeof props.valuePath === "string" && props.valuePath.startsWith("$service:") ? servicePath(props.valuePath) : "";
|
|
128372
|
-
|
|
128630
|
+
React16.useEffect(() => {
|
|
128373
128631
|
if (!ctx.provider || !otpPath) return;
|
|
128374
128632
|
let subscribing = true;
|
|
128375
128633
|
let active = true;
|
|
@@ -128460,10 +128718,10 @@ var init_renderNode = __esm({
|
|
|
128460
128718
|
return /* @__PURE__ */ jsx11("div", { ...a11y, style: { width: "100%", height: 6, borderRadius: 999, background: C2(boundTokenName(props.trackColorPath, props.trackColor, ctx) ?? "surfaceTertiary", "#eee"), overflow: "hidden", ...wrap }, children: /* @__PURE__ */ jsx11("div", { style: { width: `${Math.round((p2 ?? 0.4) * 100)}%`, height: "100%", borderRadius: 999, background: C2(boundTokenName(props.tintPath, props.tint, ctx) ?? "accentPrimary", "#116DFF"), opacity: p2 == null ? 0.45 : 1, ...animatedFill ? { transition: ctx.motionTransition(ctx.kit?.motion) } : {} } }) });
|
|
128461
128719
|
});
|
|
128462
128720
|
SnackbarNode = withExtras("SnackbarNode", ({ props, ctx, wrap }) => {
|
|
128463
|
-
const [phase, setPhase] =
|
|
128721
|
+
const [phase, setPhase] = React16.useState("shown");
|
|
128464
128722
|
const hideAfter = ctx.empty ? void 0 : snackbarAutoHideMs(props.durationMs);
|
|
128465
128723
|
const identity = snackbarIdentity(props);
|
|
128466
|
-
|
|
128724
|
+
React16.useEffect(() => {
|
|
128467
128725
|
setPhase("shown");
|
|
128468
128726
|
if (hideAfter === void 0) return;
|
|
128469
128727
|
let fade;
|
|
@@ -128519,8 +128777,8 @@ var init_renderNode = __esm({
|
|
|
128519
128777
|
const gated2 = props.presentedPath != null || props.presented != null;
|
|
128520
128778
|
const presented = props.presentedPath != null ? bound2 : props.presented;
|
|
128521
128779
|
const gateOpen = !gated2 || presented === true || presented === "true";
|
|
128522
|
-
const [dismissed, setDismissed] =
|
|
128523
|
-
|
|
128780
|
+
const [dismissed, setDismissed] = React16.useState(false);
|
|
128781
|
+
React16.useEffect(() => {
|
|
128524
128782
|
if (!gateOpen) setDismissed(false);
|
|
128525
128783
|
}, [gateOpen]);
|
|
128526
128784
|
const shown2 = gateOpen && !dismissed;
|
|
@@ -128528,26 +128786,26 @@ var init_renderNode = __esm({
|
|
|
128528
128786
|
const dismissible = props.dismissible !== false;
|
|
128529
128787
|
const edge = sheetEdge(props.edge);
|
|
128530
128788
|
const detents = edge === "bottom" ? sheetDetents(props.detents) : [];
|
|
128531
|
-
const [detentIndex, setDetentIndex] =
|
|
128532
|
-
|
|
128789
|
+
const [detentIndex, setDetentIndex] = React16.useState(0);
|
|
128790
|
+
React16.useEffect(() => {
|
|
128533
128791
|
if (!shown2) setDetentIndex(0);
|
|
128534
128792
|
}, [shown2]);
|
|
128535
|
-
const dialogRef =
|
|
128793
|
+
const dialogRef = React16.useRef(null);
|
|
128536
128794
|
const trapTab = useModalOverlay(dialogRef, shown2 && modal);
|
|
128537
|
-
const latest =
|
|
128795
|
+
const latest = React16.useRef({ ctx, onDismiss: props.onDismiss });
|
|
128538
128796
|
latest.current = { ctx, onDismiss: props.onDismiss };
|
|
128539
|
-
const closed =
|
|
128540
|
-
|
|
128797
|
+
const closed = React16.useRef(false);
|
|
128798
|
+
React16.useEffect(() => {
|
|
128541
128799
|
if (shown2) closed.current = false;
|
|
128542
128800
|
}, [shown2]);
|
|
128543
|
-
const dismiss =
|
|
128801
|
+
const dismiss = React16.useCallback(() => {
|
|
128544
128802
|
if (closed.current) return;
|
|
128545
128803
|
closed.current = true;
|
|
128546
128804
|
setDismissed(true);
|
|
128547
128805
|
const { ctx: now, onDismiss } = latest.current;
|
|
128548
128806
|
if (onDismiss != null) now.onAction?.(resolveItemDeep2(onDismiss, now));
|
|
128549
128807
|
}, []);
|
|
128550
|
-
|
|
128808
|
+
React16.useEffect(() => {
|
|
128551
128809
|
if (!shown2 || !dismissible) return;
|
|
128552
128810
|
const doc = dialogRef.current?.ownerDocument;
|
|
128553
128811
|
if (!doc) return;
|
|
@@ -128561,11 +128819,11 @@ var init_renderNode = __esm({
|
|
|
128561
128819
|
doc.addEventListener("keydown", onKey, true);
|
|
128562
128820
|
return () => doc.removeEventListener("keydown", onKey, true);
|
|
128563
128821
|
}, [shown2, dismissible, dismiss]);
|
|
128564
|
-
const drag =
|
|
128822
|
+
const drag = React16.useRef(null);
|
|
128565
128823
|
const reduceMotion = ctx.reduceMotion();
|
|
128566
|
-
const [mounted, setMounted] =
|
|
128567
|
-
const [entered, setEntered] =
|
|
128568
|
-
|
|
128824
|
+
const [mounted, setMounted] = React16.useState(shown2);
|
|
128825
|
+
const [entered, setEntered] = React16.useState(shown2 && ctx.staticRender === true);
|
|
128826
|
+
React16.useEffect(() => {
|
|
128569
128827
|
if (shown2) {
|
|
128570
128828
|
setMounted(true);
|
|
128571
128829
|
if (reduceMotion || typeof requestAnimationFrame !== "function") {
|
|
@@ -128589,8 +128847,8 @@ var init_renderNode = __esm({
|
|
|
128589
128847
|
const t2 = setTimeout(() => setMounted(false), DRAWER_EXIT_MS);
|
|
128590
128848
|
return () => clearTimeout(t2);
|
|
128591
128849
|
}, [shown2, reduceMotion]);
|
|
128592
|
-
const scrimRef =
|
|
128593
|
-
const [rtl, setRtl] =
|
|
128850
|
+
const scrimRef = React16.useRef(null);
|
|
128851
|
+
const [rtl, setRtl] = React16.useState(false);
|
|
128594
128852
|
useIsomorphicLayoutEffect(() => {
|
|
128595
128853
|
const el2 = scrimRef.current;
|
|
128596
128854
|
if (el2 && el2.ownerDocument.defaultView) setRtl(el2.ownerDocument.defaultView.getComputedStyle(el2).direction === "rtl");
|
|
@@ -128698,8 +128956,8 @@ var init_renderNode = __esm({
|
|
|
128698
128956
|
const gated2 = props.presentedPath != null || props.presented != null;
|
|
128699
128957
|
const presented = props.presentedPath != null ? bound2 : props.presented;
|
|
128700
128958
|
const gateOpen = !gated2 || presented === true || presented === "true";
|
|
128701
|
-
const [dismissed, setDismissed] =
|
|
128702
|
-
|
|
128959
|
+
const [dismissed, setDismissed] = React16.useState(false);
|
|
128960
|
+
React16.useEffect(() => {
|
|
128703
128961
|
if (!gateOpen) setDismissed(false);
|
|
128704
128962
|
}, [gateOpen]);
|
|
128705
128963
|
const shown2 = gateOpen && !dismissed;
|
|
@@ -128707,18 +128965,18 @@ var init_renderNode = __esm({
|
|
|
128707
128965
|
const autoMs = drawerAutoDismissMs(props.autoDismissMs);
|
|
128708
128966
|
const placement = sheetPlacement(props.placement);
|
|
128709
128967
|
const detents = sheetDetents(props.detents);
|
|
128710
|
-
const [detentIndex, setDetentIndex] =
|
|
128711
|
-
const [expanded, setExpanded] =
|
|
128712
|
-
|
|
128968
|
+
const [detentIndex, setDetentIndex] = React16.useState(0);
|
|
128969
|
+
const [expanded, setExpanded] = React16.useState(false);
|
|
128970
|
+
React16.useEffect(() => {
|
|
128713
128971
|
if (!shown2) {
|
|
128714
128972
|
setDetentIndex(0);
|
|
128715
128973
|
setExpanded(false);
|
|
128716
128974
|
}
|
|
128717
128975
|
}, [shown2]);
|
|
128718
128976
|
const reduceMotion = ctx.reduceMotion();
|
|
128719
|
-
const [mounted, setMounted] =
|
|
128720
|
-
const [entered, setEntered] =
|
|
128721
|
-
|
|
128977
|
+
const [mounted, setMounted] = React16.useState(shown2);
|
|
128978
|
+
const [entered, setEntered] = React16.useState(shown2 && ctx.staticRender === true);
|
|
128979
|
+
React16.useEffect(() => {
|
|
128722
128980
|
if (shown2) {
|
|
128723
128981
|
setMounted(true);
|
|
128724
128982
|
if (reduceMotion || typeof requestAnimationFrame !== "function") {
|
|
@@ -128742,10 +129000,10 @@ var init_renderNode = __esm({
|
|
|
128742
129000
|
const t2 = setTimeout(() => setMounted(false), DRAWER_EXIT_MS);
|
|
128743
129001
|
return () => clearTimeout(t2);
|
|
128744
129002
|
}, [shown2, reduceMotion]);
|
|
128745
|
-
const anchorRef =
|
|
128746
|
-
const panelRef =
|
|
128747
|
-
const [host, setHost] =
|
|
128748
|
-
const [hostTop, setHostTop] =
|
|
129003
|
+
const anchorRef = React16.useRef(null);
|
|
129004
|
+
const panelRef = React16.useRef(null);
|
|
129005
|
+
const [host, setHost] = React16.useState(null);
|
|
129006
|
+
const [hostTop, setHostTop] = React16.useState(true);
|
|
128749
129007
|
useIsomorphicLayoutEffect(() => {
|
|
128750
129008
|
if (!host) {
|
|
128751
129009
|
setHostTop(true);
|
|
@@ -128773,7 +129031,7 @@ var init_renderNode = __esm({
|
|
|
128773
129031
|
setHost(overlay ?? own6(DRAWER_HOST_ATTR));
|
|
128774
129032
|
}, [mounted, placement]);
|
|
128775
129033
|
const overHost = host?.hasAttribute(SHEET_OVERLAY_HOST_ATTR) ?? false;
|
|
128776
|
-
const [regionPx, setRegionPx] =
|
|
129034
|
+
const [regionPx, setRegionPx] = React16.useState(0);
|
|
128777
129035
|
useIsomorphicLayoutEffect(() => {
|
|
128778
129036
|
if (!detents.length || !mounted) return;
|
|
128779
129037
|
const region = host ? overHost ? host.parentElement : host.previousElementSibling : null;
|
|
@@ -128800,38 +129058,38 @@ var init_renderNode = __esm({
|
|
|
128800
129058
|
resizeObserver?.disconnect();
|
|
128801
129059
|
};
|
|
128802
129060
|
}, [host, overHost, mounted, detents.length]);
|
|
128803
|
-
const latest =
|
|
129061
|
+
const latest = React16.useRef({ ctx, onDismiss: props.onDismiss });
|
|
128804
129062
|
latest.current = { ctx, onDismiss: props.onDismiss };
|
|
128805
|
-
const closed =
|
|
128806
|
-
const remaining =
|
|
128807
|
-
|
|
129063
|
+
const closed = React16.useRef(false);
|
|
129064
|
+
const remaining = React16.useRef(autoMs ?? 0);
|
|
129065
|
+
React16.useEffect(() => {
|
|
128808
129066
|
if (!shown2) return;
|
|
128809
129067
|
closed.current = false;
|
|
128810
129068
|
remaining.current = autoMs ?? 0;
|
|
128811
129069
|
}, [shown2, autoMs]);
|
|
128812
|
-
const close =
|
|
129070
|
+
const close = React16.useCallback(() => {
|
|
128813
129071
|
if (closed.current) return;
|
|
128814
129072
|
closed.current = true;
|
|
128815
129073
|
setDismissed(true);
|
|
128816
129074
|
const { ctx: now, onDismiss } = latest.current;
|
|
128817
129075
|
if (onDismiss != null) now.onAction?.(resolveItemDeep2(onDismiss, now));
|
|
128818
129076
|
}, []);
|
|
128819
|
-
const toDetent =
|
|
129077
|
+
const toDetent = React16.useCallback((next, from) => {
|
|
128820
129078
|
if (next > from) setExpanded(true);
|
|
128821
129079
|
setDetentIndex(next);
|
|
128822
129080
|
}, []);
|
|
128823
|
-
const [hover, setHover] =
|
|
128824
|
-
const [pressed, setPressed] =
|
|
128825
|
-
const [focusIn, setFocusIn] =
|
|
129081
|
+
const [hover, setHover] = React16.useState(false);
|
|
129082
|
+
const [pressed, setPressed] = React16.useState(false);
|
|
129083
|
+
const [focusIn, setFocusIn] = React16.useState(false);
|
|
128826
129084
|
const paused = hover || pressed || focusIn;
|
|
128827
|
-
|
|
129085
|
+
React16.useEffect(() => {
|
|
128828
129086
|
if (!shown2) {
|
|
128829
129087
|
setHover(false);
|
|
128830
129088
|
setPressed(false);
|
|
128831
129089
|
setFocusIn(false);
|
|
128832
129090
|
}
|
|
128833
129091
|
}, [shown2]);
|
|
128834
|
-
|
|
129092
|
+
React16.useEffect(() => {
|
|
128835
129093
|
if (!shown2 || !hostTop || autoMs == null || paused || expanded) return;
|
|
128836
129094
|
const since = Date.now();
|
|
128837
129095
|
const t2 = setTimeout(() => {
|
|
@@ -128842,7 +129100,7 @@ var init_renderNode = __esm({
|
|
|
128842
129100
|
remaining.current = drawerRemainingMs(remaining.current, Date.now() - since);
|
|
128843
129101
|
};
|
|
128844
129102
|
}, [shown2, hostTop, autoMs, paused, expanded, close]);
|
|
128845
|
-
|
|
129103
|
+
React16.useEffect(() => {
|
|
128846
129104
|
if (!shown2 || !dismissible) return;
|
|
128847
129105
|
const doc = panelRef.current?.ownerDocument;
|
|
128848
129106
|
if (!doc) return;
|
|
@@ -128855,13 +129113,13 @@ var init_renderNode = __esm({
|
|
|
128855
129113
|
doc.addEventListener("keydown", onKey, true);
|
|
128856
129114
|
return () => doc.removeEventListener("keydown", onKey, true);
|
|
128857
129115
|
}, [shown2, dismissible, close, host]);
|
|
128858
|
-
const drag =
|
|
128859
|
-
const dragged =
|
|
128860
|
-
const [dragDy, setDragDy] =
|
|
128861
|
-
|
|
129116
|
+
const drag = React16.useRef(null);
|
|
129117
|
+
const dragged = React16.useRef(false);
|
|
129118
|
+
const [dragDy, setDragDy] = React16.useState(0);
|
|
129119
|
+
React16.useEffect(() => {
|
|
128862
129120
|
if (!shown2) setDragDy(0);
|
|
128863
129121
|
}, [shown2]);
|
|
128864
|
-
const dragState =
|
|
129122
|
+
const dragState = React16.useRef({ index: 0, count: 0, dismissible });
|
|
128865
129123
|
if (!shown2 && !mounted) return /* @__PURE__ */ jsx11("span", { ref: anchorRef, "data-bottom-drawer-anchor": "", hidden: true, ...{ [NODE_EXTRAS_TARGET]: "bottom-drawer-panel" } });
|
|
128866
129124
|
const sheet = idiomControls(ctx.idiom).sheet;
|
|
128867
129125
|
const r3 = `${sheet.cornerRadius}px`;
|
|
@@ -129003,23 +129261,23 @@ var init_renderNode = __esm({
|
|
|
129003
129261
|
const rich = title !== "";
|
|
129004
129262
|
const trigger = resolveTooltipTrigger(props.trigger, "pointer");
|
|
129005
129263
|
const edge = resolveOverlayEdge("Tooltip", props.edge);
|
|
129006
|
-
const [open, setOpen] =
|
|
129007
|
-
const anchorRef =
|
|
129008
|
-
const bubbleRef =
|
|
129009
|
-
const pressTimer =
|
|
129264
|
+
const [open, setOpen] = React16.useState(false);
|
|
129265
|
+
const anchorRef = React16.useRef(null);
|
|
129266
|
+
const bubbleRef = React16.useRef(null);
|
|
129267
|
+
const pressTimer = React16.useRef(null);
|
|
129010
129268
|
const placement = useFlippedEdge(edge, open, bubbleRef, anchorRef);
|
|
129011
129269
|
const placed = placement.edge;
|
|
129012
|
-
const latest =
|
|
129270
|
+
const latest = React16.useRef({ ctx, onDismiss: props.onDismiss, open });
|
|
129013
129271
|
latest.current = { ctx, onDismiss: props.onDismiss, open };
|
|
129014
|
-
const holding =
|
|
129015
|
-
const [needsTabStop, setNeedsTabStop] =
|
|
129272
|
+
const holding = React16.useRef({ hover: false, focus: false });
|
|
129273
|
+
const [needsTabStop, setNeedsTabStop] = React16.useState(false);
|
|
129016
129274
|
useIsomorphicLayoutEffect(() => {
|
|
129017
129275
|
const el2 = anchorRef.current;
|
|
129018
129276
|
const want = trigger === "hover" && el2 != null && !hasTabStop(el2);
|
|
129019
129277
|
if (want !== needsTabStop) setNeedsTabStop(want);
|
|
129020
129278
|
});
|
|
129021
|
-
const show =
|
|
129022
|
-
const dismiss =
|
|
129279
|
+
const show = React16.useCallback(() => setOpen(true), []);
|
|
129280
|
+
const dismiss = React16.useCallback(() => {
|
|
129023
129281
|
holding.current = { hover: false, focus: false };
|
|
129024
129282
|
const { ctx: now, onDismiss, open: wasOpen } = latest.current;
|
|
129025
129283
|
if (!wasOpen) return;
|
|
@@ -129027,7 +129285,7 @@ var init_renderNode = __esm({
|
|
|
129027
129285
|
setOpen(false);
|
|
129028
129286
|
if (onDismiss != null) now.onAction?.(resolveItemDeep2(onDismiss, now));
|
|
129029
129287
|
}, []);
|
|
129030
|
-
|
|
129288
|
+
React16.useEffect(() => {
|
|
129031
129289
|
if (!open) return;
|
|
129032
129290
|
const doc = bubbleRef.current?.ownerDocument;
|
|
129033
129291
|
if (!doc) return;
|
|
@@ -129051,7 +129309,7 @@ var init_renderNode = __esm({
|
|
|
129051
129309
|
if (timer) clearTimeout(timer);
|
|
129052
129310
|
};
|
|
129053
129311
|
}, [open, trigger, dismiss]);
|
|
129054
|
-
|
|
129312
|
+
React16.useEffect(() => () => {
|
|
129055
129313
|
if (pressTimer.current) clearTimeout(pressTimer.current);
|
|
129056
129314
|
}, []);
|
|
129057
129315
|
const cancelPress = () => {
|
|
@@ -129091,7 +129349,7 @@ var init_renderNode = __esm({
|
|
|
129091
129349
|
};
|
|
129092
129350
|
const hint = [title, text13].filter((s2) => s2 !== "").join(". ");
|
|
129093
129351
|
const anchor = props.anchor ? renderNode(props.anchor, ctx) : null;
|
|
129094
|
-
const wrapperHintId = `hm-tip-hint${
|
|
129352
|
+
const wrapperHintId = `hm-tip-hint${React16.useId()}`;
|
|
129095
129353
|
useIsomorphicLayoutEffect(() => {
|
|
129096
129354
|
const wrapper = anchorRef.current;
|
|
129097
129355
|
if (!wrapper || !hint || needsTabStop) return;
|
|
@@ -129113,7 +129371,7 @@ var init_renderNode = __esm({
|
|
|
129113
129371
|
/* @__PURE__ */ jsx11(OverlayAnchorClip, { wrap, children: needsTabStop ? /* @__PURE__ */ jsxs9(Fragment4, { children: [
|
|
129114
129372
|
anchor,
|
|
129115
129373
|
hint && /* @__PURE__ */ jsx11("span", { id: wrapperHintId, hidden: true, "data-hm-a11y-hint": "", children: hint })
|
|
129116
|
-
] }) : hint &&
|
|
129374
|
+
] }) : hint && React16.isValidElement(anchor) ? /* @__PURE__ */ jsxs9(Fragment4, { children: [
|
|
129117
129375
|
/* @__PURE__ */ jsx11(A11yHintDescription, { hint, children: anchor }),
|
|
129118
129376
|
/* @__PURE__ */ jsx11("span", { id: wrapperHintId, hidden: true, "data-hm-a11y-hint": "", children: hint })
|
|
129119
129377
|
] }) : /* @__PURE__ */ jsxs9(Fragment4, { children: [
|
|
@@ -129134,24 +129392,24 @@ var init_renderNode = __esm({
|
|
|
129134
129392
|
const gateOpen = gate === true || gate === "true";
|
|
129135
129393
|
const literal = props.presentedPath == null && props.presented != null;
|
|
129136
129394
|
const identity = { path: props.presentedPath, presented: props.presented, provider: ctx.provider };
|
|
129137
|
-
const [local, setLocal] =
|
|
129395
|
+
const [local, setLocal] = React16.useState({ ...identity, opened: false, dismissed: false });
|
|
129138
129396
|
const sameGate = local.path === identity.path && local.presented === identity.presented && local.provider === identity.provider;
|
|
129139
129397
|
const current = sameGate ? local : { ...identity, opened: false, dismissed: false };
|
|
129140
129398
|
if (!sameGate) setLocal(current);
|
|
129141
|
-
|
|
129399
|
+
React16.useEffect(() => {
|
|
129142
129400
|
if (!gateOpen) setLocal((previous) => previous.dismissed ? { ...previous, dismissed: false } : previous);
|
|
129143
129401
|
}, [gateOpen]);
|
|
129144
129402
|
const shown2 = !gated2 || (gateOpen || current.opened) && !current.dismissed;
|
|
129145
129403
|
const modal = gated2 && isOverlayModal("Popover", props.modal);
|
|
129146
|
-
const dialogRef =
|
|
129147
|
-
const anchorRef =
|
|
129148
|
-
const boxRef =
|
|
129404
|
+
const dialogRef = React16.useRef(null);
|
|
129405
|
+
const anchorRef = React16.useRef(null);
|
|
129406
|
+
const boxRef = React16.useRef(null);
|
|
129149
129407
|
const trapTab = useModalOverlay(dialogRef, shown2 && modal);
|
|
129150
129408
|
const placement = useFlippedEdge(resolveOverlayEdge("Popover", props.edge), gated2 && shown2, dialogRef, boxRef, 6);
|
|
129151
129409
|
const placed = placement.edge;
|
|
129152
|
-
const latest =
|
|
129410
|
+
const latest = React16.useRef({ ctx, onDismiss: props.onDismiss });
|
|
129153
129411
|
latest.current = { ctx, onDismiss: props.onDismiss };
|
|
129154
|
-
|
|
129412
|
+
React16.useEffect(() => {
|
|
129155
129413
|
if (!gated2 || !shown2) return;
|
|
129156
129414
|
const doc = dialogRef.current?.ownerDocument;
|
|
129157
129415
|
if (!doc) return;
|
|
@@ -129189,8 +129447,8 @@ var init_renderNode = __esm({
|
|
|
129189
129447
|
if (shown2) return;
|
|
129190
129448
|
setLocal({ ...identity, opened: true, dismissed: false });
|
|
129191
129449
|
} : void 0;
|
|
129192
|
-
const [anchorIsButton, setAnchorIsButton] =
|
|
129193
|
-
const [needsSeparateOpener, setNeedsSeparateOpener] =
|
|
129450
|
+
const [anchorIsButton, setAnchorIsButton] = React16.useState(false);
|
|
129451
|
+
const [needsSeparateOpener, setNeedsSeparateOpener] = React16.useState(false);
|
|
129194
129452
|
useIsomorphicLayoutEffect(() => {
|
|
129195
129453
|
const el2 = anchorRef.current;
|
|
129196
129454
|
const want = literal && el2 != null && !hasTabStop(el2);
|
|
@@ -129217,7 +129475,7 @@ var init_renderNode = __esm({
|
|
|
129217
129475
|
});
|
|
129218
129476
|
ChipsInputNode = withExtras("ChipsInputNode", ({ props, ctx, wrap }) => {
|
|
129219
129477
|
const placeholderText = useBoundString(props.placeholder, ctx);
|
|
129220
|
-
const [draft, setDraft] =
|
|
129478
|
+
const [draft, setDraft] = React16.useState("");
|
|
129221
129479
|
const C2 = ctx.color;
|
|
129222
129480
|
const bound2 = useResolvedScalar(props.valuesPath, ctx);
|
|
129223
129481
|
const raw = props.valuesPath != null ? bound2 : props.values;
|
|
@@ -129414,7 +129672,7 @@ var init_renderNode = __esm({
|
|
|
129414
129672
|
const who = asText2(a2.initials).trim();
|
|
129415
129673
|
const initials = avatarCircle(who || "?", size, C2, true, bodyFont(ctx));
|
|
129416
129674
|
const photo = typeof a2.imageUrl === "string" && a2.imageUrl && !isBinding(a2.imageUrl) ? a2.imageUrl : "";
|
|
129417
|
-
const circle = photo ?
|
|
129675
|
+
const circle = photo ? React16.cloneElement(
|
|
129418
129676
|
initials,
|
|
129419
129677
|
{ style: { ...initials.props.style, position: "relative", overflow: "hidden" } },
|
|
129420
129678
|
initials.props.children,
|
|
@@ -129422,7 +129680,7 @@ var init_renderNode = __esm({
|
|
|
129422
129680
|
e2.currentTarget.style.display = "none";
|
|
129423
129681
|
}, style: { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover" } })
|
|
129424
129682
|
) : initials;
|
|
129425
|
-
return who ? /* @__PURE__ */ jsx11("div", { role: "listitem", style: wrapStyle, children:
|
|
129683
|
+
return who ? /* @__PURE__ */ jsx11("div", { role: "listitem", style: wrapStyle, children: React16.cloneElement(circle, { role: "img", "aria-label": who }) }, i2) : /* @__PURE__ */ jsx11("div", { "aria-hidden": "true", style: wrapStyle, children: circle }, i2);
|
|
129426
129684
|
}),
|
|
129427
129685
|
overflow > 0 && /* @__PURE__ */ jsx11("div", { role: "listitem", style: { marginLeft: -(size - shift), width: size, height: size, borderRadius: "50%", border: `2px solid ${C2("surfacePrimary", "#fff")}`, background: C2("surfaceTertiary", "#e6e6e6"), color: C2("textPrimary", "#111"), display: "grid", placeItems: "center", fontSize: size * 0.32, fontWeight: 700, fontFamily: bodyFont(ctx) }, children: /* @__PURE__ */ jsxs9("span", { role: "img", "aria-label": `${overflow} more`, children: [
|
|
129428
129686
|
"+",
|
|
@@ -129443,7 +129701,7 @@ var init_renderNode = __esm({
|
|
|
129443
129701
|
const declared = Array.isArray(props.series) ? props.series : [];
|
|
129444
129702
|
const multi = declared.length > 0;
|
|
129445
129703
|
const singleBound = useBoundValue(ctx, typeof props.valuesPath === "string" && !multi ? props.valuesPath : "");
|
|
129446
|
-
const seriesBindings =
|
|
129704
|
+
const seriesBindings = React16.useMemo(
|
|
129447
129705
|
() => declared.map((d2) => typeof d2?.valuesPath === "string" ? d2.valuesPath : ""),
|
|
129448
129706
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
129449
129707
|
[declared.map((d2) => String(d2?.valuesPath ?? "")).join("\0")]
|
|
@@ -129589,9 +129847,9 @@ var init_renderNode = __esm({
|
|
|
129589
129847
|
] }) });
|
|
129590
129848
|
});
|
|
129591
129849
|
ShapeNode = withExtras("ShapeNode", ({ props, ctx, wrap }) => {
|
|
129592
|
-
const ref =
|
|
129593
|
-
const [box, setBox] =
|
|
129594
|
-
|
|
129850
|
+
const ref = React16.useRef(null);
|
|
129851
|
+
const [box, setBox] = React16.useState(null);
|
|
129852
|
+
React16.useEffect(() => {
|
|
129595
129853
|
const el2 = ref.current;
|
|
129596
129854
|
if (!el2) return;
|
|
129597
129855
|
const measure2 = () => {
|
|
@@ -129749,10 +130007,10 @@ var init_renderNode = __esm({
|
|
|
129749
130007
|
const isPlayable = !isFailed && !isUploading;
|
|
129750
130008
|
const isPlaying = state === "playing";
|
|
129751
130009
|
const isLoading = state === "loading";
|
|
129752
|
-
const [scrub, setScrub] =
|
|
129753
|
-
const [seeked, setSeeked] =
|
|
130010
|
+
const [scrub, setScrub] = React16.useState(null);
|
|
130011
|
+
const [seeked, setSeeked] = React16.useState(null);
|
|
129754
130012
|
const positionMs = Math.max(0, num4(props.positionMsPath != null ? boundPosition : void 0, props.positionMs, 0));
|
|
129755
|
-
|
|
130013
|
+
React16.useEffect(() => {
|
|
129756
130014
|
setSeeked(null);
|
|
129757
130015
|
}, [positionMs]);
|
|
129758
130016
|
const effectivePositionMs = seeked ?? positionMs;
|
|
@@ -129794,8 +130052,8 @@ var init_renderNode = __esm({
|
|
|
129794
130052
|
const barW = Math.max(0.6, slot * 0.58);
|
|
129795
130053
|
const cut2 = progress * W2;
|
|
129796
130054
|
const rates = Array.isArray(props.rates) ? props.rates.map(Number).filter((n2) => n2 > 0) : [];
|
|
129797
|
-
const [pickedRate, setPickedRate] =
|
|
129798
|
-
|
|
130055
|
+
const [pickedRate, setPickedRate] = React16.useState(null);
|
|
130056
|
+
React16.useEffect(() => {
|
|
129799
130057
|
setPickedRate(null);
|
|
129800
130058
|
}, [rate]);
|
|
129801
130059
|
const effectiveRate = pickedRate ?? rate;
|
|
@@ -129969,8 +130227,8 @@ var init_renderNode = __esm({
|
|
|
129969
130227
|
}) });
|
|
129970
130228
|
});
|
|
129971
130229
|
LiveWindowMeasured = ({ index, heights, children }) => {
|
|
129972
|
-
const ref =
|
|
129973
|
-
|
|
130230
|
+
const ref = React16.useRef(null);
|
|
130231
|
+
React16.useLayoutEffect(() => {
|
|
129974
130232
|
const el2 = ref.current;
|
|
129975
130233
|
if (!el2) return;
|
|
129976
130234
|
const record3 = () => {
|
|
@@ -129989,7 +130247,7 @@ var init_renderNode = __esm({
|
|
|
129989
130247
|
return /* @__PURE__ */ jsx11("div", { ref, style: { width: "100%" }, children });
|
|
129990
130248
|
};
|
|
129991
130249
|
LiveWindowPage = ({ page, index, count: count2, current, liveWindow, ownerId, heights, ctx }) => {
|
|
129992
|
-
const outerActive =
|
|
130250
|
+
const outerActive = React16.useContext(PageActiveContext);
|
|
129993
130251
|
if (liveWindowRange(current, count2, liveWindow) == null) return /* @__PURE__ */ jsx11(Fragment4, { children: renderNode(page, ctx) });
|
|
129994
130252
|
if (liveWindowMounted(index, current, count2, liveWindow)) {
|
|
129995
130253
|
return /* @__PURE__ */ jsx11(PageActiveContext.Provider, { value: outerActive && liveWindowActive(index, current, count2, liveWindow), children: /* @__PURE__ */ jsx11(LiveWindowMeasured, { index, heights, children: renderNode(page, ctx) }) });
|
|
@@ -130018,27 +130276,27 @@ var init_renderNode = __esm({
|
|
|
130018
130276
|
const items = (props.__pager ? props.pages : props.items) ?? [];
|
|
130019
130277
|
const pages2 = items.filter((page) => isNodeLike(page) || page?.type);
|
|
130020
130278
|
const requested = Math.max(0, Math.min(pages2.length - 1, props.currentIndex ?? 0));
|
|
130021
|
-
const [current, setCurrent] =
|
|
130022
|
-
const rail =
|
|
130023
|
-
const currentRef =
|
|
130279
|
+
const [current, setCurrent] = React16.useState(requested);
|
|
130280
|
+
const rail = React16.useRef(null);
|
|
130281
|
+
const currentRef = React16.useRef(current);
|
|
130024
130282
|
const itemsPath = props.itemsPath ?? props.items_path;
|
|
130025
130283
|
const boundRail = !!itemsPath && !!items[0] && !!ctx.provider;
|
|
130026
130284
|
const { settled, scrolling } = useSettledPage(current);
|
|
130027
|
-
const [, heightsChanged] =
|
|
130285
|
+
const [, heightsChanged] = React16.useReducer((n2) => n2 + 1, 0);
|
|
130028
130286
|
const pageKey = pages2.map((p2, i2) => p2?.id ?? `#${i2}`).join("\0");
|
|
130029
|
-
const pageHeights =
|
|
130287
|
+
const pageHeights = React16.useMemo(() => ({ map: /* @__PURE__ */ new Map(), changed: heightsChanged }), [pageKey]);
|
|
130030
130288
|
const select2 = (index) => {
|
|
130031
130289
|
if (index === currentRef.current) return;
|
|
130032
130290
|
currentRef.current = index;
|
|
130033
130291
|
setCurrent(index);
|
|
130034
130292
|
if (props.onChange && ctx.onAction) ctx.onAction({ ...props.onChange, args: { ...props.onChange.args ?? {}, index } });
|
|
130035
130293
|
};
|
|
130036
|
-
|
|
130294
|
+
React16.useEffect(() => {
|
|
130037
130295
|
currentRef.current = requested;
|
|
130038
130296
|
setCurrent(requested);
|
|
130039
130297
|
if (rail.current && !boundRail) rail.current.scrollLeft = requested * rail.current.clientWidth;
|
|
130040
130298
|
}, [requested, boundRail, pages2.length]);
|
|
130041
|
-
|
|
130299
|
+
React16.useEffect(() => {
|
|
130042
130300
|
const interval = props.autoplayIntervalMs;
|
|
130043
130301
|
if (props.__pager || boundRail || !Number.isFinite(interval) || interval <= 0 || pages2.length < 2 || ctx.reduceMotion()) return;
|
|
130044
130302
|
const timer = setInterval(() => {
|
|
@@ -130085,19 +130343,19 @@ var init_renderNode = __esm({
|
|
|
130085
130343
|
const opts = Array.isArray(rawOpts) ? rawOpts : [];
|
|
130086
130344
|
const selectedId = isBinding(props.selectedId) ? boundSel : props.selectedId;
|
|
130087
130345
|
const selIdx = Math.max(0, opts.findIndex((o2) => o2?.id === selectedId));
|
|
130088
|
-
const viewport =
|
|
130089
|
-
const settle2 =
|
|
130090
|
-
const pickerId =
|
|
130346
|
+
const viewport = React16.useRef(null);
|
|
130347
|
+
const settle2 = React16.useRef(void 0);
|
|
130348
|
+
const pickerId = React16.useId();
|
|
130091
130349
|
const interactive = !!ctx.onAction && !!props.onChange;
|
|
130092
130350
|
const emit = (index) => {
|
|
130093
130351
|
const id = opts[index]?.id;
|
|
130094
130352
|
if (!interactive || id == null || index === selIdx) return;
|
|
130095
130353
|
ctx.onAction({ ...props.onChange, args: { ...props.onChange.args ?? {}, selectedId: String(id) } });
|
|
130096
130354
|
};
|
|
130097
|
-
|
|
130355
|
+
React16.useEffect(() => {
|
|
130098
130356
|
if (viewport.current) viewport.current.scrollTop = selIdx * 32;
|
|
130099
130357
|
}, [selIdx, opts.length]);
|
|
130100
|
-
|
|
130358
|
+
React16.useEffect(() => () => clearTimeout(settle2.current), []);
|
|
130101
130359
|
return /* @__PURE__ */ jsxs9("div", { style: { position: "relative", width: "100%", maxWidth: 220, height: 160, overflow: "hidden", background: C2("surfaceSecondary", "#f5f7fa"), borderRadius: 12, ...wrap }, children: [
|
|
130102
130360
|
/* @__PURE__ */ jsx11("div", { "aria-hidden": "true", style: { position: "absolute", top: 64, left: 8, right: 8, height: 32, background: C2("surfacePrimary", "#fff"), borderRadius: 8, boxShadow: "inset 0 0 0 1px rgba(0,0,0,.06)" } }),
|
|
130103
130361
|
/* @__PURE__ */ jsx11(
|
|
@@ -130173,11 +130431,23 @@ var init_renderNode = __esm({
|
|
|
130173
130431
|
const next = multiSelect ? isSel ? selected.filter((x2) => x2 !== id) : [...selected, id] : isSel ? [] : [id];
|
|
130174
130432
|
ctx.onAction({ ...onChange, args: { ...onChange.args ?? {}, selectedIds: next } });
|
|
130175
130433
|
};
|
|
130434
|
+
const rowRef = React16.useRef(null);
|
|
130435
|
+
const shownSelection = React16.useRef(void 0);
|
|
130436
|
+
const selectedId = multiSelect ? null : selected[0] ?? null;
|
|
130437
|
+
React16.useEffect(() => {
|
|
130438
|
+
const row2 = rowRef.current;
|
|
130439
|
+
if (multiSelect || !row2 || selectedId === shownSelection.current) return;
|
|
130440
|
+
const chip = selectedId == null ? null : Array.from(row2.children).find((el2) => el2.getAttribute("data-chip-id") === selectedId);
|
|
130441
|
+
if (selectedId != null && !chip) return;
|
|
130442
|
+
const first = shownSelection.current === void 0;
|
|
130443
|
+
shownSelection.current = selectedId;
|
|
130444
|
+
if (chip) revealInRow(chip, row2, first || ctx.reduceMotion());
|
|
130445
|
+
}, [selectedId, chips, multiSelect]);
|
|
130176
130446
|
return (
|
|
130177
130447
|
// ONE horizontally scrolling row, like the iOS ScrollView(.horizontal) and the
|
|
130178
130448
|
// Android LazyRow. Wrapping here turned a long filter set into a ragged grid and
|
|
130179
130449
|
// pushed a sibling count onto two lines (#3080, #3004).
|
|
130180
|
-
/* @__PURE__ */ jsx11("div", { role: "group", style: { display: "flex", gap: 8, flexWrap: "nowrap", overflowX: "auto", scrollbarWidth: "none", width: "100%", minWidth: 0, ...wrap }, children: chips.map((c2, i2) => {
|
|
130450
|
+
/* @__PURE__ */ jsx11("div", { ref: rowRef, role: "group", style: { display: "flex", gap: 8, flexWrap: "nowrap", overflowX: "auto", scrollbarWidth: "none", width: "100%", minWidth: 0, ...wrap }, children: chips.map((c2, i2) => {
|
|
130181
130451
|
const on4 = selected.includes(c2.id);
|
|
130182
130452
|
const chipStyle = { display: "flex", flex: "none", whiteSpace: "nowrap", gap: 6, alignItems: "center", fontFamily: bodyFont(ctx), fontWeight: 500, fontSize: pxToRem(13), border: `1px solid ${on4 ? "transparent" : C2("border", "#ddd")}`, background: on4 ? C2("accentPrimary", "#116DFF") : "transparent", color: on4 ? C2("textOnAccent", "#fff") : C2("textSecondary", "#666"), padding: "6px 12px", borderRadius: 999 };
|
|
130183
130453
|
const inner = /* @__PURE__ */ jsxs9(Fragment4, { children: [
|
|
@@ -130187,7 +130457,7 @@ var init_renderNode = __esm({
|
|
|
130187
130457
|
/* @__PURE__ */ jsx11("span", { style: { ...on4 ? {} : { opacity: 0.7 }, fontSize: pxToRem(11) }, children: c2.count })
|
|
130188
130458
|
] })
|
|
130189
130459
|
] });
|
|
130190
|
-
return interactive ? /* @__PURE__ */ jsx11("button", { type: "button", "aria-pressed": on4, onClick: () => toggle(c2.id), style: { all: "unset", cursor: "pointer", boxSizing: "border-box", ...chipStyle }, children: inner }, c2.id ?? i2) : /* @__PURE__ */ jsx11("span", { style: chipStyle, children: inner }, c2.id ?? i2);
|
|
130460
|
+
return interactive ? /* @__PURE__ */ jsx11("button", { "data-chip-id": c2.id, type: "button", "aria-pressed": on4, onClick: () => toggle(c2.id), style: { all: "unset", cursor: "pointer", boxSizing: "border-box", ...chipStyle }, children: inner }, c2.id ?? i2) : /* @__PURE__ */ jsx11("span", { "data-chip-id": c2.id, style: chipStyle, children: inner }, c2.id ?? i2);
|
|
130191
130461
|
}) })
|
|
130192
130462
|
);
|
|
130193
130463
|
});
|
|
@@ -130208,23 +130478,23 @@ var init_renderNode = __esm({
|
|
|
130208
130478
|
const hasEvents = !!(props.onMapTap || props.onMarkerTap || props.onRegionChange || props.onShapeTap);
|
|
130209
130479
|
const boundShapes = useResolvedScalar(props.shapesPath, ctx);
|
|
130210
130480
|
const shapesRaw = Array.isArray(boundShapes) ? boundShapes : Array.isArray(props.shapes) ? props.shapes : [];
|
|
130211
|
-
const shapes =
|
|
130481
|
+
const shapes = React16.useMemo(() => shapesRaw.map((sh) => {
|
|
130212
130482
|
const kind = parseShapeKind(sh?.kind);
|
|
130213
130483
|
const pts = Array.isArray(sh?.points) ? sh.points.filter((p2) => p2 && typeof p2.latitude === "number" && typeof p2.longitude === "number") : [];
|
|
130214
130484
|
const ring = kind === "circle" && pts.length ? circleRing(pts[0].latitude, pts[0].longitude, typeof sh.radiusM === "number" ? sh.radiusM : 0) : pts;
|
|
130215
130485
|
return { ...sh, kind, points: ring };
|
|
130216
130486
|
}), [JSON.stringify(shapesRaw)]);
|
|
130217
130487
|
const boundCameraRaw = useResolvedScalar(props.cameraPath, ctx);
|
|
130218
|
-
const commandedCamera =
|
|
130219
|
-
const [box, setBox] =
|
|
130220
|
-
const [tileStatus, setTileStatus] =
|
|
130221
|
-
const [userCam, setUserCam] =
|
|
130222
|
-
const dragRef =
|
|
130223
|
-
const dragMovedRef =
|
|
130224
|
-
const regionReportedRef =
|
|
130225
|
-
const [boxEl, setBoxEl] =
|
|
130226
|
-
const attachBox =
|
|
130227
|
-
|
|
130488
|
+
const commandedCamera = React16.useMemo(() => decodeCamera(boundCameraRaw), [boundCameraRaw]);
|
|
130489
|
+
const [box, setBox] = React16.useState({ w: 400, h: h2 });
|
|
130490
|
+
const [tileStatus, setTileStatus] = React16.useState({});
|
|
130491
|
+
const [userCam, setUserCam] = React16.useState(null);
|
|
130492
|
+
const dragRef = React16.useRef(null);
|
|
130493
|
+
const dragMovedRef = React16.useRef(false);
|
|
130494
|
+
const regionReportedRef = React16.useRef(false);
|
|
130495
|
+
const [boxEl, setBoxEl] = React16.useState(null);
|
|
130496
|
+
const attachBox = React16.useCallback((el2) => setBoxEl(el2), []);
|
|
130497
|
+
React16.useEffect(() => {
|
|
130228
130498
|
const el2 = boxEl;
|
|
130229
130499
|
if (!el2) return;
|
|
130230
130500
|
const measure2 = () => {
|
|
@@ -130247,12 +130517,12 @@ var init_renderNode = __esm({
|
|
|
130247
130517
|
const explicitSchematic = schematic && props.routeMode?.toLowerCase() === "schematic";
|
|
130248
130518
|
const usesTileArm = !explicitSchematic && (otherTileReason || hasStaticMarkers) && (follow || !schematic);
|
|
130249
130519
|
const pinsOnly = hasStaticMarkers && !otherTileReason;
|
|
130250
|
-
const [userFix, setUserFix] =
|
|
130251
|
-
const [followBroken, setFollowBroken] =
|
|
130252
|
-
|
|
130520
|
+
const [userFix, setUserFix] = React16.useState(null);
|
|
130521
|
+
const [followBroken, setFollowBroken] = React16.useState(false);
|
|
130522
|
+
React16.useEffect(() => {
|
|
130253
130523
|
if (follow) setFollowBroken(false);
|
|
130254
130524
|
}, [follow]);
|
|
130255
|
-
|
|
130525
|
+
React16.useEffect(() => {
|
|
130256
130526
|
if (!observeUserLocation || !usesTileArm) return;
|
|
130257
130527
|
const geo = typeof navigator !== "undefined" ? navigator.geolocation : void 0;
|
|
130258
130528
|
if (!geo || typeof geo.watchPosition !== "function") return;
|
|
@@ -130279,7 +130549,7 @@ var init_renderNode = __esm({
|
|
|
130279
130549
|
const z5 = userCam?.z ?? fitted;
|
|
130280
130550
|
const cLat = followActive ? userFix.lat : userCam?.lat ?? baseLat;
|
|
130281
130551
|
const cLng = followActive ? userFix.lng : userCam?.lng ?? baseLng;
|
|
130282
|
-
|
|
130552
|
+
React16.useEffect(() => {
|
|
130283
130553
|
const resolved2 = resolveCamera(commandedCamera, cLat, cLng, z5);
|
|
130284
130554
|
if (!resolved2) return;
|
|
130285
130555
|
setFollowBroken(true);
|
|
@@ -130361,7 +130631,7 @@ var init_renderNode = __esm({
|
|
|
130361
130631
|
const endDrag = () => {
|
|
130362
130632
|
dragRef.current = null;
|
|
130363
130633
|
};
|
|
130364
|
-
|
|
130634
|
+
React16.useEffect(() => {
|
|
130365
130635
|
if (!boxEl || !usesTileArm || !interactive) return;
|
|
130366
130636
|
const zoomOnWheel = (event) => {
|
|
130367
130637
|
event.preventDefault();
|
|
@@ -130371,7 +130641,7 @@ var init_renderNode = __esm({
|
|
|
130371
130641
|
boxEl.addEventListener("wheel", zoomOnWheel, { passive: false });
|
|
130372
130642
|
return () => boxEl.removeEventListener("wheel", zoomOnWheel);
|
|
130373
130643
|
}, [boxEl, usesTileArm, interactive, z5, cLat, cLng]);
|
|
130374
|
-
|
|
130644
|
+
React16.useEffect(() => {
|
|
130375
130645
|
const action = props.onRegionChange;
|
|
130376
130646
|
const fire = ctx.onAction;
|
|
130377
130647
|
if (!usesTileArm || !action || !fire) return;
|
|
@@ -130514,34 +130784,34 @@ var init_renderNode = __esm({
|
|
|
130514
130784
|
const effectiveIndex = Number.isInteger(parsedIndex) ? parsedIndex : props.currentIndex;
|
|
130515
130785
|
const pages2 = items.filter((p2) => isNodeLike(p2) || p2?.type);
|
|
130516
130786
|
const count2 = pages2.length;
|
|
130517
|
-
const [index, setIndex] =
|
|
130518
|
-
const indexRef =
|
|
130787
|
+
const [index, setIndex] = React16.useState(typeof effectiveIndex === "number" ? effectiveIndex : 0);
|
|
130788
|
+
const indexRef = React16.useRef(index);
|
|
130519
130789
|
const { settled, scrolling } = useSettledPage(index);
|
|
130520
|
-
const [, heightsChanged] =
|
|
130790
|
+
const [, heightsChanged] = React16.useReducer((n2) => n2 + 1, 0);
|
|
130521
130791
|
const pageKey = pages2.map((p2, i2) => p2?.id ?? `#${i2}`).join("\0");
|
|
130522
|
-
const pageHeights =
|
|
130523
|
-
const trackRef =
|
|
130524
|
-
const [hovered, setHovered] =
|
|
130525
|
-
const [focused, setFocused] =
|
|
130792
|
+
const pageHeights = React16.useMemo(() => ({ map: /* @__PURE__ */ new Map(), changed: heightsChanged }), [pageKey]);
|
|
130793
|
+
const trackRef = React16.useRef(null);
|
|
130794
|
+
const [hovered, setHovered] = React16.useState(false);
|
|
130795
|
+
const [focused, setFocused] = React16.useState(false);
|
|
130526
130796
|
const paused = hovered || focused;
|
|
130527
130797
|
const interval = typeof props.autoplayIntervalMs === "number" && props.autoplayIntervalMs > 0 ? props.autoplayIntervalMs : 0;
|
|
130528
130798
|
const autoplay = interval > 0 && count2 > 1 && !ctx.reduceMotion();
|
|
130529
130799
|
const onChange = props.onChange;
|
|
130530
|
-
const onChangeRef =
|
|
130800
|
+
const onChangeRef = React16.useRef(onChange);
|
|
130531
130801
|
onChangeRef.current = onChange;
|
|
130532
|
-
const autoScrollRef =
|
|
130533
|
-
const endAutoScroll =
|
|
130802
|
+
const autoScrollRef = React16.useRef(null);
|
|
130803
|
+
const endAutoScroll = React16.useCallback(() => {
|
|
130534
130804
|
if (autoScrollRef.current) clearTimeout(autoScrollRef.current.timer);
|
|
130535
130805
|
autoScrollRef.current = null;
|
|
130536
130806
|
}, []);
|
|
130537
130807
|
const requestedIndex = Math.max(0, Math.min(count2 - 1, typeof effectiveIndex === "number" ? effectiveIndex : 0));
|
|
130538
|
-
|
|
130808
|
+
React16.useEffect(() => {
|
|
130539
130809
|
endAutoScroll();
|
|
130540
130810
|
indexRef.current = requestedIndex;
|
|
130541
130811
|
setIndex(requestedIndex);
|
|
130542
130812
|
if (trackRef.current) trackRef.current.scrollLeft = requestedIndex * trackRef.current.clientWidth * (trackRef.current.ownerDocument.defaultView?.getComputedStyle(trackRef.current).direction === "rtl" ? -1 : 1);
|
|
130543
130813
|
}, [requestedIndex, count2, endAutoScroll]);
|
|
130544
|
-
|
|
130814
|
+
React16.useEffect(() => {
|
|
130545
130815
|
const el2 = trackRef.current;
|
|
130546
130816
|
el2?.addEventListener("scrollend", endAutoScroll);
|
|
130547
130817
|
return () => {
|
|
@@ -130549,14 +130819,14 @@ var init_renderNode = __esm({
|
|
|
130549
130819
|
endAutoScroll();
|
|
130550
130820
|
};
|
|
130551
130821
|
}, [endAutoScroll]);
|
|
130552
|
-
const pageTo =
|
|
130822
|
+
const pageTo = React16.useCallback((page) => {
|
|
130553
130823
|
if (page === indexRef.current) return;
|
|
130554
130824
|
indexRef.current = page;
|
|
130555
130825
|
setIndex(page);
|
|
130556
130826
|
const action = onChangeRef.current;
|
|
130557
130827
|
if (action && ctx.onAction) ctx.onAction({ ...action, args: { ...action.args ?? {}, index: page } });
|
|
130558
130828
|
}, [ctx]);
|
|
130559
|
-
|
|
130829
|
+
React16.useEffect(() => {
|
|
130560
130830
|
if (!autoplay || paused) return;
|
|
130561
130831
|
const id = setInterval(() => {
|
|
130562
130832
|
const next = (indexRef.current + 1) % count2;
|
|
@@ -130622,7 +130892,7 @@ var init_renderNode = __esm({
|
|
|
130622
130892
|
});
|
|
130623
130893
|
BannerNode = withExtras("BannerNode", ({ props, ctx, wrap }) => {
|
|
130624
130894
|
const C2 = ctx.color;
|
|
130625
|
-
const [dismissed, setDismissed] =
|
|
130895
|
+
const [dismissed, setDismissed] = React16.useState(false);
|
|
130626
130896
|
if (dismissed) return null;
|
|
130627
130897
|
const accent = sevColor(ctx, props.severity ?? "info");
|
|
130628
130898
|
return /* @__PURE__ */ jsxs9("div", { style: { display: "flex", gap: 11, width: "100%", boxSizing: "border-box", borderRadius: ctx.radius("md", 10), padding: 13, background: `color-mix(in srgb, ${accent} 12%, ${C2("surfacePrimary", "#fff")})`, border: `1px solid color-mix(in srgb, ${accent} 32%, transparent)`, ...wrap }, children: [
|
|
@@ -130655,16 +130925,16 @@ var init_renderNode = __esm({
|
|
|
130655
130925
|
const rawImageUrl = props.imageUrl != null && isBinding(props.imageUrl) ? boundImageUrl : props.imageUrl;
|
|
130656
130926
|
const heroSrc = typeof rawImageUrl === "string" && rawImageUrl !== "" ? rawImageUrl : typeof props.imageAsset === "string" && isWebAssetPath(props.imageAsset) ? props.imageAsset : void 0;
|
|
130657
130927
|
const resolvedHero = heroSrc ? resolveAssetUrl(heroSrc, ctx.assetBaseUrl, ctx.assetPin) : void 0;
|
|
130658
|
-
const [failedHero, setFailedHero] =
|
|
130928
|
+
const [failedHero, setFailedHero] = React16.useState(null);
|
|
130659
130929
|
const heroUrl = resolvedHero && resolvedHero !== failedHero ? resolvedHero : void 0;
|
|
130660
130930
|
const expanded = Math.max(0, typeof props.expandedHeight === "number" && Number.isFinite(props.expandedHeight) ? props.expandedHeight : 280);
|
|
130661
130931
|
const imageUrl = useImageSource(heroUrl ?? null, { width: "100%", height: expanded, mode: "fill" }).url ?? void 0;
|
|
130662
130932
|
const collapsed = Math.max(0, Math.min(expanded, typeof props.collapsedHeight === "number" && props.collapsedHeight > 0 ? props.collapsedHeight : 64));
|
|
130663
130933
|
const parallax = typeof props.parallaxFactor === "number" && Number.isFinite(props.parallaxFactor) ? Math.max(0, Math.min(1, props.parallaxFactor)) : 0.5;
|
|
130664
130934
|
const span = Math.max(1, expanded - collapsed);
|
|
130665
|
-
const rootRef =
|
|
130666
|
-
const [offset, setOffset] =
|
|
130667
|
-
|
|
130935
|
+
const rootRef = React16.useRef(null);
|
|
130936
|
+
const [offset, setOffset] = React16.useState(0);
|
|
130937
|
+
React16.useEffect(() => {
|
|
130668
130938
|
const el2 = rootRef.current;
|
|
130669
130939
|
const win = el2?.ownerDocument?.defaultView;
|
|
130670
130940
|
if (!el2 || !win) return;
|
|
@@ -130766,46 +131036,55 @@ var init_renderNode = __esm({
|
|
|
130766
131036
|
const boundEnd = useResolvedScalar(props.selectedEndDatePath, ctx);
|
|
130767
131037
|
const seedStart = (props.selectedStartDatePath != null ? typeof boundStart === "string" ? boundStart : "" : typeof props.selectedStartDate === "string" ? props.selectedStartDate : "") || "";
|
|
130768
131038
|
const seedEnd = (props.selectedEndDatePath != null ? typeof boundEnd === "string" ? boundEnd : "" : typeof props.selectedEndDate === "string" ? props.selectedEndDate : "") || "";
|
|
130769
|
-
const [range, setRange] =
|
|
130770
|
-
const lastRangeSeed =
|
|
130771
|
-
|
|
131039
|
+
const [range, setRange] = React16.useState({ start: seedStart, end: seedEnd });
|
|
131040
|
+
const lastRangeSeed = React16.useRef(`${seedStart}|${seedEnd}`);
|
|
131041
|
+
React16.useEffect(() => {
|
|
130772
131042
|
const key3 = `${seedStart}|${seedEnd}`;
|
|
130773
131043
|
if (lastRangeSeed.current === key3) return;
|
|
130774
131044
|
lastRangeSeed.current = key3;
|
|
130775
131045
|
setRange({ start: seedStart, end: seedEnd });
|
|
130776
131046
|
}, [seedStart, seedEnd]);
|
|
130777
|
-
const seed2 =
|
|
131047
|
+
const seed2 = React16.useMemo(
|
|
130778
131048
|
() => monthSeed(drivenYear ?? props.year, drivenMonth ?? props.month, selectedDate),
|
|
130779
131049
|
[drivenYear, drivenMonth, props.year, props.month, selectedDate]
|
|
130780
131050
|
);
|
|
130781
|
-
const [view, setView] =
|
|
131051
|
+
const [view, setView] = React16.useState(seed2);
|
|
130782
131052
|
const seedKey = `${seed2.year}-${seed2.month}`;
|
|
130783
|
-
const lastSeed =
|
|
130784
|
-
|
|
131053
|
+
const lastSeed = React16.useRef(seedKey);
|
|
131054
|
+
const lastSeedSelection = React16.useRef(selectedDate);
|
|
131055
|
+
React16.useEffect(() => {
|
|
131056
|
+
const bySelection = lastSeedSelection.current !== selectedDate;
|
|
131057
|
+
lastSeedSelection.current = selectedDate;
|
|
130785
131058
|
if (lastSeed.current === seedKey) return;
|
|
130786
131059
|
lastSeed.current = seedKey;
|
|
130787
131060
|
setView(seed2);
|
|
131061
|
+
if (bySelection && !isWeek && (view.year !== seed2.year || view.month !== seed2.month)) {
|
|
131062
|
+
dispatchCalendarAction(ctx, props.onVisibleRangeChange, visibleRange(monthMatrix(seed2.year, seed2.month, firstWeekday)));
|
|
131063
|
+
}
|
|
130788
131064
|
}, [seedKey, seed2]);
|
|
130789
131065
|
const year = view.year;
|
|
130790
131066
|
const month = view.month;
|
|
130791
131067
|
const boundMode = useResolvedScalar(props.displayModePath, ctx);
|
|
130792
131068
|
const drivenMode = props.displayModePath != null && (boundMode === "week" || boundMode === "month") ? boundMode : void 0;
|
|
130793
131069
|
const modeSeed = drivenMode ?? (props.displayMode === "week" ? "week" : "month");
|
|
130794
|
-
const [mode, setMode] =
|
|
130795
|
-
const lastModeSeed =
|
|
130796
|
-
|
|
131070
|
+
const [mode, setMode] = React16.useState(modeSeed);
|
|
131071
|
+
const lastModeSeed = React16.useRef(modeSeed);
|
|
131072
|
+
React16.useEffect(() => {
|
|
130797
131073
|
if (lastModeSeed.current === modeSeed) return;
|
|
130798
131074
|
lastModeSeed.current = modeSeed;
|
|
130799
131075
|
setMode(modeSeed);
|
|
130800
131076
|
}, [modeSeed]);
|
|
130801
131077
|
const isWeek = mode === "week";
|
|
130802
131078
|
const weekSeed = calWeekStart(selectedDate ?? localDayKey(/* @__PURE__ */ new Date()), firstWeekday);
|
|
130803
|
-
const [weekStart, setWeekStart] =
|
|
130804
|
-
const lastWeekSeed =
|
|
130805
|
-
|
|
131079
|
+
const [weekStart, setWeekStart] = React16.useState(weekSeed);
|
|
131080
|
+
const lastWeekSeed = React16.useRef(weekSeed);
|
|
131081
|
+
React16.useEffect(() => {
|
|
130806
131082
|
if (lastWeekSeed.current === weekSeed) return;
|
|
130807
131083
|
lastWeekSeed.current = weekSeed;
|
|
130808
131084
|
setWeekStart(weekSeed);
|
|
131085
|
+
if (isWeek && selectedDate != null && weekStart !== weekSeed) {
|
|
131086
|
+
dispatchCalendarAction(ctx, props.onVisibleRangeChange, { startDate: weekSeed, endDate: calAddDays(weekSeed, 6) });
|
|
131087
|
+
}
|
|
130809
131088
|
}, [weekSeed]);
|
|
130810
131089
|
const decByDate = /* @__PURE__ */ new Map();
|
|
130811
131090
|
for (const d2 of decorations) if (d2 && typeof d2.date === "string") decByDate.set(d2.date, d2);
|
|
@@ -130815,7 +131094,7 @@ var init_renderNode = __esm({
|
|
|
130815
131094
|
return { date, day: parseLocalDate(date)?.getDate() ?? 0, inMonth: true, isToday: date === todayKey };
|
|
130816
131095
|
})] : monthMatrix(year, month, firstWeekday);
|
|
130817
131096
|
const heads = weekdayLabels(firstWeekday);
|
|
130818
|
-
const gridRef =
|
|
131097
|
+
const gridRef = React16.useRef(null);
|
|
130819
131098
|
const titleMonth = isWeek ? calWeekTitleMonth(weekStart) : { year, month };
|
|
130820
131099
|
const monthLabel = new Date(titleMonth.year, titleMonth.month - 1, 1).toLocaleDateString(void 0, { month: "long", year: "numeric" });
|
|
130821
131100
|
const expandable = props.expandable === true;
|
|
@@ -130990,7 +131269,7 @@ var init_renderNode = __esm({
|
|
|
130990
131269
|
const events = Array.isArray(rawEvents) ? rawEvents : [];
|
|
130991
131270
|
const boundAnchor = useResolvedScalar(props.anchorDatePath, ctx);
|
|
130992
131271
|
const anchorRaw = props.anchorDatePath != null ? boundAnchor : props.anchorDate;
|
|
130993
|
-
const [pagedAnchor, setPagedAnchor] =
|
|
131272
|
+
const [pagedAnchor, setPagedAnchor] = React16.useState(null);
|
|
130994
131273
|
const localAnchor = pagedAnchor && Object.is(pagedAnchor.raw, anchorRaw) && pagedAnchor.path === props.anchorDatePath && pagedAnchor.mode === props.mode && pagedAnchor.provider === ctx.provider ? pagedAnchor.date : null;
|
|
130995
131274
|
if (pagedAnchor && !localAnchor) setPagedAnchor(null);
|
|
130996
131275
|
const anchor = localAnchor ?? (typeof anchorRaw === "string" ? parseLocalDate(anchorRaw) : null) ?? /* @__PURE__ */ new Date();
|
|
@@ -131230,7 +131509,7 @@ var init_renderNode = __esm({
|
|
|
131230
131509
|
const boundEvents = useResolvedScalar(props.eventsPath, ctx);
|
|
131231
131510
|
const rawEvents = props.eventsPath != null ? boundEvents : props.events;
|
|
131232
131511
|
const events = Array.isArray(rawEvents) ? rawEvents : [];
|
|
131233
|
-
const groups =
|
|
131512
|
+
const groups = React16.useMemo(() => {
|
|
131234
131513
|
const buckets = /* @__PURE__ */ new Map();
|
|
131235
131514
|
for (const ev of events) {
|
|
131236
131515
|
if (!ev) continue;
|
|
@@ -131250,19 +131529,48 @@ var init_renderNode = __esm({
|
|
|
131250
131529
|
const onSelect = (ev) => dispatchCalendarAction(ctx, ev?.onTap ?? props.onSelectEvent, { eventId: ev?.id });
|
|
131251
131530
|
const boundScrollTo = useResolvedScalar(props.scrollToDatePath, ctx);
|
|
131252
131531
|
const scrollTarget = props.scrollToDatePath != null ? typeof boundScrollTo === "string" ? boundScrollTo : void 0 : typeof props.scrollToDate === "string" ? props.scrollToDate : void 0;
|
|
131253
|
-
const
|
|
131254
|
-
const
|
|
131255
|
-
const
|
|
131532
|
+
const targetDay = anchorRowId(scrollTarget) ?? void 0;
|
|
131533
|
+
const containerRef = React16.useRef(null);
|
|
131534
|
+
const [visibleDays, setVisibleDays] = React16.useState(CAL_AGENDA_INITIAL_DAYS);
|
|
131535
|
+
const targetIndex = targetDay ? groups.findIndex((g2) => g2.key === targetDay) : -1;
|
|
131256
131536
|
const windowEnd = Math.max(visibleDays, targetIndex >= 0 ? targetIndex + 1 : 0);
|
|
131257
131537
|
const shown2 = groups.length > windowEnd ? groups.slice(0, windowEnd) : groups;
|
|
131258
131538
|
const hasMore = groups.length > shown2.length;
|
|
131259
|
-
|
|
131260
|
-
|
|
131261
|
-
|
|
131262
|
-
containerRef
|
|
131539
|
+
const onVisibleDate = props.onVisibleDateChange ?? props.on_visible_date_change;
|
|
131540
|
+
const reportedDate = React16.useRef(null);
|
|
131541
|
+
const jumped = useTopAnchorReport(
|
|
131542
|
+
containerRef,
|
|
131543
|
+
onVisibleDate ? () => Array.from(containerRef.current?.children ?? [], (el2) => ({ id: el2.getAttribute("data-daygroup") ?? "", el: el2 })).filter((a2) => a2.id) : null,
|
|
131544
|
+
(date) => {
|
|
131545
|
+
reportedDate.current = date;
|
|
131546
|
+
dispatchCalendarAction(ctx, onVisibleDate, { date });
|
|
131547
|
+
},
|
|
131548
|
+
groups
|
|
131549
|
+
);
|
|
131550
|
+
const landedOn = React16.useRef(null);
|
|
131551
|
+
React16.useEffect(() => {
|
|
131552
|
+
if (!scrollTarget || !targetDay) {
|
|
131553
|
+
landedOn.current = null;
|
|
131554
|
+
return;
|
|
131555
|
+
}
|
|
131556
|
+
if (scrollTarget === landedOn.current) return;
|
|
131557
|
+
if (!scrollTarget.includes("|") && targetDay === reportedDate.current) {
|
|
131558
|
+
landedOn.current = scrollTarget;
|
|
131559
|
+
return;
|
|
131560
|
+
}
|
|
131561
|
+
reportedDate.current = null;
|
|
131562
|
+
const day = containerRef.current?.querySelector(`[data-daygroup="${targetDay}"]`);
|
|
131563
|
+
if (!day) return;
|
|
131564
|
+
const block = groups[0]?.key === targetDay ? "nearest" : "start";
|
|
131565
|
+
const inset = coveredTopInset(day);
|
|
131566
|
+
if (inset > 0) day.style.scrollMarginTop = `${inset}px`;
|
|
131567
|
+
else day.style.removeProperty("scroll-margin-top");
|
|
131568
|
+
jumped(0);
|
|
131569
|
+
day.scrollIntoView({ block });
|
|
131570
|
+
if (block === "nearest" || reachesVisibleTop(day)) landedOn.current = scrollTarget;
|
|
131263
131571
|
}, [scrollTarget, windowEnd]);
|
|
131264
|
-
const sentinelRef =
|
|
131265
|
-
|
|
131572
|
+
const sentinelRef = React16.useRef(null);
|
|
131573
|
+
React16.useEffect(() => {
|
|
131266
131574
|
if (!hasMore) return;
|
|
131267
131575
|
const el2 = sentinelRef.current;
|
|
131268
131576
|
if (!el2 || typeof IntersectionObserver === "undefined") return;
|
|
@@ -131278,6 +131586,7 @@ var init_renderNode = __esm({
|
|
|
131278
131586
|
return /* @__PURE__ */ jsx11("div", { style: { width: "100%", padding: "28px 16px", boxSizing: "border-box", textAlign: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(14), color: C2("textSecondary", "#888"), ...wrap }, children: emptyLabel || "No events" });
|
|
131279
131587
|
}
|
|
131280
131588
|
const sticky = props.stickyHeaders === true;
|
|
131589
|
+
const dayHeaderFont = ctx.font("caption");
|
|
131281
131590
|
const todayKey = localDayKey(/* @__PURE__ */ new Date());
|
|
131282
131591
|
const tomorrowKey = localDayKey(new Date((/* @__PURE__ */ new Date()).getFullYear(), (/* @__PURE__ */ new Date()).getMonth(), (/* @__PURE__ */ new Date()).getDate() + 1));
|
|
131283
131592
|
const dayHeaderLabel = (key3) => {
|
|
@@ -131288,7 +131597,7 @@ var init_renderNode = __esm({
|
|
|
131288
131597
|
};
|
|
131289
131598
|
return /* @__PURE__ */ jsxs9("div", { ref: containerRef, "data-agenda-days": shown2.length, style: { width: "100%", boxSizing: "border-box", ...wrap }, children: [
|
|
131290
131599
|
shown2.map((g2) => /* @__PURE__ */ jsxs9("div", { "data-daygroup": g2.key, children: [
|
|
131291
|
-
/* @__PURE__ */ jsx11("div", { style: { position: sticky ? "sticky" : "static", top: 0, zIndex: 1, background: C2("
|
|
131600
|
+
/* @__PURE__ */ jsx11("div", { "data-dayheader": "", style: { position: sticky ? "sticky" : "static", top: 0, zIndex: 1, background: C2("surfaceSecondary", "#f5f7fa"), fontFamily: fontStack(dayHeaderFont.family, ctx.idiom), fontSize: dayHeaderFont.remSize, fontWeight: dayHeaderFont.weight, lineHeight: dayHeaderFont.line, letterSpacing: dayHeaderFont.letterSpacing, color: C2("textSecondary", "#888"), padding: "6px 16px", textAlign: "start" }, children: dayHeaderLabel(g2.key) }),
|
|
131292
131601
|
g2.items.map((ev, i2) => {
|
|
131293
131602
|
const start = parseLocalDate(ev.start);
|
|
131294
131603
|
const timeStr = ev.allDay === true ? "All day" : start ? localTimeLabel(start) : "";
|
|
@@ -131379,14 +131688,14 @@ var init_renderNode = __esm({
|
|
|
131379
131688
|
PRESENTED_SCOPE = '[aria-modal="true"], [role="dialog"], [role="alertdialog"], [role="menu"]';
|
|
131380
131689
|
focusRoots = /* @__PURE__ */ new WeakMap();
|
|
131381
131690
|
A11yHintDescription = ({ hint, idBase, children, ...forwarded }) => {
|
|
131382
|
-
const descId = `${idBase ?? "hm"}__hint${
|
|
131691
|
+
const descId = `${idBase ?? "hm"}__hint${React16.useId()}`;
|
|
131383
131692
|
const own6 = children.props;
|
|
131384
131693
|
const next = { ...forwarded };
|
|
131385
131694
|
if (forwarded.style) next.style = { ...own6.style ?? {}, ...forwarded.style };
|
|
131386
131695
|
const ids = [own6["aria-describedby"], forwarded["aria-describedby"], descId].flatMap((v2) => v2 ? String(v2).split(/\s+/) : []).filter(Boolean);
|
|
131387
131696
|
next["aria-describedby"] = Array.from(new Set(ids)).join(" ");
|
|
131388
131697
|
return /* @__PURE__ */ jsxs9(Fragment4, { children: [
|
|
131389
|
-
|
|
131698
|
+
React16.cloneElement(children, next),
|
|
131390
131699
|
/* @__PURE__ */ jsx11("span", { id: descId, hidden: true, "data-hm-a11y-hint": "", children: hint })
|
|
131391
131700
|
] });
|
|
131392
131701
|
};
|
|
@@ -131406,15 +131715,41 @@ var init_renderNode = __esm({
|
|
|
131406
131715
|
return /* @__PURE__ */ jsx11("div", { className: "hm-bound-rail-cell", style: { flex: fill ? "0 0 100%" : "0 0 auto", ...fill ? { minWidth: 0, maxWidth: frame.maxWidth } : horizontalList ? { display: "contents" } : {} }, children: content });
|
|
131407
131716
|
};
|
|
131408
131717
|
renderRailRow = (template, itemCtx) => railRowFrame(template, renderNode(template, itemCtx), itemCtx);
|
|
131718
|
+
RowAnchors = ({ ctx, itemsPath, jumpPath, onTopItem, children }) => {
|
|
131719
|
+
const rootRef = React16.useRef(null);
|
|
131720
|
+
const jumpValue = useResolvedScalar(jumpPath, ctx);
|
|
131721
|
+
const jump = typeof jumpValue === "string" ? jumpValue : "";
|
|
131722
|
+
const target = anchorRowId(jump) ?? void 0;
|
|
131723
|
+
const rows = useBoundValue(ctx, itemsPath.startsWith("$item.") ? "" : itemsPath);
|
|
131724
|
+
const anchors = () => {
|
|
131725
|
+
const root = rootRef.current;
|
|
131726
|
+
if (!root) return [];
|
|
131727
|
+
return Array.from(root.querySelectorAll("[data-himalaya-row-id]")).filter((el2) => el2.closest("[data-himalaya-row-anchors]") === root).map((el2) => ({ id: el2.getAttribute("data-himalaya-row-id") ?? "", el: el2 }));
|
|
131728
|
+
};
|
|
131729
|
+
const jumped = useTopAnchorReport(rootRef, onTopItem ? anchors : null, (id) => dispatchCalendarAction(ctx, onTopItem, { id }), rows);
|
|
131730
|
+
const landedOn = React16.useRef("");
|
|
131731
|
+
React16.useEffect(() => {
|
|
131732
|
+
if (!target) {
|
|
131733
|
+
landedOn.current = "";
|
|
131734
|
+
return;
|
|
131735
|
+
}
|
|
131736
|
+
if (jump === landedOn.current) return;
|
|
131737
|
+
const row2 = anchors().find((a2) => a2.id === target);
|
|
131738
|
+
if (!row2) return;
|
|
131739
|
+
landedOn.current = jump;
|
|
131740
|
+
jumped(scrollAnchorToTop(row2.el, ctx.reduceMotion()));
|
|
131741
|
+
}, [jump, rows]);
|
|
131742
|
+
return /* @__PURE__ */ jsx11("div", { ref: rootRef, "data-himalaya-row-anchors": "", style: { display: "contents" }, children: /* @__PURE__ */ jsx11(RevealRowContext.Provider, { value: target, children }) });
|
|
131743
|
+
};
|
|
131409
131744
|
reportedUnknownComponents = /* @__PURE__ */ new Set();
|
|
131410
131745
|
UnknownComponentNode = ({ pkg, type, props, ctx, wrap, ...extras }) => {
|
|
131411
131746
|
const hasTelemetry = !!ctx.emitTelemetry;
|
|
131412
|
-
|
|
131747
|
+
React16.useEffect(() => {
|
|
131413
131748
|
reportUnknownComponent(ctx, pkg, type);
|
|
131414
131749
|
}, [ctx.appId, ctx.screenId, hasTelemetry, pkg, type]);
|
|
131415
131750
|
const { style: extraStyle, children: extraChildren, ...attrs } = extras;
|
|
131416
131751
|
const nodeProps = (entries) => entries.filter(([, v2]) => isNodeLike(v2) || Array.isArray(v2) && v2.some(isNodeLike));
|
|
131417
|
-
const renderProps = (entries) => entries.map(([k2, v2]) => /* @__PURE__ */ jsx11(
|
|
131752
|
+
const renderProps = (entries) => entries.map(([k2, v2]) => /* @__PURE__ */ jsx11(React16.Fragment, { children: Array.isArray(v2) ? kids2(v2.filter(isNodeLike), ctx) : renderNode(v2, ctx) }, k2));
|
|
131418
131753
|
const childKeys = nodeProps(Object.entries(props ?? {}));
|
|
131419
131754
|
if (!unknownComponentShowsDeveloperLabel(ctx)) {
|
|
131420
131755
|
const contentKeys = childKeys.filter(([k2]) => k2 === "child" || k2 === "children");
|
|
@@ -131437,11 +131772,11 @@ var init_renderNode = __esm({
|
|
|
131437
131772
|
ScrollIntoViewNode = ({ node, ctx, path: path2 }) => {
|
|
131438
131773
|
const token = useResolvedScalar(path2, ctx);
|
|
131439
131774
|
const source = isBinding(path2) ? path2 : "";
|
|
131440
|
-
const seen =
|
|
131775
|
+
const seen = React16.useRef({ source, provider: ctx.provider, token });
|
|
131441
131776
|
if (seen.current.source !== source || seen.current.provider !== ctx.provider) seen.current = { source, provider: ctx.provider, token };
|
|
131442
|
-
const root =
|
|
131777
|
+
const root = React16.useRef(null);
|
|
131443
131778
|
const reduced = ctx.reduceMotion();
|
|
131444
|
-
|
|
131779
|
+
React16.useEffect(() => {
|
|
131445
131780
|
if (token === seen.current.token) return;
|
|
131446
131781
|
seen.current.token = token;
|
|
131447
131782
|
if (token == null || token === "" || token === 0 || token === "0") return;
|
|
@@ -131462,7 +131797,7 @@ var init_renderNode = __esm({
|
|
|
131462
131797
|
});
|
|
131463
131798
|
|
|
131464
131799
|
// ../../core/web-renderer/src/renderToHtml.tsx
|
|
131465
|
-
import
|
|
131800
|
+
import React17 from "react";
|
|
131466
131801
|
import { renderToStaticMarkup } from "react-dom/server";
|
|
131467
131802
|
function renderDescriptorToHtml(payload, tokens2, scheme = "light", provider = null, width, chrome, opts) {
|
|
131468
131803
|
const rtl = opts?.isRTL === true;
|
|
@@ -131482,7 +131817,7 @@ function renderDescriptorToHtml(payload, tokens2, scheme = "light", provider = n
|
|
|
131482
131817
|
const withRenderStyles = (markup) => {
|
|
131483
131818
|
if (!markup) return markup;
|
|
131484
131819
|
if (!glassPreview) return FOCUS_STYLE_MARKUP + markup;
|
|
131485
|
-
const scoped = renderToStaticMarkup(
|
|
131820
|
+
const scoped = renderToStaticMarkup(React17.createElement(
|
|
131486
131821
|
"div",
|
|
131487
131822
|
{
|
|
131488
131823
|
className: "himi-ios-glass-preview",
|
|
@@ -131499,18 +131834,18 @@ function renderDescriptorToHtml(payload, tokens2, scheme = "light", provider = n
|
|
|
131499
131834
|
const dir = rtl ? { dir: "rtl" } : {};
|
|
131500
131835
|
if (header || footer) {
|
|
131501
131836
|
return withRenderStyles(renderToStaticMarkup(
|
|
131502
|
-
|
|
131837
|
+
React17.createElement(
|
|
131503
131838
|
"div",
|
|
131504
131839
|
// F-22 — same footer pin as ScreenHost: a full-height flex column + margin-top:auto
|
|
131505
131840
|
// keeps the footer at the bottom edge even when the payload is short.
|
|
131506
131841
|
{ "data-testid": "screen-host", ...dir, ...footer ? { style: { display: "flex", flexDirection: "column", minHeight: "100%", flexGrow: 1 } } : {} },
|
|
131507
|
-
header ?
|
|
131842
|
+
header ? React17.createElement(
|
|
131508
131843
|
"div",
|
|
131509
131844
|
{ "data-testid": "sticky-header", style: { position: "sticky", top: 0, zIndex: 10 } },
|
|
131510
131845
|
renderNode(header, ctx)
|
|
131511
131846
|
) : null,
|
|
131512
131847
|
renderNode(payload, ctx),
|
|
131513
|
-
footer ?
|
|
131848
|
+
footer ? React17.createElement(
|
|
131514
131849
|
"div",
|
|
131515
131850
|
{ "data-testid": "sticky-footer", style: { position: "sticky", bottom: 0, zIndex: 10, marginTop: "auto" } },
|
|
131516
131851
|
renderNode(footer, ctx)
|
|
@@ -131520,11 +131855,11 @@ function renderDescriptorToHtml(payload, tokens2, scheme = "light", provider = n
|
|
|
131520
131855
|
}
|
|
131521
131856
|
if (rtl) {
|
|
131522
131857
|
return withRenderStyles(renderToStaticMarkup(
|
|
131523
|
-
|
|
131858
|
+
React17.createElement("div", dir, renderNode(payload, ctx))
|
|
131524
131859
|
));
|
|
131525
131860
|
}
|
|
131526
131861
|
return withRenderStyles(renderToStaticMarkup(
|
|
131527
|
-
|
|
131862
|
+
React17.createElement(React17.Fragment, null, renderNode(payload, ctx))
|
|
131528
131863
|
));
|
|
131529
131864
|
}
|
|
131530
131865
|
var init_renderToHtml = __esm({
|
|
@@ -178075,43 +178410,43 @@ var init_preview_assets_generated = __esm({
|
|
|
178075
178410
|
init_define_HHP_CATALOG();
|
|
178076
178411
|
init_preview_assets_format();
|
|
178077
178412
|
PREVIEW_ASSET_MANIFEST = [
|
|
178078
|
-
{ key: "assets/DashboardHost-
|
|
178079
|
-
{ key: "assets/DevDrawer-
|
|
178080
|
-
{ key: "assets/IdiomCompare-
|
|
178081
|
-
{ key: "assets/LightboxViewer-
|
|
178082
|
-
{ key: "assets/OfflineReadingBar-
|
|
178083
|
-
{ key: "assets/PhonePreviewControl-
|
|
178084
|
-
{ key: "assets/SchemeCompare-
|
|
178085
|
-
{ key: "assets/WixFrogTelemetrySink-
|
|
178413
|
+
{ key: "assets/DashboardHost-DklK-Zpw.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2971, sha256: "8ac27115db1347bf878d926e5a8b23776307637b342503c7f4070e53c534e48d" },
|
|
178414
|
+
{ key: "assets/DevDrawer-DwjZbUMa.js", contentType: "application/javascript; charset=utf-8", offset: 2979, length: 16783, sha256: "ab7d4ad5317244e0d50b368598b3f69e76c571021b05de9d681dc4c6b04624ee" },
|
|
178415
|
+
{ key: "assets/IdiomCompare-RHazP0EX.js", contentType: "application/javascript; charset=utf-8", offset: 19762, length: 1926, sha256: "f9afaf8b9f701fe89b47addbf788597e482cba65ea491080d582a02f1c19b6e9" },
|
|
178416
|
+
{ key: "assets/LightboxViewer-CJ3Msrdl.js", contentType: "application/javascript; charset=utf-8", offset: 21688, length: 8171, sha256: "06ce24bac351dfd743cb2bce3afcf5336283a9cc40356ab7743e7986cd56c1e5" },
|
|
178417
|
+
{ key: "assets/OfflineReadingBar-BRyTZD1b.js", contentType: "application/javascript; charset=utf-8", offset: 29859, length: 1707, sha256: "7392912ed29ca4ac39c72a997abd5c1c0541d5a527a6c4c893640e7aa8a36aca" },
|
|
178418
|
+
{ key: "assets/PhonePreviewControl-4F9kIc5D.js", contentType: "application/javascript; charset=utf-8", offset: 31566, length: 37768, sha256: "2a7cf4c3afb7451d7455a6899a2f0694b4a4b0d00bb0edbd4ac18475e4731a00" },
|
|
178419
|
+
{ key: "assets/SchemeCompare-sK0fGfs9.js", contentType: "application/javascript; charset=utf-8", offset: 69334, length: 1858, sha256: "c3a8a60a66c0d1630fac003fbd012c445c58c63ff60adbf48d6e97e931089ea4" },
|
|
178420
|
+
{ key: "assets/WixFrogTelemetrySink-CEUEnj87.js", contentType: "application/javascript; charset=utf-8", offset: 71192, length: 3165, sha256: "c176cdb71b46dac380c1d3f5fd793489f6005725e09e4aa87c5baf736f1ed00c" },
|
|
178086
178421
|
{ key: "assets/calendar-ics-BvfIYWjG.js", contentType: "application/javascript; charset=utf-8", offset: 74357, length: 2192, sha256: "1636167041e9829ceccd3544297b86b8475c38bd2f759c4dbc17c813dc6e9254" },
|
|
178087
178422
|
{ key: "assets/glassPreviewBrowser-DONaOehd.js", contentType: "application/javascript; charset=utf-8", offset: 76549, length: 6578, sha256: "4402c4cddd2a564e7466cdf1e12a0e0277c0400b288e1e5eda1d23e797599d31" },
|
|
178088
178423
|
{ key: "assets/image-preparation-Cj4gldm6.js", contentType: "application/javascript; charset=utf-8", offset: 83127, length: 2704, sha256: "32944ea587c2f3b84389b66b50a850437560238f1c8d33b6275973ee04eee865" },
|
|
178089
|
-
{ key: "assets/index-
|
|
178090
|
-
{ key: "assets/jsx-runtime-CY_jTiqj.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
178091
|
-
{ key: "assets/pdf-
|
|
178092
|
-
{ key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
178093
|
-
{ key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset:
|
|
178094
|
-
{ key: "assets/pdfDocument-
|
|
178095
|
-
{ key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
178096
|
-
{ key: "assets/webviewBridgeHost-
|
|
178097
|
-
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset:
|
|
178098
|
-
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset:
|
|
178099
|
-
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset:
|
|
178100
|
-
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
178101
|
-
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset:
|
|
178102
|
-
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset:
|
|
178103
|
-
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
178104
|
-
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset:
|
|
178105
|
-
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
178106
|
-
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset:
|
|
178107
|
-
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset:
|
|
178108
|
-
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
178109
|
-
{ key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
178110
|
-
{ key: "index.html", contentType: "text/html; charset=utf-8", offset:
|
|
178111
|
-
{ key: "ios-glass-preview.css", contentType: "text/css; charset=utf-8", offset:
|
|
178112
|
-
{ key: "kit-tab-bar.css", contentType: "text/css; charset=utf-8", offset:
|
|
178113
|
-
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset:
|
|
178114
|
-
{ key: "t5-worker-frame.html", contentType: "text/html; charset=utf-8", offset:
|
|
178424
|
+
{ key: "assets/index-BT6yBCvd.js", contentType: "application/javascript; charset=utf-8", offset: 85831, length: 1400972, sha256: "df8e1e77483e46057d0774471ff5e6c86ba59ab1379d623d7992a427f1c74097" },
|
|
178425
|
+
{ key: "assets/jsx-runtime-CY_jTiqj.js", contentType: "application/javascript; charset=utf-8", offset: 1486803, length: 7624, sha256: "29dfba5b56f79a0b84d6b04d84d87617454baeba03c225f682ab2ab7ae2d5016" },
|
|
178426
|
+
{ key: "assets/pdf-CtGGuHgR.js", contentType: "application/javascript; charset=utf-8", offset: 1494427, length: 488199, sha256: "612e7b0165b78c01c17547afeb67f1af2ea454485a70c78a08fc8ae9a6be6db4" },
|
|
178427
|
+
{ key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 1982626, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
|
|
178428
|
+
{ key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 1982699, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
|
|
178429
|
+
{ key: "assets/pdfDocument-CcHxPK2L.js", contentType: "application/javascript; charset=utf-8", offset: 3299733, length: 3453, sha256: "35bb98873fac02db0d665348b003b3d4cc1409f96c5c7af54c2ddf4a09422ae6" },
|
|
178430
|
+
{ key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset: 3303186, length: 2266, sha256: "1d21ad008921942217c9eac0c35b1713773b9d89c71e3ab4412781f7bb88f463" },
|
|
178431
|
+
{ key: "assets/webviewBridgeHost-DBV0MQlP.js", contentType: "application/javascript; charset=utf-8", offset: 3305452, length: 9888, sha256: "66b491db1051c0603d41e598f94755a06e33ccc52006af59f3a971b5ed2a19e1" },
|
|
178432
|
+
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3315340, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
|
|
178433
|
+
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3319950, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
|
|
178434
|
+
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3808534, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
|
|
178435
|
+
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3899458, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
|
|
178436
|
+
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 3990442, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
|
|
178437
|
+
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 4081422, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
|
|
178438
|
+
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 4172294, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
|
|
178439
|
+
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4263274, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
|
|
178440
|
+
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4371910, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
|
|
178441
|
+
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4480994, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
|
|
178442
|
+
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4590042, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
|
|
178443
|
+
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4697742, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
|
|
178444
|
+
{ key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4785850, length: 6818, sha256: "835250c3d8004f27c2b67f9b471984351ba6df07b916d97e33b43c691200a18c" },
|
|
178445
|
+
{ key: "index.html", contentType: "text/html; charset=utf-8", offset: 4792668, length: 5037, sha256: "049f62e19584f12d09168a7c8df345d852e57c608ac95a9e34140d15d620d4a3" },
|
|
178446
|
+
{ key: "ios-glass-preview.css", contentType: "text/css; charset=utf-8", offset: 4797705, length: 10699, sha256: "f187c5a783ec41f90c0e49471ddc3ad5d3bb9c9c40feddad92e0ed9ef9b480f1" },
|
|
178447
|
+
{ key: "kit-tab-bar.css", contentType: "text/css; charset=utf-8", offset: 4808404, length: 1171, sha256: "9e2c3a0faaf05d5471badf167a4d3bdf1c4e6dd65c432eea6d254158bfd99585" },
|
|
178448
|
+
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4809575, length: 21696, sha256: "fb8575993c8072adda0e61f45f80aca6a1ebb965c24707bc1265150544a4af26" },
|
|
178449
|
+
{ key: "t5-worker-frame.html", contentType: "text/html; charset=utf-8", offset: 4831271, length: 21713, sha256: "7d647969cbb8f94275bcaabb41e6a72e70bc1f1608b26bba1ba783b06d0beb4f" }
|
|
178115
178450
|
];
|
|
178116
178451
|
}
|
|
178117
178452
|
});
|
|
@@ -194941,7 +195276,7 @@ var init_spaces_host_manifest = __esm({
|
|
|
194941
195276
|
"../../apps/himi-spaces-lite/spaces-host-manifest.ts"() {
|
|
194942
195277
|
init_define_HHP_CATALOG();
|
|
194943
195278
|
SPACES_HOST_MANIFEST = {
|
|
194944
|
-
"version": "1.
|
|
195279
|
+
"version": "1.8.0",
|
|
194945
195280
|
"capabilities": [
|
|
194946
195281
|
"animation",
|
|
194947
195282
|
"app_info",
|